aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/.gitignore5
-rw-r--r--lib/asn1/doc/src/asn1ct.xml7
-rw-r--r--lib/asn1/src/asn1ct.erl38
-rw-r--r--lib/asn1/src/asn1ct_gen.erl26
-rw-r--r--lib/asn1/src/asn1ct_gen_ber.erl12
-rw-r--r--lib/asn1/src/asn1ct_gen_ber_bin_v2.erl12
-rw-r--r--lib/asn1/src/asn1ct_gen_per.erl12
-rw-r--r--lib/asn1/src/asn1ct_gen_per_rt2ct.erl12
-rw-r--r--lib/asn1/test/asn1_SUITE.erl.src3
-rw-r--r--lib/asn1/test/test_compile_options.erl21
-rw-r--r--lib/compiler/src/beam_block.erl12
-rw-r--r--lib/compiler/src/beam_flatten.erl11
-rw-r--r--lib/compiler/src/beam_jump.erl11
-rw-r--r--lib/compiler/src/beam_type.erl14
-rw-r--r--lib/compiler/src/cerl_clauses.erl25
-rw-r--r--lib/compiler/src/cerl_inline.erl42
-rw-r--r--lib/compiler/src/compile.erl7
-rw-r--r--lib/compiler/src/genop.tab12
-rw-r--r--lib/compiler/src/sys_core_dsetel.erl12
-rw-r--r--lib/compiler/src/sys_core_fold.erl27
-rw-r--r--lib/compiler/src/sys_core_inline.erl29
-rw-r--r--lib/compiler/src/v3_codegen.erl24
-rw-r--r--lib/compiler/src/v3_core.erl94
-rw-r--r--lib/compiler/src/v3_kernel.erl142
-rw-r--r--lib/compiler/src/v3_kernel_pp.erl11
-rw-r--r--lib/compiler/src/v3_life.erl2
-rw-r--r--lib/compiler/test/Makefile28
-rw-r--r--lib/compiler/test/bs_match_SUITE.erl88
-rw-r--r--lib/compiler/test/bs_utf_SUITE.erl14
-rw-r--r--lib/compiler/test/error_SUITE.erl35
-rw-r--r--lib/compiler/test/float_SUITE.erl12
-rw-r--r--lib/compiler/test/guard_SUITE.erl21
-rw-r--r--lib/compiler/test/inline_SUITE_data/decode1.erl48
-rw-r--r--lib/compiler/test/lc_SUITE.erl20
-rw-r--r--lib/compiler/test/match_SUITE.erl26
-rw-r--r--lib/compiler/test/num_bif_SUITE.erl14
-rw-r--r--lib/compiler/test/pmod_SUITE.erl4
-rw-r--r--lib/compiler/test/record_SUITE.erl39
-rw-r--r--lib/compiler/test/test_lib.erl15
-rw-r--r--lib/compiler/test/warnings_SUITE.erl17
-rw-r--r--lib/cosEvent/doc/src/notes.xml16
-rw-r--r--lib/cosEvent/test/Makefile154
-rw-r--r--lib/cosEvent/test/cosEvent.spec19
-rw-r--r--lib/cosEvent/test/event_channel_SUITE.erl316
-rw-r--r--lib/cosEvent/test/event_test_PullC_impl.erl43
-rw-r--r--lib/cosEvent/test/event_test_PullS_impl.erl57
-rw-r--r--lib/cosEvent/test/event_test_PushC_impl.erl46
-rw-r--r--lib/cosEvent/test/event_test_PushS_impl.erl41
-rw-r--r--lib/cosEvent/test/event_test_server.idl47
-rw-r--r--lib/cosEvent/test/generated_SUITE.erl487
-rw-r--r--lib/cosEvent/test/idl_output/.gitignore0
-rw-r--r--lib/cosEvent/vsn.mk6
-rw-r--r--lib/cosEventDomain/doc/src/notes.xml22
-rw-r--r--lib/cosEventDomain/test/Makefile104
-rw-r--r--lib/cosEventDomain/test/cosEventDomain.spec19
-rw-r--r--lib/cosEventDomain/test/event_domain_SUITE.erl456
-rw-r--r--lib/cosEventDomain/test/generated_SUITE.erl390
-rw-r--r--lib/cosEventDomain/vsn.mk6
-rw-r--r--lib/cosNotification/doc/src/notes.xml11
-rw-r--r--lib/cosNotification/test/Makefile190
-rw-r--r--lib/cosNotification/test/cosNotification.spec19
-rw-r--r--lib/cosNotification/test/eventDB_SUITE.erl902
-rw-r--r--lib/cosNotification/test/generated_SUITE.erl2042
-rw-r--r--lib/cosNotification/test/grammar_SUITE.erl1094
-rw-r--r--lib/cosNotification/test/notification_SUITE.erl2185
-rw-r--r--lib/cosNotification/test/notify_test_impl.erl299
-rw-r--r--lib/cosNotification/test/notify_test_server.cfg54
-rw-r--r--lib/cosNotification/test/notify_test_server.idl113
-rw-r--r--lib/cosNotification/vsn.mk3
-rw-r--r--lib/cosProperty/doc/src/notes.xml22
-rw-r--r--lib/cosProperty/test/Makefile129
-rw-r--r--lib/cosProperty/test/cosProperty.spec20
-rw-r--r--lib/cosProperty/test/generated_SUITE.erl571
-rw-r--r--lib/cosProperty/test/property_SUITE.erl747
-rw-r--r--lib/cosProperty/vsn.mk6
-rw-r--r--lib/cosTime/doc/src/notes.xml22
-rw-r--r--lib/cosTime/test/Makefile135
-rw-r--r--lib/cosTime/test/cosTime.spec19
-rw-r--r--lib/cosTime/test/generated_SUITE.erl288
-rw-r--r--lib/cosTime/test/time_SUITE.erl295
-rw-r--r--lib/cosTime/vsn.mk6
-rw-r--r--lib/cosTransactions/doc/src/notes.xml12
-rw-r--r--lib/cosTransactions/test/Makefile150
-rw-r--r--lib/cosTransactions/test/cosTransactions.spec19
-rw-r--r--lib/cosTransactions/test/etrap_test.cfg20
-rw-r--r--lib/cosTransactions/test/etrap_test.idl38
-rw-r--r--lib/cosTransactions/test/etrap_test_lib.erl125
-rw-r--r--lib/cosTransactions/test/etrap_test_lib.hrl100
-rw-r--r--lib/cosTransactions/test/etrap_test_server_impl.erl210
-rw-r--r--lib/cosTransactions/test/generated_SUITE.erl564
-rw-r--r--lib/cosTransactions/test/transactions_SUITE.erl395
-rw-r--r--lib/cosTransactions/vsn.mk3
-rw-r--r--lib/crypto/c_src/Makefile.in20
-rw-r--r--lib/crypto/c_src/crypto.c1531
-rw-r--r--lib/crypto/c_src/crypto_drv.c1799
-rw-r--r--lib/crypto/doc/src/crypto.xml82
-rw-r--r--lib/crypto/priv/Makefile28
-rw-r--r--lib/crypto/src/Makefile12
-rw-r--r--lib/crypto/src/crypto.erl509
-rw-r--r--lib/crypto/src/crypto_server.erl88
-rw-r--r--lib/crypto/test/blowfish_SUITE.erl15
-rw-r--r--lib/crypto/test/crypto_SUITE.erl46
-rw-r--r--lib/crypto/vsn.mk2
-rw-r--r--lib/dialyzer/doc/manual.txt2
-rw-r--r--lib/dialyzer/doc/src/dialyzer.xml8
-rw-r--r--lib/erl_interface/test/ei_tmo_SUITE_data/ei_tmo_test.c12
-rw-r--r--lib/hipe/arm/hipe_arm_pp.erl17
-rw-r--r--lib/hipe/cerl/erl_bif_types.erl28
-rw-r--r--lib/hipe/cerl/erl_types.erl2
-rw-r--r--lib/inets/doc/src/notes.xml52
-rw-r--r--lib/inets/src/http_client/httpc.erl8
-rw-r--r--lib/inets/src/http_client/httpc_handler.erl10
-rw-r--r--lib/inets/src/http_client/httpc_manager.erl18
-rw-r--r--lib/inets/src/inets_app/inets.appup.src22
-rw-r--r--lib/inets/vsn.mk8
-rw-r--r--lib/kernel/doc/src/inet.xml8
-rw-r--r--lib/kernel/src/application_controller.erl191
-rw-r--r--lib/kernel/src/application_starter.erl22
-rw-r--r--lib/kernel/src/auth.erl20
-rw-r--r--lib/kernel/src/code.erl6
-rw-r--r--lib/kernel/src/code_server.erl147
-rw-r--r--lib/kernel/src/erl_boot_server.erl18
-rw-r--r--lib/kernel/src/erl_epmd.erl4
-rw-r--r--lib/kernel/src/error_handler.erl18
-rw-r--r--lib/kernel/src/file_io_server.erl45
-rw-r--r--lib/kernel/src/heart.erl19
-rw-r--r--lib/kernel/src/inet6_tcp_dist.erl35
-rw-r--r--lib/kernel/src/inet_db.erl50
-rw-r--r--lib/kernel/src/inet_gethost_native.erl15
-rw-r--r--lib/kernel/src/kernel_config.erl4
-rw-r--r--lib/kernel/src/rpc.erl25
-rw-r--r--lib/kernel/src/standard_error.erl24
-rw-r--r--lib/kernel/src/user.erl21
-rw-r--r--lib/kernel/test/code_SUITE.erl40
-rw-r--r--lib/kernel/test/inet_sockopt_SUITE_data/sockopt_helper.c2
-rw-r--r--lib/megaco/doc/src/megaco_user.xml3
-rw-r--r--lib/megaco/doc/src/notes.xml53
-rw-r--r--lib/megaco/src/app/megaco.appup.src13
-rw-r--r--lib/megaco/src/engine/megaco_config.erl401
-rw-r--r--lib/megaco/test/megaco_config_test.erl362
-rw-r--r--lib/megaco/vsn.mk6
-rw-r--r--lib/mnesia/doc/src/Mnesia_chap5.xmlsrc36
-rw-r--r--lib/mnesia/doc/src/mnesia.xml2
-rw-r--r--lib/mnesia/src/mnesia_monitor.erl1
-rw-r--r--lib/mnesia/src/mnesia_subscr.erl41
-rw-r--r--lib/mnesia/src/mnesia_tm.erl4
-rw-r--r--lib/observer/test/Makefile90
-rw-r--r--lib/observer/test/crashdump_helper.erl61
-rw-r--r--lib/observer/test/crashdump_viewer_SUITE.erl723
-rw-r--r--lib/observer/test/crashdump_viewer_SUITE_data/old_format.dump3991
-rw-r--r--lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.100atoms13135
-rw-r--r--lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.250atoms13285
-rw-r--r--lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.50atoms13085
-rw-r--r--lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.noatoms13035
-rw-r--r--lib/observer/test/etop_SUITE.erl94
-rw-r--r--lib/observer/test/observer.cover2
-rw-r--r--lib/observer/test/observer.dynspec11
-rw-r--r--lib/observer/test/observer.spec2
-rw-r--r--lib/observer/test/observer_SUITE.erl51
-rw-r--r--lib/observer/test/ttb_SUITE.erl775
-rw-r--r--lib/odbc/AUTHORS3
-rw-r--r--lib/odbc/c_src/odbcserver.c142
-rw-r--r--lib/odbc/c_src/odbcserver.h1
-rw-r--r--lib/odbc/configure.in31
-rw-r--r--lib/odbc/doc/src/databases.xml8
-rw-r--r--lib/odbc/doc/src/getting_started.xml16
-rw-r--r--lib/odbc/doc/src/notes.xml58
-rw-r--r--lib/odbc/doc/src/odbc.xml2
-rw-r--r--lib/odbc/src/odbc.erl10
-rw-r--r--lib/odbc/src/odbc_internal.hrl1
-rw-r--r--lib/odbc/vsn.mk2
-rw-r--r--lib/orber/doc/src/notes.xml11
-rw-r--r--lib/orber/test/Makefile228
-rw-r--r--lib/orber/test/cdrcoding_10_SUITE.erl616
-rw-r--r--lib/orber/test/cdrcoding_11_SUITE.erl615
-rw-r--r--lib/orber/test/cdrcoding_12_SUITE.erl603
-rw-r--r--lib/orber/test/cdrlib_SUITE.erl487
-rw-r--r--lib/orber/test/corba_SUITE.erl909
-rw-r--r--lib/orber/test/csiv2_SUITE.erl940
-rw-r--r--lib/orber/test/data_types_SUITE.erl173
-rw-r--r--lib/orber/test/generated_SUITE.erl385
-rw-r--r--lib/orber/test/idl_output/.gitignore0
-rw-r--r--lib/orber/test/iiop_module_do_test_impl.erl112
-rw-r--r--lib/orber/test/iiop_module_test_impl.erl128
-rw-r--r--lib/orber/test/iiop_test.idl111
-rw-r--r--lib/orber/test/iiop_test_impl.erl34
-rw-r--r--lib/orber/test/interceptors_SUITE.erl338
-rw-r--r--lib/orber/test/iop_ior_10_SUITE.erl167
-rw-r--r--lib/orber/test/iop_ior_11_SUITE.erl186
-rw-r--r--lib/orber/test/iop_ior_12_SUITE.erl187
-rw-r--r--lib/orber/test/lname_SUITE.erl198
-rw-r--r--lib/orber/test/multi_ORB_SUITE.erl2352
-rw-r--r--lib/orber/test/naming_context_SUITE.erl385
-rw-r--r--lib/orber/test/orber.spec19
-rw-r--r--lib/orber/test/orber_SUITE.erl179
-rw-r--r--lib/orber/test/orber_acl_SUITE.erl303
-rw-r--r--lib/orber/test/orber_firewall_ipv4_in_SUITE.erl280
-rw-r--r--lib/orber/test/orber_firewall_ipv4_out_SUITE.erl224
-rw-r--r--lib/orber/test/orber_firewall_ipv6_in_SUITE.erl311
-rw-r--r--lib/orber/test/orber_firewall_ipv6_out_SUITE.erl231
-rw-r--r--lib/orber/test/orber_nat_SUITE.erl372
-rw-r--r--lib/orber/test/orber_test.idl95
-rw-r--r--lib/orber/test/orber_test_lib.erl1498
-rw-r--r--lib/orber/test/orber_test_server.cfg27
-rw-r--r--lib/orber/test/orber_test_server.idl153
-rw-r--r--lib/orber/test/orber_test_server_impl.erl262
-rw-r--r--lib/orber/test/orber_test_timeout_server_impl.erl65
-rw-r--r--lib/orber/test/orber_web_SUITE.erl443
-rw-r--r--lib/orber/test/tc_SUITE.erl661
-rw-r--r--lib/orber/vsn.mk3
-rw-r--r--lib/public_key/asn1/Makefile14
-rw-r--r--lib/public_key/asn1/OTP-PUB-KEY.set.asn1
-rw-r--r--lib/public_key/asn1/PKCS-3.asn121
-rw-r--r--lib/public_key/doc/src/notes.xml21
-rw-r--r--lib/public_key/src/pubkey_cert.erl35
-rw-r--r--lib/public_key/src/pubkey_crypto.erl59
-rw-r--r--lib/public_key/src/pubkey_pem.erl12
-rw-r--r--lib/public_key/src/public_key.appup.src26
-rw-r--r--lib/public_key/src/public_key.erl47
-rw-r--r--lib/public_key/vsn.mk7
-rw-r--r--lib/reltool/bin/reltool.escript249
-rw-r--r--lib/reltool/doc/src/reltool.xml185
-rw-r--r--lib/reltool/doc/src/reltool_examples.xml4
-rw-r--r--lib/reltool/src/Makefile42
-rw-r--r--lib/reltool/src/files.mk32
-rw-r--r--lib/reltool/src/reltool.app.src45
-rw-r--r--lib/reltool/src/reltool.appup.src22
-rw-r--r--lib/reltool/src/reltool.erl97
-rw-r--r--lib/reltool/src/reltool.hrl142
-rw-r--r--lib/reltool/src/reltool_mod_win.erl4
-rw-r--r--lib/reltool/src/reltool_server.erl561
-rw-r--r--lib/reltool/src/reltool_sys_win.erl2
-rw-r--r--lib/reltool/src/reltool_target.erl493
-rw-r--r--lib/reltool/src/reltool_utils.erl82
-rw-r--r--lib/reltool/test/Makefile11
-rw-r--r--lib/reltool/test/reltool_app_SUITE.erl291
-rw-r--r--lib/reltool/test/reltool_server_SUITE.erl38
-rw-r--r--lib/reltool/test/reltool_test_lib.erl14
-rw-r--r--lib/reltool/test/reltool_test_lib.hrl11
-rwxr-xr-xlib/reltool/test/rtt12
-rw-r--r--lib/ssh/Makefile10
-rw-r--r--lib/ssh/doc/src/book.xml6
-rw-r--r--lib/ssh/doc/src/notes.xml20
-rw-r--r--lib/ssh/doc/src/ref_man.xml6
-rw-r--r--lib/ssh/doc/src/ssh_sftp.xml6
-rw-r--r--lib/ssh/doc/src/ssh_sftpd.xml6
-rw-r--r--lib/ssh/examples/Makefile10
-rw-r--r--lib/ssh/examples/ssh_sample_cli.erl66
-rw-r--r--lib/ssh/src/Makefile13
-rw-r--r--lib/ssh/src/ssh.app.src3
-rw-r--r--lib/ssh/src/ssh.appup.src24
-rw-r--r--lib/ssh/src/ssh.erl2
-rw-r--r--lib/ssh/src/ssh.hrl10
-rw-r--r--lib/ssh/src/ssh_acceptor.erl10
-rw-r--r--lib/ssh/src/ssh_acceptor_sup.erl10
-rw-r--r--lib/ssh/src/ssh_app.erl10
-rw-r--r--lib/ssh/src/ssh_auth.erl10
-rw-r--r--lib/ssh/src/ssh_auth.hrl10
-rwxr-xr-xlib/ssh/src/ssh_bits.erl10
-rw-r--r--lib/ssh/src/ssh_channel.erl10
-rw-r--r--lib/ssh/src/ssh_channel_sup.erl10
-rw-r--r--lib/ssh/src/ssh_cli.erl12
-rwxr-xr-xlib/ssh/src/ssh_cm.erl237
-rwxr-xr-xlib/ssh/src/ssh_connect.hrl10
-rw-r--r--lib/ssh/src/ssh_connection_controler.erl10
-rwxr-xr-xlib/ssh/src/ssh_dsa.erl10
-rwxr-xr-xlib/ssh/src/ssh_file.erl10
-rwxr-xr-xlib/ssh/src/ssh_io.erl10
-rwxr-xr-xlib/ssh/src/ssh_math.erl10
-rw-r--r--lib/ssh/src/ssh_no_io.erl10
-rwxr-xr-xlib/ssh/src/ssh_rsa.erl10
-rwxr-xr-xlib/ssh/src/ssh_sftp.erl48
-rw-r--r--lib/ssh/src/ssh_sftpd.erl10
-rw-r--r--lib/ssh/src/ssh_sftpd_file.erl10
-rw-r--r--lib/ssh/src/ssh_sftpd_file_api.erl10
-rw-r--r--lib/ssh/src/ssh_shell.erl10
-rw-r--r--lib/ssh/src/ssh_ssh.erl65
-rw-r--r--lib/ssh/src/ssh_sshd.erl48
-rw-r--r--lib/ssh/src/ssh_subsystem_sup.erl10
-rw-r--r--lib/ssh/src/ssh_sup.erl10
-rw-r--r--lib/ssh/src/ssh_system_sup.erl10
-rw-r--r--lib/ssh/src/ssh_transport.erl10
-rw-r--r--lib/ssh/src/ssh_transport.hrl10
-rwxr-xr-xlib/ssh/src/ssh_userauth.hrl10
-rw-r--r--lib/ssh/src/ssh_userreg.erl10
-rw-r--r--lib/ssh/src/ssh_xfer.erl10
-rwxr-xr-xlib/ssh/src/ssh_xfer.hrl10
-rw-r--r--lib/ssh/src/sshc_sup.erl10
-rw-r--r--lib/ssh/src/sshd_sup.erl10
-rw-r--r--lib/ssh/vsn.mk6
-rw-r--r--lib/ssl/doc/src/new_ssl.xml29
-rw-r--r--lib/ssl/doc/src/notes.xml61
-rw-r--r--lib/ssl/src/ssl.appup.src6
-rw-r--r--lib/ssl/src/ssl.erl100
-rw-r--r--lib/ssl/src/ssl_certificate.erl53
-rw-r--r--lib/ssl/src/ssl_connection.erl1394
-rw-r--r--lib/ssl/src/ssl_handshake.erl193
-rw-r--r--lib/ssl/src/ssl_handshake.hrl13
-rw-r--r--lib/ssl/src/ssl_internal.hrl14
-rw-r--r--lib/ssl/src/ssl_record.erl64
-rw-r--r--lib/ssl/src/ssl_record.hrl17
-rw-r--r--lib/ssl/src/ssl_ssl3.erl18
-rw-r--r--lib/ssl/src/ssl_tls1.erl20
-rw-r--r--lib/ssl/test/ssl_basic_SUITE.erl984
-rw-r--r--lib/ssl/test/ssl_basic_SUITE_data/dHParam.pem5
-rw-r--r--lib/ssl/test/ssl_packet_SUITE.erl703
-rw-r--r--lib/ssl/test/ssl_test_lib.erl207
-rw-r--r--lib/ssl/test/ssl_to_openssl_SUITE.erl374
-rw-r--r--lib/ssl/vsn.mk14
-rw-r--r--lib/stdlib/doc/src/erl_scan.xml19
-rw-r--r--lib/stdlib/doc/src/ets.xml8
-rw-r--r--lib/stdlib/doc/src/notes.xml2
-rw-r--r--lib/stdlib/src/c.erl117
-rw-r--r--lib/stdlib/src/dets_sup.erl17
-rw-r--r--lib/stdlib/src/epp.erl49
-rw-r--r--lib/stdlib/src/erl_parse.yrl109
-rw-r--r--lib/stdlib/src/erl_scan.erl87
-rw-r--r--lib/stdlib/src/ets.erl112
-rw-r--r--lib/stdlib/src/gen_event.erl13
-rw-r--r--lib/stdlib/src/gen_fsm.erl20
-rw-r--r--lib/stdlib/src/gen_server.erl24
-rw-r--r--lib/stdlib/src/lists.erl21
-rw-r--r--lib/stdlib/src/otp_internal.erl136
-rw-r--r--lib/stdlib/test/epp_SUITE.erl50
-rw-r--r--lib/stdlib/test/erl_pp_SUITE.erl130
-rw-r--r--lib/stdlib/test/erl_scan_SUITE.erl210
-rw-r--r--lib/stdlib/test/re_SUITE.erl26
-rw-r--r--lib/test_server/doc/src/test_server_ctrl.xml3
-rw-r--r--lib/test_server/doc/src/ts.xml4
-rw-r--r--lib/test_server/src/test_server.erl12
-rw-r--r--lib/test_server/src/test_server_internal.hrl12
-rw-r--r--lib/test_server/src/test_server_node.erl15
-rw-r--r--lib/test_server/src/ts.erl12
-rw-r--r--lib/test_server/src/ts_erl_config.erl13
-rw-r--r--lib/test_server/src/ts_run.erl140
-rw-r--r--lib/tools/emacs/erlang-eunit.el10
-rw-r--r--lib/wx/api_gen/README18
-rw-r--r--lib/wx/api_gen/gl_doxygen.conf17
-rw-r--r--lib/wx/api_gen/gl_gen.erl14
-rw-r--r--lib/wx/api_gen/gl_gen_c.erl3
-rw-r--r--lib/wx/api_gen/gl_gen_erl.erl11
-rw-r--r--lib/wx/api_gen/wx_doxygen.conf23
-rw-r--r--lib/wx/api_gen/wx_gen.erl50
-rw-r--r--lib/wx/api_gen/wx_gen.hrl12
-rw-r--r--lib/wx/api_gen/wx_gen_cpp.erl5
-rw-r--r--lib/wx/api_gen/wx_gen_erl.erl27
-rw-r--r--lib/wx/api_gen/wxapi.conf10
-rw-r--r--lib/wx/c_src/gen/gl_fdefs.h2
-rw-r--r--lib/wx/c_src/gen/gl_finit.h2
-rw-r--r--lib/wx/c_src/gen/gl_funcs.cpp2732
-rw-r--r--lib/wx/c_src/gen/glu_finit.h2
-rw-r--r--lib/wx/c_src/gen/wxe_funcs.cpp54
-rw-r--r--lib/wx/c_src/gen/wxe_init.cpp8
-rw-r--r--lib/wx/c_src/gen/wxe_macros.h5017
-rw-r--r--lib/wx/include/wx.hrl3269
-rw-r--r--lib/wx/src/Makefile36
-rw-r--r--lib/wx/src/gen/gl.erl8
-rw-r--r--lib/wx/src/gen/gl_debug.hrl2
-rw-r--r--lib/wx/src/gen/glu.erl12
-rw-r--r--lib/wx/src/gen/wxe_debug.hrl5012
-rw-r--r--lib/wx/src/gen/wxe_funcs.hrl5012
-rw-r--r--lib/wx/src/wx.app.src37
-rw-r--r--lib/wx/src/wx.appup.src22
-rw-r--r--lib/wx/src/wxe_master.erl11
-rw-r--r--lib/wx/test/Makefile14
-rw-r--r--lib/wx/test/wx_app_SUITE.erl277
-rw-r--r--lib/xmerl/doc/src/notes.xml24
-rw-r--r--lib/xmerl/vsn.mk9
368 files changed, 106477 insertions, 17304 deletions
diff --git a/lib/.gitignore b/lib/.gitignore
index fc8a1c5568..a33916b3bf 100644
--- a/lib/.gitignore
+++ b/lib/.gitignore
@@ -141,6 +141,11 @@
# orber & cos* applications
+/orber/test/idl_output
+/cosEvent/test/idl_output
+/cosNotification/test/idl_output
+/cosTransactions/test/idl_output
+
/cosEvent/include/CosEventChannelAdmin.hrl
/cosEvent/include/CosEventChannelAdmin_ConsumerAdmin.hrl
/cosEvent/include/CosEventChannelAdmin_EventChannel.hrl
diff --git a/lib/asn1/doc/src/asn1ct.xml b/lib/asn1/doc/src/asn1ct.xml
index 8a0ae52c39..265f8735c2 100644
--- a/lib/asn1/doc/src/asn1ct.xml
+++ b/lib/asn1/doc/src/asn1ct.xml
@@ -53,7 +53,7 @@
<v>Option = ber_bin | per_bin | uper_bin | der | compact_bit_string |
noobj | {n2n,EnumTypeName} |{outdir,Dir} | {i,IncludeDir} | optimize |
driver | asn1config | undec_rest | {inline,OutputName} | inline |
- {macro_name_prefix, Prefix} | {record_name_prefix, Prefix}</v>
+ {macro_name_prefix, Prefix} | {record_name_prefix, Prefix} | verbose</v>
<v>OldOption = ber | per</v>
<v>Reason = term()</v>
<v>Prefix = string()</v>
@@ -284,6 +284,11 @@ Binary = binary()
<c>Prefix</c>. This is useful when multiple protocols that contains
records with identical names are included in a single module.</p>
</item>
+ <tag><c>verbose</c></tag>
+ <item>
+ <p>Causes more verbose information from the compiler
+ describing what it is doing.</p>
+ </item>
</taglist>
<p>Any additional option that is applied will be passed to
the final step when the generated .erl file is compiled.
diff --git a/lib/asn1/src/asn1ct.erl b/lib/asn1/src/asn1ct.erl
index e6fd3663dd..ae681a4a78 100644
--- a/lib/asn1/src/asn1ct.erl
+++ b/lib/asn1/src/asn1ct.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1997-2010. 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%
%%
%%
@@ -39,7 +39,7 @@
add_tobe_refed_func/1,add_generated_refed_func/1,
maybe_rename_function/3,latest_sindex/0,current_sindex/0,
set_current_sindex/1,next_sindex/0,maybe_saved_sindex/2,
- parse_and_save/2]).
+ parse_and_save/2,report_verbose/3]).
-include("asn1_records.hrl").
-include_lib("stdlib/include/erl_compile.hrl").
@@ -103,8 +103,8 @@ compile(File,Options) when is_list(Options) ->
compile1(File,Options) when is_list(Options) ->
- io:format("Erlang ASN.1 version ~p compiling ~p ~n",[?vsn,File]),
- io:format("Compiler Options: ~p~n",[Options]),
+ report_verbose("Erlang ASN.1 version ~p compiling ~p ~n",[?vsn,File],Options),
+ report_verbose("Compiler Options: ~p~n",[Options],Options),
Ext = filename:extension(File),
Base = filename:basename(File,Ext),
OutFile = outfile(Base,"",Options),
@@ -152,7 +152,7 @@ inline(true,Name,Module,Options) ->
IgorName = filename:rootname(filename:basename(Name)),
% io:format("*****~nName: ~p~nModules: ~p~nIgorOptions: ~p~n*****~n",
% [IgorName,Modules++RTmodule,IgorOptions]),
- io:format("Inlining modules: ~p in ~p~n",[[Module]++RTmodule,IgorName]),
+ report_verbose("Inlining modules: ~p in ~p~n",[[Module]++RTmodule,IgorName],Options),
case catch igor:merge(IgorName,[Module]++RTmodule,[{preprocess,true},{stubs,false},{backups,false}]++IgorOptions) of
{'EXIT',{undef,Reason}} -> %% module igor first in R10B
io:format("Module igor in syntax_tools must be available:~n~p~n",
@@ -173,8 +173,8 @@ inline(_,_,_,_) ->
compile_set(SetBase,Files,Options)
when is_list(hd(Files)),is_list(Options) ->
%% case when there are several input files in a list
- io:format("Erlang ASN.1 version ~p compiling ~p ~n",[?vsn,Files]),
- io:format("Compiler Options: ~p~n",[Options]),
+ report_verbose("Erlang ASN.1 version ~p compiling ~p ~n",[?vsn,Files],Options),
+ report_verbose("Compiler Options: ~p~n",[Options],Options),
OutFile = outfile(SetBase,"",Options),
DbFile = outfile(SetBase,"asn1db",Options),
Includes = [I || {i,I} <- Options],
@@ -802,7 +802,7 @@ check({true,M},File,OutFile,Includes,EncodingRule,DbFile,Options,InputMods) ->
NewM = Module#module{typeorval=NewTypeOrVal},
asn1_db:dbput(NewM#module.name,'MODULE',NewM),
asn1_db:dbsave(DbFile,M#module.name),
- io:format("--~p--~n",[{generated,DbFile}]),
+ report_verbose("--~p--~n",[{generated,DbFile}],Options),
{true,{M,NewM,GenTypeOrVal}}
end
end;
@@ -833,7 +833,7 @@ generate({true,{M,_Module,GenTOrV}},OutFile,EncodingRule,Options) ->
Result =
case (catch asn1ct_gen:pgen(OutFile,EncodingRule,
- M#module.name,GenTOrV)) of
+ M#module.name,GenTOrV,Options)) of
{'EXIT',Reason2} ->
io:format("ERROR: ~p~n",[Reason2]),
{error,Reason2};
@@ -1215,7 +1215,6 @@ compile(File, _OutFile, Options) ->
%% io:format("~p~n~s~n",[_Reason,"error"]),
error;
ok ->
- io:format("ok~n"),
ok;
ParseRes when is_tuple(ParseRes) ->
io:format("~p~n",[ParseRes]),
@@ -2518,3 +2517,14 @@ type_check(#'Externaltypereference'{}) ->
lists:concat(["_",I]);
make_suffix(_) ->
"".
+
+report_verbose(Format, Args, S) ->
+ case is_verbose(S) of
+ true ->
+ io:format(Format, Args);
+ false ->
+ ok
+ end.
+
+is_verbose(S) ->
+ lists:member(verbose, S).
diff --git a/lib/asn1/src/asn1ct_gen.erl b/lib/asn1/src/asn1ct_gen.erl
index b9f6c46b53..eab5fb4a2a 100644
--- a/lib/asn1/src/asn1ct_gen.erl
+++ b/lib/asn1/src/asn1ct_gen.erl
@@ -22,7 +22,7 @@
-include("asn1_records.hrl").
-export([pgen_exports/3,
- pgen_hrl/4,
+ pgen_hrl/5,
gen_head/3,
demit/1,
emit/1,
@@ -41,28 +41,29 @@
rt2ct_suffix/0,
index2suffix/1,
get_record_name_prefix/0]).
--export([pgen/4,
- pgen_module/5,
+-export([pgen/5,
+ pgen_module/6,
mk_var/1,
un_hyphen_var/1]).
-export([gen_encode_constructed/4,
gen_decode_constructed/4]).
-%% pgen(Erules, Module, TypeOrVal)
+%% pgen(Outfile, Erules, Module, TypeOrVal, Options)
%% Generate Erlang module (.erl) and (.hrl) file corresponding to an ASN.1 module
%% .hrl file is only generated if necessary
%% Erules = per | ber | ber_bin | per_bin
%% Module = atom()
%% TypeOrVal = {TypeList,ValueList}
%% TypeList = ValueList = [atom()]
+%% Options = [Options] from asn1ct:compile()
-pgen(OutFile,Erules,Module,TypeOrVal) ->
- pgen_module(OutFile,Erules,Module,TypeOrVal,true).
+pgen(OutFile,Erules,Module,TypeOrVal,Options) ->
+ pgen_module(OutFile,Erules,Module,TypeOrVal,Options,true).
pgen_module(OutFile,Erules,Module,
TypeOrVal = {Types,_Values,_Ptypes,_Classes,_Objects,_ObjectSets},
- Indent) ->
+ Options,Indent) ->
N2nConvEnums = [CName|| {n2n,CName} <- get(encoding_options)],
case N2nConvEnums -- Types of
[] ->
@@ -72,7 +73,7 @@ pgen_module(OutFile,Erules,Module,
UnmatchedTypes})
end,
put(outfile,OutFile),
- HrlGenerated = pgen_hrl(Erules,Module,TypeOrVal,Indent),
+ HrlGenerated = pgen_hrl(Erules,Module,TypeOrVal,Options,Indent),
asn1ct_name:start(),
ErlFile = lists:concat([OutFile,".erl"]),
Fid = fopen(ErlFile,[write]),
@@ -86,7 +87,7 @@ pgen_module(OutFile,Erules,Module,
% gen_vars(asn1_db:mod_to_vars(Module)),
% gen_tag_table(AllTypes),
file:close(Fid),
- io:format("--~p--~n",[{generated,ErlFile}]).
+ asn1ct:report_verbose("--~p--~n",[{generated,ErlFile}],Options).
pgen_typeorval(Erules,Module,N2nConvEnums,{Types,Values,_Ptypes,_Classes,Objects,ObjectSets}) ->
@@ -1310,7 +1311,7 @@ fopen(F, ModeList) ->
exit({error,Reason})
end.
-pgen_hrl(Erules,Module,TypeOrVal,_Indent) ->
+pgen_hrl(Erules,Module,TypeOrVal,Options,_Indent) ->
put(currmod,Module),
{Types,Values,Ptypes,_,_,_} = TypeOrVal,
Ret =
@@ -1334,8 +1335,9 @@ pgen_hrl(Erules,Module,TypeOrVal,_Indent) ->
Y ->
Fid = get(gen_file_out),
file:close(Fid),
- io:format("--~p--~n",
- [{generated,lists:concat([get(outfile),".hrl"])}]),
+ asn1ct:report_verbose("--~p--~n",
+ [{generated,lists:concat([get(outfile),".hrl"])}],
+ Options),
Y
end.
diff --git a/lib/asn1/src/asn1ct_gen_ber.erl b/lib/asn1/src/asn1ct_gen_ber.erl
index 7c432f29c3..d70586c75c 100644
--- a/lib/asn1/src/asn1ct_gen_ber.erl
+++ b/lib/asn1/src/asn1ct_gen_ber.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1997-2010. 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%
%%
%%
@@ -67,7 +67,7 @@
%% TypeList = ValueList = [atom()]
pgen(OutFile,Erules,Module,TypeOrVal) ->
- asn1ct_gen:pgen_module(OutFile,Erules,Module,TypeOrVal,true).
+ asn1ct_gen:pgen_module(OutFile,Erules,Module,TypeOrVal,[],true).
%%===============================================================================
diff --git a/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl b/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl
index b7ac0f407c..a146e92d64 100644
--- a/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl
+++ b/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2002-2010. 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%
%%
%%
@@ -67,7 +67,7 @@
%% TypeList = ValueList = [atom()]
pgen(OutFile,Erules,Module,TypeOrVal) ->
- asn1ct_gen:pgen_module(OutFile,Erules,Module,TypeOrVal,true).
+ asn1ct_gen:pgen_module(OutFile,Erules,Module,TypeOrVal,[],true).
%%===============================================================================
diff --git a/lib/asn1/src/asn1ct_gen_per.erl b/lib/asn1/src/asn1ct_gen_per.erl
index 06d2489748..23fb392d60 100644
--- a/lib/asn1/src/asn1ct_gen_per.erl
+++ b/lib/asn1/src/asn1ct_gen_per.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1997-2010. 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%
%%
%%
@@ -43,7 +43,7 @@
%% TypeList = ValueList = [atom()]
pgen(OutFile,Erules,Module,TypeOrVal) ->
- asn1ct_gen:pgen_module(OutFile,Erules,Module,TypeOrVal,true).
+ asn1ct_gen:pgen_module(OutFile,Erules,Module,TypeOrVal,[],true).
%% Generate ENCODING ******************************
diff --git a/lib/asn1/src/asn1ct_gen_per_rt2ct.erl b/lib/asn1/src/asn1ct_gen_per_rt2ct.erl
index 56f895828a..e1feb42a59 100644
--- a/lib/asn1/src/asn1ct_gen_per_rt2ct.erl
+++ b/lib/asn1/src/asn1ct_gen_per_rt2ct.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2002-2010. 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%
%%
%%
@@ -43,7 +43,7 @@
%% TypeList = ValueList = [atom()]
pgen(OutFile,Erules,Module,TypeOrVal) ->
- asn1ct_gen:pgen_module(OutFile,Erules,Module,TypeOrVal,true).
+ asn1ct_gen:pgen_module(OutFile,Erules,Module,TypeOrVal,[],true).
%% Generate ENCODING ******************************
diff --git a/lib/asn1/test/asn1_SUITE.erl.src b/lib/asn1/test/asn1_SUITE.erl.src
index 9d3f03fc4c..ca73d259af 100644
--- a/lib/asn1/test/asn1_SUITE.erl.src
+++ b/lib/asn1/test/asn1_SUITE.erl.src
@@ -2240,7 +2240,8 @@ test_compile_options(Config) ->
?line ok = test_compile_options:wrong_path(Config),
?line ok = test_compile_options:path(Config),
?line ok = test_compile_options:noobj(Config),
- ?line ok = test_compile_options:record_name_prefix(Config)
+ ?line ok = test_compile_options:record_name_prefix(Config),
+ ?line ok = test_compile_options:verbose(Config)
end.
testDoubleEllipses(suite) -> [];
testDoubleEllipses(Config) ->
diff --git a/lib/asn1/test/test_compile_options.erl b/lib/asn1/test/test_compile_options.erl
index d51b2a6c4a..83f38c5e6d 100644
--- a/lib/asn1/test/test_compile_options.erl
+++ b/lib/asn1/test/test_compile_options.erl
@@ -24,7 +24,7 @@
-export([wrong_path/1,comp/2,path/1,ticket_6143/1,noobj/1,
- record_name_prefix/1]).
+ record_name_prefix/1,verbose/1]).
%% OTP-5689
wrong_path(Config) ->
@@ -122,6 +122,25 @@ noobj(Config) ->
file:delete(filename:join([OutDir,'p_record.erl'])),
file:delete(filename:join([OutDir,'p_record.beam'])).
+verbose(Config) when is_list(Config) ->
+ DataDir = ?config(data_dir,Config),
+ OutDir = ?config(priv_dir,Config),
+ Asn1File = filename:join([DataDir,"Comment.asn"]),
+
+ %% Test verbose compile
+ ?line test_server:capture_start(),
+ ?line ok = asn1ct:compile(Asn1File, [{i,DataDir},{outdir,OutDir},noobj,verbose]),
+ ?line test_server:capture_stop(),
+ ?line [Line0|_] = test_server:capture_get(),
+ ?line lists:prefix("Erlang ASN.1 version", Line0),
+
+ %% Test non-verbose compile
+ ?line test_server:capture_start(),
+ ?line ok = asn1ct:compile(Asn1File, [{i,DataDir},{outdir,OutDir},noobj]),
+ ?line test_server:capture_stop(),
+ ?line [] = test_server:capture_get(),
+ ok.
+
outfiles_check(OutDir) ->
outfiles_check(OutDir,outfiles1()).
diff --git a/lib/compiler/src/beam_block.erl b/lib/compiler/src/beam_block.erl
index d4a4ddca8a..32703b4dd1 100644
--- a/lib/compiler/src/beam_block.erl
+++ b/lib/compiler/src/beam_block.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1999-2010. 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%
%%
%% Purpose : Partitions assembly instructions into basic blocks and
@@ -140,7 +140,6 @@ collect({move,S,D}) -> {set,[D],[S],move};
collect({put_list,S1,S2,D}) -> {set,[D],[S1,S2],put_list};
collect({put_tuple,A,D}) -> {set,[D],[],{put_tuple,A}};
collect({put,S}) -> {set,[],[S],put};
-collect({put_string,L,S,D}) -> {set,[D],[],{put_string,L,S}};
collect({get_tuple_element,S,I,D}) -> {set,[D],[S],{get_tuple_element,I}};
collect({set_tuple_element,S,D,I}) -> {set,[],[S,D],{set_tuple_element,I}};
collect({get_list,S,D1,D2}) -> {set,[D1,D2],[S],get_list};
@@ -204,7 +203,6 @@ alloc_may_pass({set,_,_,{set_tuple_element,_}}) -> false;
alloc_may_pass({set,_,_,put_list}) -> false;
alloc_may_pass({set,_,_,{put_tuple,_}}) -> false;
alloc_may_pass({set,_,_,put}) -> false;
-alloc_may_pass({set,_,_,{put_string,_,_}}) -> false;
alloc_may_pass({set,_,_,_}) -> true.
combine_alloc({_,Ns,Nh1,Init}, {_,nostack,Nh2,[]}) ->
diff --git a/lib/compiler/src/beam_flatten.erl b/lib/compiler/src/beam_flatten.erl
index d9de7e2495..6c7cb849aa 100644
--- a/lib/compiler/src/beam_flatten.erl
+++ b/lib/compiler/src/beam_flatten.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1999-2010. 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%
%%
%% Purpose : Converts intermediate assembly code to final format.
@@ -57,7 +57,6 @@ norm({set,[D],[S],fconv}) -> {fconv,S,D};
norm({set,[D],[S1,S2],put_list}) -> {put_list,S1,S2,D};
norm({set,[D],[],{put_tuple,A}}) -> {put_tuple,A,D};
norm({set,[],[S],put}) -> {put,S};
-norm({set,[D],[],{put_string,L,S}}) -> {put_string,L,S,D};
norm({set,[D],[S],{get_tuple_element,I}}) -> {get_tuple_element,S,I,D};
norm({set,[],[S,D],{set_tuple_element,I}}) -> {set_tuple_element,S,D,I};
norm({set,[D1,D2],[S],get_list}) -> {get_list,S,D1,D2};
diff --git a/lib/compiler/src/beam_jump.erl b/lib/compiler/src/beam_jump.erl
index 739928f411..3cab55c4cb 100644
--- a/lib/compiler/src/beam_jump.erl
+++ b/lib/compiler/src/beam_jump.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1999-2010. 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%
%%
%%% Purpose : Optimise jumps and remove unreachable code.
@@ -452,7 +452,6 @@ is_label_used_in_2({set,_,_,Info}, Lbl) ->
{'catch',{f,F}} -> F =:= Lbl;
{alloc,_,_} -> false;
{put_tuple,_} -> false;
- {put_string,_,_} -> false;
{get_tuple_element,_} -> false;
{set_tuple_element,_} -> false;
_ when is_atom(Info) -> false
diff --git a/lib/compiler/src/beam_type.erl b/lib/compiler/src/beam_type.erl
index ba903a12b6..3729ccb0da 100644
--- a/lib/compiler/src/beam_type.erl
+++ b/lib/compiler/src/beam_type.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1999-2010. 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%
%%
%% Purpose : Type-based optimisations.
@@ -183,7 +183,7 @@ simplify_float_1([], Ts, Rs, Acc0) ->
{Is,Ts}.
opt_fmoves([{set,[{x,_}=R],[{fr,_}]=Src,fmove}=I1,
- {set,[{y,_}]=Dst,[{x,_}=R],move}=I2|Is], Acc) ->
+ {set,[_]=Dst,[{x,_}=R],move}=I2|Is], Acc) ->
case beam_utils:is_killed_block(R, Is) of
false -> opt_fmoves(Is, [I2,I1|Acc]);
true -> opt_fmoves(Is, [{set,Dst,Src,fmove}|Acc])
@@ -253,8 +253,6 @@ flt_need_heap_2({set,_,_,{put_tuple,_}}, H, Fl) ->
{[],H+1,Fl};
flt_need_heap_2({set,_,_,put}, H, Fl) ->
{[],H+1,Fl};
-flt_need_heap_2({set,_,_,{put_string,L,_Str}}, H, Fl) ->
- {[],H+2*L,Fl};
%% Then the "neutral" instructions. We just pass them.
flt_need_heap_2({set,[{fr,_}],_,_}, H, Fl) ->
{[],H,Fl};
diff --git a/lib/compiler/src/cerl_clauses.erl b/lib/compiler/src/cerl_clauses.erl
index 5f111a5e05..99fa8dd9d5 100644
--- a/lib/compiler/src/cerl_clauses.erl
+++ b/lib/compiler/src/cerl_clauses.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2001-2010. 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%
%% @doc Utility functions for Core Erlang case/receive clauses.
@@ -338,10 +338,19 @@ match(P, E, Bs) ->
if E =:= any ->
{false, Bs};
true ->
- case is_data(E) of
- true ->
+ case type(E) of
+ literal ->
+ case is_bitstring(concrete(E)) of
+ false ->
+ none;
+ true ->
+ {false, Bs}
+ end;
+ cons ->
+ none;
+ tuple ->
none;
- false ->
+ _ ->
{false, Bs}
end
end;
diff --git a/lib/compiler/src/cerl_inline.erl b/lib/compiler/src/cerl_inline.erl
index 191efa3032..6d7eca0113 100644
--- a/lib/compiler/src/cerl_inline.erl
+++ b/lib/compiler/src/cerl_inline.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2001-2010. 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%
%%
%% Core Erlang inliner.
@@ -1429,17 +1429,26 @@ inline(E, #app{opnds = Opnds, ctxt = Ctxt, loc = L}, Ren, Env, S) ->
{E, S};
true ->
%% Create local bindings for the parameters to their
- %% respective operand structures from the app-structure, and
- %% visit the body in the context saved in the structure.
+ %% respective operand structures from the app-structure.
{Rs, Ren1, Env1, S1} = bind_locals(Vs, Opnds, Ren, Env, S),
- {E1, S2} = i(fun_body(E), Ctxt, Ren1, Env1, S1),
+
+ %% function_clause exceptions that have been inlined
+ %% into another function (or even into the same function)
+ %% will not work properly. The v3_kernel pass will
+ %% take care of it, but we will need to help it by
+ %% removing any function_name annotations on match_fail
+ %% primops that we inline.
+ E1 = kill_function_name_anns(fun_body(E)),
+
+ %% Visit the body in the context saved in the structure.
+ {E2, S2} = i(E1, Ctxt, Ren1, Env1, S1),
%% Create necessary bindings and/or set flags.
- {E2, S3} = make_let_bindings(Rs, E1, S2),
+ {E3, S3} = make_let_bindings(Rs, E2, S2),
%% Lastly, flag the application as inlined, since the inlining
%% attempt was not aborted before we reached this point.
- {E2, st__set_app_inlined(L, S3)}
+ {E3, st__set_app_inlined(L, S3)}
end.
%% For the (possibly renamed) argument variables to an inlined call,
@@ -2370,6 +2379,19 @@ kill_id_anns([A | As]) ->
kill_id_anns([]) ->
[].
+kill_function_name_anns(Body) ->
+ F = fun(P) ->
+ case type(P) of
+ primop ->
+ Ann = get_ann(P),
+ Ann1 = lists:keydelete(function_name, 1, Ann),
+ set_ann(P, Ann1);
+ _ ->
+ P
+ end
+ end,
+ cerl_trees:map(F, Body).
+
%% =====================================================================
%% General utilities
diff --git a/lib/compiler/src/compile.erl b/lib/compiler/src/compile.erl
index b853800d73..5017fd2c23 100644
--- a/lib/compiler/src/compile.erl
+++ b/lib/compiler/src/compile.erl
@@ -162,13 +162,8 @@ expand_opt(report, Os) ->
[report_errors,report_warnings|Os];
expand_opt(return, Os) ->
[return_errors,return_warnings|Os];
-expand_opt(r11, Os) ->
- [no_stack_trimming,no_binaries,no_constant_pool|Os];
expand_opt({debug_info_key,_}=O, Os) ->
[encrypt_debug_info,O|Os];
-expand_opt(no_binaries=O, Os) ->
- %%Turn off the entire type optimization pass.
- [no_topt,O|Os];
expand_opt(no_float_opt, Os) ->
%%Turn off the entire type optimization pass.
[no_topt|Os];
@@ -590,7 +585,7 @@ core_passes() ->
kernel_passes() ->
%% Destructive setelement/3 optimization and core lint.
- [{unless,no_constant_pool,?pass(core_dsetel_module)}, %Not safe without constant pool.
+ [?pass(core_dsetel_module),
{iff,dsetel,{listing,"dsetel"}},
{iff,clint,?pass(core_lint_module)},
diff --git a/lib/compiler/src/genop.tab b/lib/compiler/src/genop.tab
index 6874054495..47e6e72402 100644
--- a/lib/compiler/src/genop.tab
+++ b/lib/compiler/src/genop.tab
@@ -1,19 +1,19 @@
#
# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1998-2009. All Rights Reserved.
-#
+#
+# Copyright Ericsson AB 1998-2010. 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%
#
BEAM_FORMAT_NUMBER=0
@@ -132,7 +132,7 @@ BEAM_FORMAT_NUMBER=0
#
# Building terms.
#
-68: put_string/3
+68: -put_string/3
69: put_list/3
70: put_tuple/2
71: put/1
diff --git a/lib/compiler/src/sys_core_dsetel.erl b/lib/compiler/src/sys_core_dsetel.erl
index c38eab7b42..f6696992b9 100644
--- a/lib/compiler/src/sys_core_dsetel.erl
+++ b/lib/compiler/src/sys_core_dsetel.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2002-2010. 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%
%%
%% Purpose : Using dsetelement to make multiple-field record updates
@@ -57,8 +57,6 @@
%% if X1 is used exactly once.
%% Thus, we need to track variable usage.
%%
-%% NOTE: This pass must NOT be used if the no_constant_pool option is used.
-%%
-module(sys_core_dsetel).
diff --git a/lib/compiler/src/sys_core_fold.erl b/lib/compiler/src/sys_core_fold.erl
index 068478496b..6202f07479 100644
--- a/lib/compiler/src/sys_core_fold.erl
+++ b/lib/compiler/src/sys_core_fold.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1999-2010. 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%
%%
%% Purpose : Constant folding optimisation for Core
@@ -602,15 +602,23 @@ count_bits_1(Int, Bits) -> count_bits_1(Int bsr 64, Bits+64).
%% a rewritten expression consisting of a sequence of
%% the arguments only is returned.
-useless_call(effect, #c_call{module=#c_literal{val=Mod},
+useless_call(effect, #c_call{anno=Anno,
+ module=#c_literal{val=Mod},
name=#c_literal{val=Name},
args=Args}=Call) ->
A = length(Args),
case erl_bifs:is_safe(Mod, Name, A) of
false ->
case erl_bifs:is_pure(Mod, Name, A) of
- true -> add_warning(Call, result_ignored);
- false -> ok
+ true ->
+ case member(result_not_wanted, Anno) of
+ false ->
+ add_warning(Call, result_ignored);
+ true ->
+ ok
+ end;
+ false ->
+ ok
end,
no;
true ->
@@ -2806,7 +2814,8 @@ format_error({no_effect,{erlang,F,A}}) ->
end,
flatten(io_lib:format(Fmt, Args));
format_error(result_ignored) ->
- "the result of the expression is ignored";
+ "the result of the expression is ignored "
+ "(suppress the warning by assigning the expression to the _ variable)";
format_error(useless_building) ->
"a term is constructed, but never used";
format_error(bin_opt_alias) ->
diff --git a/lib/compiler/src/sys_core_inline.erl b/lib/compiler/src/sys_core_inline.erl
index c8d75b80c6..9f93acb666 100644
--- a/lib/compiler/src/sys_core_inline.erl
+++ b/lib/compiler/src/sys_core_inline.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2000-2010. 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%
%%
%% Purpose : Function inlining optimisation for Core.
@@ -41,11 +41,9 @@
-module(sys_core_inline).
-%%-compile({inline,{match_fail_fun,0}}).
-
-export([module/2]).
--import(lists, [member/2,map/2,foldl/3,mapfoldl/3]).
+-import(lists, [member/2,map/2,foldl/3,mapfoldl/3,keydelete/3]).
-include("core_parse.hrl").
@@ -178,11 +176,9 @@ weight_func(_Core, Acc) -> Acc + 1.
%% function_clause match_fail (if they have one).
match_fail_fun() ->
- fun (#c_primop{name=#c_literal{val=match_fail},
- args=[#c_tuple{es=[#c_literal{val=function_clause}|As]}]}=P) ->
- Fail = #c_tuple{es=[#c_literal{val=case_clause},
- #c_tuple{es=As}]},
- P#c_primop{args=[Fail]};
+ fun (#c_primop{anno=Anno0,name=#c_literal{val=match_fail}}=P) ->
+ Anno = keydelete(function_name, 1, Anno0),
+ P#c_primop{anno=Anno};
(Other) -> Other
end.
@@ -201,7 +197,7 @@ kill_id_anns(Body) ->
(Expr) ->
%% Mark everything as compiler generated to suppress
%% bogus warnings.
- A = [compiler_generated|core_lib:get_anno(Expr)],
+ A = compiler_generated(core_lib:get_anno(Expr)),
core_lib:set_anno(Expr, A)
end, Body).
@@ -210,3 +206,8 @@ kill_id_anns_1([{'id',_}|As]) ->
kill_id_anns_1([A|As]) ->
[A|kill_id_anns_1(As)];
kill_id_anns_1([]) -> [].
+
+compiler_generated([compiler_generated|_]=Anno) ->
+ Anno;
+compiler_generated(Anno) ->
+ [compiler_generated|Anno -- [compiler_generated]].
diff --git a/lib/compiler/src/v3_codegen.erl b/lib/compiler/src/v3_codegen.erl
index 83113d1652..948937c438 100644
--- a/lib/compiler/src/v3_codegen.erl
+++ b/lib/compiler/src/v3_codegen.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1999-2010. 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%
%%
%% Purpose : Code generator for Beam.
@@ -209,7 +209,6 @@ need_heap_1(#l{ke={set,_,Val}}, H) ->
{[],H + case Val of
{cons,_} -> 2;
{tuple,Es} -> 1 + length(Es);
- {string,S} -> 2 * length(S);
_Other -> 0
end};
need_heap_1(#l{ke={bif,dsetelement,_As,_Rs},i=I}, H) ->
@@ -1191,7 +1190,12 @@ trap_bif(_, _, _) -> false.
bif_cg(bs_context_to_binary=Instr, [Src0], [], Le, Vdb, Bef, St0) ->
[Src] = cg_reg_args([Src0], Bef),
- {[{Instr,Src}],clear_dead(Bef, Le#l.i, Vdb), St0};
+ case is_register(Src) of
+ false ->
+ {[],clear_dead(Bef, Le#l.i, Vdb), St0};
+ true ->
+ {[{Instr,Src}],clear_dead(Bef, Le#l.i, Vdb), St0}
+ end;
bif_cg(dsetelement, [Index0,Tuple0,New0], _Rs, Le, Vdb, Bef, St0) ->
[New,Tuple,{integer,Index1}] = cg_reg_args([New0,Tuple0,Index0], Bef),
Index = Index1-1,
@@ -1424,8 +1428,6 @@ set_cg([{var,R}], Con, Le, Vdb, Bef, St) ->
[{put_tuple,length(Es),Ret}] ++ cg_build_args(Es, Bef);
{var,V} -> % Normally removed by kernel optimizer.
[{move,fetch_var(V, Int),Ret}];
- {string,Str} = String ->
- [{put_string,length(Str),String,Ret}];
Other ->
[{move,Other,Ret}]
end,
@@ -2022,6 +2024,10 @@ fetch_stack(V, [_|Stk], I) -> fetch_stack(V, Stk, I+1).
on_stack(V, Stk) -> keymember(V, 1, Stk).
+is_register({x,_}) -> true;
+is_register({yy,_}) -> true;
+is_register(_) -> false.
+
%% put_catch(CatchTag, Stack) -> Stack'
%% drop_catch(CatchTag, Stack) -> Stack'
%% Special interface for putting and removing catch tags, to ensure that
diff --git a/lib/compiler/src/v3_core.erl b/lib/compiler/src/v3_core.erl
index dfe15de4ff..b2f0ac75c7 100644
--- a/lib/compiler/src/v3_core.erl
+++ b/lib/compiler/src/v3_core.erl
@@ -128,6 +128,7 @@
-record(core, {vcount=0 :: non_neg_integer(), %Variable counter
fcount=0 :: non_neg_integer(), %Function counter
in_guard=false :: boolean(), %In guard or not.
+ wanted=true :: boolean(), %Result wanted or not.
opts :: [compile:option()], %Options.
es=[] :: [error()], %Errors.
ws=[] :: [warning()], %Warnings.
@@ -213,10 +214,7 @@ clause({clause,Lc,H0,G0,B0}, St0) ->
catch
throw:nomatch ->
St = add_warning(Lc, nomatch, St0),
- {noclause,St}; %Bad pattern
- throw:no_binaries ->
- St = add_error(Lc, no_binaries, St0),
- {noclause,St}
+ {noclause,St} %Bad pattern
end.
clause_arity({clause,_,H0,_,_}) -> length(H0).
@@ -496,22 +494,18 @@ expr({tuple,L,Es0}, St0) ->
{Es1,Eps,St1} = safe_list(Es0, St0),
A = lineno_anno(L, St1),
{ann_c_tuple(A, Es1),Eps,St1};
-expr({bin,L,Es0}, #core{opts=Opts}=St0) ->
- St1 = case member(no_binaries, Opts) of
- false -> St0;
- true -> add_error(L, no_binaries, St0)
- end,
- try expr_bin(Es0, lineno_anno(L, St1), St1) of
+expr({bin,L,Es0}, St0) ->
+ try expr_bin(Es0, lineno_anno(L, St0), St0) of
{_,_,_}=Res -> Res
catch
throw:bad_binary ->
- St2 = add_warning(L, bad_binary, St1),
- LineAnno = lineno_anno(L, St2),
+ St = add_warning(L, bad_binary, St0),
+ LineAnno = lineno_anno(L, St),
As = [#c_literal{anno=LineAnno,val=badarg}],
{#icall{anno=#a{anno=LineAnno}, %Must have an #a{}
module=#c_literal{anno=LineAnno,val=erlang},
name=#c_literal{anno=LineAnno,val=error},
- args=As},[],St2}
+ args=As},[],St}
end;
expr({block,_,Es0}, St0) ->
%% Inline the block directly.
@@ -587,10 +581,14 @@ expr({'fun',L,{function,F,A},{_,_,_}=Id}, St) ->
{#c_var{anno=Lanno++[{id,Id}],name={F,A}},[],St};
expr({'fun',L,{clauses,Cs},Id}, St) ->
fun_tq(Id, Cs, L, St);
-expr({call,L,{remote,_,M,F},As0}, St0) ->
+expr({call,L,{remote,_,M,F},As0}, #core{wanted=Wanted}=St0) ->
{[M1,F1|As1],Aps,St1} = safe_list([M,F|As0], St0),
Lanno = lineno_anno(L, St1),
- {#icall{anno=#a{anno=Lanno},module=M1,name=F1,args=As1},Aps,St1};
+ Anno = case Wanted of
+ false -> [result_not_wanted|Lanno];
+ true -> Lanno
+ end,
+ {#icall{anno=#a{anno=Anno},module=M1,name=F1,args=As1},Aps,St1};
expr({call,Lc,{atom,Lf,F},As0}, St0) ->
{As1,Aps,St1} = safe_list(As0, St0),
Op = #c_var{anno=lineno_anno(Lf, St1),name={F,length(As1)}},
@@ -603,27 +601,28 @@ expr({call,L,FunExp,As0}, St0) ->
expr({match,L,P0,E0}, St0) ->
%% First fold matches together to create aliases.
{P1,E1} = fold_match(E0, P0),
- {E2,Eps,St1} = novars(E1, St0),
+ St1 = case P1 of
+ {var,_,'_'} -> St0#core{wanted=false};
+ _ -> St0
+ end,
+ {E2,Eps,St2} = novars(E1, St1),
+ St3 = St2#core{wanted=St0#core.wanted},
P2 = try
- pattern(P1, St1)
+ pattern(P1, St3)
catch
throw:Thrown ->
Thrown
end,
- {Fpat,St2} = new_var(St1),
+ {Fpat,St4} = new_var(St3),
Fc = fail_clause([Fpat], c_tuple([#c_literal{val=badmatch},Fpat])),
- Lanno = lineno_anno(L, St2),
+ Lanno = lineno_anno(L, St4),
case P2 of
nomatch ->
- St = add_warning(L, nomatch, St2),
- {#icase{anno=#a{anno=Lanno},
- args=[E2],clauses=[],fc=Fc},Eps,St};
- no_binaries ->
- St = add_error(L, no_binaries, St2),
+ St = add_warning(L, nomatch, St4),
{#icase{anno=#a{anno=Lanno},
args=[E2],clauses=[],fc=Fc},Eps,St};
Other when not is_atom(Other) ->
- {#imatch{anno=#a{anno=Lanno},pat=P2,arg=E2,fc=Fc},Eps,St2}
+ {#imatch{anno=#a{anno=Lanno},pat=P2,arg=E2,fc=Fc},Eps,St4}
end;
expr({op,_,'++',{lc,Llc,E,Qs},More}, St0) ->
%% Optimise '++' here because of the list comprehension algorithm.
@@ -1443,15 +1442,10 @@ pattern({cons,L,H,T}, St) ->
ann_c_cons(lineno_anno(L, St), pattern(H, St), pattern(T, St));
pattern({tuple,L,Ps}, St) ->
ann_c_tuple(lineno_anno(L, St), pattern_list(Ps, St));
-pattern({bin,L,Ps}, #core{opts=Opts}=St) ->
- case member(no_binaries, Opts) of
- false ->
- %% We don't create a #ibinary record here, since there is
- %% no need to hold any used/new annotations in a pattern.
- #c_binary{anno=lineno_anno(L, St),segments=pat_bin(Ps, St)};
- true ->
- throw(no_binaries)
- end;
+pattern({bin,L,Ps}, St) ->
+ %% We don't create a #ibinary record here, since there is
+ %% no need to hold any used/new annotations in a pattern.
+ #c_binary{anno=lineno_anno(L, St),segments=pat_bin(Ps, St)};
pattern({match,_,P1,P2}, St) ->
pat_alias(pattern(P1, St), pattern(P2, St)).
@@ -1558,17 +1552,21 @@ new_vars_1(N, Anno, St0, Vs) when N > 0 ->
new_vars_1(0, _, St, Vs) -> {Vs,St}.
function_clause(Ps, Name) ->
- fail_clause(Ps, c_tuple([#c_literal{anno=[{name,Name}],
- val=function_clause}|Ps])).
-function_clause(Ps, Anno, Name) ->
- fail_clause(Ps, ann_c_tuple(Anno,
- [#c_literal{anno=[{name,Name}],
- val=function_clause}|Ps])).
-
-fail_clause(Pats, A) ->
+ function_clause(Ps, [], Name).
+
+function_clause(Ps, LineAnno, Name) ->
+ FcAnno = [{function_name,Name}],
+ fail_clause(Ps, FcAnno,
+ ann_c_tuple(LineAnno, [#c_literal{val=function_clause}|Ps])).
+
+fail_clause(Pats, Arg) ->
+ fail_clause(Pats, [], Arg).
+
+fail_clause(Pats, Anno, Arg) ->
#iclause{anno=#a{anno=[compiler_generated]},
pats=Pats,guard=[],
- body=[#iprimop{anno=#a{},name=#c_literal{val=match_fail},args=[A]}]}.
+ body=[#iprimop{anno=#a{anno=Anno},name=#c_literal{val=match_fail},
+ args=[Arg]}]}.
ubody(B, St) -> uexpr(B, [], St).
@@ -2116,21 +2114,15 @@ is_simp_bin(Es) ->
%%% Handling of warnings.
%%%
--type err_desc() :: 'bad_binary' | 'no_binaries' | 'nomatch'.
+-type err_desc() :: 'bad_binary' | 'nomatch'.
-spec format_error(err_desc()) -> nonempty_string().
format_error(nomatch) ->
"pattern cannot possibly match";
format_error(bad_binary) ->
- "binary construction will fail because of a type mismatch";
-format_error(no_binaries) ->
- "bit syntax is not allowed to be used when compatibility with a previous "
- "version has been requested".
+ "binary construction will fail because of a type mismatch".
add_warning(Line, Term, #core{ws=Ws,file=[{file,File}]}=St) when Line >= 0 ->
St#core{ws=[{File,[{location(Line),?MODULE,Term}]}|Ws]};
add_warning(_, _, St) -> St.
-
-add_error(Line, Term, #core{es=Es,file=[{file,File}]}=St) ->
- St#core{es=[{File,[{location(abs_line(Line)),?MODULE,Term}]}|Es]}.
diff --git a/lib/compiler/src/v3_kernel.erl b/lib/compiler/src/v3_kernel.erl
index 8568071e57..974c64a8bc 100644
--- a/lib/compiler/src/v3_kernel.erl
+++ b/lib/compiler/src/v3_kernel.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1999-2010. 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%
%%
%% Purpose : Transform Core Erlang to Kernel Erlang
@@ -80,7 +80,8 @@
-export([module/2,format_error/1]).
--import(lists, [map/2,foldl/3,foldr/3,mapfoldl/3,splitwith/2,member/2,keymember/3]).
+-import(lists, [map/2,foldl/3,foldr/3,mapfoldl/3,splitwith/2,member/2,
+ keymember/3,keyfind/3]).
-import(ordsets, [add_element/2,del_element/2,union/2,union/1,subtract/2]).
-compile({nowarn_deprecated_function, {erlang,hash,2}}).
@@ -126,12 +127,8 @@ copy_anno(Kdst, Ksrc) ->
-spec module(cerl:c_module(), [compile:option()]) ->
{'ok', #k_mdef{}, [warning()]}.
-module(#c_module{anno=A,name=M,exports=Es,attrs=As,defs=Fs}, Options) ->
- Lit = case member(no_constant_pool, Options) of
- true -> no;
- false -> dict:new()
- end,
- St0 = #kern{lit=Lit},
+module(#c_module{anno=A,name=M,exports=Es,attrs=As,defs=Fs}, _Options) ->
+ St0 = #kern{lit=dict:new()},
{Kfs,St} = mapfoldl(fun function/2, St0, Fs),
Kes = map(fun (#c_var{name={_,_}=Fname}) -> Fname end, Es),
Kas = map(fun ({#c_literal{val=N},V}) ->
@@ -240,11 +237,6 @@ expr(#c_var{anno=A,name={_Name,Arity}}=Fname, Sub, St) ->
expr(Fun, Sub, St);
expr(#c_var{anno=A,name=V}, Sub, St) ->
{#k_var{anno=A,name=get_vsub(V, Sub)},[],St};
-expr(#c_literal{anno=A,val=Lit}, Sub, #kern{lit=no}=St) ->
- %% No constant pools for compatibility with a previous version.
- %% Fully expand the literal.
- Core = expand_literal(Lit, A),
- expr(Core, Sub, St);
expr(#c_literal{}=Lit, Sub, St) ->
Core = handle_literal(Lit),
expr(Core, Sub, St);
@@ -265,9 +257,6 @@ expr(#k_float{}=V, _Sub, St) ->
{V,[],St};
expr(#k_atom{}=V, _Sub, St) ->
{V,[],St};
-expr(#k_string{}=V, _Sub, St) ->
- %% Only for compatibility with a previous version.
- {V,[],St};
expr(#c_cons{anno=A,hd=Ch,tl=Ct}, Sub, St0) ->
%% Do cons in two steps, first the expressions left to right, then
%% any remaining literals right to left.
@@ -420,7 +409,7 @@ expr(#c_call{anno=A,module=M0,name=F0,args=Cargs}, Sub, St0) ->
{Call,Ap,St}
end;
expr(#c_primop{anno=A,name=#c_literal{val=match_fail},args=Cargs0}, Sub, St0) ->
- Cargs = translate_match_fail(Cargs0, Sub, St0),
+ Cargs = translate_match_fail(Cargs0, Sub, A, St0),
%% This special case will disappear.
{Kargs,Ap,St} = atomic_list(Cargs, Sub, St0),
Ar = length(Cargs),
@@ -447,32 +436,53 @@ expr(#c_catch{anno=A,body=Cb}, Sub, St0) ->
%% Handle internal expressions.
expr(#ireceive_accept{anno=A}, _Sub, St) -> {#k_receive_accept{anno=A},[],St}.
-%% Translate a function_clause to case_clause if it has been moved into
-%% another function.
-translate_match_fail([#c_tuple{es=[#c_literal{anno=A0,
- val=function_clause}|As]}]=Args,
- Sub,
- #kern{ff=FF}) ->
- A = case A0 of
- [{name,{Func0,Arity0}}] ->
- [{name,{get_fsub(Func0, Arity0, Sub),Arity0}}];
- _ ->
- A0
- end,
- case {A,FF} of
- {[{name,Same}],Same} ->
+%% Translate a function_clause exception to a case_clause exception if
+%% it has been moved into another function. (A function_clause exception
+%% will not work correctly if it is moved into another function, or
+%% even if it is invoked not from the top level in the correct function.)
+translate_match_fail(Args, Sub, Anno, St) ->
+ case Args of
+ [#c_tuple{es=[#c_literal{val=function_clause}|As]}] ->
+ translate_match_fail_1(Anno, Args, As, Sub, St);
+ [#c_literal{val=Tuple}] when is_tuple(Tuple) ->
+ %% The inliner may have created a literal out of
+ %% the original #c_tuple{}.
+ case tuple_to_list(Tuple) of
+ [function_clause|As0] ->
+ As = [#c_literal{val=E} || E <- As0],
+ translate_match_fail_1(Anno, Args, As, Sub, St);
+ _ ->
+ Args
+ end;
+ _ ->
+ %% Not a function_clause exception.
+ Args
+ end.
+
+translate_match_fail_1(Anno, Args, As, Sub, #kern{ff=FF}) ->
+ AnnoFunc = case keyfind(function_name, 1, Anno) of
+ false ->
+ none; %Force rewrite.
+ {function_name,{Name,Arity}} ->
+ {get_fsub(Name, Arity, Sub),Arity}
+ end,
+ case {AnnoFunc,FF} of
+ {Same,Same} ->
%% Still in the correct function.
Args;
- {[{name,{F,_}}],F} ->
+ {{F,_},F} ->
%% Still in the correct function.
Args;
_ ->
- %% Inlining has probably moved the function_clause into another
- %% function (where it will not work correctly).
- %% Rewrite to a case_clause.
+ %% Wrong function or no function_name annotation.
+ %%
+ %% The inliner has copied the match_fail(function_clause)
+ %% primop from another function (or from another instance of
+ %% the current function). match_fail(function_clause) will
+ %% only work at the top level of the function it was originally
+ %% defined in, so we will need to rewrite it to a case_clause.
[#c_tuple{es=[#c_literal{val=case_clause},#c_tuple{es=As}]}]
- end;
-translate_match_fail(Args, _, _) -> Args.
+ end.
%% call_type(Module, Function, Arity) -> call | bif | apply | error.
%% Classify the call.
@@ -980,11 +990,6 @@ match_var([U|Us], Cs0, Def, St) ->
%% according to type, the order is really irrelevant but tries to be
%% smart.
-match_con(Us, Cs0, Def, #kern{lit=no}=St) ->
- %% No constant pool (for compatibility with R11B).
- %% We must expand literals.
- Cs = [expand_pat_lit_clause(C, true) || C <- Cs0],
- match_con_1(Us, Cs, Def, St);
match_con(Us, [C], Def, St) ->
%% There is only one clause. We can keep literal tuples and
%% lists, but we must convert []/integer/float/atom literals
@@ -1783,7 +1788,6 @@ lit_vars(#k_int{}) -> [];
lit_vars(#k_float{}) -> [];
lit_vars(#k_atom{}) -> [];
%%lit_vars(#k_char{}) -> [];
-lit_vars(#k_string{}) -> [];
lit_vars(#k_nil{}) -> [];
lit_vars(#k_cons{hd=H,tl=T}) ->
union(lit_vars(H), lit_vars(T));
@@ -1845,48 +1849,20 @@ handle_literal(#c_literal{anno=A,val=V}) ->
case V of
[_|_] ->
#k_literal{anno=A,val=V};
+ [] ->
+ #k_nil{anno=A};
V when is_tuple(V) ->
#k_literal{anno=A,val=V};
V when is_bitstring(V) ->
#k_literal{anno=A,val=V};
- _ ->
- expand_literal(V, A)
+ V when is_integer(V) ->
+ #k_int{anno=A,val=V};
+ V when is_float(V) ->
+ #k_float{anno=A,val=V};
+ V when is_atom(V) ->
+ #k_atom{anno=A,val=V}
end.
-%% expand_literal(Literal, Anno) -> CoreTerm | KernelTerm
-%% Fully expand the literal. Atomic terms such as integers are directly
-%% translated to the Kernel Erlang format, while complex terms are kept
-%% in the Core Erlang format (but the content is recursively processed).
-
-expand_literal([H|T]=V, A) when is_integer(H), 0 =< H, H =< 255 ->
- case is_print_char_list(T) of
- false ->
- #c_cons{anno=A,hd=#k_int{anno=A,val=H},tl=expand_literal(T, A)};
- true ->
- #k_string{anno=A,val=V}
- end;
-expand_literal([H|T], A) ->
- #c_cons{anno=A,hd=expand_literal(H, A),tl=expand_literal(T, A)};
-expand_literal([], A) ->
- #k_nil{anno=A};
-expand_literal(V, A) when is_tuple(V) ->
- #c_tuple{anno=A,es=expand_literal_list(tuple_to_list(V), A)};
-expand_literal(V, A) when is_integer(V) ->
- #k_int{anno=A,val=V};
-expand_literal(V, A) when is_float(V) ->
- #k_float{anno=A,val=V};
-expand_literal(V, A) when is_atom(V) ->
- #k_atom{anno=A,val=V}.
-
-expand_literal_list([H|T], A) ->
- [expand_literal(H, A)|expand_literal_list(T, A)];
-expand_literal_list([], _) -> [].
-
-is_print_char_list([H|T]) when is_integer(H), 0 =< H, H =< 255 ->
- is_print_char_list(T);
-is_print_char_list([]) -> true;
-is_print_char_list(_) -> false.
-
make_list(Es) ->
foldr(fun(E, Acc) ->
#c_cons{hd=E,tl=Acc}
diff --git a/lib/compiler/src/v3_kernel_pp.erl b/lib/compiler/src/v3_kernel_pp.erl
index b1ca907d11..a300dd283f 100644
--- a/lib/compiler/src/v3_kernel_pp.erl
+++ b/lib/compiler/src/v3_kernel_pp.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1999-2010. 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%
%%
%% Purpose : Kernel Erlang (naive) prettyprinter
@@ -80,7 +80,6 @@ format_1(#k_atom{val=A}, _Ctxt) -> core_atom(A);
format_1(#k_float{val=F}, _Ctxt) -> float_to_list(F);
format_1(#k_int{val=I}, _Ctxt) -> integer_to_list(I);
format_1(#k_nil{}, _Ctxt) -> "[]";
-format_1(#k_string{val=S}, _Ctxt) -> io_lib:write_string(S);
format_1(#k_var{name=V}, _Ctxt) ->
if is_atom(V) ->
case atom_to_list(V) of
diff --git a/lib/compiler/src/v3_life.erl b/lib/compiler/src/v3_life.erl
index 8e6b153d57..9fda37530b 100644
--- a/lib/compiler/src/v3_life.erl
+++ b/lib/compiler/src/v3_life.erl
@@ -418,7 +418,6 @@ literal(#k_int{val=I}, _) -> {integer,I};
literal(#k_float{val=F}, _) -> {float,F};
literal(#k_atom{val=N}, _) -> {atom,N};
%%literal(#k_char{val=C}, _) -> {char,C};
-literal(#k_string{val=S}, _) -> {string,S};
literal(#k_nil{}, _) -> nil;
literal(#k_cons{hd=H,tl=T}, Ctxt) ->
{cons,[literal(H, Ctxt),literal(T, Ctxt)]};
@@ -443,7 +442,6 @@ literal2(#k_int{val=I}, _) -> {integer,I};
literal2(#k_float{val=F}, _) -> {float,F};
literal2(#k_atom{val=N}, _) -> {atom,N};
%%literal2(#k_char{val=C}, _) -> {char,C};
-literal2(#k_string{val=S}, _) -> {string,S};
literal2(#k_nil{}, _) -> nil;
literal2(#k_cons{hd=H,tl=T}, Ctxt) ->
{cons,[literal2(H, Ctxt),literal2(T, Ctxt)]};
diff --git a/lib/compiler/test/Makefile b/lib/compiler/test/Makefile
index ad2f63e9e5..2d08e71e09 100644
--- a/lib/compiler/test/Makefile
+++ b/lib/compiler/test/Makefile
@@ -53,16 +53,24 @@ NO_OPT= \
record \
trycatch
-R11= \
+INLINE= \
andor \
apply \
+ bs_bincomp \
+ bs_bit_binaries \
+ bs_construct \
+ bs_match \
+ bs_utf \
+ core_fold \
float \
fun \
+ guard \
+ lc \
match \
+ misc \
num_bif \
receive \
- record \
- trycatch
+ record
CORE_MODULES = \
bs_shadowed_size_var \
@@ -73,8 +81,8 @@ NO_OPT_MODULES= $(NO_OPT:%=%_no_opt_SUITE)
NO_OPT_ERL_FILES= $(NO_OPT_MODULES:%=%.erl)
POST_OPT_MODULES= $(NO_OPT:%=%_post_opt_SUITE)
POST_OPT_ERL_FILES= $(POST_OPT_MODULES:%=%.erl)
-R11_MODULES= $(R11:%=%_r11_SUITE)
-R11_ERL_FILES= $(R11_MODULES:%=%.erl)
+INLINE_MODULES= $(INLINE:%=%_inline_SUITE)
+INLINE_ERL_FILES= $(INLINE_MODULES:%=%.erl)
ERL_FILES= $(MODULES:%=%.erl)
@@ -103,15 +111,15 @@ EBIN = .
# Targets
# ----------------------------------------------------
-make_emakefile: $(NO_OPT_ERL_FILES) $(POST_OPT_ERL_FILES) $(R11_ERL_FILES)
+make_emakefile: $(NO_OPT_ERL_FILES) $(POST_OPT_ERL_FILES) $(INLINE_ERL_FILES)
$(ERL_TOP)/make/make_emakefile $(ERL_COMPILE_FLAGS) -o$(EBIN) $(MODULES) \
> $(EMAKEFILE)
$(ERL_TOP)/make/make_emakefile +no_copt +no_postopt $(ERL_COMPILE_FLAGS) \
-o$(EBIN) $(NO_OPT_MODULES) >> $(EMAKEFILE)
$(ERL_TOP)/make/make_emakefile +no_copt $(ERL_COMPILE_FLAGS) \
-o$(EBIN) $(POST_OPT_MODULES) >> $(EMAKEFILE)
- $(ERL_TOP)/make/make_emakefile +r11 $(ERL_COMPILE_FLAGS) \
- -o$(EBIN) $(R11_MODULES) >> $(EMAKEFILE)
+ $(ERL_TOP)/make/make_emakefile +inline $(ERL_COMPILE_FLAGS) \
+ -o$(EBIN) $(INLINE_MODULES) >> $(EMAKEFILE)
tests debug opt: make_emakefile
erl $(ERL_MAKE_FLAGS) -make
@@ -133,7 +141,7 @@ docs:
%_post_opt_SUITE.erl: %_SUITE.erl
sed -e 's;-module($(basename $<));-module($(basename $@));' $< > $@
-%_r11_SUITE.erl: %_SUITE.erl
+%_inline_SUITE.erl: %_SUITE.erl
sed -e 's;-module($(basename $<));-module($(basename $@));' $< > $@
# ----------------------------------------------------
@@ -148,7 +156,7 @@ release_tests_spec: make_emakefile
$(INSTALL_DATA) compiler.dynspec compiler.cover \
$(EMAKEFILE) $(ERL_FILES) $(CORE_FILES) $(RELSYSDIR)
$(INSTALL_DATA) $(NO_OPT_ERL_FILES) $(POST_OPT_ERL_FILES) \
- $(R11_ERL_FILES) $(RELSYSDIR)
+ $(INLINE_ERL_FILES) $(RELSYSDIR)
chmod -f -R u+w $(RELSYSDIR)
@tar cf - *_SUITE_data | (cd $(RELSYSDIR); tar xf -)
diff --git a/lib/compiler/test/bs_match_SUITE.erl b/lib/compiler/test/bs_match_SUITE.erl
index 5c2797170b..75b6f801e7 100644
--- a/lib/compiler/test/bs_match_SUITE.erl
+++ b/lib/compiler/test/bs_match_SUITE.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2005-2010. 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%
%%
@@ -302,15 +302,15 @@ partitioned_bs_match(Config) when is_list(Config) ->
?line error = partitioned_bs_match(10, <<7,8,15,13>>),
?line error = partitioned_bs_match(100, {a,tuple,is,'not',a,binary}),
?line ok = partitioned_bs_match(0, <<>>),
- ?line {'EXIT',{function_clause,[{?MODULE,partitioned_bs_match,[-1,blurf]}|_]}} =
- (catch partitioned_bs_match(-1, blurf)),
- ?line {'EXIT',{function_clause,[{?MODULE,partitioned_bs_match,[-1,<<1,2,3>>]}|_]}} =
- (catch partitioned_bs_match(-1, <<1,2,3>>)),
-
+ ?line fc(partitioned_bs_match, [-1,blurf],
+ catch partitioned_bs_match(-1, blurf)),
+ ?line fc(partitioned_bs_match, [-1,<<1,2,3>>],
+ catch partitioned_bs_match(-1, <<1,2,3>>)),
?line {17,<<1,2,3>>} = partitioned_bs_match_2(1, <<17,1,2,3>>),
?line {7,<<1,2,3>>} = partitioned_bs_match_2(7, <<17,1,2,3>>),
- ?line {'EXIT',{function_clause,[{?MODULE,partitioned_bs_match_2,[4,<<0:17>>]}|_]}} =
- (catch partitioned_bs_match_2(4, <<0:17>>)),
+
+ ?line fc(partitioned_bs_match_2, [4,<<0:17>>],
+ catch partitioned_bs_match_2(4, <<0:17>>)),
ok.
partitioned_bs_match(_, <<42:8,T/binary>>) ->
@@ -327,12 +327,10 @@ partitioned_bs_match_2(Len, <<_:8,T/binary>>) ->
function_clause(Config) when is_list(Config) ->
?line ok = function_clause_1(<<0,7,0,7,42>>),
- ?line {'EXIT',{function_clause,
- [{?MODULE,function_clause_1,[<<0,1,2,3>>]}|_]}} =
- (catch function_clause_1(<<0,1,2,3>>)),
- ?line {'EXIT',{function_clause,
- [{?MODULE,function_clause_1,[<<0,1,2,3>>]}|_]}} =
- (catch function_clause_1(<<0,7,0,1,2,3>>)),
+ ?line fc(function_clause_1, [<<0,1,2,3>>],
+ catch function_clause_1(<<0,1,2,3>>)),
+ ?line fc(function_clause_1, [<<0,1,2,3>>],
+ catch function_clause_1(<<0,7,0,1,2,3>>)),
ok.
function_clause_1(<<0:8,7:8,T/binary>>) ->
@@ -349,22 +347,17 @@ unit(Config) when is_list(Config) ->
?line 99 = peek8(<<99>>),
?line 100 = peek8(<<100,101>>),
- ?line {'EXIT',{function_clause,[{?MODULE,peek8,[<<100,101,0:1>>]}|_]}} =
- (catch peek8(<<100,101,0:1>>)),
+ ?line fc(peek8, [<<100,101,0:1>>], catch peek8(<<100,101,0:1>>)),
?line 37484 = peek16(<<37484:16>>),
?line 37489 = peek16(<<37489:16,5566:16>>),
- ?line {'EXIT',{function_clause,[{?MODULE,peek16,[<<8>>]}|_]}} =
- (catch peek16(<<8>>)),
- ?line {'EXIT',{function_clause,[{?MODULE,peek16,[<<42:15>>]}|_]}} =
- (catch peek16(<<42:15>>)),
- ?line {'EXIT',{function_clause,[{?MODULE,peek16,[<<1,2,3,4,5>>]}|_]}} =
- (catch peek16(<<1,2,3,4,5>>)),
+ ?line fc(peek16, [<<8>>], catch peek16(<<8>>)),
+ ?line fc(peek16, [<<42:15>>], catch peek16(<<42:15>>)),
+ ?line fc(peek16, [<<1,2,3,4,5>>], catch peek16(<<1,2,3,4,5>>)),
?line 127 = peek7(<<127:7>>),
?line 100 = peek7(<<100:7,19:7>>),
- ?line {'EXIT',{function_clause,[{?MODULE,peek7,[<<1,2>>]}|_]}} =
- (catch peek7(<<1,2>>)),
+ ?line fc(peek7, [<<1,2>>], catch peek7(<<1,2>>)),
ok.
peek1(<<B:8,_/bitstring>>) -> B.
@@ -533,15 +526,13 @@ bs_sum(Config) when is_list(Config) ->
?line 6 = bs_sum_1([1,2,3|0]),
?line 7 = bs_sum_1([1,2,3|one]),
- ?line {'EXIT',{function_clause,_}} = (catch bs_sum_1({too,big,tuple})),
- ?line {'EXIT',{function_clause,_}} = (catch bs_sum_1([1,2,3|{too,big,tuple}])),
+ ?line fc(catch bs_sum_1({too,big,tuple})),
+ ?line fc(catch bs_sum_1([1,2,3|{too,big,tuple}])),
?line [] = sneaky_alias(<<>>),
?line [559,387655] = sneaky_alias(id(<<559:32,387655:32>>)),
- ?line {'EXIT',{function_clause,[{?MODULE,sneaky_alias,[<<1>>]}|_]}} =
- (catch sneaky_alias(id(<<1>>))),
- ?line {'EXIT',{function_clause,[{?MODULE,sneaky_alias,[[1,2,3,4]]}|_]}} =
- (catch sneaky_alias(lists:seq(1, 4))),
+ ?line fc(sneaky_alias, [<<1>>], catch sneaky_alias(id(<<1>>))),
+ ?line fc(sneaky_alias, [[1,2,3,4]], catch sneaky_alias(lists:seq(1, 4))),
ok.
bs_sum_1(<<H,T/binary>>) -> H+bs_sum_1(T);
@@ -559,9 +550,9 @@ sneaky_alias(<<From:32,L/binary>>) -> [From|sneaky_alias(L)].
coverage(Config) when is_list(Config) ->
?line 0 = coverage_fold(fun(B, A) -> A+B end, 0, <<>>),
?line 6 = coverage_fold(fun(B, A) -> A+B end, 0, <<1,2,3>>),
- ?line {'EXIT',{function_clause,_}} = (catch coverage_fold(fun(B, A) ->
- A+B
- end, 0, [a,b,c])),
+ ?line fc(catch coverage_fold(fun(B, A) ->
+ A+B
+ end, 0, [a,b,c])),
?line {<<>>,not_a_tuple} = coverage_build(<<>>, <<>>, not_a_tuple),
?line {<<16#76,"abc",16#A9,"abc">>,{x,42,43}} =
@@ -573,9 +564,8 @@ coverage(Config) when is_list(Config) ->
?line do_coverage_bin_to_term_list([]),
?line do_coverage_bin_to_term_list([lists:seq(0, 10),{a,b,c},<<23:42>>]),
- ?line {'EXIT',{function_clause,
- [{?MODULE,coverage_bin_to_term_list,[<<0,0,0,7>>]}|_]}} =
- (catch do_coverage_bin_to_term_list_1(<<7:32>>)),
+ ?line fc(coverage_bin_to_term_list, [<<0,0,0,7>>],
+ catch do_coverage_bin_to_term_list_1(<<7:32>>)),
?line <<>> = coverage_per_key(<<4:32>>),
?line <<$a,$b,$c>> = coverage_per_key(<<7:32,"abc">>),
@@ -731,13 +721,12 @@ encode_octet_string(<<OctetString/binary>>, Len) ->
simon(Config) when is_list(Config) ->
?line one = simon(blurf, <<>>),
?line two = simon(0, <<42>>),
- ?line {'EXIT',{function_clause,[{?MODULE,simon,[17,<<1>>]}|_]}} = (catch simon(17, <<1>>)),
- ?line {'EXIT',{function_clause,[{?MODULE,simon,[0,<<1,2,3>>]}|_]}} = (catch simon(0, <<1,2,3>>)),
+ ?line fc(simon, [17,<<1>>], catch simon(17, <<1>>)),
+ ?line fc(simon, [0,<<1,2,3>>], catch simon(0, <<1,2,3>>)),
?line one = simon2(blurf, <<9>>),
?line two = simon2(0, <<9,1>>),
- ?line {'EXIT',{function_clause,[{?MODULE,simon2,[0,<<9,10,11>>]}|_]}} =
- (catch simon2(0, <<9,10,11>>)),
+ ?line fc(simon2, [0,<<9,10,11>>], catch simon2(0, <<9,10,11>>)),
ok.
simon(_, <<>>) -> one;
@@ -985,6 +974,17 @@ haystack_2(Haystack) ->
B
end || {X,Y} <- Subs ].
+fc({'EXIT',{function_clause,_}}) -> ok;
+fc({'EXIT',{{case_clause,_},_}}) when ?MODULE =:= bs_match_inline_SUITE -> ok.
+
+fc(Name, Args, {'EXIT',{function_clause,[{?MODULE,Name,Args}|_]}}) -> ok;
+fc(Name, Args, {'EXIT',{function_clause,[{?MODULE,Name,Arity}|_]}})
+ when length(Args) =:= Arity ->
+ true = test_server:is_native(?MODULE);
+fc(_, Args, {'EXIT',{{case_clause,ActualArgs},_}})
+ when ?MODULE =:= bs_match_inline_SUITE ->
+ Args = tuple_to_list(ActualArgs).
+
check(F, R) ->
R = F().
diff --git a/lib/compiler/test/bs_utf_SUITE.erl b/lib/compiler/test/bs_utf_SUITE.erl
index d93bdef73d..4281874a24 100644
--- a/lib/compiler/test/bs_utf_SUITE.erl
+++ b/lib/compiler/test/bs_utf_SUITE.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2008-2010. 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%
%%
@@ -314,7 +314,7 @@ coverage(Config) when is_list(Config) ->
?line 0 = coverage_2(<<4096/utf8,65536/utf8,0>>),
?line 1 = coverage_2(<<1024/utf8,1025/utf8,1>>),
- ?line {'EXIT',{function_clause,_}} = (catch coverage_3(1)),
+ ?line fc(catch coverage_3(1)),
%% Cover beam_flatten (combining the heap allocation in
%% a subsequent test_heap instruction into the bs_init2
@@ -394,3 +394,5 @@ utf32_data() ->
<<16#41:32/little,NotIdentical:32/little,
16#0391:32/little,16#2E:32/little>>}.
+fc({'EXIT',{function_clause,_}}) -> ok;
+fc({'EXIT',{{case_clause,_},_}}) when ?MODULE =:= bs_utf_inline_SUITE -> ok.
diff --git a/lib/compiler/test/error_SUITE.erl b/lib/compiler/test/error_SUITE.erl
index cdd2434b25..4530313bb0 100644
--- a/lib/compiler/test/error_SUITE.erl
+++ b/lib/compiler/test/error_SUITE.erl
@@ -21,11 +21,11 @@
-include("test_server.hrl").
-export([all/1,
- head_mismatch_line/1,r11b_binaries/1,warnings_as_errors/1]).
+ head_mismatch_line/1,warnings_as_errors/1]).
all(suite) ->
test_lib:recompile(?MODULE),
- [head_mismatch_line,r11b_binaries,warnings_as_errors].
+ [head_mismatch_line,warnings_as_errors].
%% Tests that a head mismatch is reported on the correct line (OTP-2125).
head_mismatch_line(Config) when is_list(Config) ->
@@ -42,37 +42,6 @@ get_compilation_errors(Config, Filename) ->
?line {error, [{_Name, E}|_], []} = compile:file(File, [return_errors]),
E.
-r11b_binaries(Config) when is_list(Config) ->
- Ts = [{r11b_binaries,
- <<"
- t1(Bin) ->
- case Bin of
- _ when size(Bin) > 20 -> erlang:error(too_long);
- <<_,T/binary>> -> t1(T);
- <<>> -> ok
- end.
-
- t2(<<_,T/bytes>>) ->
- split_binary(T, 4).
-
- t3(X) ->
- <<42,X/binary>>.
-
- t4(X) ->
- <<N:32>> = X,
- N.
- ">>,
- [r11],
- {error,
- [{5,v3_core,no_binaries},
- {6,v3_core,no_binaries},
- {9,v3_core,no_binaries},
- {13,v3_core,no_binaries},
- {16,v3_core,no_binaries}],
- []} }],
- ?line [] = run(Config, Ts),
- ok.
-
warnings_as_errors(Config) when is_list(Config) ->
Ts = [{warnings_as_errors,
<<"
diff --git a/lib/compiler/test/float_SUITE.erl b/lib/compiler/test/float_SUITE.erl
index 3d2dbf47e9..07779ddd5a 100644
--- a/lib/compiler/test/float_SUITE.erl
+++ b/lib/compiler/test/float_SUITE.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2002-2010. 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(float_SUITE).
@@ -41,7 +41,7 @@ float_sub(A)->
float_mul(0, _, _)->
ok;
float_mul(Iter, A, B) when is_float(A), is_float(B) ->
- A*B,
+ _ = A*B,
float_mul(Iter-1, A, B).
%% Thanks to Mikael Pettersson and Tobias Lindahl (HiPE).
diff --git a/lib/compiler/test/guard_SUITE.erl b/lib/compiler/test/guard_SUITE.erl
index 5ae41f13e7..f3960b28c3 100644
--- a/lib/compiler/test/guard_SUITE.erl
+++ b/lib/compiler/test/guard_SUITE.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2001-2010. 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(guard_SUITE).
@@ -1316,11 +1316,11 @@ cqlc(M, F, As, St) ->
andalso_semi(Config) when is_list(Config) ->
?line ok = andalso_semi_foo(0),
?line ok = andalso_semi_foo(1),
- ?line {'EXIT',{function_clause,_}} = (catch andalso_semi_foo(2)),
+ ?line fc(catch andalso_semi_foo(2)),
?line ok = andalso_semi_bar([a,b,c]),
?line ok = andalso_semi_bar(1),
- ?line {'EXIT',{function_clause,_}} = (catch andalso_semi_bar([a,b])),
+ ?line fc(catch andalso_semi_bar([a,b])),
ok.
andalso_semi_foo(Bar) when is_integer(Bar) andalso Bar =:= 0; Bar =:= 1 ->
@@ -1332,8 +1332,8 @@ andalso_semi_bar(Bar) when is_list(Bar) andalso length(Bar) =:= 3; Bar =:= 1 ->
tuple_size(Config) when is_list(Config) ->
?line 10 = do_tuple_size({1,2,3,4}),
- ?line {'EXIT',{function_clause,_}} = (catch do_tuple_size({1,2,3})),
- ?line {'EXIT',{function_clause,_}} = (catch do_tuple_size(42)),
+ ?line fc(catch do_tuple_size({1,2,3})),
+ ?line fc(catch do_tuple_size(42)),
?line error = ludicrous_tuple_size({a,b,c}),
?line error = ludicrous_tuple_size([a,b,c]),
@@ -1374,3 +1374,6 @@ check(F, Result) ->
io:format(" Got: ~p\n", [Other]),
test_server:fail()
end.
+
+fc({'EXIT',{function_clause,_}}) -> ok;
+fc({'EXIT',{{case_clause,_},_}}) when ?MODULE =:= guard_inline_SUITE -> ok.
diff --git a/lib/compiler/test/inline_SUITE_data/decode1.erl b/lib/compiler/test/inline_SUITE_data/decode1.erl
index d51bedcb2e..9b4fc071a3 100644
--- a/lib/compiler/test/inline_SUITE_data/decode1.erl
+++ b/lib/compiler/test/inline_SUITE_data/decode1.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2006-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2006-2010. 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%
%%
%----------------------------------------------------------------------
@@ -37,25 +37,25 @@
FrameList = [89,128,0,8,132,0,26,133,133,0,38,148,94,
128,0,2,129,128,92,128,0,2,0,0,112,128,0,
10,194,69,0,0,0,0,0,18,52,95],
- Frame = concat_binary([list_to_binary([89]),list_to_binary([128]),
- list_to_binary([0]),list_to_binary([8]),
- list_to_binary([132]),list_to_binary([0]),
- list_to_binary([26]),list_to_binary([133]),
- list_to_binary([133]),list_to_binary([0]),
- list_to_binary([38]),list_to_binary([148]),
- list_to_binary([94]),list_to_binary([128]),
- list_to_binary([0]),list_to_binary([2]),
- list_to_binary([129]),list_to_binary([128]),
- list_to_binary([92]),list_to_binary([128]),
- list_to_binary([0]),list_to_binary([2]),
- list_to_binary([0]),list_to_binary([0]),
- list_to_binary([112]),list_to_binary([128]),
- list_to_binary([0]),list_to_binary([10]),
- list_to_binary([194]),list_to_binary([69]),
- list_to_binary([0]),list_to_binary([0]),
- list_to_binary([0]),list_to_binary([0]),
- list_to_binary([0]),list_to_binary([18]),
- list_to_binary([52]),list_to_binary([95])]),
+ Frame = list_to_binary([list_to_binary([89]),list_to_binary([128]),
+ list_to_binary([0]),list_to_binary([8]),
+ list_to_binary([132]),list_to_binary([0]),
+ list_to_binary([26]),list_to_binary([133]),
+ list_to_binary([133]),list_to_binary([0]),
+ list_to_binary([38]),list_to_binary([148]),
+ list_to_binary([94]),list_to_binary([128]),
+ list_to_binary([0]),list_to_binary([2]),
+ list_to_binary([129]),list_to_binary([128]),
+ list_to_binary([92]),list_to_binary([128]),
+ list_to_binary([0]),list_to_binary([2]),
+ list_to_binary([0]),list_to_binary([0]),
+ list_to_binary([112]),list_to_binary([128]),
+ list_to_binary([0]),list_to_binary([10]),
+ list_to_binary([194]),list_to_binary([69]),
+ list_to_binary([0]),list_to_binary([0]),
+ list_to_binary([0]),list_to_binary([0]),
+ list_to_binary([0]),list_to_binary([18]),
+ list_to_binary([52]),list_to_binary([95])]),
R = loop(2,0,Frame),
{R,R =:= {0,[{ie,112,itu_t_standard,ignore,10,<<194,69,0,0,0,0,0,18,52,95>>},
diff --git a/lib/compiler/test/lc_SUITE.erl b/lib/compiler/test/lc_SUITE.erl
index e62b2cd77e..40bf67e1fa 100644
--- a/lib/compiler/test/lc_SUITE.erl
+++ b/lib/compiler/test/lc_SUITE.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2001-2010. 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(lc_SUITE).
@@ -66,8 +66,7 @@ basic(Config) when is_list(Config) ->
?line {'EXIT',_} = (catch [X || X <- L1, list_to_atom(X) == dum]),
?line [] = [X || X <- L1, X+1 < 2],
?line {'EXIT',_} = (catch [X || X <- L1, odd(X)]),
- ?line {'EXIT',{function_clause,[{?MODULE,_,[x]}|_]}} =
- (catch [E || E <- id(x)]),
+ ?line fc([x], catch [E || E <- id(x)]),
ok.
tuple_list() ->
@@ -160,3 +159,10 @@ empty_generator(Config) when is_list(Config) ->
id(I) -> I.
+fc(Args, {'EXIT',{function_clause,[{?MODULE,_,Args}|_]}}) -> ok;
+fc(Args, {'EXIT',{function_clause,[{?MODULE,Name,Arity}|_]}})
+ when length(Args) =:= Arity ->
+ true = test_server:is_native(?MODULE);
+fc(Args, {'EXIT',{{case_clause,ActualArgs},_}})
+ when ?MODULE =:= lc_inline_SUITE ->
+ Args = tuple_to_list(ActualArgs).
diff --git a/lib/compiler/test/match_SUITE.erl b/lib/compiler/test/match_SUITE.erl
index 20969c0b26..9c4687efa1 100644
--- a/lib/compiler/test/match_SUITE.erl
+++ b/lib/compiler/test/match_SUITE.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2004-2010. 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(match_SUITE).
@@ -21,14 +21,14 @@
-export([all/1,
pmatch/1,mixed/1,aliases/1,match_in_call/1,
untuplify/1,shortcut_boolean/1,letify_guard/1,
- selectify/1]).
+ selectify/1,underscore/1]).
-include("test_server.hrl").
all(suite) ->
test_lib:recompile(?MODULE),
[pmatch,mixed,aliases,match_in_call,untuplify,shortcut_boolean,
- letify_guard,selectify].
+ letify_guard,selectify,underscore].
pmatch(Config) when is_list(Config) ->
?line ok = doit(1),
@@ -352,4 +352,16 @@ sel_same_value2(V) when V =:= 42; V =:= 43 ->
sel_same_value2(_) ->
error.
+underscore(Config) when is_list(Config) ->
+ case Config of
+ [] ->
+ %% Assignment to _ at the end of a construct.
+ _ = length(Config);
+ [_|_] ->
+ %% Assignment to _ at the end of a construct.
+ _ = list_to_tuple(Config)
+ end,
+ _ = is_list(Config),
+ ok.
+
id(I) -> I.
diff --git a/lib/compiler/test/num_bif_SUITE.erl b/lib/compiler/test/num_bif_SUITE.erl
index c246f56611..912f7366dd 100644
--- a/lib/compiler/test/num_bif_SUITE.erl
+++ b/lib/compiler/test/num_bif_SUITE.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2004-2010. 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(num_bif_SUITE).
@@ -166,7 +166,7 @@ t_list_to_float_safe(Config) when is_list(Config) ->
t_list_to_float_risky(Config) when is_list(Config) ->
?line Many_Ones = lists:duplicate(25000, $1),
- ?line list_to_float("2."++Many_Ones),
+ ?line _ = list_to_float("2."++Many_Ones),
?line {'EXIT', {badarg, _}} = (catch list_to_float("2"++Many_Ones)),
ok.
@@ -186,7 +186,7 @@ t_list_to_integer(Config) when is_list(Config) ->
%% Bignums.
?line 123456932798748738738 = list_to_integer("123456932798748738738"),
- ?line list_to_integer(lists:duplicate(2000, $1)),
+ ?line _ = list_to_integer(lists:duplicate(2000, $1)),
ok.
%% Tests round/1.
diff --git a/lib/compiler/test/pmod_SUITE.erl b/lib/compiler/test/pmod_SUITE.erl
index 293e110c45..13503ce905 100644
--- a/lib/compiler/test/pmod_SUITE.erl
+++ b/lib/compiler/test/pmod_SUITE.erl
@@ -38,8 +38,8 @@ fin_per_testcase(Case, Config) when is_atom(Case), is_list(Config) ->
basic(Config) when is_list(Config) ->
?line basic_1(Config, []),
-% ?line basic_1(Config, [inline]),
-% ?line basic_1(Config, [{inline,500},inline]),
+ ?line basic_1(Config, [inline]),
+ ?line basic_1(Config, [{inline,500},inline]),
ok.
basic_1(Config, Opts) ->
diff --git a/lib/compiler/test/record_SUITE.erl b/lib/compiler/test/record_SUITE.erl
index bd2ffd7f65..f26ff769c7 100644
--- a/lib/compiler/test/record_SUITE.erl
+++ b/lib/compiler/test/record_SUITE.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2003-2010. 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%
%%
%%% Purpose : Test records.
@@ -24,7 +24,7 @@
-export([all/1,init_per_testcase/2,fin_per_testcase/2,
errors/1,record_test_2/1,record_test_3/1,record_access_in_guards/1,
- guard_opt/1,eval_once/1,foobar/1,missing_test_heap/1]).
+ guard_opt/1,eval_once/1,foobar/1,missing_test_heap/1, nested_access/1]).
init_per_testcase(_Case, Config) ->
?line Dog = test_server:timetrap(test_server:minutes(2)),
@@ -38,7 +38,7 @@ fin_per_testcase(_Case, Config) ->
all(suite) ->
test_lib:recompile(?MODULE),
[errors,record_test_2,record_test_3,record_access_in_guards,
- guard_opt,eval_once,foobar,missing_test_heap].
+ guard_opt,eval_once,foobar,missing_test_heap,nested_access].
-record(foo, {a,b,c,d}).
-record(bar, {a,b,c,d}).
@@ -522,4 +522,29 @@ missing_test_heap_1(A = #foo_rec {foo_1 = _B,
foo_3 = C + 1,
foo_2 = D + 1}.
+-record(nrec0, {name = <<"nested0">>}).
+-record(nrec1, {name = <<"nested1">>, nrec0=#nrec0{}}).
+-record(nrec2, {name = <<"nested2">>, nrec1=#nrec1{}}).
+
+nested_access(Config) when is_list(Config) ->
+ N0 = #nrec0{},
+ N1 = #nrec1{},
+ N2 = #nrec2{},
+ ?line <<"nested0">> = N0#nrec0.name,
+ ?line <<"nested1">> = N1#nrec1.name,
+ ?line <<"nested2">> = N2#nrec2.name,
+ ?line <<"nested0">> = N1#nrec1.nrec0#nrec0.name,
+ ?line <<"nested0">> = N2#nrec2.nrec1#nrec1.nrec0#nrec0.name,
+ ?line <<"nested1">> = N2#nrec2.nrec1#nrec1.name,
+ ?line <<"nested0">> = ((N2#nrec2.nrec1)#nrec1.nrec0)#nrec0.name,
+
+ N1a = N2#nrec2.nrec1#nrec1{name = <<"nested1a">>},
+ ?line <<"nested1a">> = N1a#nrec1.name,
+
+ N2a = N2#nrec2.nrec1#nrec1.nrec0#nrec0{name = <<"nested0a">>},
+ N2b = ((N2#nrec2.nrec1)#nrec1.nrec0)#nrec0{name = <<"nested0a">>},
+ ?line <<"nested0a">> = N2a#nrec0.name,
+ ?line N2a = N2b,
+ ok.
+
id(I) -> I.
diff --git a/lib/compiler/test/test_lib.erl b/lib/compiler/test/test_lib.erl
index 3099538071..844bbfc4b9 100644
--- a/lib/compiler/test/test_lib.erl
+++ b/lib/compiler/test/test_lib.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2003-2010. 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(test_lib).
@@ -56,10 +56,9 @@ opt_opts(Mod) ->
(no_new_binaries) -> true;
(no_new_apply) -> true;
(no_gc_bifs) -> true;
- (no_constant_pool) -> true;
(no_stack_trimming) -> true;
- (no_binaries) -> true;
(debug_info) -> true;
+ (inline) -> true;
(_) -> false
end, Opts).
@@ -71,5 +70,5 @@ get_data_dir(Config) ->
Data0 = ?config(data_dir, Config),
{ok,Data1,_} = regexp:sub(Data0, "_no_opt_SUITE", "_SUITE"),
{ok,Data2,_} = regexp:sub(Data1, "_post_opt_SUITE", "_SUITE"),
- {ok,Data,_} = regexp:sub(Data2, "_r11_SUITE", "_SUITE"),
+ {ok,Data,_} = regexp:sub(Data2, "_inline_SUITE", "_SUITE"),
Data.
diff --git a/lib/compiler/test/warnings_SUITE.erl b/lib/compiler/test/warnings_SUITE.erl
index 6e60ab88cb..5ed8836c70 100644
--- a/lib/compiler/test/warnings_SUITE.erl
+++ b/lib/compiler/test/warnings_SUITE.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2003-2010. 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(warnings_SUITE).
@@ -375,7 +375,12 @@ effect(Config) when is_list(Config) ->
comp_op ->
X =:= 2;
cookie ->
- erlang:get_cookie()
+ erlang:get_cookie();
+ result_ignore ->
+ _ = list_to_integer(X);
+ warn_lc_4 ->
+ %% No warning because of assignment to _.
+ [_ = abs(Z) || Z <- [1,2,3]]
end,
ok.
diff --git a/lib/cosEvent/doc/src/notes.xml b/lib/cosEvent/doc/src/notes.xml
index 78299a38dc..b6c4531901 100644
--- a/lib/cosEvent/doc/src/notes.xml
+++ b/lib/cosEvent/doc/src/notes.xml
@@ -33,6 +33,22 @@
</header>
<section>
+ <title>cosEvent 2.1.9</title>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>
+ Test suites published.</p>
+ <p>
+ Own Id: OTP-8543 Aux Id:</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
<title>cosEvent 2.1.8</title>
<section>
diff --git a/lib/cosEvent/test/Makefile b/lib/cosEvent/test/Makefile
new file mode 100644
index 0000000000..3d95075ee1
--- /dev/null
+++ b/lib/cosEvent/test/Makefile
@@ -0,0 +1,154 @@
+#
+# %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%
+#
+#
+include $(ERL_TOP)/make/target.mk
+include $(ERL_TOP)/make/$(TARGET)/otp.mk
+
+# ----------------------------------------------------
+# Application version
+# ----------------------------------------------------
+include ../vsn.mk
+VSN=$(COSEVENT_VSN)
+# ----------------------------------------------------
+# Release directory specification
+# ----------------------------------------------------
+RELSYSDIR = $(RELEASE_PATH)/cosEvent_test
+
+# ----------------------------------------------------
+# Target Specs
+# ----------------------------------------------------
+TEST_SPEC_FILE = cosEvent.spec
+
+
+IDL_FILES = \
+ event_test_server.idl \
+
+IDLOUTDIR = idl_output
+
+MODULES = \
+ event_test_PushC_impl \
+ event_test_PullC_impl \
+ event_test_PushS_impl \
+ event_test_PullS_impl \
+ event_channel_SUITE \
+ generated_SUITE
+
+GEN_MOD_COS = \
+ event_test_PullC \
+ event_test_PushS \
+ event_test_PullS \
+ oe_event_test_server \
+ event_test_PushC
+
+GEN_HRL_COS = \
+ event_test.hrl \
+ event_test_PushC.hrl \
+ event_test_PullC.hrl \
+ event_test_PushS.hrl \
+ event_test_PullS.hrl \
+ oe_event_test_server.hrl
+
+
+GEN_MODULES = $(GEN_MOD_COS)
+
+ERL_FILES = $(MODULES:%=%.erl)
+
+HRL_FILES =
+
+GEN_HRL_FILES = $(GEN_HRL_COS)
+
+GEN_FILES = \
+ $(GEN_HRL_FILES:%=$(IDLOUTDIR)/%) \
+ $(GEN_MODULES:%=$(IDLOUTDIR)/%.erl)
+
+GEN_TARGET_FILES = $(GEN_MODULES:%=$(IDLOUTDIR)/%.$(EMULATOR))
+
+SUITE_TARGET_FILES = $(MODULES:%=%.$(EMULATOR))
+
+TARGET_FILES = \
+ $(GEN_TARGET_FILES) \
+ $(SUITE_TARGET_FILES)
+
+# ----------------------------------------------------
+# PROGRAMS
+# ----------------------------------------------------
+# ----------------------------------------------------
+# FLAGS
+# ----------------------------------------------------
+ERL_IDL_FLAGS += -pa $(ERL_TOP)/lib/orber/ebin -pa $(ERL_TOP)/lib/ic/ebin
+
+ERL_COMPILE_FLAGS += $(ERL_IDL_FLAGS) \
+ -pa $(ERL_TOP)/lib/test_server/ebin \
+ -pa $(ERL_TOP)/lib/cosEvent/ebin \
+ -pa $(ERL_TOP)/lib/cosEvent/test/idl_output \
+ -I$(ERL_TOP)/lib/cosEvent \
+ -I$(ERL_TOP)/lib/cosEvent/test/$(IDLOUTDIR) \
+ -I$(ERL_TOP)/lib/test_server/include
+
+# ----------------------------------------------------
+# Targets
+# ----------------------------------------------------
+tests debug opt: $(TARGET_FILES)
+
+clean:
+ rm -f idl_output/*
+ rm -rf java_initial_reference_idl java_cos_naming_idl
+ rm -rf java_iiop_module_idl java_output/*
+ rm -f $(TARGET_FILES)
+ rm -f errs core *~
+
+
+docs:
+
+# ----------------------------------------------------
+# Special Targets
+# ----------------------------------------------------
+
+#
+# Each IDL file produces many target files so no pattern
+# rule can be used.
+#
+TGT_COS = \
+ $(GEN_HRL_COS:%=$(IDLOUTDIR)/%) \
+ $(GEN_MOD_COS:%=$(IDLOUTDIR)/%.erl)
+
+
+$(TGT_COS): event_test_server.idl
+ erlc $(ERL_IDL_FLAGS) -o$(IDLOUTDIR) event_test_server.idl
+
+# ----------------------------------------------------
+# Release Targets
+# ----------------------------------------------------
+# We don't copy generated intermediate erlang and hrl files
+
+include $(ERL_TOP)/make/otp_release_targets.mk
+
+release_spec:
+
+release_docs_spec:
+
+release_tests_spec: tests
+ $(INSTALL_DIR) $(RELSYSDIR)
+ $(INSTALL_DATA) $(IDL_FILES) $(TEST_SPEC_FILE) \
+ $(ERL_FILES) $(RELSYSDIR)
+ $(INSTALL_DATA) $(SUITE_TARGET_FILES) $(RELSYSDIR)
+ $(INSTALL_DIR) $(RELSYSDIR)/$(IDLOUTDIR)
+ $(INSTALL_DATA) $(GEN_TARGET_FILES) $(GEN_FILES) \
+ $(RELSYSDIR)/$(IDLOUTDIR)
+
diff --git a/lib/cosEvent/test/cosEvent.spec b/lib/cosEvent/test/cosEvent.spec
new file mode 100644
index 0000000000..910f7a7c28
--- /dev/null
+++ b/lib/cosEvent/test/cosEvent.spec
@@ -0,0 +1,19 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1999-2010. 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%
+%%
+{topcase, {dir, "../cosEvent_test"}}.
diff --git a/lib/cosEvent/test/event_channel_SUITE.erl b/lib/cosEvent/test/event_channel_SUITE.erl
new file mode 100644
index 0000000000..2b0cf1fe30
--- /dev/null
+++ b/lib/cosEvent/test/event_channel_SUITE.erl
@@ -0,0 +1,316 @@
+%%-----------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-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%
+%%
+%%
+%%-----------------------------------------------------------------
+
+-module(event_channel_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
+-include_lib("orber/src/orber_iiop.hrl").
+
+%%-----------------------------------------------------------------
+%% Macros
+%%-----------------------------------------------------------------
+
+-define(default_timeout, ?t:minutes(5)).
+
+
+-define(match(ExpectedRes, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1, event_objects_api/1, events_api/1, events_sync_api/1,
+ cases/0, init_all/1, finish_all/1,
+ init_per_testcase/2, fin_per_testcase/2, app_test/1]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+
+all(doc) -> ["API tests for the cosEvent interfaces", ""];
+all(suite) -> {req,
+ [mnesia, orber],
+ {conf, init_all, cases(), finish_all}}.
+
+cases() ->
+ [events_api, events_sync_api, event_objects_api, app_test].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+init_all(Config) when is_list(Config) ->
+ Path = code:which(?MODULE),
+ code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
+ mnesia:delete_schema([node()]),
+ mnesia:create_schema([node()]),
+ orber:install([node()]),
+ application:start(mnesia),
+ application:start(orber),
+ cosEventApp:install(),
+ cosEventApp:start(),
+ oe_event_test_server:oe_register(),
+ Config.
+
+finish_all(Config) when is_list(Config) ->
+ oe_event_test_server:oe_unregister(),
+ cosEventApp:stop(),
+ cosEventApp:uninstall(),
+ application:stop(orber),
+ application:stop(mnesia),
+ mnesia:delete_schema([node()]),
+ Path = code:which(?MODULE),
+ code:del_path(filename:join(filename:dirname(Path), "idl_output")),
+ Config.
+
+%%-----------------------------------------------------------------
+%% Tests app file
+%%-----------------------------------------------------------------
+app_test(doc) -> [];
+app_test(suite) -> [];
+app_test(_Config) ->
+ ok=test_server:app_test(cosEvent),
+ ok.
+
+
+
+event_objects_api(doc) -> ["Testing the CosEvent API to setup a complete service", ""];
+event_objects_api(suite) -> [];
+event_objects_api(_Config) ->
+
+ Ch = ?match({_,key,_,_,_,_}, cosEventApp:start_channel([{typecheck, true},
+ {pull_interval, 300}])),
+
+ AC=?match({_,key,_,_,_,_},
+ 'CosEventChannelAdmin_EventChannel':for_consumers(Ch)),
+ AS=?match({_,key,_,_,_,_},
+ 'CosEventChannelAdmin_EventChannel':for_suppliers(Ch)),
+
+ PPushS=?match({_,key,_,_,_,_},
+ 'CosEventChannelAdmin_ConsumerAdmin':obtain_push_supplier(AC)),
+ PPullS=?match({_,key,_,_,_,_},
+ 'CosEventChannelAdmin_ConsumerAdmin':obtain_pull_supplier(AC)),
+
+ PPushC=?match({_,key,_,_,_,_},
+ 'CosEventChannelAdmin_SupplierAdmin':obtain_push_consumer(AS)),
+ PPullC=?match({_,key,_,_,_,_},
+ 'CosEventChannelAdmin_SupplierAdmin':obtain_pull_consumer(AS)),
+
+ PushC=?match({_,key,_,_,_,_},
+ 'event_test_PushC':oe_create([])),
+ PullC=?match({_,key,_,_,_,_},
+ 'event_test_PullC':oe_create(PPullC)),
+
+ PushS=?match({_,key,_,_,_,_},
+ 'event_test_PushS':oe_create(PPushC)),
+
+ PullS=?match({_,key,_,_,_,_},
+ 'event_test_PullS':oe_create([])),
+
+ NIL = corba:create_nil_objref(),
+
+ ?match({'EXCEPTION',{'BAD_PARAM',_,_,_}},
+ 'CosEventChannelAdmin_ProxyPushSupplier':connect_push_consumer(PPushS, NIL)),
+ ?match({'EXCEPTION',{'BAD_PARAM',_,_,_}},
+ 'CosEventChannelAdmin_ProxyPushSupplier':connect_push_consumer(PPushS, PullS)),
+ ?match(ok, 'CosEventChannelAdmin_ProxyPushSupplier':connect_push_consumer(PPushS, PushC)),
+ ?match({'EXCEPTION',{'CosEventChannelAdmin_AlreadyConnected',_}},
+ 'CosEventChannelAdmin_ProxyPushSupplier':connect_push_consumer(PPushS, PushC)),
+
+ ?match(ok, 'CosEventChannelAdmin_ProxyPullSupplier':connect_pull_consumer(PPullS, NIL)),
+ ?match({'EXCEPTION',{'BAD_PARAM',_,_,_}},
+ 'CosEventChannelAdmin_ProxyPullSupplier':connect_pull_consumer(PPullS, PullS)),
+ ?match(ok, 'CosEventChannelAdmin_ProxyPullSupplier':connect_pull_consumer(PPullS, PullC)),
+ ?match({'EXCEPTION',{'CosEventChannelAdmin_AlreadyConnected',_}},
+ 'CosEventChannelAdmin_ProxyPullSupplier':connect_pull_consumer(PPullS, PullC)),
+
+ ?match(ok, 'CosEventChannelAdmin_ProxyPushConsumer':connect_push_supplier(PPushC, NIL)),
+ ?match({'EXCEPTION',{'BAD_PARAM',_,_,_}},
+ 'CosEventChannelAdmin_ProxyPushConsumer':connect_push_supplier(PPushC, PullS)),
+ ?match(ok, 'CosEventChannelAdmin_ProxyPushConsumer':connect_push_supplier(PPushC, PushS)),
+ ?match({'EXCEPTION',{'CosEventChannelAdmin_AlreadyConnected',_}},
+ 'CosEventChannelAdmin_ProxyPushConsumer':connect_push_supplier(PPushC, PushS)),
+
+ ?match({'EXCEPTION',{'BAD_PARAM',_,_,_}},
+ 'CosEventChannelAdmin_ProxyPullConsumer':connect_pull_supplier(PPullC, NIL)),
+ ?match({'EXCEPTION',{'BAD_PARAM',_,_,_}},
+ 'CosEventChannelAdmin_ProxyPullConsumer':connect_pull_supplier(PPullC, PushS)),
+ ?match(ok, 'CosEventChannelAdmin_ProxyPullConsumer':connect_pull_supplier(PPullC, PullS)),
+ ?match({'EXCEPTION',{'CosEventChannelAdmin_AlreadyConnected',_}},
+ 'CosEventChannelAdmin_ProxyPullConsumer':connect_pull_supplier(PPullC, PullS)),
+
+
+ catch corba:dispose(AC),
+ %% Wait a couple of seconds to be sure all data removed from DB.
+ timer:sleep(2000),
+
+ %% Since we terminated ConsumerAdmin only the Supplier Proxies should be terminated.
+ ?match(true, corba_object:non_existent(AC)),
+ ?match(true, corba_object:non_existent(PPushS)),
+ ?match(true, corba_object:non_existent(PPullS)),
+
+ ?match(false, corba_object:non_existent(Ch)),
+ ?match(false, corba_object:non_existent(AS)),
+ ?match(false, corba_object:non_existent(PPullC)),
+ ?match(false, corba_object:non_existent(PPushC)),
+
+ %% Terminate a proxy and check that its admin is unaffected.
+ catch corba:dispose(PPullC),
+ timer:sleep(2000),
+ ?match(false, corba_object:non_existent(AS)),
+ ?match(true, corba_object:non_existent(PPullC)),
+
+ catch corba:dispose(Ch),
+ timer:sleep(2000),
+
+ ?match(true, corba_object:non_existent(Ch)),
+ ?match(true, corba_object:non_existent(AS)),
+ ?match(true, corba_object:non_existent(PPullC)),
+ ?match(true, corba_object:non_existent(PPushC)),
+
+ %% The client should be notified; wait for a couple of seconds and check it.
+ timer:sleep(2000),
+ ?match(true, corba_object:non_existent(PushC)),
+ ?match(true, corba_object:non_existent(PullC)),
+ ?match(true, corba_object:non_existent(PushS)),
+ ?match(true, corba_object:non_existent(PullS)),
+
+ ok.
+
+events_api(doc) -> ["Testing the CosEvent API for sending events asynchronous", ""];
+events_api(suite) -> [];
+events_api(_Config) ->
+
+ Ch = ?match({_,key,_,_,_,_}, cosEventApp:start_channel([{typecheck, true},
+ {pull_interval, 2},
+ {blocking, false}])),
+ event_sender(Ch).
+
+
+events_sync_api(doc) -> ["Testing the CosEvent API for sending events synchronous", ""];
+events_sync_api(suite) -> [];
+events_sync_api(_Config) ->
+
+ Ch = ?match({_,key,_,_,_,_}, cosEventApp:start_channel([{typecheck, true},
+ {pull_interval, 2},
+ {blocking, true}])),
+ event_sender(Ch).
+
+event_sender(Ch) ->
+ Event1 = #any{typecode=tk_long, value = 1},
+ Event2 = #any{typecode=tk_long, value = 2},
+ Event3 = #any{typecode=tk_long, value = 3},
+ Event4 = #any{typecode=tk_long, value = 4},
+ Event5 = #any{typecode=tk_long, value = 5},
+ Event6 = #any{typecode=tk_long, value = 6},
+
+ AC=?match({_,key,_,_,_,_},
+ 'CosEventChannelAdmin_EventChannel':for_consumers(Ch)),
+ AS=?match({_,key,_,_,_,_},
+ 'CosEventChannelAdmin_EventChannel':for_suppliers(Ch)),
+
+ PPushS=?match({_,key,_,_,_,_},
+ 'CosEventChannelAdmin_ConsumerAdmin':obtain_push_supplier(AC)),
+ PPullS=?match({_,key,_,_,_,_},
+ 'CosEventChannelAdmin_ConsumerAdmin':obtain_pull_supplier(AC)),
+
+ PPushC=?match({_,key,_,_,_,_},
+ 'CosEventChannelAdmin_SupplierAdmin':obtain_push_consumer(AS)),
+ PPullC=?match({_,key,_,_,_,_},
+ 'CosEventChannelAdmin_SupplierAdmin':obtain_pull_consumer(AS)),
+
+ PushC=?match({_,key,_,_,_,_}, 'event_test_PushC':oe_create([])),
+ PullC=?match({_,key,_,_,_,_}, 'event_test_PullC':oe_create(PPullS)),
+
+ PushS=?match({_,key,_,_,_,_}, 'event_test_PushS':oe_create(PPushC)),
+
+ PullS=?match({_,key,_,_,_,_}, 'event_test_PullS':oe_create([])),
+
+ ?match(ok, 'CosEventChannelAdmin_ProxyPushSupplier':connect_push_consumer(PPushS, PushC)),
+ ?match(ok, 'CosEventChannelAdmin_ProxyPullSupplier':connect_pull_consumer(PPullS, PullC)),
+ ?match(ok, 'CosEventChannelAdmin_ProxyPushConsumer':connect_push_supplier(PPushC, PushS)),
+ ?match(ok, 'CosEventChannelAdmin_ProxyPullConsumer':connect_pull_supplier(PPullC, PullS)),
+
+ %% No events should be available at the consumer side at this point.
+ ?match({_, false}, event_test_PullC:do_try_pull(PullC)),
+ ?match([], event_test_PushC:get_data(PushC)),
+
+ %% Push an event and wait to be sure it have reached the destination.
+ ?match(ok, event_test_PushS:do_push(PushS, Event1)),
+ ?match(ok, event_test_PushS:do_push(PushS, Event2)),
+ ?match(ok, event_test_PushS:do_push(PushS, Event3)),
+ timer:sleep(2000),
+ ?match({Event1, true}, event_test_PullC:do_try_pull(PullC)),
+ ?match({Event2, true}, event_test_PullC:do_try_pull(PullC)),
+ ?match({Event3, true}, event_test_PullC:do_try_pull(PullC)),
+ ?match({_, false}, event_test_PullC:do_try_pull(PullC)),
+ ?match([Event1, Event2, Event3], event_test_PushC:get_data(PushC)),
+
+ ?match(ok, event_test_PullS:add_event(PullS, Event4)),
+ ?match(ok, event_test_PullS:add_event(PullS, Event5)),
+ ?match(ok, event_test_PullS:add_event(PullS, Event6)),
+
+ %% Since the pull operation is blocking we do not need to "sleep".
+ %% The ProxyPullConsumer will pull for events according to the pull_interval
+ %% parameter given when started the channel.
+ ?match(Event4, event_test_PullC:do_pull(PullC)),
+ ?match(Event5, event_test_PullC:do_pull(PullC)),
+ ?match(Event6, event_test_PullC:do_pull(PullC)),
+
+ timer:sleep(2000),
+ ?match([Event4, Event5, Event6], event_test_PushC:get_data(PushC)),
+
+
+ catch corba:dispose(Ch),
+ %% The client should be notified; wait for a couple of seconds and check it.
+ timer:sleep(2000),
+ ?match(true, corba_object:non_existent(PushC)),
+ ?match(true, corba_object:non_existent(PullC)),
+ ?match(true, corba_object:non_existent(PushS)),
+ ?match(true, corba_object:non_existent(PullS)),
+
+ ok.
diff --git a/lib/cosEvent/test/event_test_PullC_impl.erl b/lib/cosEvent/test/event_test_PullC_impl.erl
new file mode 100644
index 0000000000..186d1cbd51
--- /dev/null
+++ b/lib/cosEvent/test/event_test_PullC_impl.erl
@@ -0,0 +1,43 @@
+%%------------------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2001-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%
+%%
+%%
+%%------------------------------------------------------------------------
+%% Description: a very simple implementation of PullConsumer interface
+%%------------------------------------------------------------------------
+-module(event_test_PullC_impl).
+
+-export([init/1, terminate/2, disconnect_pull_consumer/1, do_pull/1, do_try_pull/1]).
+
+init(Proxy) ->
+ {ok, Proxy}.
+
+terminate(_From, _Reason) ->
+ ok.
+
+disconnect_pull_consumer(Proxy) ->
+ io:format("event_test_PullC terminates~n",[]),
+ {stop, normal, ok, Proxy}.
+
+do_pull(Proxy) ->
+ {reply, 'CosEventComm_PullSupplier':pull(Proxy), Proxy}.
+
+do_try_pull(Proxy) ->
+ {reply, 'CosEventComm_PullSupplier':try_pull(Proxy), Proxy}.
+
diff --git a/lib/cosEvent/test/event_test_PullS_impl.erl b/lib/cosEvent/test/event_test_PullS_impl.erl
new file mode 100644
index 0000000000..b7fa0c34f0
--- /dev/null
+++ b/lib/cosEvent/test/event_test_PullS_impl.erl
@@ -0,0 +1,57 @@
+%%------------------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2001-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%
+%%
+%%
+%%------------------------------------------------------------------------
+%% Description: a very simple implementation of Pull Supplier interface
+%%------------------------------------------------------------------------
+-module(event_test_PullS_impl).
+
+-include_lib("orber/include/corba.hrl").
+
+-export([init/1, terminate/2, pull/1, try_pull/1, disconnect_pull_supplier/1,
+ add_event/2]).
+
+init(_) ->
+ {ok, []}.
+
+terminate(_From, _Reason) ->
+ ok.
+
+pull([]) ->
+ corba:raise(#'INTERNAL'{completion_status = ?COMPLETED_NO});
+pull([Event|Events]) ->
+ {reply, Event, Events}.
+
+try_pull([]) ->
+ {reply, {#any{typecode=tk_null, value = null}, false}, []};
+try_pull([Event|Events]) ->
+ {reply, {Event, true}, Events}.
+
+disconnect_pull_supplier(Events) ->
+ io:format("event_test_PullS terminates ~p~n", [Events]),
+ {stop, normal, ok, Events}.
+
+
+add_event(Events, Event) ->
+ %% Store in FIFO order; don't really care if we use '++' since
+ %% this operation is used in tests only.
+ {reply, ok, Events ++ [Event]}.
+
+
diff --git a/lib/cosEvent/test/event_test_PushC_impl.erl b/lib/cosEvent/test/event_test_PushC_impl.erl
new file mode 100644
index 0000000000..6eadf74a31
--- /dev/null
+++ b/lib/cosEvent/test/event_test_PushC_impl.erl
@@ -0,0 +1,46 @@
+%%------------------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2001-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%
+%%
+%%
+%%------------------------------------------------------------------------
+%% Description: a very simple implementation of Push Consumer interface
+%%------------------------------------------------------------------------
+
+-module(event_test_PushC_impl).
+
+-export([init/1, terminate/2, push/2, disconnect_push_consumer/1, get_data/1]).
+
+init(_) ->
+ {ok, []}.
+
+terminate(_From, _Reason) ->
+ ok.
+
+push(Events, Event) ->
+ {reply, ok, [Event|Events]}.
+
+disconnect_push_consumer(Events) ->
+ io:format("event_test_PushC terminates: ~p~n", [Events]),
+ {stop, normal, ok, Events}.
+
+
+get_data(Events) ->
+ %% Returns Events in FIFO order and reset state.
+ {reply, lists:reverse(Events), []}.
+
diff --git a/lib/cosEvent/test/event_test_PushS_impl.erl b/lib/cosEvent/test/event_test_PushS_impl.erl
new file mode 100644
index 0000000000..da82e97211
--- /dev/null
+++ b/lib/cosEvent/test/event_test_PushS_impl.erl
@@ -0,0 +1,41 @@
+%%------------------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2001-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%
+%%
+%%
+%%------------------------------------------------------------------------
+%% Description: a very simple implementation of Push Supplier interface
+%%------------------------------------------------------------------------
+
+-module(event_test_PushS_impl).
+
+-export([init/1, terminate/2, disconnect_push_supplier/1, do_push/2]).
+
+init(Proxy) ->
+ {ok, Proxy}.
+
+terminate(_From, _Reason) ->
+ ok.
+
+disconnect_push_supplier(Proxy) ->
+ io:format("event_test_PullC terminates~n",[]),
+ {stop, normal, ok, Proxy}.
+
+do_push(Proxy, Event) ->
+ {reply, 'CosEventComm_PushConsumer':push(Proxy, Event), Proxy}.
+
diff --git a/lib/cosEvent/test/event_test_server.idl b/lib/cosEvent/test/event_test_server.idl
new file mode 100644
index 0000000000..1719401ccd
--- /dev/null
+++ b/lib/cosEvent/test/event_test_server.idl
@@ -0,0 +1,47 @@
+//
+// %CopyrightBegin%
+//
+// Copyright Ericsson AB 2001-2010. 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%
+//
+
+#ifndef _EVENT_TEST_SERVER_IDL
+#define _EVENT_TEST_SERVER_IDL
+
+#include <../src/CosEventComm.idl>
+
+module event_test {
+
+ interface PushC : CosEventComm::PushConsumer {
+ typedef sequence<any> AnySeq;
+ AnySeq get_data();
+ };
+ interface PullC : CosEventComm::PullConsumer {
+ any do_pull();
+ any do_try_pull(out boolean has_event);
+ };
+
+ interface PushS : CosEventComm::PushSupplier {
+ void do_push(in any Event);
+ };
+ interface PullS : CosEventComm::PullSupplier {
+ void add_event(in any Event);
+ };
+
+};
+
+#endif
+
+
diff --git a/lib/cosEvent/test/generated_SUITE.erl b/lib/cosEvent/test/generated_SUITE.erl
new file mode 100644
index 0000000000..2d75b18451
--- /dev/null
+++ b/lib/cosEvent/test/generated_SUITE.erl
@@ -0,0 +1,487 @@
+%%-----------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2004-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%
+%%
+%%
+%%-----------------------------------------------------------------
+%% File : generated_SUITE.erl
+%% Purpose :
+%%-----------------------------------------------------------------
+
+-module(generated_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/include/corba.hrl").
+
+-define(default_timeout, ?t:minutes(3)).
+
+-define(match(ExpectedRes, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+-define(nomatch(Not, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ Not ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS);
+ _ ->
+ AcTuAlReS
+ end
+ end()).
+
+
+-define(checktc(_Op),
+ fun(TC) ->
+ case orber_tc:check_tc(TC) of
+ false ->
+ io:format("###### ERROR ERROR ######~n~p - ~p~n", [Op, TC]),
+ ?line exit(TC);
+ true ->
+ true
+ end
+ end).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-export([]).
+-compile(export_all).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["This suite is for testing IC generated files"];
+all(suite) ->
+ ['CosEventChannelAdmin_AlreadyConnected', 'CosEventChannelAdmin_TypeError',
+ 'CosEventComm_Disconnected',
+ 'CosEventChannelAdmin_ConsumerAdmin', 'CosEventChannelAdmin_EventChannel',
+ 'CosEventChannelAdmin_ProxyPullConsumer', 'CosEventChannelAdmin_ProxyPullSupplier',
+ 'CosEventChannelAdmin_ProxyPushConsumer', 'CosEventChannelAdmin_ProxyPushSupplier',
+ 'CosEventChannelAdmin_SupplierAdmin', oe_CosEventComm_CAdmin,
+ oe_CosEventComm_Channel, oe_CosEventComm_Event, oe_CosEventComm_PullerS,
+ oe_CosEventComm_PusherS, 'CosEventComm_PullConsumer',
+ 'CosEventComm_PullSupplier', 'CosEventComm_PushConsumer',
+ 'CosEventComm_PushSupplier'].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventChannelAdmin_AlreadyConnected'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventChannelAdmin_AlreadyConnected'(doc) -> [""];
+'CosEventChannelAdmin_AlreadyConnected'(suite) -> [];
+'CosEventChannelAdmin_AlreadyConnected'(_) ->
+ ?match(true, orber_tc:check_tc('CosEventChannelAdmin_AlreadyConnected':tc())),
+ ?match("IDL:omg.org/CosEventChannelAdmin/AlreadyConnected:1.0",
+ 'CosEventChannelAdmin_AlreadyConnected':id()),
+ ?match("CosEventChannelAdmin_AlreadyConnected",
+ 'CosEventChannelAdmin_AlreadyConnected':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventChannelAdmin_TypeError'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventChannelAdmin_TypeError'(doc) -> [""];
+'CosEventChannelAdmin_TypeError'(suite) -> [];
+'CosEventChannelAdmin_TypeError'(_) ->
+ ?match(true, orber_tc:check_tc('CosEventChannelAdmin_TypeError':tc())),
+ ?match("IDL:omg.org/CosEventChannelAdmin/TypeError:1.0",
+ 'CosEventChannelAdmin_TypeError':id()),
+ ?match("CosEventChannelAdmin_TypeError",
+ 'CosEventChannelAdmin_TypeError':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventComm_Disconnected'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventComm_Disconnected'(doc) -> [""];
+'CosEventComm_Disconnected'(suite) -> [];
+'CosEventComm_Disconnected'(_) ->
+ ?match(true, orber_tc:check_tc('CosEventComm_Disconnected':tc())),
+ ?match("IDL:omg.org/CosEventComm/Disconnected:1.0",
+ 'CosEventComm_Disconnected':id()),
+ ?match("CosEventComm_Disconnected", 'CosEventComm_Disconnected':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventChannelAdmin_ConsumerAdmin'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventChannelAdmin_ConsumerAdmin'(doc) -> [""];
+'CosEventChannelAdmin_ConsumerAdmin'(suite) -> [];
+'CosEventChannelAdmin_ConsumerAdmin'(_) ->
+ ?nomatch(undefined, 'CosEventChannelAdmin_ConsumerAdmin':oe_tc(obtain_push_supplier)),
+ ?nomatch(undefined, 'CosEventChannelAdmin_ConsumerAdmin':oe_tc(obtain_pull_supplier)),
+ ?match(undefined, 'CosEventChannelAdmin_ConsumerAdmin':oe_tc(undefined)),
+ ?match([_|_], 'CosEventChannelAdmin_ConsumerAdmin':oe_get_interface()),
+ ?match("IDL:omg.org/CosEventChannelAdmin/ConsumerAdmin:1.0",
+ 'CosEventChannelAdmin_ConsumerAdmin':typeID()),
+ check_tc('CosEventChannelAdmin_ConsumerAdmin':oe_get_interface()),
+ ?match(true, 'CosEventChannelAdmin_ConsumerAdmin':oe_is_a('CosEventChannelAdmin_ConsumerAdmin':typeID())),
+ ?match(false, 'CosEventChannelAdmin_ConsumerAdmin':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventChannelAdmin_EventChannel'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventChannelAdmin_EventChannel'(doc) -> [""];
+'CosEventChannelAdmin_EventChannel'(suite) -> [];
+'CosEventChannelAdmin_EventChannel'(_) ->
+ ?nomatch(undefined, 'CosEventChannelAdmin_EventChannel':oe_tc(for_consumers)),
+ ?nomatch(undefined, 'CosEventChannelAdmin_EventChannel':oe_tc(for_suppliers)),
+ ?nomatch(undefined, 'CosEventChannelAdmin_EventChannel':oe_tc(destroy)),
+ ?match(undefined, 'CosEventChannelAdmin_EventChannel':oe_tc(undefined)),
+ ?match([_|_], 'CosEventChannelAdmin_EventChannel':oe_get_interface()),
+ ?match("IDL:omg.org/CosEventChannelAdmin/EventChannel:1.0",
+ 'CosEventChannelAdmin_EventChannel':typeID()),
+ check_tc('CosEventChannelAdmin_EventChannel':oe_get_interface()),
+ ?match(true, 'CosEventChannelAdmin_EventChannel':oe_is_a('CosEventChannelAdmin_EventChannel':typeID())),
+ ?match(false, 'CosEventChannelAdmin_EventChannel':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventChannelAdmin_ProxyPullConsumer'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventChannelAdmin_ProxyPullConsumer'(doc) -> [""];
+'CosEventChannelAdmin_ProxyPullConsumer'(suite) -> [];
+'CosEventChannelAdmin_ProxyPullConsumer'(_) ->
+ ?nomatch(undefined, 'CosEventChannelAdmin_ProxyPullConsumer':oe_tc(connect_pull_supplier)),
+ ?nomatch(undefined, 'CosEventChannelAdmin_ProxyPullConsumer':oe_tc(disconnect_pull_consumer)),
+ ?match(undefined, 'CosEventChannelAdmin_ProxyPullConsumer':oe_tc(undefined)),
+ ?match([_|_], 'CosEventChannelAdmin_ProxyPullConsumer':oe_get_interface()),
+ ?match("IDL:omg.org/CosEventChannelAdmin/ProxyPullConsumer:1.0",
+ 'CosEventChannelAdmin_ProxyPullConsumer':typeID()),
+ check_tc('CosEventChannelAdmin_ProxyPullConsumer':oe_get_interface()),
+ ?match(true, 'CosEventChannelAdmin_ProxyPullConsumer':oe_is_a('CosEventChannelAdmin_ProxyPullConsumer':typeID())),
+ ?match(true, 'CosEventChannelAdmin_ProxyPullConsumer':oe_is_a('CosEventComm_PullConsumer':typeID())),
+ ?match(false, 'CosEventChannelAdmin_ProxyPullConsumer':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventChannelAdmin_ProxyPullSupplier'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventChannelAdmin_ProxyPullSupplier'(doc) -> [""];
+'CosEventChannelAdmin_ProxyPullSupplier'(suite) -> [];
+'CosEventChannelAdmin_ProxyPullSupplier'(_) ->
+ ?nomatch(undefined, 'CosEventChannelAdmin_ProxyPullSupplier':oe_tc(connect_pull_consumer)),
+ ?nomatch(undefined, 'CosEventChannelAdmin_ProxyPullSupplier':oe_tc(pull)),
+ ?nomatch(undefined, 'CosEventChannelAdmin_ProxyPullSupplier':oe_tc(try_pull)),
+ ?nomatch(undefined, 'CosEventChannelAdmin_ProxyPullSupplier':oe_tc(disconnect_pull_supplier)),
+ ?match(undefined, 'CosEventChannelAdmin_ProxyPullSupplier':oe_tc(undefined)),
+ ?match([_|_], 'CosEventChannelAdmin_ProxyPullSupplier':oe_get_interface()),
+ ?match("IDL:omg.org/CosEventChannelAdmin/ProxyPullSupplier:1.0",
+ 'CosEventChannelAdmin_ProxyPullSupplier':typeID()),
+ check_tc('CosEventChannelAdmin_ProxyPullSupplier':oe_get_interface()),
+ ?match(true, 'CosEventChannelAdmin_ProxyPullSupplier':oe_is_a('CosEventChannelAdmin_ProxyPullSupplier':typeID())),
+ ?match(true, 'CosEventChannelAdmin_ProxyPullSupplier':oe_is_a('CosEventComm_PullSupplier':typeID())),
+ ?match(false, 'CosEventChannelAdmin_ProxyPullSupplier':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventChannelAdmin_ProxyPushConsumer'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventChannelAdmin_ProxyPushConsumer'(doc) -> [""];
+'CosEventChannelAdmin_ProxyPushConsumer'(suite) -> [];
+'CosEventChannelAdmin_ProxyPushConsumer'(_) ->
+ ?nomatch(undefined, 'CosEventChannelAdmin_ProxyPushConsumer':oe_tc(connect_push_supplier)),
+ ?nomatch(undefined, 'CosEventChannelAdmin_ProxyPushConsumer':oe_tc(push)),
+ ?nomatch(undefined, 'CosEventChannelAdmin_ProxyPushConsumer':oe_tc(disconnect_push_consumer)),
+ ?match(undefined, 'CosEventChannelAdmin_ProxyPushConsumer':oe_tc(undefined)),
+ ?match([_|_], 'CosEventChannelAdmin_ProxyPushConsumer':oe_get_interface()),
+ ?match("IDL:omg.org/CosEventChannelAdmin/ProxyPushConsumer:1.0",
+ 'CosEventChannelAdmin_ProxyPushConsumer':typeID()),
+ check_tc('CosEventChannelAdmin_ProxyPushConsumer':oe_get_interface()),
+ ?match(true, 'CosEventChannelAdmin_ProxyPushConsumer':oe_is_a('CosEventChannelAdmin_ProxyPushConsumer':typeID())),
+ ?match(true, 'CosEventChannelAdmin_ProxyPushConsumer':oe_is_a('CosEventComm_PushConsumer':typeID())),
+ ?match(false, 'CosEventChannelAdmin_ProxyPushConsumer':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventChannelAdmin_ProxyPushSupplier'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventChannelAdmin_ProxyPushSupplier'(doc) -> [""];
+'CosEventChannelAdmin_ProxyPushSupplier'(suite) -> [];
+'CosEventChannelAdmin_ProxyPushSupplier'(_) ->
+ ?nomatch(undefined, 'CosEventChannelAdmin_ProxyPushSupplier':oe_tc(connect_push_consumer)),
+ ?nomatch(undefined, 'CosEventChannelAdmin_ProxyPushSupplier':oe_tc(disconnect_push_supplier)),
+ ?match(undefined, 'CosEventChannelAdmin_ProxyPushSupplier':oe_tc(undefined)),
+ ?match([_|_], 'CosEventChannelAdmin_ProxyPushSupplier':oe_get_interface()),
+ ?match("IDL:omg.org/CosEventChannelAdmin/ProxyPushSupplier:1.0",
+ 'CosEventChannelAdmin_ProxyPushSupplier':typeID()),
+ check_tc('CosEventChannelAdmin_ProxyPushSupplier':oe_get_interface()),
+ ?match(true, 'CosEventChannelAdmin_ProxyPushSupplier':oe_is_a('CosEventChannelAdmin_ProxyPushSupplier':typeID())),
+ ?match(true, 'CosEventChannelAdmin_ProxyPushSupplier':oe_is_a('CosEventComm_PushSupplier':typeID())),
+ ?match(false, 'CosEventChannelAdmin_ProxyPushSupplier':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventChannelAdmin_SupplierAdmin'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventChannelAdmin_SupplierAdmin'(doc) -> [""];
+'CosEventChannelAdmin_SupplierAdmin'(suite) -> [];
+'CosEventChannelAdmin_SupplierAdmin'(_) ->
+ ?nomatch(undefined, 'CosEventChannelAdmin_SupplierAdmin':oe_tc(obtain_push_consumer)),
+ ?nomatch(undefined, 'CosEventChannelAdmin_SupplierAdmin':oe_tc(obtain_pull_consumer)),
+ ?match(undefined, 'CosEventChannelAdmin_SupplierAdmin':oe_tc(undefined)),
+ ?match([_|_], 'CosEventChannelAdmin_SupplierAdmin':oe_get_interface()),
+ ?match("IDL:omg.org/CosEventChannelAdmin/SupplierAdmin:1.0",
+ 'CosEventChannelAdmin_SupplierAdmin':typeID()),
+ check_tc('CosEventChannelAdmin_SupplierAdmin':oe_get_interface()),
+ ?match(true, 'CosEventChannelAdmin_SupplierAdmin':oe_is_a('CosEventChannelAdmin_SupplierAdmin':typeID())),
+ ?match(false, 'CosEventChannelAdmin_SupplierAdmin':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'oe_CosEventComm_CAdmin'
+%% Description:
+%%-----------------------------------------------------------------
+'oe_CosEventComm_CAdmin'(doc) -> [""];
+'oe_CosEventComm_CAdmin'(suite) -> [];
+'oe_CosEventComm_CAdmin'(_) ->
+ ?nomatch(undefined, 'oe_CosEventComm_CAdmin':oe_tc(obtain_push_supplier)),
+ ?nomatch(undefined, 'oe_CosEventComm_CAdmin':oe_tc(obtain_pull_supplier)),
+ ?nomatch(undefined, 'oe_CosEventComm_CAdmin':oe_tc(send)),
+ ?nomatch(undefined, 'oe_CosEventComm_CAdmin':oe_tc(send_sync)),
+ ?match(undefined, 'oe_CosEventComm_CAdmin':oe_tc(undefined)),
+ ?match([_|_], 'oe_CosEventComm_CAdmin':oe_get_interface()),
+ ?match("IDL:oe_CosEventComm/CAdmin:1.0",
+ 'oe_CosEventComm_CAdmin':typeID()),
+ check_tc('oe_CosEventComm_CAdmin':oe_get_interface()),
+ ?match(true, 'oe_CosEventComm_CAdmin':oe_is_a('oe_CosEventComm_CAdmin':typeID())),
+ ?match(true, 'oe_CosEventComm_CAdmin':oe_is_a('CosEventChannelAdmin_ConsumerAdmin':typeID())),
+ ?match(true, 'oe_CosEventComm_CAdmin':oe_is_a('oe_CosEventComm_Event':typeID())),
+ ?match(false, 'oe_CosEventComm_CAdmin':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'oe_CosEventComm_Channel'
+%% Description:
+%%-----------------------------------------------------------------
+'oe_CosEventComm_Channel'(doc) -> [""];
+'oe_CosEventComm_Channel'(suite) -> [];
+'oe_CosEventComm_Channel'(_) ->
+ ?nomatch(undefined, 'oe_CosEventComm_Channel':oe_tc(for_consumers)),
+ ?nomatch(undefined, 'oe_CosEventComm_Channel':oe_tc(for_suppliers)),
+ ?nomatch(undefined, 'oe_CosEventComm_Channel':oe_tc(destroy)),
+ ?nomatch(undefined, 'oe_CosEventComm_Channel':oe_tc(send)),
+ ?nomatch(undefined, 'oe_CosEventComm_Channel':oe_tc(send_sync)),
+ ?match(undefined, 'oe_CosEventComm_Channel':oe_tc(undefined)),
+ ?match([_|_], 'oe_CosEventComm_Channel':oe_get_interface()),
+ ?match("IDL:oe_CosEventComm/Channel:1.0",
+ 'oe_CosEventComm_Channel':typeID()),
+ check_tc('oe_CosEventComm_Channel':oe_get_interface()),
+ ?match(true, 'oe_CosEventComm_Channel':oe_is_a('oe_CosEventComm_Channel':typeID())),
+ ?match(true, 'oe_CosEventComm_Channel':oe_is_a('CosEventChannelAdmin_EventChannel':typeID())),
+ ?match(true, 'oe_CosEventComm_Channel':oe_is_a('oe_CosEventComm_Event':typeID())),
+ ?match(false, 'oe_CosEventComm_Channel':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'oe_CosEventComm_Event'
+%% Description:
+%%-----------------------------------------------------------------
+'oe_CosEventComm_Event'(doc) -> [""];
+'oe_CosEventComm_Event'(suite) -> [];
+'oe_CosEventComm_Event'(_) ->
+ ?nomatch(undefined, 'oe_CosEventComm_Event':oe_tc(send)),
+ ?nomatch(undefined, 'oe_CosEventComm_Event':oe_tc(send_sync)),
+ ?match(undefined, 'oe_CosEventComm_Event':oe_tc(undefined)),
+ ?match([_|_], 'oe_CosEventComm_Event':oe_get_interface()),
+ ?match("IDL:oe_CosEventComm/Event:1.0",
+ 'oe_CosEventComm_Event':typeID()),
+ check_tc('oe_CosEventComm_Event':oe_get_interface()),
+ ?match(true, 'oe_CosEventComm_Event':oe_is_a('oe_CosEventComm_Event':typeID())),
+ ?match(false, 'oe_CosEventComm_Event':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'oe_CosEventComm_PullerS'
+%% Description:
+%%-----------------------------------------------------------------
+'oe_CosEventComm_PullerS'(doc) -> [""];
+'oe_CosEventComm_PullerS'(suite) -> [];
+'oe_CosEventComm_PullerS'(_) ->
+ ?nomatch(undefined, 'oe_CosEventComm_PullerS':oe_tc(connect_pull_consumer)),
+ ?nomatch(undefined, 'oe_CosEventComm_PullerS':oe_tc(pull)),
+ ?nomatch(undefined, 'oe_CosEventComm_PullerS':oe_tc(try_pull)),
+ ?nomatch(undefined, 'oe_CosEventComm_PullerS':oe_tc(disconnect_pull_supplier)),
+ ?nomatch(undefined, 'oe_CosEventComm_PullerS':oe_tc(send)),
+ ?nomatch(undefined, 'oe_CosEventComm_PullerS':oe_tc(send_sync)),
+ ?match(undefined, 'oe_CosEventComm_PullerS':oe_tc(undefined)),
+ ?match([_|_], 'oe_CosEventComm_PullerS':oe_get_interface()),
+ ?match("IDL:oe_CosEventComm/PullerS:1.0",
+ 'oe_CosEventComm_PullerS':typeID()),
+ check_tc('oe_CosEventComm_PullerS':oe_get_interface()),
+ ?match(true, 'oe_CosEventComm_PullerS':oe_is_a('oe_CosEventComm_PullerS':typeID())),
+ ?match(true, 'oe_CosEventComm_PullerS':oe_is_a('CosEventChannelAdmin_ProxyPullSupplier':typeID())),
+ ?match(true, 'oe_CosEventComm_PullerS':oe_is_a('CosEventComm_PullSupplier':typeID())),
+ ?match(true, 'oe_CosEventComm_PullerS':oe_is_a('oe_CosEventComm_Event':typeID())),
+ ?match(false, 'oe_CosEventComm_PullerS':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'oe_CosEventComm_PusherS'
+%% Description:
+%%-----------------------------------------------------------------
+'oe_CosEventComm_PusherS'(doc) -> [""];
+'oe_CosEventComm_PusherS'(suite) -> [];
+'oe_CosEventComm_PusherS'(_) ->
+ ?nomatch(undefined, 'oe_CosEventComm_PusherS':oe_tc(connect_push_consumer)),
+ ?nomatch(undefined, 'oe_CosEventComm_PusherS':oe_tc(disconnect_push_supplier)),
+ ?nomatch(undefined, 'oe_CosEventComm_PusherS':oe_tc(send)),
+ ?nomatch(undefined, 'oe_CosEventComm_PusherS':oe_tc(send_sync)),
+ ?match(undefined, 'oe_CosEventComm_PusherS':oe_tc(undefined)),
+ ?match([_|_], 'oe_CosEventComm_PusherS':oe_get_interface()),
+ ?match("IDL:oe_CosEventComm/PusherS:1.0",
+ 'oe_CosEventComm_PusherS':typeID()),
+ check_tc('oe_CosEventComm_PusherS':oe_get_interface()),
+ ?match(true, 'oe_CosEventComm_PusherS':oe_is_a('oe_CosEventComm_PusherS':typeID())),
+ ?match(true, 'oe_CosEventComm_PusherS':oe_is_a('CosEventChannelAdmin_ProxyPushSupplier':typeID())),
+ ?match(true, 'oe_CosEventComm_PusherS':oe_is_a('CosEventComm_PushSupplier':typeID())),
+ ?match(true, 'oe_CosEventComm_PusherS':oe_is_a('oe_CosEventComm_Event':typeID())),
+ ?match(false, 'oe_CosEventComm_PusherS':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventComm_PullConsumer'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventComm_PullConsumer'(doc) -> [""];
+'CosEventComm_PullConsumer'(suite) -> [];
+'CosEventComm_PullConsumer'(_) ->
+ ?nomatch(undefined, 'CosEventComm_PullConsumer':oe_tc(disconnect_pull_consumer)),
+ ?match(undefined, 'CosEventComm_PullConsumer':oe_tc(undefined)),
+ ?match([_|_], 'CosEventComm_PullConsumer':oe_get_interface()),
+ ?match("IDL:omg.org/CosEventComm/PullConsumer:1.0",
+ 'CosEventComm_PullConsumer':typeID()),
+ check_tc('CosEventComm_PullConsumer':oe_get_interface()),
+ ?match(true, 'CosEventComm_PullConsumer':oe_is_a('CosEventComm_PullConsumer':typeID())),
+ ?match(false, 'CosEventComm_PullConsumer':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventComm_PullSupplier'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventComm_PullSupplier'(doc) -> [""];
+'CosEventComm_PullSupplier'(suite) -> [];
+'CosEventComm_PullSupplier'(_) ->
+ ?nomatch(undefined, 'CosEventComm_PullSupplier':oe_tc(pull)),
+ ?nomatch(undefined, 'CosEventComm_PullSupplier':oe_tc(try_pull)),
+ ?nomatch(undefined, 'CosEventComm_PullSupplier':oe_tc(disconnect_pull_supplier)),
+ ?match(undefined, 'CosEventComm_PullSupplier':oe_tc(undefined)),
+ ?match([_|_], 'CosEventComm_PullSupplier':oe_get_interface()),
+ ?match("IDL:omg.org/CosEventComm/PullSupplier:1.0",
+ 'CosEventComm_PullSupplier':typeID()),
+ check_tc('CosEventComm_PullSupplier':oe_get_interface()),
+ ?match(true, 'CosEventComm_PullSupplier':oe_is_a('CosEventComm_PullSupplier':typeID())),
+ ?match(false, 'CosEventComm_PullSupplier':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventComm_PushConsumer'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventComm_PushConsumer'(doc) -> [""];
+'CosEventComm_PushConsumer'(suite) -> [];
+'CosEventComm_PushConsumer'(_) ->
+ ?nomatch(undefined, 'CosEventComm_PushConsumer':oe_tc(push)),
+ ?nomatch(undefined, 'CosEventComm_PushConsumer':oe_tc(disconnect_push_consumer)),
+ ?match(undefined, 'CosEventComm_PushConsumer':oe_tc(undefined)),
+ ?match([_|_], 'CosEventComm_PushConsumer':oe_get_interface()),
+ ?match("IDL:omg.org/CosEventComm/PushConsumer:1.0",
+ 'CosEventComm_PushConsumer':typeID()),
+ check_tc('CosEventComm_PushConsumer':oe_get_interface()),
+ ?match(true, 'CosEventComm_PushConsumer':oe_is_a('CosEventComm_PushConsumer':typeID())),
+ ?match(false, 'CosEventComm_PushConsumer':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventComm_PushSupplier'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventComm_PushSupplier'(doc) -> [""];
+'CosEventComm_PushSupplier'(suite) -> [];
+'CosEventComm_PushSupplier'(_) ->
+ ?nomatch(undefined, 'CosEventComm_PushSupplier':oe_tc(disconnect_push_supplier)),
+ ?match(undefined, 'CosEventComm_PushSupplier':oe_tc(undefined)),
+ ?match([_|_], 'CosEventComm_PushSupplier':oe_get_interface()),
+ ?match("IDL:omg.org/CosEventComm/PushSupplier:1.0",
+ 'CosEventComm_PushSupplier':typeID()),
+ check_tc('CosEventComm_PushSupplier':oe_get_interface()),
+ ?match(true, 'CosEventComm_PushSupplier':oe_is_a('CosEventComm_PushSupplier':typeID())),
+ ?match(false, 'CosEventComm_PushSupplier':oe_is_a("wrong")),
+ ok.
+
+
+
+%%-----------------------------------------------------------------
+%% MISC functions
+%%-----------------------------------------------------------------
+check_tc([]) ->
+ ok;
+check_tc([{Op, {RetType, InParameters, OutParameters}}|T]) ->
+ io:format("checked - ~s~n", [Op]),
+ lists:all(?checktc(Op), [RetType|InParameters]),
+ lists:all(?checktc(Op), OutParameters),
+ check_tc(T).
+
+
diff --git a/lib/cosEvent/test/idl_output/.gitignore b/lib/cosEvent/test/idl_output/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/cosEvent/test/idl_output/.gitignore
diff --git a/lib/cosEvent/vsn.mk b/lib/cosEvent/vsn.mk
index 8915903bbe..9f326b39b6 100644
--- a/lib/cosEvent/vsn.mk
+++ b/lib/cosEvent/vsn.mk
@@ -1,7 +1,9 @@
-COSEVENT_VSN = 2.1.8
+COSEVENT_VSN = 2.1.9
-TICKETS = OTP-8355 \
+TICKETS = OTP-8543
+
+TICKETS_2.1.8 = OTP-8355 \
OTP-8409
TICKETS_2.1.7 = OTP-8201
diff --git a/lib/cosEventDomain/doc/src/notes.xml b/lib/cosEventDomain/doc/src/notes.xml
index 0ad42948af..deb1985c86 100644
--- a/lib/cosEventDomain/doc/src/notes.xml
+++ b/lib/cosEventDomain/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2001</year><year>2009</year>
+ <year>2001</year><year>2010</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -13,12 +13,12 @@
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.
-
+
</legalnotice>
<title>cosEventDomain Release Notes</title>
@@ -32,6 +32,22 @@
</header>
<section>
+ <title>cosEventDomain 1.1.9</title>
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>
+ Test suites published.</p>
+ <p>
+ Own Id: OTP-8543 Aux Id:</p>
+ </item>
+ </list>
+ </section>
+
+ </section>
+
+ <section>
<title>cosEventDomain 1.1.8</title>
<section>
diff --git a/lib/cosEventDomain/test/Makefile b/lib/cosEventDomain/test/Makefile
new file mode 100644
index 0000000000..9893b05b8c
--- /dev/null
+++ b/lib/cosEventDomain/test/Makefile
@@ -0,0 +1,104 @@
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 2001-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%
+#
+#
+include $(ERL_TOP)/make/target.mk
+include $(ERL_TOP)/make/$(TARGET)/otp.mk
+
+# ----------------------------------------------------
+# Application version
+# ----------------------------------------------------
+include ../vsn.mk
+VSN=$(COSEVENTDOMAIN_VSN)
+# ----------------------------------------------------
+# Release directory specification
+# ----------------------------------------------------
+RELSYSDIR = $(RELEASE_PATH)/cosEventDomain_test
+
+# ----------------------------------------------------
+# Target Specs
+# ----------------------------------------------------
+TEST_SPEC_FILE = cosEventDomain.spec
+
+
+MODULES = \
+ event_domain_SUITE \
+ generated_SUITE
+
+ERL_FILES = $(MODULES:%=%.erl)
+
+HRL_FILES =
+
+SUITE_TARGET_FILES = $(MODULES:%=%.$(EMULATOR))
+
+TARGET_FILES = \
+ $(SUITE_TARGET_FILES)
+
+# ----------------------------------------------------
+# PROGRAMS
+# ----------------------------------------------------
+# ----------------------------------------------------
+# FLAGS
+# ----------------------------------------------------
+ERL_IDL_FLAGS += -pa $(ERL_TOP)/lib/orber/ebin -pa $(ERL_TOP)/lib/ic/ebin
+
+ERL_COMPILE_FLAGS += \
+ $(ERL_IDL_FLAGS) \
+ -pa $(ERL_TOP)/lib/test_server/ebin \
+ -pa $(ERL_TOP)/lib/cosEventDomain/ebin \
+ -pa $(ERL_TOP)/lib/cosEventDomain/include \
+ -pa $(ERL_TOP)/lib/cosNotification/ebin \
+ -pa $(ERL_TOP)/lib/cosNotification/include \
+ -I$(ERL_TOP)/lib/cosEventDomain/include \
+ -I$(ERL_TOP)/lib/cosNotification/include \
+ -I$(ERL_TOP)/lib/cosNotification/ebin \
+ -I$(ERL_TOP)/lib/test_server/include
+
+# ----------------------------------------------------
+# Targets
+# ----------------------------------------------------
+tests debug opt: $(TARGET_FILES)
+
+clean:
+ rm -f $(TARGET_FILES)
+ rm -f errs core *~
+
+
+docs:
+
+# ----------------------------------------------------
+# Special Targets
+# ----------------------------------------------------
+
+# ----------------------------------------------------
+# Release Targets
+# ----------------------------------------------------
+# We don't copy generated intermediate erlang and hrl files
+
+include $(ERL_TOP)/make/otp_release_targets.mk
+
+release_spec:
+
+release_docs_spec:
+
+release_tests_spec: tests
+ $(INSTALL_DIR) $(RELSYSDIR)
+ $(INSTALL_DATA) $(TEST_SPEC_FILE) \
+ $(ERL_FILES) $(RELSYSDIR)
+ $(INSTALL_DATA) $(SUITE_TARGET_FILES) $(RELSYSDIR)
+
diff --git a/lib/cosEventDomain/test/cosEventDomain.spec b/lib/cosEventDomain/test/cosEventDomain.spec
new file mode 100644
index 0000000000..0d3e307071
--- /dev/null
+++ b/lib/cosEventDomain/test/cosEventDomain.spec
@@ -0,0 +1,19 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2001-2010. 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%
+%%
+{topcase, {dir, "../cosEventDomain_test"}}.
diff --git a/lib/cosEventDomain/test/event_domain_SUITE.erl b/lib/cosEventDomain/test/event_domain_SUITE.erl
new file mode 100644
index 0000000000..ddf0af3489
--- /dev/null
+++ b/lib/cosEventDomain/test/event_domain_SUITE.erl
@@ -0,0 +1,456 @@
+%%-----------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2001-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%
+%%
+%%
+%%-----------------------------------------------------------------
+
+-module(event_domain_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/include/corba.hrl").
+-include_lib("cosNotification/include/CosNotifyChannelAdmin.hrl").
+-include_lib("cosNotification/include/CosNotification.hrl").
+
+-include_lib("cosEventDomain/include/CosEventDomainAdmin.hrl").
+-include_lib("cosEventDomain/src/cosEventDomainApp.hrl").
+
+%%-----------------------------------------------------------------
+%% Macros
+%%-----------------------------------------------------------------
+
+-define(default_timeout, ?t:minutes(5)).
+
+
+-define(match(ExpectedRes, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1, event_domain_api/1, event_domain_factory_api/1,
+ cases/0, init_all/1, finish_all/1,
+ init_per_testcase/2, fin_per_testcase/2, app_test/1]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+
+all(doc) -> ["API tests for the cosEventDomain interfaces", ""];
+all(suite) -> {req,
+ [mnesia, orber, cosNotification],
+ {conf, init_all, cases(), finish_all}}.
+
+cases() ->
+ [event_domain_api, event_domain_factory_api, app_test].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+init_all(Config) when is_list(Config) ->
+ mnesia:delete_schema([node()]),
+ mnesia:create_schema([node()]),
+ ok = corba:orb_init([{flags, 16#02},
+ {orber_debug_level, 10}]),
+ orber:install([node()]),
+ application:start(mnesia),
+ application:start(orber),
+ cosEventApp:install(),
+ cosEventApp:start(),
+ cosNotificationApp:install(),
+ cosNotificationApp:start(),
+ cosEventDomainApp:install(),
+ cosEventDomainApp:start(),
+ Config.
+
+finish_all(Config) when is_list(Config) ->
+ cosEventDomainApp:stop(),
+ cosEventDomainApp:uninstall(),
+ cosNotificationApp:stop(),
+ cosNotificationApp:uninstall(),
+ cosEventApp:stop(),
+ cosEventApp:uninstall(),
+ application:stop(orber),
+ application:stop(mnesia),
+ mnesia:delete_schema([node()]),
+ Config.
+
+%%-----------------------------------------------------------------
+%% Tests app file
+%%-----------------------------------------------------------------
+app_test(doc) -> [];
+app_test(suite) -> [];
+app_test(_Config) ->
+ ok=test_server:app_test(cosEventDomain),
+ ok.
+
+
+event_domain_api(doc) -> ["Testing the CosEventDomain Domain API", ""];
+event_domain_api(suite) -> [];
+event_domain_api(_Config) ->
+
+ %% We will setup a cluster looking like:
+ %% 7-8--->
+ %% /
+ %% 2 - 4 6->
+ %% \ /
+ %% 5---9-1-3
+
+ %% 2-4
+ %% 4-1
+ %% 1-3
+ %% 3-6
+ %% 5-9
+ %% 9-1
+ %% 4-7
+ %% 7-8
+
+
+ ChFac = ?match({_,key,_,_,_,_},
+ cosNotificationApp:start_global_factory([{pullInterval,1}])),
+ {Ch0,_} = ?match({{_,key,_,_,_,_}, _},
+ 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(ChFac, [], [])),
+ Fac = ?match({_,key,_,_,_,_},
+ cosEventDomainApp:start_factory()),
+ {ED, _} = ?match({{_,key,_,_,_,_}, _},
+ 'CosEventDomainAdmin_EventDomainFactory':create_event_domain(Fac, [], [])),
+ ID0 = 'CosEventDomainAdmin_EventDomain':add_channel(ED, Ch0),
+ ?match(Ch0, 'CosEventDomainAdmin_EventDomain':get_channel(ED, ID0)),
+ ?match([0], 'CosEventDomainAdmin_EventDomain':get_all_channels(ED)),
+ ?match({'EXCEPTION',{'CosNotifyChannelAdmin_ChannelNotFound',_}},
+ 'CosEventDomainAdmin_EventDomain':get_channel(ED, 100)),
+ ?match({'EXCEPTION',{'CosNotifyChannelAdmin_ChannelNotFound',_}},
+ 'CosEventDomainAdmin_EventDomain':remove_channel(ED, 100)),
+ ?match(ok, 'CosEventDomainAdmin_EventDomain':remove_channel(ED, 0)),
+ ?match([], 'CosEventDomainAdmin_EventDomain':get_all_channels(ED)),
+ ?match({'EXCEPTION',{'CosNotifyChannelAdmin_ChannelNotFound',_}},
+ 'CosEventDomainAdmin_EventDomain':remove_channel(ED, 0)),
+
+ %% Create a new event channel.
+ {Ch1,_} = ?match({{_,key,_,_,_,_}, _},
+ 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(ChFac, [], [])),
+ {Ch2,_} = ?match({{_,key,_,_,_,_}, _},
+ 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(ChFac, [], [])),
+ {Ch3,_} = ?match({{_,key,_,_,_,_}, _},
+ 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(ChFac, [], [])),
+ {Ch4,_} = ?match({{_,key,_,_,_,_}, _},
+ 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(ChFac, [], [])),
+ {Ch5,_} = ?match({{_,key,_,_,_,_}, _},
+ 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(ChFac, [], [])),
+ {Ch6,_} = ?match({{_,key,_,_,_,_}, _},
+ 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(ChFac, [], [])),
+ {Ch7,_} = ?match({{_,key,_,_,_,_}, _},
+ 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(ChFac, [], [])),
+ {Ch8,_} = ?match({{_,key,_,_,_,_}, _},
+ 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(ChFac, [], [])),
+ {Ch9,_} = ?match({{_,key,_,_,_,_}, _},
+ 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(ChFac, [], [])),
+
+ ID1 = 'CosEventDomainAdmin_EventDomain':add_channel(ED, Ch1),
+ ID2 = 'CosEventDomainAdmin_EventDomain':add_channel(ED, Ch2),
+ ID3 = 'CosEventDomainAdmin_EventDomain':add_channel(ED, Ch3),
+ ID4 = 'CosEventDomainAdmin_EventDomain':add_channel(ED, Ch4),
+ ID5 = 'CosEventDomainAdmin_EventDomain':add_channel(ED, Ch5),
+ ID6 = 'CosEventDomainAdmin_EventDomain':add_channel(ED, Ch6),
+ ID7 = 'CosEventDomainAdmin_EventDomain':add_channel(ED, Ch7),
+ ID8 = 'CosEventDomainAdmin_EventDomain':add_channel(ED, Ch8),
+ ID9 = 'CosEventDomainAdmin_EventDomain':add_channel(ED, Ch9),
+ ?match([_,_,_,_,_,_,_,_,_],
+ 'CosEventDomainAdmin_EventDomain':get_all_channels(ED)),
+
+ ?match([], 'CosEventDomainAdmin_EventDomain':get_all_connections(ED)),
+ C1 = #'CosEventDomainAdmin_Connection'{supplier_id=ID2,
+ consumer_id=ID4,
+ ctype='STRUCTURED_EVENT',
+ notification_style='Pull'},
+ C2 = #'CosEventDomainAdmin_Connection'{supplier_id=ID4,
+ consumer_id=ID1,
+ ctype='ANY_EVENT',
+ notification_style='Push'},
+ C3 = #'CosEventDomainAdmin_Connection'{supplier_id=ID1,
+ consumer_id=ID3,
+ ctype='ANY_EVENT',
+ notification_style='Pull'},
+ C4 = #'CosEventDomainAdmin_Connection'{supplier_id=ID3,
+ consumer_id=ID6,
+ ctype='STRUCTURED_EVENT',
+ notification_style='Push'},
+ C5 = #'CosEventDomainAdmin_Connection'{supplier_id=ID5,
+ consumer_id=ID9,
+ ctype='ANY_EVENT',
+ notification_style='Pull'},
+ C6 = #'CosEventDomainAdmin_Connection'{supplier_id=ID9,
+ consumer_id=ID1,
+ ctype='ANY_EVENT',
+ notification_style='Push'},
+ C7 = #'CosEventDomainAdmin_Connection'{supplier_id=ID4,
+ consumer_id=ID7,
+ ctype='STRUCTURED_EVENT',
+ notification_style='Pull'},
+ C8 = #'CosEventDomainAdmin_Connection'{supplier_id=ID7,
+ consumer_id=ID8,
+ ctype='ANY_EVENT',
+ notification_style='Push'},
+ C9 = #'CosEventDomainAdmin_Connection'{supplier_id=ID8,
+ consumer_id=ID4,
+ ctype='ANY_EVENT',
+ notification_style='Pull'},
+ C10 = #'CosEventDomainAdmin_Connection'{supplier_id=ID5,
+ consumer_id=ID4,
+ ctype='ANY_EVENT',
+ notification_style='Pull'},
+ C11 = #'CosEventDomainAdmin_Connection'{supplier_id=ID4,
+ consumer_id=ID6,
+ ctype='ANY_EVENT',
+ notification_style='Pull'},
+ C12 = #'CosEventDomainAdmin_Connection'{supplier_id=ID8,
+ consumer_id=ID6,
+ ctype='ANY_EVENT',
+ notification_style='Pull'},
+
+ CID1 = 'CosEventDomainAdmin_EventDomain':add_connection(ED, C1),
+ ?match([CID1], 'CosEventDomainAdmin_EventDomain':get_all_connections(ED)),
+ _CID2 = 'CosEventDomainAdmin_EventDomain':add_connection(ED, C2),
+ ?match([_,_],
+ 'CosEventDomainAdmin_EventDomain':get_all_connections(ED)),
+ _CID3 = 'CosEventDomainAdmin_EventDomain':add_connection(ED, C3),
+ ?match([_,_,_],
+ 'CosEventDomainAdmin_EventDomain':get_all_connections(ED)),
+ _CID4 = 'CosEventDomainAdmin_EventDomain':add_connection(ED, C4),
+ ?match([_,_,_,_],
+ 'CosEventDomainAdmin_EventDomain':get_all_connections(ED)),
+ _CID5 = 'CosEventDomainAdmin_EventDomain':add_connection(ED, C5),
+ ?match([_,_,_,_,_],
+ 'CosEventDomainAdmin_EventDomain':get_all_connections(ED)),
+ _CID6 = 'CosEventDomainAdmin_EventDomain':add_connection(ED, C6),
+ ?match([_,_,_,_,_,_],
+ 'CosEventDomainAdmin_EventDomain':get_all_connections(ED)),
+ CID7 = 'CosEventDomainAdmin_EventDomain':add_connection(ED, C7),
+ ?match([_,_,_,_,_,_,_],
+ 'CosEventDomainAdmin_EventDomain':get_all_connections(ED)),
+ _CID8 = 'CosEventDomainAdmin_EventDomain':add_connection(ED, C8),
+ ?match([_,_,_,_,_,_,_,_],
+ 'CosEventDomainAdmin_EventDomain':get_all_connections(ED)),
+
+ ?match({'EXCEPTION',{'CosEventDomainAdmin_AlreadyExists', _}},
+ 'CosEventDomainAdmin_EventDomain':add_connection(ED, C8)),
+ %% No cycles should exist.
+ ?match([], 'CosEventDomainAdmin_EventDomain':get_cycles(ED)),
+
+ ?match([_, _], 'CosEventDomainAdmin_EventDomain':get_qos(ED)),
+ AllowCyclic = #'CosNotification_Property'{name=?CycleDetection,
+ value=any:create(orber_tc:short(),
+ ?AuthorizeCycles)},
+ ?match({'EXCEPTION',{'CosNotification_UnsupportedQoS',_,_}},
+ 'CosEventDomainAdmin_EventDomain':set_qos(ED, [AllowCyclic])),
+ ForbidCyclic = #'CosNotification_Property'{name=?CycleDetection,
+ value=any:create(orber_tc:short(),
+ ?ForbidCycles)},
+ %% The same as before; must work.
+ ?match(ok, 'CosEventDomainAdmin_EventDomain':set_qos(ED, [ForbidCyclic])),
+
+ AllowDiamonds = #'CosNotification_Property'{name=?DiamondDetection,
+ value=any:create(orber_tc:short(),
+ ?AuthorizeDiamonds)},
+ %% Since no diamonds allowed before this is always ok.
+ ?match(ok, 'CosEventDomainAdmin_EventDomain':set_qos(ED, [AllowDiamonds])),
+
+ ?match([_, _], 'CosEventDomainAdmin_EventDomain':get_qos(ED)),
+
+ ForbidDiamonds = #'CosNotification_Property'{name=?DiamondDetection,
+ value=any:create(orber_tc:short(),
+ ?ForbidDiamonds)},
+ %% No diamonds created before. Hence, will work.
+ ?match(ok, 'CosEventDomainAdmin_EventDomain':set_qos(ED, [ForbidDiamonds])),
+
+ ?match([_, _], 'CosEventDomainAdmin_EventDomain':get_qos(ED)),
+
+ ?match({ok, [_]}, 'CosEventDomainAdmin_EventDomain':validate_qos(ED,
+ [ForbidDiamonds,
+ ForbidCyclic])),
+ %% No diamonds exists, hence, this is ok.
+ ?match({ok, [_]}, 'CosEventDomainAdmin_EventDomain':validate_qos(ED,
+ [AllowDiamonds,
+ ForbidCyclic])),
+ ?match({'EXCEPTION',{'CosNotification_UnsupportedQoS',_,_}},
+ 'CosEventDomainAdmin_EventDomain':validate_qos(ED, [ForbidDiamonds,
+ AllowCyclic])),
+
+ %% Since the ED is started is asyclic we may not succeed with this invokation.
+ ?match({'EXCEPTION',{'CosEventDomainAdmin_CycleCreationForbidden',_,_}},
+ 'CosEventDomainAdmin_EventDomain':add_connection(ED, C9)),
+ ?match([], 'CosEventDomainAdmin_EventDomain':get_offer_channels(ED, ID2)),
+
+ ?match([2], 'CosEventDomainAdmin_EventDomain':get_offer_channels(ED, ID4)),
+ ?match([_,_,_], 'CosEventDomainAdmin_EventDomain':get_offer_channels(ED, ID8)),
+ ?match({'EXCEPTION',{'CosNotifyChannelAdmin_ChannelNotFound',_}},
+ 'CosEventDomainAdmin_EventDomain':get_offer_channels(ED, 100)),
+ ?match([], 'CosEventDomainAdmin_EventDomain':get_subscription_channels(ED, ID8)),
+ ?match([_,_,_,_,_],
+ 'CosEventDomainAdmin_EventDomain':get_subscription_channels(ED, ID4)),
+ ?match([_,_,_,_,_,_],
+ 'CosEventDomainAdmin_EventDomain':get_subscription_channels(ED, ID2)),
+ ?match({'EXCEPTION',{'CosNotifyChannelAdmin_ChannelNotFound',_}},
+ 'CosEventDomainAdmin_EventDomain':get_subscription_channels(ED, 100)),
+ Nil = corba:create_nil_objref(),
+
+ P2=?match({_,key,_,_,_,_},
+ 'CosEventDomainAdmin_EventDomain':connect_push_supplier_with_id(ED, Nil, ID2)),
+ P7=?match({_,key,_,_,_,_},
+ 'CosEventDomainAdmin_EventDomain':connect_push_supplier_with_id(ED, Nil, ID7)),
+ P8=?match({_,key,_,_,_,_},
+ 'CosEventDomainAdmin_EventDomain':connect_pull_consumer_with_id(ED, Nil, ID8)),
+ P6=?match({_,key,_,_,_,_},
+ 'CosEventDomainAdmin_EventDomain':connect_pull_consumer_with_id(ED, Nil, ID6)),
+ E1 = #any{typecode=tk_long, value=1},
+ E2 = #any{typecode=tk_long, value=2},
+
+ ?match(ok, 'CosNotifyChannelAdmin_ProxyPushConsumer':push(P2, E1)),
+ ?match(E1, 'CosNotifyChannelAdmin_ProxyPullSupplier':pull(P8)),
+ ?match(E1, 'CosNotifyChannelAdmin_ProxyPullSupplier':pull(P6)),
+ ?match(ok, 'CosNotifyChannelAdmin_ProxyPushConsumer':push(P7, E2)),
+ ?match(E2, 'CosNotifyChannelAdmin_ProxyPullSupplier':pull(P8)),
+ timer:sleep(10000),
+ ?match({_,false}, 'CosNotifyChannelAdmin_ProxyPullSupplier':try_pull(P6)),
+
+ ?match(ok, 'CosEventDomainAdmin_EventDomain':remove_connection(ED, CID7)),
+
+ ?match({'EXCEPTION',{'CosEventDomainAdmin_ConnectionNotFound',_}},
+ 'CosEventDomainAdmin_EventDomain':remove_connection(ED, CID7)),
+
+ ?match({'EXCEPTION',{'CosEventDomainAdmin_ConnectionNotFound',_}},
+ 'CosEventDomainAdmin_EventDomain':remove_connection(ED, 100)),
+
+ ?match([], 'CosEventDomainAdmin_EventDomain':get_offer_channels(ED, ID7)),
+ ?match([2], 'CosEventDomainAdmin_EventDomain':get_offer_channels(ED, ID4)),
+
+ ?match([8], 'CosEventDomainAdmin_EventDomain':get_subscription_channels(ED, ID7)),
+ ?match([_,_,_], 'CosEventDomainAdmin_EventDomain':get_subscription_channels(ED, ID4)),
+
+ CID10 = ?match(8, 'CosEventDomainAdmin_EventDomain':add_connection(ED, C7)),
+
+ %% Now we'll check diamond management.
+ %% Currently it should not be possible to create a diamond (due to QoS-setting).
+ ?match({'EXCEPTION',{'CosEventDomainAdmin_DiamondCreationForbidden',_,_}},
+ 'CosEventDomainAdmin_EventDomain':add_connection(ED, C11)),
+ ?match({'EXCEPTION',{'CosEventDomainAdmin_DiamondCreationForbidden',_,_}},
+ 'CosEventDomainAdmin_EventDomain':add_connection(ED, C10)),
+ ?match({'EXCEPTION',{'CosEventDomainAdmin_DiamondCreationForbidden',_,_}},
+ 'CosEventDomainAdmin_EventDomain':add_connection(ED, C12)),
+ ?match(ok, 'CosEventDomainAdmin_EventDomain':set_qos(ED, [AllowDiamonds])),
+
+ CID11 = ?match(9, 'CosEventDomainAdmin_EventDomain':add_connection(ED, C10)),
+ ?match([_,_,_,_,_,_,_,_,_],
+ 'CosEventDomainAdmin_EventDomain':get_all_connections(ED)),
+ ?match([_], 'CosEventDomainAdmin_EventDomain':get_diamonds(ED)),
+
+ CID12 = ?match(10, 'CosEventDomainAdmin_EventDomain':add_connection(ED, C11)),
+ ?match([_, _, _], 'CosEventDomainAdmin_EventDomain':get_diamonds(ED)),
+
+ CID13 = ?match(11, 'CosEventDomainAdmin_EventDomain':add_connection(ED, C12)),
+
+ ?match([_, _, _], 'CosEventDomainAdmin_EventDomain':get_diamonds(ED)),
+
+ ?match({'EXCEPTION',{'CosNotification_UnsupportedQoS',_,_}},
+ 'CosEventDomainAdmin_EventDomain':set_qos(ED, [ForbidDiamonds])),
+
+ ?match(ok, 'CosEventDomainAdmin_EventDomain':remove_connection(ED, CID10)),
+ ?match(ok, 'CosEventDomainAdmin_EventDomain':remove_connection(ED, CID11)),
+ ?match(ok, 'CosEventDomainAdmin_EventDomain':remove_connection(ED, CID12)),
+ ?match(ok, 'CosEventDomainAdmin_EventDomain':remove_connection(ED, CID13)),
+ ?match(ok, 'CosEventDomainAdmin_EventDomain':set_qos(ED, [ForbidDiamonds])),
+ ?match([_, _], 'CosEventDomainAdmin_EventDomain':get_qos(ED)),
+ ?match({'EXCEPTION',{'CosEventDomainAdmin_DiamondCreationForbidden',_,_}},
+ 'CosEventDomainAdmin_EventDomain':add_connection(ED, C10)),
+
+ ?match(ok, 'CosEventDomainAdmin_EventDomain':destroy(ED)),
+
+ ok.
+
+event_domain_factory_api(doc) -> ["Testing the CosEventDomain Factory API", ""];
+event_domain_factory_api(suite) -> [];
+event_domain_factory_api(_Config) ->
+
+ Cyclic = #'CosNotification_Property'{name=?CycleDetection,
+ value=any:create(orber_tc:short(),
+ ?ForbidCycles)},
+
+ BadProp = #'CosNotification_Property'{name="Wrong",
+ value=any:create(orber_tc:short(),
+ ?ForbidCycles)},
+
+ BadQoSVal = #'CosNotification_Property'{name=?CycleDetection,
+ value=any:create(orber_tc:short(),
+ 10)},
+
+ Fac = ?match({_,key,_,_,_,_},
+ cosEventDomainApp:start_factory()),
+ ?match([], 'CosEventDomainAdmin_EventDomainFactory':get_all_domains(Fac)),
+ ?match({'EXCEPTION',{'CosEventDomainAdmin_DomainNotFound',_}},
+ 'CosEventDomainAdmin_EventDomainFactory':get_event_domain(Fac, 0)),
+ {ED,_} = 'CosEventDomainAdmin_EventDomainFactory':create_event_domain(Fac, [Cyclic], []),
+ ?match([0], 'CosEventDomainAdmin_EventDomainFactory':get_all_domains(Fac)),
+ ED = 'CosEventDomainAdmin_EventDomainFactory':get_event_domain(Fac, 0),
+ ?match({'EXCEPTION',{'CosEventDomainAdmin_DomainNotFound',_}},
+ 'CosEventDomainAdmin_EventDomainFactory':get_event_domain(Fac, 1)),
+ corba:dispose(ED),
+ timer:sleep(3000),
+ ?match([], 'CosEventDomainAdmin_EventDomainFactory':get_all_domains(Fac)),
+ ?match({'EXCEPTION',{'CosEventDomainAdmin_DomainNotFound',_}},
+ 'CosEventDomainAdmin_EventDomainFactory':get_event_domain(Fac, 0)),
+ {ED2,_} = ?match({{_,key,_,_,_,_}, _},
+ 'CosEventDomainAdmin_EventDomainFactory':create_event_domain(Fac, [], [])),
+ ?match([1], 'CosEventDomainAdmin_EventDomainFactory':get_all_domains(Fac)),
+ ?match(ED2, 'CosEventDomainAdmin_EventDomainFactory':get_event_domain(Fac, 1)),
+ corba:dispose(ED2),
+
+ ?match({'EXCEPTION', {'CosNotification_UnsupportedQoS',_,_}},
+ 'CosEventDomainAdmin_EventDomainFactory':create_event_domain(Fac, [BadProp], [])),
+ ?match({'EXCEPTION',{'CosNotification_UnsupportedAdmin',_,_}},
+ 'CosEventDomainAdmin_EventDomainFactory':create_event_domain(Fac, [], [BadProp])),
+ ?match({'EXCEPTION',{'CosNotification_UnsupportedQoS',_,_}},
+ 'CosEventDomainAdmin_EventDomainFactory':create_event_domain(Fac, [BadQoSVal], [])),
+ ?match({'EXCEPTION',{'CosNotification_UnsupportedAdmin',_,_}},
+ 'CosEventDomainAdmin_EventDomainFactory':create_event_domain(Fac, [], [BadQoSVal])),
+
+ corba:dispose(Fac),
+ ok.
diff --git a/lib/cosEventDomain/test/generated_SUITE.erl b/lib/cosEventDomain/test/generated_SUITE.erl
new file mode 100644
index 0000000000..6c6996ca79
--- /dev/null
+++ b/lib/cosEventDomain/test/generated_SUITE.erl
@@ -0,0 +1,390 @@
+%%-----------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2004-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%
+%%
+%%
+%%-----------------------------------------------------------------
+%% File : generated_SUITE.erl
+%% Purpose :
+%%-----------------------------------------------------------------
+
+-module(generated_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/include/corba.hrl").
+
+-define(default_timeout, ?t:minutes(3)).
+
+-define(match(ExpectedRes, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+-define(nomatch(Not, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ Not ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS);
+ _ ->
+ AcTuAlReS
+ end
+ end()).
+
+
+-define(checktc(_Op),
+ fun(TC) ->
+ case orber_tc:check_tc(TC) of
+ false ->
+ io:format("###### ERROR ERROR ######~n~p - ~p~n", [Op, TC]),
+ ?line exit(TC);
+ true ->
+ true
+ end
+ end).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-export([]).
+-compile(export_all).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["This suite is for testing IC generated files"];
+all(suite) ->
+ ['CosEventDomainAdmin', 'CosEventDomainAdmin_DiamondSeq',
+ 'CosEventDomainAdmin_AlreadyExists', 'CosEventDomainAdmin_DomainIDSeq',
+ 'CosEventDomainAdmin_Connection', 'CosEventDomainAdmin_ConnectionIDSeq',
+ 'CosEventDomainAdmin_ConnectionNotFound', 'CosEventDomainAdmin_CycleCreationForbidden',
+ 'CosEventDomainAdmin_CycleSeq', 'CosEventDomainAdmin_DiamondCreationForbidden',
+ 'CosEventDomainAdmin_DomainNotFound', 'CosEventDomainAdmin_MemberIDSeq',
+ 'CosEventDomainAdmin_RouteSeq', 'CosEventDomainAdmin_EventDomainFactory',
+ 'CosEventDomainAdmin_EventDomain'].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventDomainAdmin'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventDomainAdmin'(doc) -> ["CosEventDomainAdmin"];
+'CosEventDomainAdmin'(suite) -> [];
+'CosEventDomainAdmin'(_) ->
+ ?match("CycleDetection", 'CosEventDomainAdmin':'CycleDetection'()),
+ ?match(0, 'CosEventDomainAdmin':'AuthorizeCycles'()),
+ ?match(1, 'CosEventDomainAdmin':'ForbidCycles'()),
+ ?match("DiamondDetection", 'CosEventDomainAdmin':'DiamondDetection'()),
+ ?match(0, 'CosEventDomainAdmin':'AuthorizeDiamonds'()),
+ ?match(1, 'CosEventDomainAdmin':'ForbidDiamonds'()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventDomainAdmin_DiamondSeq'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventDomainAdmin_DiamondSeq'(doc) -> ["CosEventDomainAdmin_DiamondSeq"];
+'CosEventDomainAdmin_DiamondSeq'(suite) -> [];
+'CosEventDomainAdmin_DiamondSeq'(_) ->
+ ?match(true, orber_tc:check_tc('CosEventDomainAdmin_DiamondSeq':tc())),
+ ?match("IDL:omg.org/CosEventDomainAdmin/DiamondSeq:1.0",
+ 'CosEventDomainAdmin_DiamondSeq':id()),
+ ?match("CosEventDomainAdmin_DiamondSeq",
+ 'CosEventDomainAdmin_DiamondSeq':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventDomainAdmin_AlreadyExists'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventDomainAdmin_AlreadyExists'(doc) -> ["CosEventDomainAdmin_AlreadyExists"];
+'CosEventDomainAdmin_AlreadyExists'(suite) -> [];
+'CosEventDomainAdmin_AlreadyExists'(_) ->
+ ?match(true, orber_tc:check_tc('CosEventDomainAdmin_AlreadyExists':tc())),
+ ?match("IDL:omg.org/CosEventDomainAdmin/AlreadyExists:1.0",
+ 'CosEventDomainAdmin_AlreadyExists':id()),
+ ?match("CosEventDomainAdmin_AlreadyExists",
+ 'CosEventDomainAdmin_AlreadyExists':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventDomainAdmin_DomainIDSeq'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventDomainAdmin_DomainIDSeq'(doc) -> ["CosEventDomainAdmin_DomainIDSeq"];
+'CosEventDomainAdmin_DomainIDSeq'(suite) -> [];
+'CosEventDomainAdmin_DomainIDSeq'(_) ->
+ ?match(true, orber_tc:check_tc('CosEventDomainAdmin_DomainIDSeq':tc())),
+ ?match("IDL:omg.org/CosEventDomainAdmin/DomainIDSeq:1.0",
+ 'CosEventDomainAdmin_DomainIDSeq':id()),
+ ?match("CosEventDomainAdmin_DomainIDSeq",
+ 'CosEventDomainAdmin_DomainIDSeq':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventDomainAdmin_Connection'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventDomainAdmin_Connection'(doc) -> ["CosEventDomainAdmin_Connection"];
+'CosEventDomainAdmin_Connection'(suite) -> [];
+'CosEventDomainAdmin_Connection'(_) ->
+ ?match(true, orber_tc:check_tc('CosEventDomainAdmin_Connection':tc())),
+ ?match("IDL:omg.org/CosEventDomainAdmin/Connection:1.0",
+ 'CosEventDomainAdmin_Connection':id()),
+ ?match("CosEventDomainAdmin_Connection",
+ 'CosEventDomainAdmin_Connection':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventDomainAdmin_ConnectionIDSeq'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventDomainAdmin_ConnectionIDSeq'(doc) -> ["CosEventDomainAdmin_ConnectionIDSeq"];
+'CosEventDomainAdmin_ConnectionIDSeq'(suite) -> [];
+'CosEventDomainAdmin_ConnectionIDSeq'(_) ->
+ ?match(true, orber_tc:check_tc('CosEventDomainAdmin_ConnectionIDSeq':tc())),
+ ?match("IDL:omg.org/CosEventDomainAdmin/ConnectionIDSeq:1.0",
+ 'CosEventDomainAdmin_ConnectionIDSeq':id()),
+ ?match("CosEventDomainAdmin_ConnectionIDSeq",
+ 'CosEventDomainAdmin_ConnectionIDSeq':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventDomainAdmin_ConnectionNotFound'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventDomainAdmin_ConnectionNotFound'(doc) -> ["CosEventDomainAdmin_ConnectionNotFound"];
+'CosEventDomainAdmin_ConnectionNotFound'(suite) -> [];
+'CosEventDomainAdmin_ConnectionNotFound'(_) ->
+ ?match(true, orber_tc:check_tc('CosEventDomainAdmin_ConnectionNotFound':tc())),
+ ?match("IDL:omg.org/CosEventDomainAdmin/ConnectionNotFound:1.0",
+ 'CosEventDomainAdmin_ConnectionNotFound':id()),
+ ?match("CosEventDomainAdmin_ConnectionNotFound",
+ 'CosEventDomainAdmin_ConnectionNotFound':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventDomainAdmin_CycleCreationForbidden'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventDomainAdmin_CycleCreationForbidden'(doc) -> ["CosEventDomainAdmin_CycleCreationForbidden"];
+'CosEventDomainAdmin_CycleCreationForbidden'(suite) -> [];
+'CosEventDomainAdmin_CycleCreationForbidden'(_) ->
+ ?match(true, orber_tc:check_tc('CosEventDomainAdmin_CycleCreationForbidden':tc())),
+ ?match("IDL:omg.org/CosEventDomainAdmin/CycleCreationForbidden:1.0",
+ 'CosEventDomainAdmin_CycleCreationForbidden':id()),
+ ?match("CosEventDomainAdmin_CycleCreationForbidden",
+ 'CosEventDomainAdmin_CycleCreationForbidden':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventDomainAdmin_CycleSeq'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventDomainAdmin_CycleSeq'(doc) -> ["CosEventDomainAdmin_CycleSeq"];
+'CosEventDomainAdmin_CycleSeq'(suite) -> [];
+'CosEventDomainAdmin_CycleSeq'(_) ->
+ ?match(true, orber_tc:check_tc('CosEventDomainAdmin_CycleSeq':tc())),
+ ?match("IDL:omg.org/CosEventDomainAdmin/CycleSeq:1.0",
+ 'CosEventDomainAdmin_CycleSeq':id()),
+ ?match("CosEventDomainAdmin_CycleSeq",
+ 'CosEventDomainAdmin_CycleSeq':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventDomainAdmin_DiamondCreationForbidden'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventDomainAdmin_DiamondCreationForbidden'(doc) -> ["CosEventDomainAdmin_DiamondCreationForbidden"];
+'CosEventDomainAdmin_DiamondCreationForbidden'(suite) -> [];
+'CosEventDomainAdmin_DiamondCreationForbidden'(_) ->
+ ?match(true, orber_tc:check_tc('CosEventDomainAdmin_DiamondCreationForbidden':tc())),
+ ?match("IDL:omg.org/CosEventDomainAdmin/DiamondCreationForbidden:1.0",
+ 'CosEventDomainAdmin_DiamondCreationForbidden':id()),
+ ?match("CosEventDomainAdmin_DiamondCreationForbidden",
+ 'CosEventDomainAdmin_DiamondCreationForbidden':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventDomainAdmin_DomainNotFound'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventDomainAdmin_DomainNotFound'(doc) -> ["CosEventDomainAdmin_DomainNotFound"];
+'CosEventDomainAdmin_DomainNotFound'(suite) -> [];
+'CosEventDomainAdmin_DomainNotFound'(_) ->
+ ?match(true, orber_tc:check_tc('CosEventDomainAdmin_DomainNotFound':tc())),
+ ?match("IDL:omg.org/CosEventDomainAdmin/DomainNotFound:1.0",
+ 'CosEventDomainAdmin_DomainNotFound':id()),
+ ?match("CosEventDomainAdmin_DomainNotFound",
+ 'CosEventDomainAdmin_DomainNotFound':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventDomainAdmin_MemberIDSeq'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventDomainAdmin_MemberIDSeq'(doc) -> ["CosEventDomainAdmin_MemberIDSeq"];
+'CosEventDomainAdmin_MemberIDSeq'(suite) -> [];
+'CosEventDomainAdmin_MemberIDSeq'(_) ->
+ ?match(true, orber_tc:check_tc('CosEventDomainAdmin_MemberIDSeq':tc())),
+ ?match("IDL:omg.org/CosEventDomainAdmin/MemberIDSeq:1.0",
+ 'CosEventDomainAdmin_MemberIDSeq':id()),
+ ?match("CosEventDomainAdmin_MemberIDSeq",
+ 'CosEventDomainAdmin_MemberIDSeq':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventDomainAdmin_RouteSeq'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventDomainAdmin_RouteSeq'(doc) -> ["CosEventDomainAdmin_RouteSeq"];
+'CosEventDomainAdmin_RouteSeq'(suite) -> [];
+'CosEventDomainAdmin_RouteSeq'(_) ->
+ ?match(true, orber_tc:check_tc('CosEventDomainAdmin_RouteSeq':tc())),
+ ?match("IDL:omg.org/CosEventDomainAdmin/RouteSeq:1.0",
+ 'CosEventDomainAdmin_RouteSeq':id()),
+ ?match("CosEventDomainAdmin_RouteSeq",
+ 'CosEventDomainAdmin_RouteSeq':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventDomainAdmin_EventDomainFactory'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventDomainAdmin_EventDomainFactory'(doc) -> ["CosEventDomainAdmin_EventDomainFactory"];
+'CosEventDomainAdmin_EventDomainFactory'(suite) -> [];
+'CosEventDomainAdmin_EventDomainFactory'(_) ->
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomainFactory':oe_tc(create_event_domain)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomainFactory':oe_tc(get_all_domains)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomainFactory':oe_tc(get_event_domain)),
+ ?match(undefined, 'CosEventDomainAdmin_EventDomainFactory':oe_tc(undefined)),
+ ?match([_|_], 'CosEventDomainAdmin_EventDomainFactory':oe_get_interface()),
+ ?match("IDL:omg.org/CosEventDomainAdmin/EventDomainFactory:1.0",
+ 'CosEventDomainAdmin_EventDomainFactory':typeID()),
+ check_tc('CosEventDomainAdmin_EventDomainFactory':oe_get_interface()),
+ ?match(true, 'CosEventDomainAdmin_EventDomainFactory':oe_is_a('CosEventDomainAdmin_EventDomainFactory':typeID())),
+ ?match(false, 'CosEventDomainAdmin_EventDomainFactory':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosEventDomainAdmin_EventDomain'
+%% Description:
+%%-----------------------------------------------------------------
+'CosEventDomainAdmin_EventDomain'(doc) -> ["CosEventDomainAdmin_EventDomain"];
+'CosEventDomainAdmin_EventDomain'(suite) -> [];
+'CosEventDomainAdmin_EventDomain'(_) ->
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(add_channel)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(get_all_channels)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(get_channel)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(remove_channel)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(add_connection)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(get_all_connections)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(get_connection)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(remove_connection)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(get_offer_channels)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(get_subscription_channels)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(destroy)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(get_cycles)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(get_diamonds)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(set_default_consumer_channel)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(set_default_supplier_channel)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(connect_push_consumer)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(connect_pull_consumer)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(connect_push_supplier)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(connect_pull_supplier)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(connect_structured_push_consumer)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(connect_structured_pull_consumer)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(connect_structured_push_supplier)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(connect_structured_pull_supplier)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(connect_sequence_push_consumer)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(connect_sequence_pull_consumer)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(connect_sequence_push_supplier)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(connect_sequence_pull_supplier)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(connect_push_consumer_with_id)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(connect_pull_consumer_with_id)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(connect_push_supplier_with_id)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(connect_pull_supplier_with_id)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(connect_structured_push_consumer_with_id)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(connect_structured_pull_consumer_with_id)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(connect_structured_push_supplier_with_id)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(connect_structured_pull_supplier_with_id)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(connect_sequence_push_consumer_with_id)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(connect_sequence_pull_consumer_with_id)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(connect_sequence_push_supplier_with_id)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(connect_sequence_pull_supplier_with_id)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(get_qos)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(set_qos)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(validate_qos)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(get_admin)),
+ ?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(set_admin)),
+ ?match(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(undefined)),
+ ?match([_|_], 'CosEventDomainAdmin_EventDomain':oe_get_interface()),
+ ?match("IDL:omg.org/CosEventDomainAdmin/EventDomain:1.0",
+ 'CosEventDomainAdmin_EventDomain':typeID()),
+ check_tc('CosEventDomainAdmin_EventDomain':oe_get_interface()),
+ ?match(true, 'CosEventDomainAdmin_EventDomain':oe_is_a('CosEventDomainAdmin_EventDomain':typeID())),
+ ?match(true, 'CosEventDomainAdmin_EventDomain':oe_is_a('CosNotification_QoSAdmin':typeID())),
+ ?match(true, 'CosEventDomainAdmin_EventDomain':oe_is_a('CosNotification_AdminPropertiesAdmin':typeID())),
+ ?match(false, 'CosEventDomainAdmin_EventDomain':oe_is_a("wrong")),
+ ok.
+
+
+
+%%-----------------------------------------------------------------
+%% MISC functions
+%%-----------------------------------------------------------------
+check_tc([]) ->
+ ok;
+check_tc([{Op, {RetType, InParameters, OutParameters}}|T]) ->
+ io:format("checked - ~s~n", [Op]),
+ lists:all(?checktc(Op), [RetType|InParameters]),
+ lists:all(?checktc(Op), OutParameters),
+ check_tc(T).
+
+
diff --git a/lib/cosEventDomain/vsn.mk b/lib/cosEventDomain/vsn.mk
index 483b130819..dceee34181 100644
--- a/lib/cosEventDomain/vsn.mk
+++ b/lib/cosEventDomain/vsn.mk
@@ -1,7 +1,9 @@
-COSEVENTDOMAIN_VSN = 1.1.8
+COSEVENTDOMAIN_VSN = 1.1.9
-TICKETS = OTP-8353 \
+TICKETS = OTP-8543
+
+TICKETS_1.1.8 = OTP-8353 \
OTP-8355
TICKETS_1.1.7 = OTP-8201
diff --git a/lib/cosNotification/doc/src/notes.xml b/lib/cosNotification/doc/src/notes.xml
index 8062c883cf..de5a3e5f4c 100644
--- a/lib/cosNotification/doc/src/notes.xml
+++ b/lib/cosNotification/doc/src/notes.xml
@@ -33,6 +33,17 @@
<section>
<title>cosNotification 1.1.14</title>
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>
+ Test suites published.</p>
+ <p>
+ Own Id: OTP-8543 Aux Id:</p>
+ </item>
+ </list>
+ </section>
<section>
<title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/cosNotification/test/Makefile b/lib/cosNotification/test/Makefile
new file mode 100644
index 0000000000..df8f9e919b
--- /dev/null
+++ b/lib/cosNotification/test/Makefile
@@ -0,0 +1,190 @@
+#
+# %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%
+#
+#
+include $(ERL_TOP)/make/target.mk
+include $(ERL_TOP)/make/$(TARGET)/otp.mk
+
+# ----------------------------------------------------
+# Application version
+# ----------------------------------------------------
+include ../vsn.mk
+VSN=$(COSNOTIFICATION_VSN)
+# ----------------------------------------------------
+# Release directory specification
+# ----------------------------------------------------
+RELSYSDIR = $(RELEASE_PATH)/cosNotification_test
+
+# ----------------------------------------------------
+# Target Specs
+# ----------------------------------------------------
+TEST_SPEC_FILE = cosNotification.spec
+
+
+IDL_FILES =
+
+IDLOUTDIR = idl_output
+
+MODULES = \
+ notification_SUITE \
+ grammar_SUITE \
+ eventDB_SUITE \
+ generated_SUITE \
+ notify_test_impl
+
+GEN_MODULES = \
+ oe_notify_test_server \
+ notify_test_data \
+ notify_test_computer \
+ notify_test_studies \
+ notify_test_ShortArray \
+ notify_test_uni1 \
+ notify_test_uni2 \
+ notify_test_X \
+ notify_test_K \
+ notify_test_SeqPushC \
+ notify_test_StrPushC \
+ notify_test_AnyPushC \
+ notify_test_SeqPullC \
+ notify_test_StrPullC \
+ notify_test_AnyPullC \
+ notify_test_SeqPushS \
+ notify_test_StrPushS \
+ notify_test_AnyPushS \
+ notify_test_SeqPullS \
+ notify_test_StrPullS \
+ notify_test_AnyPullS \
+ notify_test_funcs
+
+GEN_HRL_FILES = \
+ oe_notify_test_server.hrl \
+ notify_test_SeqPushC.hrl \
+ notify_test_StrPushC.hrl \
+ notify_test_AnyPushC.hrl \
+ notify_test_SeqPullC.hrl \
+ notify_test_StrPullC.hrl \
+ notify_test_AnyPullC.hrl \
+ notify_test_SeqPushS.hrl \
+ notify_test_StrPushS.hrl \
+ notify_test_AnyPushS.hrl \
+ notify_test_SeqPullS.hrl \
+ notify_test_StrPullS.hrl \
+ notify_test_AnyPullS.hrl \
+ notify_test.hrl \
+ notify_test_funcs.hrl
+
+ERL_FILES = $(MODULES:%=%.erl)
+
+HRL_FILES =
+
+GEN_FILES = \
+ $(GEN_HRL_FILES:%=$(IDLOUTDIR)/%) \
+ $(GEN_MODULES:%=$(IDLOUTDIR)/%.erl)
+
+GEN_TARGET_FILES = $(GEN_MODULES:%=$(IDLOUTDIR)/%.$(EMULATOR))
+
+SUITE_TARGET_FILES = $(MODULES:%=%.$(EMULATOR))
+
+TARGET_FILES = \
+ $(GEN_TARGET_FILES) \
+ $(SUITE_TARGET_FILES)
+
+
+# ----------------------------------------------------
+# PROGRAMS
+# ----------------------------------------------------
+LOCAL_CLASSPATH = $(ERL_TOP)lib/cosNotification/priv:$(ERL_TOP)lib/cosNotification/test
+# ----------------------------------------------------
+# FLAGS
+# ----------------------------------------------------
+ERL_IDL_FLAGS += \
+ -pa $(ERL_TOP)/lib/cosNotification/ebin \
+ -pa $(ERL_TOP)/lib/cosNotification/src \
+ -pa $(ERL_TOP)/lib/cosTime/ebin \
+ -pa $(ERL_TOP)/lib/cosTime/include \
+ -pa $(ERL_TOP)/lib/orber/ebin \
+ -pa $(ERL_TOP)/lib/ic/ebin \
+ -pa $(ERL_TOP)/lib/cosNotification/include \
+ -I$(ERL_TOP)/lib/cosEvent/src \
+ -I$(ERL_TOP)/lib/cosNotification/include \
+
+ERL_COMPILE_FLAGS += \
+ $(ERL_IDL_FLAGS) \
+ -pa $(ERL_TOP)/lib/orber/include \
+ -pa $(ERL_TOP)/internal_tools/test_server/ebin \
+ -pa $(ERL_TOP)/lib/cosNotification/ebin \
+ -pa $(ERL_TOP)/lib/cosNotification/test/idl_output \
+ -pa $(ERL_TOP)/lib/cosTime/ebin \
+ -pa $(ERL_TOP)/lib/cosTime/include \
+ -pa $(ERL_TOP)/lib/cosNotification/include \
+ -pa $(ERL_TOP)/lib/ic/ebin \
+ -I$(ERL_TOP)/lib/cosTime/ebin \
+ -I$(ERL_TOP)/lib/cosTime/include \
+ -I$(ERL_TOP)/lib/orber/include \
+ -I$(ERL_TOP)/lib/cosNotification/src \
+ -I$(ERL_TOP)/lib/cosNotification/include \
+ -I$(ERL_TOP)/lib/cosNotification \
+ -I$(ERL_TOP)/lib/cosNotification/test/$(IDLOUTDIR) \
+ -I$(ERL_TOP)/lib/test_server/include
+
+# ----------------------------------------------------
+# Targets
+# ----------------------------------------------------
+
+
+tests debug opt: $(TARGET_FILES)
+
+clean:
+ rm -f idl_output/*
+ rm -f $(TARGET_FILES)
+ rm -f errs core *~
+
+docs:
+
+# ----------------------------------------------------
+# Special Targets
+# ----------------------------------------------------
+
+TGT_TEST = \
+ $(GEN_HRL_FILES:%=$(IDLOUTDIR)/%) \
+ $(GEN_MODULES:%=$(IDLOUTDIR)/%.erl)
+
+$(TGT_TEST): notify_test_server.idl
+ erlc $(ERL_COMPILE_FLAGS) -o$(IDLOUTDIR) \
+ +'{cfgfile,"notify_test_server.cfg"}' notify_test_server.idl
+
+# ----------------------------------------------------
+# Release Targets
+# ----------------------------------------------------
+# We don't copy generated intermediate erlang and hrl files
+
+include $(ERL_TOP)/make/otp_release_targets.mk
+
+release_spec:
+
+release_docs_spec:
+
+release_tests_spec: tests
+ $(INSTALL_DIR) $(RELSYSDIR)
+ $(INSTALL_DATA) $(IDL_FILES) $(TEST_SPEC_FILE) \
+ $(ERL_FILES) $(RELSYSDIR)
+ $(INSTALL_DIR) $(RELSYSDIR)/$(IDLOUTDIR)
+ $(INSTALL_DATA) $(GEN_TARGET_FILES) $(GEN_FILES) \
+ $(RELSYSDIR)/$(IDLOUTDIR)
+ $(INSTALL_DATA) $(SUITE_TARGET_FILES) $(RELSYSDIR)
+
diff --git a/lib/cosNotification/test/cosNotification.spec b/lib/cosNotification/test/cosNotification.spec
new file mode 100644
index 0000000000..8df89e7908
--- /dev/null
+++ b/lib/cosNotification/test/cosNotification.spec
@@ -0,0 +1,19 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1999-2010. 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%
+%%
+{topcase, {dir, "../cosNotification_test"}}.
diff --git a/lib/cosNotification/test/eventDB_SUITE.erl b/lib/cosNotification/test/eventDB_SUITE.erl
new file mode 100644
index 0000000000..9ddfb3d902
--- /dev/null
+++ b/lib/cosNotification/test/eventDB_SUITE.erl
@@ -0,0 +1,902 @@
+%%--------------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2000-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%
+%%
+%%
+%%--------------------------------------------------------------------
+%% File : eventDB_SUITE.erl
+%% Purpose :
+%%--------------------------------------------------------------------
+
+-module(eventDB_SUITE).
+%%--------------- INCLUDES -----------------------------------
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/include/ifr_types.hrl").
+%% cosEvent files.
+-include_lib("cosEvent/include/CosEventChannelAdmin.hrl").
+%% cosTime files.
+-include_lib("cosTime/include/TimeBase.hrl").
+%% Application files
+-include_lib("cosNotification/include/CosNotification.hrl").
+-include_lib("cosNotification/include/CosNotifyChannelAdmin.hrl").
+-include_lib("cosNotification/include/CosNotifyComm.hrl").
+-include_lib("cosNotification/include/CosNotifyFilter.hrl").
+
+-include_lib("cosNotification/src/CosNotification_Definitions.hrl").
+
+-include("idl_output/notify_test.hrl").
+
+-include("test_server.hrl").
+
+%%--------------- DEFINES ------------------------------------
+-define(default_timeout, ?t:minutes(20)).
+-define(match(ExpectedRes, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+
+-define(EVENT1, ?not_CreateSE("","event1","",
+ [#'CosNotification_Property'
+ {name="Priority",
+ value=any:create(orber_tc:short(), 0)},
+ #'CosNotification_Property'
+ {name="StartTime",
+ value=any:create('TimeBase_UtcT':tc(),
+ #'TimeBase_UtcT'
+ {time=900000000,
+ inacclo=0, inacchi=0, tdf=2})},
+ #'CosNotification_Property'
+ {name="StopTime",
+ value=any:create('TimeBase_UtcT':tc(),
+ #'TimeBase_UtcT'
+ {time=900000000,
+ inacclo=0, inacchi=0, tdf=2})},
+ #'CosNotification_Property'
+ {name="Timeout",
+ value=any:create(orber_tc:unsigned_long_long(), 900000000)}],
+ [], any:create(orber_tc:null(), null))).
+-define(EVENT2, ?not_CreateSE("","event2","",
+ [#'CosNotification_Property'
+ {name="Priority",
+ value=any:create(orber_tc:short(), 0)},
+ #'CosNotification_Property'
+ {name="StartTime",
+ value=any:create('TimeBase_UtcT':tc(),
+ #'TimeBase_UtcT'
+ {time=800000000,
+ inacclo=0, inacchi=0, tdf=2})},
+ #'CosNotification_Property'
+ {name="StopTime",
+ value=any:create('TimeBase_UtcT':tc(),
+ #'TimeBase_UtcT'
+ {time=800000000,
+ inacclo=0, inacchi=0, tdf=2})},
+ #'CosNotification_Property'
+ {name="Timeout",
+ value=any:create(orber_tc:unsigned_long_long(), 800000000)}],
+ [], any:create(orber_tc:null(), null))).
+-define(EVENT3, ?not_CreateSE("","event3","",
+ [#'CosNotification_Property'
+ {name="Priority",
+ value=any:create(orber_tc:short(), 0)},
+ #'CosNotification_Property'
+ {name="StartTime",
+ value=any:create('TimeBase_UtcT':tc(),
+ #'TimeBase_UtcT'
+ {time=700000000,
+ inacclo=0, inacchi=0, tdf=2})},
+ #'CosNotification_Property'
+ {name="StopTime",
+ value=any:create('TimeBase_UtcT':tc(),
+ #'TimeBase_UtcT'
+ {time=700000000,
+ inacclo=0, inacchi=0, tdf=2})},
+ #'CosNotification_Property'
+ {name="Timeout",
+ value=any:create(orber_tc:unsigned_long_long(), 700000000)}],
+ [], any:create(orber_tc:null(), null))).
+-define(EVENT4, ?not_CreateSE("","event4","",
+ [#'CosNotification_Property'
+ {name="Priority",
+ value=any:create(orber_tc:short(), 2)},
+ #'CosNotification_Property'
+ {name="StartTime",
+ value=any:create('TimeBase_UtcT':tc(),
+ #'TimeBase_UtcT'
+ {time=300000000,
+ inacclo=0, inacchi=0, tdf=2})},
+ #'CosNotification_Property'
+ {name="StopTime",
+ value=any:create('TimeBase_UtcT':tc(),
+ #'TimeBase_UtcT'
+ {time=300000000,
+ inacclo=0, inacchi=0, tdf=2})},
+ #'CosNotification_Property'
+ {name="Timeout",
+ value=any:create(orber_tc:unsigned_long_long(), 300000000)}],
+ [], any:create(orber_tc:null(), null))).
+-define(EVENT5, ?not_CreateSE("","event5","",
+ [#'CosNotification_Property'
+ {name="Priority",
+ value=any:create(orber_tc:short(), 2)},
+ #'CosNotification_Property'
+ {name="StartTime",
+ value=any:create('TimeBase_UtcT':tc(),
+ #'TimeBase_UtcT'
+ {time=200000000,
+ inacclo=0, inacchi=0, tdf=2})},
+ #'CosNotification_Property'
+ {name="StopTime",
+ value=any:create('TimeBase_UtcT':tc(),
+ #'TimeBase_UtcT'
+ {time=200000000,
+ inacclo=0, inacchi=0, tdf=2})},
+ #'CosNotification_Property'
+ {name="Timeout",
+ value=any:create(orber_tc:unsigned_long_long(), 200000000)}],
+ [], any:create(orber_tc:null(), null))).
+-define(EVENT6, ?not_CreateSE("","event6","",
+ [#'CosNotification_Property'
+ {name="Priority",
+ value=any:create(orber_tc:short(), 0)},
+ #'CosNotification_Property'
+ {name="StartTime",
+ value=any:create('TimeBase_UtcT':tc(),
+ #'TimeBase_UtcT'
+ {time=500000000,
+ inacclo=0, inacchi=0, tdf=2})},
+ #'CosNotification_Property'
+ {name="StopTime",
+ value=any:create('TimeBase_UtcT':tc(),
+ #'TimeBase_UtcT'
+ {time=500000000,
+ inacclo=0, inacchi=0, tdf=2})},
+ #'CosNotification_Property'
+ {name="Timeout",
+ value=any:create(orber_tc:unsigned_long_long(), 500000000)}],
+ [], any:create(orber_tc:null(), null))).
+-define(EVENT7, ?not_CreateSE("","event7","",
+ [#'CosNotification_Property'
+ {name="Priority",
+ value=any:create(orber_tc:short(), -1)},
+ #'CosNotification_Property'
+ {name="StartTime",
+ value=any:create('TimeBase_UtcT':tc(),
+ #'TimeBase_UtcT'
+ {time=400000000,
+ inacclo=0, inacchi=0, tdf=2})},
+ #'CosNotification_Property'
+ {name="StopTime",
+ value=any:create('TimeBase_UtcT':tc(),
+ #'TimeBase_UtcT'
+ {time=400000000,
+ inacclo=0, inacchi=0, tdf=2})},
+ #'CosNotification_Property'
+ {name="Timeout",
+ value=any:create(orber_tc:unsigned_long_long(), 400000000)}],
+ [], any:create(orber_tc:null(), null))).
+-define(EVENT8, ?not_CreateSE("","event8","",
+ [#'CosNotification_Property'
+ {name="Priority",
+ value=any:create(orber_tc:short(), -1)},
+ #'CosNotification_Property'
+ {name="StartTime",
+ value=any:create('TimeBase_UtcT':tc(),
+ #'TimeBase_UtcT'
+ {time=600000000,
+ inacclo=0, inacchi=0, tdf=2})},
+ #'CosNotification_Property'
+ {name="StopTime",
+ value=any:create('TimeBase_UtcT':tc(),
+ #'TimeBase_UtcT'
+ {time=600000000,
+ inacclo=0, inacchi=0, tdf=2})},
+ #'CosNotification_Property'
+ {name="Timeout",
+ value=any:create(orber_tc:unsigned_long_long(), 600000000)}],
+ [], any:create(orber_tc:null(), null))).
+-define(EVENT9, ?not_CreateSE("","event9","",
+ [#'CosNotification_Property'
+ {name="Priority",
+ value=any:create(orber_tc:short(), 0)},
+ #'CosNotification_Property'
+ {name="StartTime",
+ value=any:create('TimeBase_UtcT':tc(),
+ #'TimeBase_UtcT'
+ {time=100000000,
+ inacclo=0, inacchi=0, tdf=2})},
+ #'CosNotification_Property'
+ {name="StopTime",
+ value=any:create('TimeBase_UtcT':tc(),
+ #'TimeBase_UtcT'
+ {time=100000000,
+ inacclo=0, inacchi=0, tdf=2})},
+ #'CosNotification_Property'
+ {name="Timeout",
+ value=any:create(orber_tc:unsigned_long_long(), 100000000)}],
+ [], any:create(orber_tc:null(), null))).
+
+-define(EVENTS, [?EVENT1, ?EVENT2, ?EVENT3, ?EVENT4, ?EVENT5, ?EVENT6, ?EVENT7,
+ ?EVENT8, ?EVENT9]).
+
+
+-define(PRIOORDER, [?EVENT4, ?EVENT5, ?EVENT1, ?EVENT2, ?EVENT3, ?EVENT6, ?EVENT9,
+ ?EVENT7, ?EVENT8]).
+
+-define(FIFOORDER, ?EVENTS).
+
+-define(DEADLINEORDER, [?EVENT9, ?EVENT5, ?EVENT4, ?EVENT7, ?EVENT6, ?EVENT8, ?EVENT3,
+ ?EVENT2, ?EVENT1]).
+
+-define(NO_OF_EVENTS, 9).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1, cases/0, init_all/1, finish_all/1, reorder_api/1, lookup_api/1,
+ discard_api/1, max_events_api/1, gc_api/1, auto_gc_api/1,
+ start_stop_time_api/1, mapping_filter_api/1, persisten_event_api/1,
+ init_per_testcase/2, fin_per_testcase/2]).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["API tests for the cosNotification interfaces", ""];
+all(suite) -> {req,
+ [mnesia, orber],
+ {conf, init_all, cases(), finish_all}}.
+
+cases() ->
+ [persisten_event_api, start_stop_time_api, mapping_filter_api,
+ max_events_api, discard_api, reorder_api, lookup_api, gc_api,
+ auto_gc_api].
+
+
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+init_all(Config) ->
+ Path = code:which(?MODULE),
+ code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
+ orber:jump_start(),
+ cosTime:install_time(),
+ cosTime:start(),
+ if
+ is_list(Config) ->
+ Config;
+ true ->
+ exit("Config not a list")
+ end.
+
+finish_all(Config) ->
+ Path = code:which(?MODULE),
+ code:del_path(filename:join(filename:dirname(Path), "idl_output")),
+ cosTime:stop(),
+ cosTime:uninstall_time(),
+ orber:jump_stop(),
+ Config.
+
+
+%%-----------------------------------------------------------------
+%% cosNotification_eventDB lookup API tests
+%%-----------------------------------------------------------------
+mapping_filter_api(doc) -> ["The event DB is used to store events which cannot be",
+ "delivered at once. This case is supposed to test",
+ "that the events are delivered in the correct order",
+ "if a MappingFilter have benn associated.",
+ ""];
+mapping_filter_api(suite) -> [];
+mapping_filter_api(_Config) ->
+ InitQoS = ?not_CreateInitQoS(),
+ InitQoS2 = ?not_SetMaxEventsPerConsumer(InitQoS,100),
+ InitQoS3 = ?not_SetStartTimeSupported(InitQoS2, false),
+ InitQoS4 = ?not_SetStopTimeSupported(InitQoS3, true),
+ QoS = ?not_SetDiscardPolicy(InitQoS4, ?not_AnyOrder),
+
+ PriorityQoS = ?not_SetOrderPolicy(QoS, ?not_PriorityOrder),
+ DeadlineQoS = ?not_SetOrderPolicy(QoS, ?not_DeadlineOrder),
+
+ %% "Calculate" data once:
+ %% NOTE! Even though the an Event do not match any of the constarints the
+ %% default value will be used. Hence, the events will not be stored in the
+ %% way described in the definitions above. For example, when using deadline order
+ %% all the events will be stored in FIFO order since the usag of a MappingFilter
+ %% all evnts will have the same deadline (except event6).
+ Events = ?EVENTS,
+ PrioOrder = [?EVENT6, ?EVENT1, ?EVENT2, ?EVENT3, ?EVENT4, ?EVENT5, ?EVENT7,
+ ?EVENT8, ?EVENT9],
+ DeadlineOrder = [?EVENT1, ?EVENT2, ?EVENT3, ?EVENT4, ?EVENT5, ?EVENT7, ?EVENT8,
+ ?EVENT9],
+
+
+ FiFac = 'CosNotifyFilter_FilterFactory':oe_create(),
+ ?match({_,key,_,_,_,_}, FiFac),
+
+ PrioFilter = 'CosNotifyFilter_FilterFactory':
+ create_mapping_filter(FiFac, "EXTENDED_TCL", any:create(orber_tc:short(), 0)),
+ DLFilter = 'CosNotifyFilter_FilterFactory':
+ create_mapping_filter(FiFac, "EXTENDED_TCL", any:create(orber_tc:unsigned_long_long(), 1000000000)),
+
+ ?match([_],
+ 'CosNotifyFilter_MappingFilter':add_mapping_constraints(PrioFilter,
+ [#'CosNotifyFilter_MappingConstraintPair'
+ {constraint_expression = #'CosNotifyFilter_ConstraintExp'
+ {event_types = [#'CosNotification_EventType'
+ {domain_name = "",
+ type_name = "event6"}],
+ constraint_expr = "2==2"},
+ result_to_set = any:create(orber_tc:short(), 10)}])),
+ ?match([_],
+ 'CosNotifyFilter_MappingFilter':add_mapping_constraints(DLFilter,
+ [#'CosNotifyFilter_MappingConstraintPair'
+ {constraint_expression = #'CosNotifyFilter_ConstraintExp'
+ {event_types = [#'CosNotification_EventType'
+ {domain_name = "",
+ type_name = "event6"}],
+ constraint_expr = "2==2"},
+ result_to_set = any:create(orber_tc:unsigned_long_long(), 200000000)}])),
+
+
+ do_lookup(PriorityQoS, Events, PrioOrder, "Priority Order", undefined, PrioFilter, 0),
+ do_lookup(DeadlineQoS, Events, DeadlineOrder, "Deadline Order", DLFilter, undefined, 23000),
+ ok.
+
+do_lookup(QoS, Events, Return, Txt, DLFilter, PrioFilter, Timeout) ->
+ io:format("#################### ~s ###################~n", [Txt]),
+ Ref = cosNotification_eventDB:create_db(QoS, 60, 50, undefined),
+ create_loop(Events, Ref, DLFilter, PrioFilter),
+ timer:sleep(Timeout),
+ ?match({Return,_}, cosNotification_eventDB:get_events(Ref, ?NO_OF_EVENTS)),
+ cosNotification_eventDB:destroy_db(Ref).
+
+%%-----------------------------------------------------------------
+%% cosNotification_eventDB discard API tests
+%%-----------------------------------------------------------------
+discard_api(doc) -> ["The event DB is used to store events which cannot be",
+ "delivered at once. If MaxEvents limit is reached there",
+ "different ways we can discard the. This case will test",
+ "all permutations of order and discard policies.",
+ ""];
+discard_api(suite) -> [];
+discard_api(_Config) ->
+ InitQoS1 = ?not_CreateInitQoS(),
+ InitQoS2 = ?not_SetPriority(InitQoS1, 10),
+ InitQoS3 = ?not_SetStartTimeSupported(InitQoS2, false),
+ QoS = ?not_SetMaxEventsPerConsumer(InitQoS3, 5),
+ %% The different order policies. To each order we must apply every possible
+ %% discard policy to each order policy setting. We also have to test and
+ %% change the policies for each setting.
+ AnyQoS = ?not_SetOrderPolicy(QoS, ?not_AnyOrder),
+ PriorityQoS = ?not_SetOrderPolicy(QoS, ?not_PriorityOrder),
+ FifoQoS = ?not_SetOrderPolicy(QoS, ?not_FifoOrder),
+ DeadlineQoS = ?not_SetOrderPolicy(QoS, ?not_DeadlineOrder),
+
+ Events = ?EVENTS,
+
+ %% Test using Any discard policy
+ do_discard(Events, ?not_SetDiscardPolicy(AnyQoS, ?not_AnyOrder),
+ [?EVENT4, ?EVENT5, ?EVENT1, ?EVENT2, ?EVENT3],
+ "Discard and Order eq. Any"),
+ do_discard(Events, ?not_SetDiscardPolicy(PriorityQoS, ?not_AnyOrder),
+ [?EVENT4, ?EVENT5, ?EVENT1, ?EVENT2, ?EVENT3],
+ "Discard Any and Order Priority"),
+ do_discard(Events, ?not_SetDiscardPolicy(FifoQoS, ?not_AnyOrder),
+ [?EVENT1, ?EVENT2, ?EVENT3, ?EVENT4, ?EVENT5],
+ "Discard Any and Order Fifo"),
+ do_discard(Events, ?not_SetDiscardPolicy(DeadlineQoS, ?not_AnyOrder),
+ [?EVENT5, ?EVENT4, ?EVENT3, ?EVENT2, ?EVENT1],
+ "Discard Any and Order Deadline"),
+
+ %% Test using RejectNewEvents discard policy
+ do_discard(Events, ?not_SetDiscardPolicy(AnyQoS, ?not_RejectNewEvents),
+ [?EVENT4, ?EVENT5, ?EVENT1, ?EVENT2, ?EVENT3],
+ "Discard RejectNewEvents and Order Any"),
+ do_discard(Events, ?not_SetDiscardPolicy(PriorityQoS, ?not_RejectNewEvents),
+ [?EVENT4, ?EVENT5, ?EVENT1, ?EVENT2, ?EVENT3],
+ "Discard RejectNewEvents and Order Priority"),
+ do_discard(Events, ?not_SetDiscardPolicy(FifoQoS, ?not_RejectNewEvents),
+ [?EVENT1, ?EVENT2, ?EVENT3, ?EVENT4, ?EVENT5],
+ "Discard RejectNewEvents and Order Fifo"),
+ do_discard(Events, ?not_SetDiscardPolicy(DeadlineQoS, ?not_RejectNewEvents),
+ [?EVENT5, ?EVENT4, ?EVENT3, ?EVENT2, ?EVENT1],
+ "Discard RejectNewEvents and Order Deadline"),
+
+ %% Test using Lifo discard policy
+ do_discard(Events, ?not_SetDiscardPolicy(AnyQoS, ?not_LifoOrder),
+ [?EVENT4, ?EVENT5, ?EVENT1, ?EVENT2, ?EVENT3],
+ "Discard Lifo and Order Any"),
+ do_discard(Events, ?not_SetDiscardPolicy(PriorityQoS, ?not_LifoOrder),
+ [?EVENT4, ?EVENT5, ?EVENT1, ?EVENT2, ?EVENT3],
+ "Discard Lifo and Order Priority"),
+ do_discard(Events, ?not_SetDiscardPolicy(FifoQoS, ?not_LifoOrder),
+ [?EVENT1, ?EVENT2, ?EVENT3, ?EVENT4, ?EVENT5],
+ "Discard Lifo and Order Fifo"),
+ do_discard(Events, ?not_SetDiscardPolicy(DeadlineQoS, ?not_LifoOrder),
+ [?EVENT5, ?EVENT4, ?EVENT3, ?EVENT2, ?EVENT1],
+ "Discard Lifo and Order Deadline"),
+
+ %% Test using Fifo discard policy
+ do_discard(Events, ?not_SetDiscardPolicy(AnyQoS, ?not_FifoOrder),
+ [?EVENT5, ?EVENT6, ?EVENT9, ?EVENT7, ?EVENT8],
+ "Discard Fifo and Order Any"),
+ do_discard(Events, ?not_SetDiscardPolicy(PriorityQoS, ?not_FifoOrder),
+ [?EVENT5, ?EVENT6, ?EVENT9, ?EVENT7, ?EVENT8],
+ "Discard Fifo and Order Priority"),
+ do_discard(Events, ?not_SetDiscardPolicy(FifoQoS, ?not_FifoOrder),
+ [?EVENT5, ?EVENT6, ?EVENT7, ?EVENT8, ?EVENT9],
+ "Discard Fifo and Order Fifo"),
+ do_discard(Events, ?not_SetDiscardPolicy(DeadlineQoS, ?not_FifoOrder),
+ [?EVENT9, ?EVENT5, ?EVENT7, ?EVENT6, ?EVENT8],
+ "Discard Fifo and Order Deadline"),
+
+ %% Test using Priority discard policy
+ do_discard(Events, ?not_SetDiscardPolicy(AnyQoS, ?not_PriorityOrder),
+ [?EVENT4, ?EVENT5, ?EVENT1, ?EVENT2, ?EVENT3],
+ "Discard Priority and Order Any"),
+ do_discard(Events, ?not_SetDiscardPolicy(PriorityQoS, ?not_PriorityOrder),
+ [?EVENT4, ?EVENT5, ?EVENT1, ?EVENT2, ?EVENT3],
+ "Discard Priority and Order Priority"),
+ do_discard(Events, ?not_SetDiscardPolicy(FifoQoS, ?not_PriorityOrder),
+ [?EVENT1, ?EVENT2, ?EVENT3, ?EVENT4, ?EVENT5],
+ "Discard Priority and Order Fifo"),
+ do_discard(Events, ?not_SetDiscardPolicy(DeadlineQoS, ?not_PriorityOrder),
+ [?EVENT5, ?EVENT4, ?EVENT3, ?EVENT2, ?EVENT1],
+ "Discard Priority and Order Deadline"),
+
+ %% Test using Deadline discard policy
+ do_discard(Events, ?not_SetDiscardPolicy(AnyQoS, ?not_DeadlineOrder),
+ [?EVENT1, ?EVENT2, ?EVENT3, ?EVENT6, ?EVENT8],
+ "Discard Deadline and Order Any"),
+ do_discard(Events, ?not_SetDiscardPolicy(PriorityQoS, ?not_DeadlineOrder),
+ [?EVENT1, ?EVENT2, ?EVENT3, ?EVENT6, ?EVENT8],
+ "Discard Deadline and Order Priority"),
+ do_discard(Events, ?not_SetDiscardPolicy(FifoQoS, ?not_DeadlineOrder),
+ [?EVENT1, ?EVENT2, ?EVENT3, ?EVENT6, ?EVENT8],
+ "Discard Deadline and Order Fifo"),
+ do_discard(Events, ?not_SetDiscardPolicy(DeadlineQoS, ?not_DeadlineOrder),
+ [?EVENT6, ?EVENT8, ?EVENT3, ?EVENT2, ?EVENT1],
+ "Discard Deadline and Order Deadline"),
+
+ ok.
+
+do_discard(Events, QoS, Reply, Txt) ->
+ io:format("################# ~s #################~n", [Txt]),
+ Ref = cosNotification_eventDB:create_db(QoS, 60, 50, undefined),
+ create_loop(Events, Ref),
+ ?match({Reply,_}, cosNotification_eventDB:get_events(Ref, ?NO_OF_EVENTS)),
+ cosNotification_eventDB:destroy_db(Ref).
+
+
+%%-----------------------------------------------------------------
+%% cosNotification_eventDB lookup API tests
+%%-----------------------------------------------------------------
+lookup_api(doc) -> ["The event DB is used to store events which cannot be",
+ "delivered at once. This case is supposed to test",
+ "that the events are delivered in the correct order.",
+ ""];
+lookup_api(suite) -> [];
+lookup_api(_Config) ->
+ InitQoS = ?not_CreateInitQoS(),
+ InitQoS2 = ?not_SetMaxEventsPerConsumer(InitQoS,100),
+ InitQoS3 = ?not_SetStartTimeSupported(InitQoS2, false),
+ QoS = ?not_SetDiscardPolicy(InitQoS3, ?not_AnyOrder),
+
+ AnyQoS = ?not_SetOrderPolicy(QoS, ?not_AnyOrder),
+ PriorityQoS = ?not_SetOrderPolicy(QoS, ?not_PriorityOrder),
+ FifoQoS = ?not_SetOrderPolicy(QoS, ?not_FifoOrder),
+ DeadlineQoS = ?not_SetOrderPolicy(QoS, ?not_DeadlineOrder),
+
+ %% "Calculate" data once:
+ Events = ?EVENTS,
+ PrioOrder = ?PRIOORDER,
+ FifoOrder = ?FIFOORDER,
+ DeadlineOrder = ?DEADLINEORDER,
+
+ do_lookup(PriorityQoS, Events, PrioOrder, "Priority Order"),
+ do_lookup(FifoQoS, Events, FifoOrder, "Fifo Order"),
+ do_lookup(DeadlineQoS, Events, DeadlineOrder, "Deadline Order"),
+ do_lookup(AnyQoS, Events, PrioOrder, "Any Order"),
+ ok.
+
+do_lookup(QoS, Events, Return, Txt) ->
+ io:format("#################### ~s ###################~n", [Txt]),
+ Ref = cosNotification_eventDB:create_db(QoS, 60, 50, undefined),
+ create_loop(Events, Ref),
+ ?match({Return,_}, cosNotification_eventDB:get_events(Ref, ?NO_OF_EVENTS)),
+ cosNotification_eventDB:destroy_db(Ref).
+
+
+%%-----------------------------------------------------------------
+%% cosNotification_eventDB max events API tests
+%%-----------------------------------------------------------------
+max_events_api(doc) -> ["The event DB is used to store events which cannot be",
+ "delivered at once. If the MaxEvents QoS is updated we must be",
+ "able to reduce the amount of stored events.",
+ ""];
+max_events_api(suite) -> [];
+max_events_api(_Config) ->
+
+ QoS1 = ?not_CreateInitQoS(),
+ QoS2 = ?not_SetOrderPolicy(QoS1, ?not_FifoOrder),
+ QoS3 = ?not_SetDiscardPolicy(QoS2, ?not_RejectNewEvents),
+ QoS4 = ?not_SetStartTimeSupported(QoS3, false),
+ QoS_NO_OF_EVENTS = ?not_SetMaxEventsPerConsumer(QoS4, ?NO_OF_EVENTS),
+ QoS_5_EVENTS = ?not_SetMaxEventsPerConsumer(QoS4, 5),
+
+ Events = ?EVENTS,
+ Events5 = [?EVENT1, ?EVENT2, ?EVENT3, ?EVENT4, ?EVENT5],
+
+ %% Initiate DB and 'NO_OF_EVENTS' events.
+ Ref1 = cosNotification_eventDB:create_db(QoS_NO_OF_EVENTS, 60, 50, undefined),
+ create_loop(Events, Ref1),
+
+ %% Reduce the limit to 5 and extract all and see if it's ok.
+ Ref2 = cosNotification_eventDB:update(Ref1, QoS_5_EVENTS),
+ ?match({Events5, true}, cosNotification_eventDB:get_events(Ref2, ?NO_OF_EVENTS)),
+
+ %% Add 'NO_OF_EVENTS' events. Since the only allow 5 events the DB will only
+ %% contain 5 events.
+ create_loop(Events, Ref2),
+ Ref3 = cosNotification_eventDB:update(Ref2, QoS_NO_OF_EVENTS),
+
+ ?match({Events5, true}, cosNotification_eventDB:get_events(Ref3, ?NO_OF_EVENTS)),
+ create_loop(Events, Ref3),
+ ?match({Events, true}, cosNotification_eventDB:get_events(Ref3, ?NO_OF_EVENTS)),
+ cosNotification_eventDB:destroy_db(Ref3),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% cosNotification_eventDB persisten events API tests
+%%-----------------------------------------------------------------
+persisten_event_api(doc) -> ["The event DB is used to store events which cannot be",
+ "delivered at once.",
+ ""];
+persisten_event_api(suite) -> [];
+persisten_event_api(_Config) ->
+
+ QoS1 = ?not_CreateInitQoS(),
+ QoS2 = ?not_SetOrderPolicy(QoS1, ?not_FifoOrder),
+ QoS3 = ?not_SetDiscardPolicy(QoS2, ?not_RejectNewEvents),
+ QoS4 = ?not_SetStartTimeSupported(QoS3, false),
+ QoS = ?not_SetMaxEventsPerConsumer(QoS4, ?NO_OF_EVENTS),
+
+ Event1 = ?EVENT1,
+
+ Ref = cosNotification_eventDB:create_db(QoS, 60, 50, undefined),
+ %% Clean DB, should be empty
+ ?match(0, cosNotification_eventDB:status(Ref, eventCounter)),
+ cosNotification_eventDB:add_event(Ref, Event1),
+ ?match(1, cosNotification_eventDB:status(Ref, eventCounter)),
+ %% Get event without removing it. Should still be one event stored
+ ?match({[Event1], _, _}, cosNotification_eventDB:get_events(Ref, 2, false)),
+ ?match(1, cosNotification_eventDB:status(Ref, eventCounter)),
+ {_, _, Keys} =
+ ?match({Event1, _, _}, cosNotification_eventDB:get_event(Ref, false)),
+ ?match(1, cosNotification_eventDB:status(Ref, eventCounter)),
+ %% Clear the events and check that the DB is empty.
+ cosNotification_eventDB:delete_events(Keys),
+ ?match(0, cosNotification_eventDB:status(Ref, eventCounter)),
+ ?match({[], _, []}, cosNotification_eventDB:get_event(Ref, false)),
+ ?match({[], _, []}, cosNotification_eventDB:get_events(Ref, 2, false)),
+
+ cosNotification_eventDB:destroy_db(Ref),
+ ok.
+
+%%-----------------------------------------------------------------
+%% cosNotification_eventDB gc API tests
+%%-----------------------------------------------------------------
+gc_api(doc) -> ["The event DB is used to store events which cannot be",
+ "delivered at once. If Deadline defined the events that",
+ "are older must be discarded.",
+ ""];
+gc_api(suite) -> [];
+gc_api(_Config) ->
+
+ QoS1 = ?not_CreateInitQoS(),
+ QoS2 = ?not_SetOrderPolicy(QoS1, ?not_FifoOrder),
+ QoS3 = ?not_SetDiscardPolicy(QoS2, ?not_RejectNewEvents),
+ QoS4 = ?not_SetStartTimeSupported(QoS3, false),
+ QoS_NO_OF_EVENTS = ?not_SetMaxEventsPerConsumer(QoS4, ?NO_OF_EVENTS),
+
+ Events = ?EVENTS,
+ Events6 = [?EVENT1, ?EVENT2, ?EVENT3, ?EVENT4, ?EVENT6, ?EVENT7, ?EVENT8],
+ %% Initiate DB and 'NO_OF_EVENTS' events.
+ Ref = cosNotification_eventDB:create_db(QoS_NO_OF_EVENTS, 60, 50, undefined),
+ create_loop(Events, Ref),
+
+ %% Sleep so some events will get 'old'.
+ timer:sleep(23000),
+
+ %% Reduce the limit to 5 and extract all and see if it's ok.
+ cosNotification_eventDB:gc_events(Ref, high),
+
+ %% Since gc is done by another process we must wait so it will have a chance
+ %% to complete the job.
+ timer:sleep(2000),
+
+ ?match({Events6, true}, cosNotification_eventDB:get_events(Ref, ?NO_OF_EVENTS)),
+
+ create_loop(Events, Ref),
+ timer:sleep(23000),
+ ?match({Events6, true}, cosNotification_eventDB:get_events(Ref, ?NO_OF_EVENTS)),
+ cosNotification_eventDB:destroy_db(Ref),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% cosNotification_eventDB gc API tests
+%%-----------------------------------------------------------------
+auto_gc_api(doc) -> ["The event DB is used to store events which cannot be",
+ "delivered at once. If Deadline defined the events that",
+ "are older must be discarded.",
+ ""];
+auto_gc_api(suite) -> [];
+auto_gc_api(_Config) ->
+
+ QoS1 = ?not_CreateInitQoS(),
+ QoS2 = ?not_SetOrderPolicy(QoS1, ?not_FifoOrder),
+ QoS3 = ?not_SetDiscardPolicy(QoS2, ?not_RejectNewEvents),
+ QoS4 = ?not_SetStopTimeSupported(QoS3, true),
+ QoS5 = ?not_SetStartTimeSupported(QoS4, false),
+ QoS_NO_OF_EVENTS = ?not_SetMaxEventsPerConsumer(QoS5, ?NO_OF_EVENTS),
+
+ Events6 = [?EVENT1, ?EVENT2, ?EVENT3, ?EVENT7, ?EVENT8, ?EVENT9],
+ %% Initiate DB
+ Ref = cosNotification_eventDB:create_db(QoS_NO_OF_EVENTS, 50, 50, undefined),
+ create_loop([?EVENT1, ?EVENT2, ?EVENT3, ?EVENT4, ?EVENT6], Ref),
+
+ %% Sleep so some events will get 'old'.
+ timer:sleep(60000),
+ create_loop([?EVENT7, ?EVENT8, ?EVENT9], Ref),
+
+ %% Since gc is done by another process we must wait so it will have a chance
+ %% to complete the job.
+ timer:sleep(2000),
+
+ ?match({Events6, true}, cosNotification_eventDB:get_events(Ref, ?NO_OF_EVENTS)),
+
+ cosNotification_eventDB:destroy_db(Ref),
+
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% cosNotification_eventDB start- and stop-time API tests
+%%-----------------------------------------------------------------
+start_stop_time_api(doc) -> ["The event DB is used to store events which cannot be",
+ "delivered at once. If Deadline defined the events that",
+ "are older must be discarded.",
+ ""];
+start_stop_time_api(suite) -> [];
+start_stop_time_api(_Config) ->
+
+ QoS1 = ?not_CreateInitQoS(),
+ QoS2 = ?not_SetOrderPolicy(QoS1, ?not_FifoOrder),
+ QoS3 = ?not_SetDiscardPolicy(QoS2, ?not_RejectNewEvents),
+ QoS4 = ?not_SetStopTimeSupported(QoS3, true),
+ QoS5 = ?not_SetStartTimeSupported(QoS4, true),
+ QoS_NO_OF_EVENTS = ?not_SetMaxEventsPerConsumer(QoS5, ?NO_OF_EVENTS),
+
+ %% Initiate DB
+ TimeService = cosTime:start_time_service(2, 0),
+ Ref = cosNotification_eventDB:create_db(QoS_NO_OF_EVENTS, 50, 50, TimeService),
+
+ T1 = 'CosTime_UTO':'_get_utc_time'('CosTime_UTO':
+ absolute_time('CosTime_TimeService':
+ new_universal_time(TimeService,
+ 100000000, 0, 2))),
+ T2 = 'CosTime_UTO':'_get_utc_time'('CosTime_UTO':
+ absolute_time('CosTime_TimeService':
+ new_universal_time(TimeService,
+ 200000000, 0, 2))),
+ T3 = 'CosTime_UTO':'_get_utc_time'('CosTime_UTO':
+ absolute_time('CosTime_TimeService':
+ new_universal_time(TimeService,
+ 300000000, 0, 2))),
+ T4 = 'CosTime_UTO':'_get_utc_time'('CosTime_UTO':
+ absolute_time('CosTime_TimeService':
+ new_universal_time(TimeService,
+ 400000000, 0, 2))),
+ %% Delivered after 10 seconds discarded after 20.
+ EVENT1 = ?not_CreateSE("","event1","",
+ [#'CosNotification_Property'
+ {name="Priority",
+ value=any:create(orber_tc:short(), 1)},
+ #'CosNotification_Property'
+ {name="StartTime",
+ value=any:create('TimeBase_UtcT':tc(), T1)},
+ #'CosNotification_Property'
+ {name="StopTime",
+ value=any:create('TimeBase_UtcT':tc(), T2)}],
+ [], any:create(orber_tc:null(), null)),
+
+ %% Delivered after 30 seconds discarded after 10, i.e., always discarded.
+ EVENT2 = ?not_CreateSE("","event2","",
+ [#'CosNotification_Property'
+ {name="Priority",
+ value=any:create(orber_tc:short(), 3)},
+ #'CosNotification_Property'
+ {name="StartTime",
+ value=any:create('TimeBase_UtcT':tc(), T3)},
+ #'CosNotification_Property'
+ {name="StopTime",
+ value=any:create('TimeBase_UtcT':tc(), T1)}],
+ [], any:create(orber_tc:null(), null)),
+
+ %% Delivered after 20 seconds discarded after 40
+ EVENT3 = ?not_CreateSE("","event3","",
+ [#'CosNotification_Property'
+ {name="Priority",
+ value=any:create(orber_tc:short(), 2)},
+ #'CosNotification_Property'
+ {name="StartTime",
+ value=any:create('TimeBase_UtcT':tc(), T2)},
+ #'CosNotification_Property'
+ {name="StopTime",
+ value=any:create('TimeBase_UtcT':tc(), T4)}],
+ [], any:create(orber_tc:null(), null)),
+
+
+
+
+ create_loop([EVENT1, EVENT2, EVENT3], Ref),
+
+ ?match({[], false}, cosNotification_eventDB:get_events(Ref, ?NO_OF_EVENTS)),
+
+ %% Sleep so some events will get 'old'.
+ timer:sleep(12000),
+
+ ?match({[EVENT1], true}, cosNotification_eventDB:get_events(Ref, ?NO_OF_EVENTS)),
+
+ ?match({[], false}, cosNotification_eventDB:get_events(Ref, ?NO_OF_EVENTS)),
+
+ timer:sleep(10000),
+
+ ?match({[EVENT3], true}, cosNotification_eventDB:get_events(Ref, ?NO_OF_EVENTS)),
+
+ timer:sleep(20000),
+
+ %% See if EVENT2 really have been discarded.
+ ?match({[], false}, cosNotification_eventDB:get_events(Ref, ?NO_OF_EVENTS)),
+
+ cosNotification_eventDB:destroy_db(Ref),
+
+ cosTime:stop_time_service(TimeService),
+
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% cosNotification_eventDB order API tests
+%%-----------------------------------------------------------------
+reorder_api(doc) -> ["The event DB is used to store events which cannot be",
+ "delivered at once. If the QoS is updated we must be",
+ "able to change the ordering of events as the discard",
+ "and order policies tells us.",
+ ""];
+reorder_api(suite) -> [];
+reorder_api(_Config) ->
+ %% We need to test switching between:
+ %% * Priority -> Fifo
+ %% * Priority -> Deadline
+ %% * Fifo -> Priority
+ %% * Fifo -> Deadline
+ %% * Deadline -> Priority
+ %% * Deadline -> Fifo
+ QoS = ?not_CreateInitQoS(),
+ QoS2 = ?not_SetMaxEventsPerConsumer(QoS,100),
+ QoS3 = ?not_SetPriority(QoS2, 10),
+ QoS4 = ?not_SetStartTimeSupported(QoS3, false),
+ QoS5 = ?not_SetOrderPolicy(QoS4, ?not_AnyOrder),
+
+
+ %% Test all order policies using Any order discard policy.
+ reorder_helper(?not_SetDiscardPolicy(QoS5, ?not_AnyOrder), "Discard Any"),
+ reorder_helper(?not_SetDiscardPolicy(QoS5, ?not_PriorityOrder), "Discard Priority"),
+ reorder_helper(?not_SetDiscardPolicy(QoS5, ?not_DeadlineOrder), "Discard Deadline"),
+ reorder_helper(?not_SetDiscardPolicy(QoS5, ?not_FifoOrder), "Discard Fifo"),
+ reorder_helper(?not_SetDiscardPolicy(QoS5, ?not_LifoOrder), "Discard Lifo"),
+ reorder_helper(?not_SetDiscardPolicy(QoS5, ?not_RejectNewEvents), "Reject New Events"),
+
+ ok.
+
+
+reorder_helper(QoS, Txt) ->
+ io:format("$$$$$$$$$$$$$$$$$$$$ ~s $$$$$$$$$$$$$$$$$$$~n", [Txt]),
+ %% Create a DB with the above settings.
+ Ref = cosNotification_eventDB:create_db(QoS, 60, 50, undefined),
+
+ Events = ?EVENTS,
+ PrioOrder = ?PRIOORDER,
+ FifoOrder = ?FIFOORDER,
+ DeadlineOrder = ?DEADLINEORDER,
+
+ %% Test all order policies using Any order discard policy.
+ Ref2 = do_reorder(Ref, Events, ?not_SetOrderPolicy(QoS, ?not_FifoOrder),
+ FifoOrder, "Priority -> Fifo"),
+ Ref3 = do_reorder(Ref2, Events, ?not_SetOrderPolicy(QoS, ?not_PriorityOrder),
+ PrioOrder, "Fifo -> Priority"),
+ Ref4 = do_reorder(Ref3, Events, ?not_SetOrderPolicy(QoS, ?not_DeadlineOrder),
+ DeadlineOrder, "Priority -> Deadline"),
+
+ Ref5 = do_reorder(Ref4, Events, ?not_SetOrderPolicy(QoS, ?not_PriorityOrder),
+ PrioOrder, "Deadline -> Priority"),
+
+ Ref6 = do_reorder(Ref5, Events, ?not_SetOrderPolicy(QoS, ?not_FifoOrder),
+ FifoOrder, "Priority -> Fifo"),
+
+ Ref7 = do_reorder(Ref6, Events, ?not_SetOrderPolicy(QoS, ?not_DeadlineOrder),
+ DeadlineOrder, "Fifo -> Deadline"),
+
+ Ref8 = do_reorder(Ref7, Events, ?not_SetOrderPolicy(QoS, ?not_FifoOrder),
+ FifoOrder, "Deadline -> Fifo"),
+ cosNotification_eventDB:destroy_db(Ref8),
+ ok.
+
+
+
+do_reorder(Ref, Events, QoS, Reply, Txt) ->
+ create_loop(Events, Ref),
+ io:format("################# ~s #################~n", [Txt]),
+ NewRef = cosNotification_eventDB:update(Ref, QoS),
+ ?match({Reply,_}, cosNotification_eventDB:get_events(NewRef, ?NO_OF_EVENTS)),
+ NewRef.
+
+%%-----------------------------------------------------------------
+%% Internal functions
+%%-----------------------------------------------------------------
+%% This functions takes as argument a list of structured events.
+create_loop([], _Ref) ->
+ ok;
+create_loop([H|T], Ref) ->
+ catch cosNotification_eventDB:add_event(Ref, H),
+ create_loop(T, Ref).
+
+create_loop([], _Ref, _Life, _Prio) ->
+ ok;
+create_loop([H|T], Ref, Life, Prio) ->
+ catch cosNotification_eventDB:add_event(Ref, H, Life, Prio),
+ create_loop(T, Ref, Life, Prio).
+
+%%-------------------- End of Module ------------------------------
diff --git a/lib/cosNotification/test/generated_SUITE.erl b/lib/cosNotification/test/generated_SUITE.erl
new file mode 100644
index 0000000000..34b84041f0
--- /dev/null
+++ b/lib/cosNotification/test/generated_SUITE.erl
@@ -0,0 +1,2042 @@
+%%-----------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2004-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%
+%%
+%%
+%%-----------------------------------------------------------------
+%% File : generated_SUITE.erl
+%% Purpose :
+%%-----------------------------------------------------------------
+
+-module(generated_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/include/corba.hrl").
+
+-define(default_timeout, ?t:minutes(3)).
+
+-define(match(ExpectedRes, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+-define(nomatch(Not, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ Not ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS);
+ _ ->
+ AcTuAlReS
+ end
+ end()).
+
+
+-define(checktc(_Op),
+ fun(TC) ->
+ case orber_tc:check_tc(TC) of
+ false ->
+ io:format("###### ERROR ERROR ######~n~p - ~p~n", [Op, TC]),
+ ?line exit(TC);
+ true ->
+ true
+ end
+ end).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-export([]).
+-compile(export_all).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["This suite is for testing IC generated files"];
+all(suite) ->
+ ['CosNotification', 'CosNotification_AdminPropertiesAdmin',
+ 'CosNotification_EventHeader', 'CosNotification_EventType',
+ 'CosNotification_FixedEventHeader', 'CosNotification_NamedPropertyRange',
+ 'CosNotification_Property', 'CosNotification_PropertyError',
+ 'CosNotification_PropertyRange', 'CosNotification_QoSAdmin',
+ 'CosNotification_StructuredEvent', 'CosNotification_UnsupportedAdmin',
+ 'CosNotification_UnsupportedQoS', 'CosNotification_EventBatch',
+ 'CosNotification_EventTypeSeq', 'CosNotification_NamedPropertyRangeSeq',
+ 'CosNotification_PropertyErrorSeq', 'CosNotifyChannelAdmin_AdminLimit',
+ 'CosNotifyChannelAdmin_AdminNotFound', 'CosNotifyChannelAdmin_ChannelNotFound',
+ 'CosNotifyChannelAdmin_ConnectionAlreadyActive', 'CosNotifyChannelAdmin_ConnectionAlreadyInactive',
+ 'CosNotifyChannelAdmin_NotConnected', 'CosNotifyChannelAdmin_AdminIDSeq',
+ 'CosNotifyChannelAdmin_ChannelIDSeq', 'CosNotifyChannelAdmin_ProxyIDSeq',
+ 'CosNotifyFilter_CallbackNotFound', 'CosNotifyFilter_ConstraintExp',
+ 'CosNotifyFilter_ConstraintInfo', 'CosNotifyFilter_ConstraintNotFound',
+ 'CosNotifyFilter_DuplicateConstraintID', 'CosNotifyFilter_FilterNotFound',
+ 'CosNotifyFilter_InvalidConstraint', 'CosNotifyFilter_InvalidGrammar',
+ 'CosNotifyFilter_InvalidValue', 'CosNotifyFilter_MappingConstraintInfo',
+ 'CosNotifyFilter_MappingConstraintPair', 'CosNotifyFilter_UnsupportedFilterableData',
+ 'CosNotifyFilter_CallbackIDSeq', 'CosNotifyFilter_ConstraintExpSeq',
+ 'CosNotifyFilter_ConstraintIDSeq', 'CosNotifyFilter_ConstraintInfoSeq',
+ 'CosNotifyFilter_FilterIDSeq', 'CosNotifyFilter_MappingConstraintInfoSeq',
+ 'CosNotifyFilter_MappingConstraintPairSeq', 'CosNotifyComm_InvalidEventType',
+ 'CosNotifyChannelAdmin_ConsumerAdmin', 'CosNotifyChannelAdmin_EventChannel',
+ 'CosNotifyChannelAdmin_EventChannelFactory', 'CosNotifyChannelAdmin_ProxyConsumer',
+ 'CosNotifyChannelAdmin_ProxyNotFound', 'CosNotifyChannelAdmin_ProxyPullConsumer',
+ 'CosNotifyChannelAdmin_ProxyPullSupplier', 'CosNotifyChannelAdmin_ProxyPushConsumer',
+ 'CosNotifyChannelAdmin_ProxyPushSupplier', 'CosNotifyChannelAdmin_ProxySupplier',
+ 'CosNotifyChannelAdmin_SequenceProxyPullConsumer', 'CosNotifyChannelAdmin_SequenceProxyPullSupplier',
+ 'CosNotifyChannelAdmin_SequenceProxyPushConsumer', 'CosNotifyChannelAdmin_SequenceProxyPushSupplier',
+ 'CosNotifyChannelAdmin_StructuredProxyPullConsumer', 'CosNotifyChannelAdmin_StructuredProxyPullSupplier',
+ 'CosNotifyChannelAdmin_StructuredProxyPushConsumer', 'CosNotifyChannelAdmin_StructuredProxyPushSupplier',
+ 'CosNotifyChannelAdmin_SupplierAdmin', 'CosNotifyFilter_Filter',
+ 'CosNotifyFilter_FilterAdmin', 'CosNotifyFilter_FilterFactory',
+ 'CosNotifyFilter_MappingFilter', 'CosNotifyComm_NotifyPublish',
+ 'CosNotifyComm_NotifySubscribe', 'CosNotifyComm_PullConsumer',
+ 'CosNotifyComm_PullSupplier', 'CosNotifyComm_PushConsumer',
+ 'CosNotifyComm_PushSupplier', 'CosNotifyComm_SequencePullConsumer',
+ 'CosNotifyComm_SequencePullSupplier', 'CosNotifyComm_SequencePushConsumer',
+ 'CosNotifyComm_SequencePushSupplier', 'CosNotifyComm_StructuredPullConsumer',
+ 'CosNotifyComm_StructuredPullSupplier', 'CosNotifyComm_StructuredPushConsumer',
+ 'CosNotifyComm_StructuredPushSupplier', 'oe_CosNotificationComm_Event',
+ 'CosNotification_PropertySeq'].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotification'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotification'(doc) -> ["CosNotification"];
+'CosNotification'(suite) -> [];
+'CosNotification'(_) ->
+ ?match("EventReliability", 'CosNotification':'EventReliability'()),
+ ?match(0, 'CosNotification':'BestEffort'()),
+ ?match(1, 'CosNotification':'Persistent'()),
+ ?match("ConnectionReliability", 'CosNotification':'ConnectionReliability'()),
+ ?match("Priority", 'CosNotification':'Priority'()),
+ ?match(-32767, 'CosNotification':'LowestPriority'()),
+ ?match(32767, 'CosNotification':'HighestPriority'()),
+ ?match(0, 'CosNotification':'DefaultPriority'()),
+ ?match("StartTime", 'CosNotification':'StartTime'()),
+ ?match("StopTime", 'CosNotification':'StopTime'()),
+ ?match("Timeout", 'CosNotification':'Timeout'()),
+ ?match("OrderPolicy", 'CosNotification':'OrderPolicy'()),
+ ?match(0, 'CosNotification':'AnyOrder'()),
+ ?match(1, 'CosNotification':'FifoOrder'()),
+ ?match(2, 'CosNotification':'PriorityOrder'()),
+ ?match(3, 'CosNotification':'DeadlineOrder'()),
+ ?match("DiscardPolicy", 'CosNotification':'DiscardPolicy'()),
+ ?match(4, 'CosNotification':'LifoOrder'()),
+ ?match(5, 'CosNotification':'RejectNewEvents'()),
+ ?match("MaximumBatchSize", 'CosNotification':'MaximumBatchSize'()),
+ ?match("PacingInterval", 'CosNotification':'PacingInterval'()),
+ ?match("StartTimeSupported", 'CosNotification':'StartTimeSupported'()),
+ ?match("StopTimeSupported", 'CosNotification':'StopTimeSupported'()),
+ ?match("MaxEventsPerConsumer", 'CosNotification':'MaxEventsPerConsumer'()),
+ ?match("MaxQueueLength", 'CosNotification':'MaxQueueLength'()),
+ ?match("MaxConsumers", 'CosNotification':'MaxConsumers'()),
+ ?match("MaxSuppliers", 'CosNotification':'MaxSuppliers'()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotification_EventHeader'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotification_EventHeader'(doc) -> ["CosNotification_EventHeader"];
+'CosNotification_EventHeader'(suite) -> [];
+'CosNotification_EventHeader'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotification_EventHeader':tc())),
+ ?match("IDL:omg.org/CosNotification/EventHeader:1.0",
+ 'CosNotification_EventHeader':id()),
+ ?match("CosNotification_EventHeader",
+ 'CosNotification_EventHeader':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotification_EventType'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotification_EventType'(doc) -> ["CosNotification_EventType"];
+'CosNotification_EventType'(suite) -> [];
+'CosNotification_EventType'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotification_EventType':tc())),
+ ?match("IDL:omg.org/CosNotification/EventType:1.0",
+ 'CosNotification_EventType':id()),
+ ?match("CosNotification_EventType",
+ 'CosNotification_EventType':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotification_FixedEventHeader'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotification_FixedEventHeader'(doc) -> ["CosNotification_FixedEventHeader"];
+'CosNotification_FixedEventHeader'(suite) -> [];
+'CosNotification_FixedEventHeader'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotification_FixedEventHeader':tc())),
+ ?match("IDL:omg.org/CosNotification/FixedEventHeader:1.0",
+ 'CosNotification_FixedEventHeader':id()),
+ ?match("CosNotification_FixedEventHeader",
+ 'CosNotification_FixedEventHeader':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotification_NamedPropertyRange'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotification_NamedPropertyRange'(doc) -> ["CosNotification_NamedPropertyRange"];
+'CosNotification_NamedPropertyRange'(suite) -> [];
+'CosNotification_NamedPropertyRange'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotification_NamedPropertyRange':tc())),
+ ?match("IDL:omg.org/CosNotification/NamedPropertyRange:1.0",
+ 'CosNotification_NamedPropertyRange':id()),
+ ?match("CosNotification_NamedPropertyRange",
+ 'CosNotification_NamedPropertyRange':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotification_Property'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotification_Property'(doc) -> ["CosNotification_Property"];
+'CosNotification_Property'(suite) -> [];
+'CosNotification_Property'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotification_Property':tc())),
+ ?match("IDL:omg.org/CosNotification/Property:1.0",
+ 'CosNotification_Property':id()),
+ ?match("CosNotification_Property",
+ 'CosNotification_Property':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotification_PropertyError'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotification_PropertyError'(doc) -> ["CosNotification_PropertyError"];
+'CosNotification_PropertyError'(suite) -> [];
+'CosNotification_PropertyError'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotification_PropertyError':tc())),
+ ?match("IDL:omg.org/CosNotification/PropertyError:1.0",
+ 'CosNotification_PropertyError':id()),
+ ?match("CosNotification_PropertyError",
+ 'CosNotification_PropertyError':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotification_PropertyRange'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotification_PropertyRange'(doc) -> [""];
+'CosNotification_PropertyRange'(suite) -> [];
+'CosNotification_PropertyRange'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotification_PropertyRange':tc())),
+ ?match("IDL:omg.org/CosNotification/PropertyRange:1.0",
+ 'CosNotification_PropertyRange':id()),
+ ?match("CosNotification_PropertyRange",
+ 'CosNotification_PropertyRange':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotification_StructuredEvent'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotification_StructuredEvent'(doc) -> ["CosNotification_StructuredEvent"];
+'CosNotification_StructuredEvent'(suite) -> [];
+'CosNotification_StructuredEvent'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotification_StructuredEvent':tc())),
+ ?match("IDL:omg.org/CosNotification/StructuredEvent:1.0",
+ 'CosNotification_StructuredEvent':id()),
+ ?match("CosNotification_StructuredEvent",
+ 'CosNotification_StructuredEvent':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotification_UnsupportedAdmin'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotification_UnsupportedAdmin'(doc) -> ["CosNotification_UnsupportedAdmin"];
+'CosNotification_UnsupportedAdmin'(suite) -> [];
+'CosNotification_UnsupportedAdmin'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotification_UnsupportedAdmin':tc())),
+ ?match("IDL:omg.org/CosNotification/UnsupportedAdmin:1.0",
+ 'CosNotification_UnsupportedAdmin':id()),
+ ?match("CosNotification_UnsupportedAdmin",
+ 'CosNotification_UnsupportedAdmin':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotification_UnsupportedQoS'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotification_UnsupportedQoS'(doc) -> ["CosNotification_UnsupportedQoS"];
+'CosNotification_UnsupportedQoS'(suite) -> [];
+'CosNotification_UnsupportedQoS'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotification_UnsupportedQoS':tc())),
+ ?match("IDL:omg.org/CosNotification/UnsupportedQoS:1.0",
+ 'CosNotification_UnsupportedQoS':id()),
+ ?match("CosNotification_UnsupportedQoS",
+ 'CosNotification_UnsupportedQoS':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotification_EventBatch'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotification_EventBatch'(doc) -> ["CosNotification_EventBatch"];
+'CosNotification_EventBatch'(suite) -> [];
+'CosNotification_EventBatch'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotification_EventBatch':tc())),
+ ?match("IDL:omg.org/CosNotification/EventBatch:1.0",
+ 'CosNotification_EventBatch':id()),
+ ?match("CosNotification_EventBatch",
+ 'CosNotification_EventBatch':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotification_EventTypeSeq'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotification_EventTypeSeq'(doc) -> ["CosNotification_EventTypeSeq"];
+'CosNotification_EventTypeSeq'(suite) -> [];
+'CosNotification_EventTypeSeq'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotification_EventTypeSeq':tc())),
+ ?match("IDL:omg.org/CosNotification/EventTypeSeq:1.0",
+ 'CosNotification_EventTypeSeq':id()),
+ ?match("CosNotification_EventTypeSeq",
+ 'CosNotification_EventTypeSeq':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotification_NamedPropertyRangeSeq'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotification_NamedPropertyRangeSeq'(doc) -> ["CosNotification_NamedPropertyRangeSeq"];
+'CosNotification_NamedPropertyRangeSeq'(suite) -> [];
+'CosNotification_NamedPropertyRangeSeq'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotification_NamedPropertyRangeSeq':tc())),
+ ?match("IDL:omg.org/CosNotification/NamedPropertyRangeSeq:1.0",
+ 'CosNotification_NamedPropertyRangeSeq':id()),
+ ?match("CosNotification_NamedPropertyRangeSeq",
+ 'CosNotification_NamedPropertyRangeSeq':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotification_PropertyErrorSeq'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotification_PropertyErrorSeq'(doc) -> ["CosNotification_PropertyErrorSeq"];
+'CosNotification_PropertyErrorSeq'(suite) -> [];
+'CosNotification_PropertyErrorSeq'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotification_PropertyErrorSeq':tc())),
+ ?match("IDL:omg.org/CosNotification/PropertyErrorSeq:1.0",
+ 'CosNotification_PropertyErrorSeq':id()),
+ ?match("CosNotification_PropertyErrorSeq",
+ 'CosNotification_PropertyErrorSeq':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotification_PropertySeq'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotification_PropertySeq'(doc) -> ["CosNotification_PropertySeq"];
+'CosNotification_PropertySeq'(suite) -> [];
+'CosNotification_PropertySeq'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotification_PropertySeq':tc())),
+ ?match("IDL:omg.org/CosNotification/PropertySeq:1.0",
+ 'CosNotification_PropertySeq':id()),
+ ?match("CosNotification_PropertySeq",
+ 'CosNotification_PropertySeq':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_AdminLimit'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_AdminLimit'(doc) -> ["CosNotifyChannelAdmin_AdminLimit"];
+'CosNotifyChannelAdmin_AdminLimit'(suite) -> [];
+'CosNotifyChannelAdmin_AdminLimit'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_AdminLimit':tc())),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/AdminLimit:1.0",
+ 'CosNotifyChannelAdmin_AdminLimit':id()),
+ ?match("CosNotifyChannelAdmin_AdminLimit",
+ 'CosNotifyChannelAdmin_AdminLimit':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_AdminLimitExceeded'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_AdminLimitExceeded'(doc) -> ["CosNotifyChannelAdmin_AdminLimitExceeded"];
+'CosNotifyChannelAdmin_AdminLimitExceeded'(suite) -> [];
+'CosNotifyChannelAdmin_AdminLimitExceeded'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_AdminLimitExceeded':tc())),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/AdminLimitExceeded:1.0",
+ 'CosNotifyChannelAdmin_AdminLimitExceeded':id()),
+ ?match("CosNotifyChannelAdmin_AdminLimitExceeded",
+ 'CosNotifyChannelAdmin_AdminLimitExceeded':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_AdminNotFound'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_AdminNotFound'(doc) -> ["CosNotifyChannelAdmin_AdminNotFound"];
+'CosNotifyChannelAdmin_AdminNotFound'(suite) -> [];
+'CosNotifyChannelAdmin_AdminNotFound'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_AdminNotFound':tc())),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/AdminNotFound:1.0",
+ 'CosNotifyChannelAdmin_AdminNotFound':id()),
+ ?match("CosNotifyChannelAdmin_AdminNotFound",
+ 'CosNotifyChannelAdmin_AdminNotFound':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_ChannelNotFound'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_ChannelNotFound'(doc) -> ["CosNotifyChannelAdmin_ChannelNotFound"];
+'CosNotifyChannelAdmin_ChannelNotFound'(suite) -> [];
+'CosNotifyChannelAdmin_ChannelNotFound'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_ChannelNotFound':tc())),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/ChannelNotFound:1.0",
+ 'CosNotifyChannelAdmin_ChannelNotFound':id()),
+ ?match("CosNotifyChannelAdmin_ChannelNotFound",
+ 'CosNotifyChannelAdmin_ChannelNotFound':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_ConnectionAlreadyActive'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_ConnectionAlreadyActive'(doc) -> ["CosNotifyChannelAdmin_ConnectionAlreadyActive"];
+'CosNotifyChannelAdmin_ConnectionAlreadyActive'(suite) -> [];
+'CosNotifyChannelAdmin_ConnectionAlreadyActive'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_ConnectionAlreadyActive':tc())),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/ConnectionAlreadyActive:1.0",
+ 'CosNotifyChannelAdmin_ConnectionAlreadyActive':id()),
+ ?match("CosNotifyChannelAdmin_ConnectionAlreadyActive",
+ 'CosNotifyChannelAdmin_ConnectionAlreadyActive':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_ConnectionAlreadyInactive'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_ConnectionAlreadyInactive'(doc) -> ["CosNotifyChannelAdmin_ConnectionAlreadyInactive"];
+'CosNotifyChannelAdmin_ConnectionAlreadyInactive'(suite) -> [];
+'CosNotifyChannelAdmin_ConnectionAlreadyInactive'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_ConnectionAlreadyInactive':tc())),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/ConnectionAlreadyInactive:1.0",
+ 'CosNotifyChannelAdmin_ConnectionAlreadyInactive':id()),
+ ?match("CosNotifyChannelAdmin_ConnectionAlreadyInactive",
+ 'CosNotifyChannelAdmin_ConnectionAlreadyInactive':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_NotConnected'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_NotConnected'(doc) -> ["CosNotifyChannelAdmin_NotConnected"];
+'CosNotifyChannelAdmin_NotConnected'(suite) -> [];
+'CosNotifyChannelAdmin_NotConnected'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_NotConnected':tc())),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/NotConnected:1.0",
+ 'CosNotifyChannelAdmin_NotConnected':id()),
+ ?match("CosNotifyChannelAdmin_NotConnected",
+ 'CosNotifyChannelAdmin_NotConnected':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_AdminIDSeq'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_AdminIDSeq'(doc) -> ["CosNotifyChannelAdmin_AdminIDSeq"];
+'CosNotifyChannelAdmin_AdminIDSeq'(suite) -> [];
+'CosNotifyChannelAdmin_AdminIDSeq'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_AdminIDSeq':tc())),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/AdminIDSeq:1.0",
+ 'CosNotifyChannelAdmin_AdminIDSeq':id()),
+ ?match("CosNotifyChannelAdmin_AdminIDSeq",
+ 'CosNotifyChannelAdmin_AdminIDSeq':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_ChannelIDSeq'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_ChannelIDSeq'(doc) -> ["CosNotifyChannelAdmin_ChannelIDSeq"];
+'CosNotifyChannelAdmin_ChannelIDSeq'(suite) -> [];
+'CosNotifyChannelAdmin_ChannelIDSeq'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_ChannelIDSeq':tc())),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/ChannelIDSeq:1.0",
+ 'CosNotifyChannelAdmin_ChannelIDSeq':id()),
+ ?match("CosNotifyChannelAdmin_ChannelIDSeq",
+ 'CosNotifyChannelAdmin_ChannelIDSeq':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_ProxyIDSeq'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_ProxyIDSeq'(doc) -> ["CosNotifyChannelAdmin_ProxyIDSeq"];
+'CosNotifyChannelAdmin_ProxyIDSeq'(suite) -> [];
+'CosNotifyChannelAdmin_ProxyIDSeq'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_ProxyIDSeq':tc())),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/ProxyIDSeq:1.0",
+ 'CosNotifyChannelAdmin_ProxyIDSeq':id()),
+ ?match("CosNotifyChannelAdmin_ProxyIDSeq",
+ 'CosNotifyChannelAdmin_ProxyIDSeq':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyFilter_CallbackNotFound'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyFilter_CallbackNotFound'(doc) -> ["CosNotifyFilter_CallbackNotFound"];
+'CosNotifyFilter_CallbackNotFound'(suite) -> [];
+'CosNotifyFilter_CallbackNotFound'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyFilter_CallbackNotFound':tc())),
+ ?match("IDL:omg.org/CosNotifyFilter/CallbackNotFound:1.0",
+ 'CosNotifyFilter_CallbackNotFound':id()),
+ ?match("CosNotifyFilter_CallbackNotFound",
+ 'CosNotifyFilter_CallbackNotFound':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyFilter_ConstraintExp'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyFilter_ConstraintExp'(doc) -> ["CosNotifyFilter_ConstraintExp"];
+'CosNotifyFilter_ConstraintExp'(suite) -> [];
+'CosNotifyFilter_ConstraintExp'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyFilter_ConstraintExp':tc())),
+ ?match("IDL:omg.org/CosNotifyFilter/ConstraintExp:1.0",
+ 'CosNotifyFilter_ConstraintExp':id()),
+ ?match("CosNotifyFilter_ConstraintExp",
+ 'CosNotifyFilter_ConstraintExp':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyFilter_ConstraintInfo'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyFilter_ConstraintInfo'(doc) -> ["CosNotifyFilter_ConstraintInfo"];
+'CosNotifyFilter_ConstraintInfo'(suite) -> [];
+'CosNotifyFilter_ConstraintInfo'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyFilter_ConstraintInfo':tc())),
+ ?match("IDL:omg.org/CosNotifyFilter/ConstraintInfo:1.0",
+ 'CosNotifyFilter_ConstraintInfo':id()),
+ ?match("CosNotifyFilter_ConstraintInfo",
+ 'CosNotifyFilter_ConstraintInfo':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyFilter_ConstraintNotFound'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyFilter_ConstraintNotFound'(doc) -> ["CosNotifyFilter_ConstraintNotFound"];
+'CosNotifyFilter_ConstraintNotFound'(suite) -> [];
+'CosNotifyFilter_ConstraintNotFound'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyFilter_ConstraintNotFound':tc())),
+ ?match("IDL:omg.org/CosNotifyFilter/ConstraintNotFound:1.0",
+ 'CosNotifyFilter_ConstraintNotFound':id()),
+ ?match("CosNotifyFilter_ConstraintNotFound",
+ 'CosNotifyFilter_ConstraintNotFound':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyFilter_DuplicateConstraintID'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyFilter_DuplicateConstraintID'(doc) -> ["CosNotifyFilter_DuplicateConstraintID"];
+'CosNotifyFilter_DuplicateConstraintID'(suite) -> [];
+'CosNotifyFilter_DuplicateConstraintID'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyFilter_DuplicateConstraintID':tc())),
+ ?match("IDL:omg.org/CosNotifyFilter/DuplicateConstraintID:1.0",
+ 'CosNotifyFilter_DuplicateConstraintID':id()),
+ ?match("CosNotifyFilter_DuplicateConstraintID",
+ 'CosNotifyFilter_DuplicateConstraintID':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyFilter_FilterNotFound'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyFilter_FilterNotFound'(doc) -> ["CosNotifyFilter_FilterNotFound"];
+'CosNotifyFilter_FilterNotFound'(suite) -> [];
+'CosNotifyFilter_FilterNotFound'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyFilter_FilterNotFound':tc())),
+ ?match("IDL:omg.org/CosNotifyFilter/FilterNotFound:1.0",
+ 'CosNotifyFilter_FilterNotFound':id()),
+ ?match("CosNotifyFilter_FilterNotFound",
+ 'CosNotifyFilter_FilterNotFound':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyFilter_InvalidConstraint'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyFilter_InvalidConstraint'(doc) -> ["CosNotifyFilter_InvalidConstraint"];
+'CosNotifyFilter_InvalidConstraint'(suite) -> [];
+'CosNotifyFilter_InvalidConstraint'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyFilter_InvalidConstraint':tc())),
+ ?match("IDL:omg.org/CosNotifyFilter/InvalidConstraint:1.0",
+ 'CosNotifyFilter_InvalidConstraint':id()),
+ ?match("CosNotifyFilter_InvalidConstraint",
+ 'CosNotifyFilter_InvalidConstraint':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyFilter_InvalidGrammar'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyFilter_InvalidGrammar'(doc) -> ["CosNotifyFilter_InvalidGrammar"];
+'CosNotifyFilter_InvalidGrammar'(suite) -> [];
+'CosNotifyFilter_InvalidGrammar'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyFilter_InvalidGrammar':tc())),
+ ?match("IDL:omg.org/CosNotifyFilter/InvalidGrammar:1.0",
+ 'CosNotifyFilter_InvalidGrammar':id()),
+ ?match("CosNotifyFilter_InvalidGrammar",
+ 'CosNotifyFilter_InvalidGrammar':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyFilter_InvalidValue'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyFilter_InvalidValue'(doc) -> ["CosNotifyFilter_InvalidValue"];
+'CosNotifyFilter_InvalidValue'(suite) -> [];
+'CosNotifyFilter_InvalidValue'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyFilter_InvalidValue':tc())),
+ ?match("IDL:omg.org/CosNotifyFilter/InvalidValue:1.0",
+ 'CosNotifyFilter_InvalidValue':id()),
+ ?match("CosNotifyFilter_InvalidValue",
+ 'CosNotifyFilter_InvalidValue':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyFilter_MappingConstraintInfo'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyFilter_MappingConstraintInfo'(doc) -> ["CosNotifyFilter_MappingConstraintInfo"];
+'CosNotifyFilter_MappingConstraintInfo'(suite) -> [];
+'CosNotifyFilter_MappingConstraintInfo'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyFilter_MappingConstraintInfo':tc())),
+ ?match("IDL:omg.org/CosNotifyFilter/MappingConstraintInfo:1.0",
+ 'CosNotifyFilter_MappingConstraintInfo':id()),
+ ?match("CosNotifyFilter_MappingConstraintInfo",
+ 'CosNotifyFilter_MappingConstraintInfo':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyFilter_MappingConstraintPair'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyFilter_MappingConstraintPair'(doc) -> ["CosNotifyFilter_MappingConstraintPair"];
+'CosNotifyFilter_MappingConstraintPair'(suite) -> [];
+'CosNotifyFilter_MappingConstraintPair'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyFilter_MappingConstraintPair':tc())),
+ ?match("IDL:omg.org/CosNotifyFilter/MappingConstraintPair:1.0",
+ 'CosNotifyFilter_MappingConstraintPair':id()),
+ ?match("CosNotifyFilter_MappingConstraintPair",
+ 'CosNotifyFilter_MappingConstraintPair':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyFilter_UnsupportedFilterableData'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyFilter_UnsupportedFilterableData'(doc) -> ["CosNotifyFilter_UnsupportedFilterableData"];
+'CosNotifyFilter_UnsupportedFilterableData'(suite) -> [];
+'CosNotifyFilter_UnsupportedFilterableData'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyFilter_UnsupportedFilterableData':tc())),
+ ?match("IDL:omg.org/CosNotifyFilter/UnsupportedFilterableData:1.0",
+ 'CosNotifyFilter_UnsupportedFilterableData':id()),
+ ?match("CosNotifyFilter_UnsupportedFilterableData",
+ 'CosNotifyFilter_UnsupportedFilterableData':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyFilter_CallbackIDSeq'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyFilter_CallbackIDSeq'(doc) -> ["CosNotifyFilter_CallbackIDSeq"];
+'CosNotifyFilter_CallbackIDSeq'(suite) -> [];
+'CosNotifyFilter_CallbackIDSeq'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyFilter_CallbackIDSeq':tc())),
+ ?match("IDL:omg.org/CosNotifyFilter/CallbackIDSeq:1.0",
+ 'CosNotifyFilter_CallbackIDSeq':id()),
+ ?match("CosNotifyFilter_CallbackIDSeq",
+ 'CosNotifyFilter_CallbackIDSeq':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyFilter_ConstraintExpSeq'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyFilter_ConstraintExpSeq'(doc) -> ["CosNotifyFilter_ConstraintExpSeq"];
+'CosNotifyFilter_ConstraintExpSeq'(suite) -> [];
+'CosNotifyFilter_ConstraintExpSeq'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyFilter_ConstraintExpSeq':tc())),
+ ?match("IDL:omg.org/CosNotifyFilter/ConstraintExpSeq:1.0",
+ 'CosNotifyFilter_ConstraintExpSeq':id()),
+ ?match("CosNotifyFilter_ConstraintExpSeq",
+ 'CosNotifyFilter_ConstraintExpSeq':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyFilter_ConstraintIDSeq'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyFilter_ConstraintIDSeq'(doc) -> ["CosNotifyFilter_ConstraintIDSeq"];
+'CosNotifyFilter_ConstraintIDSeq'(suite) -> [];
+'CosNotifyFilter_ConstraintIDSeq'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyFilter_ConstraintIDSeq':tc())),
+ ?match("IDL:omg.org/CosNotifyFilter/ConstraintIDSeq:1.0",
+ 'CosNotifyFilter_ConstraintIDSeq':id()),
+ ?match("CosNotifyFilter_ConstraintIDSeq",
+ 'CosNotifyFilter_ConstraintIDSeq':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyFilter_ConstraintInfoSeq'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyFilter_ConstraintInfoSeq'(doc) -> ["CosNotifyFilter_ConstraintInfoSeq"];
+'CosNotifyFilter_ConstraintInfoSeq'(suite) -> [];
+'CosNotifyFilter_ConstraintInfoSeq'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyFilter_ConstraintInfoSeq':tc())),
+ ?match("IDL:omg.org/CosNotifyFilter/ConstraintInfoSeq:1.0",
+ 'CosNotifyFilter_ConstraintInfoSeq':id()),
+ ?match("CosNotifyFilter_ConstraintInfoSeq",
+ 'CosNotifyFilter_ConstraintInfoSeq':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyFilter_FilterIDSeq'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyFilter_FilterIDSeq'(doc) -> ["CosNotifyFilter_FilterIDSeq"];
+'CosNotifyFilter_FilterIDSeq'(suite) -> [];
+'CosNotifyFilter_FilterIDSeq'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyFilter_FilterIDSeq':tc())),
+ ?match("IDL:omg.org/CosNotifyFilter/FilterIDSeq:1.0",
+ 'CosNotifyFilter_FilterIDSeq':id()),
+ ?match("CosNotifyFilter_FilterIDSeq",
+ 'CosNotifyFilter_FilterIDSeq':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyFilter_MappingConstraintInfoSeq'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyFilter_MappingConstraintInfoSeq'(doc) -> ["CosNotifyFilter_MappingConstraintInfoSeq"];
+'CosNotifyFilter_MappingConstraintInfoSeq'(suite) -> [];
+'CosNotifyFilter_MappingConstraintInfoSeq'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyFilter_MappingConstraintInfoSeq':tc())),
+ ?match("IDL:omg.org/CosNotifyFilter/MappingConstraintInfoSeq:1.0",
+ 'CosNotifyFilter_MappingConstraintInfoSeq':id()),
+ ?match("CosNotifyFilter_MappingConstraintInfoSeq",
+ 'CosNotifyFilter_MappingConstraintInfoSeq':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyFilter_MappingConstraintPairSeq'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyFilter_MappingConstraintPairSeq'(doc) -> ["CosNotifyFilter_MappingConstraintPairSeq"];
+'CosNotifyFilter_MappingConstraintPairSeq'(suite) -> [];
+'CosNotifyFilter_MappingConstraintPairSeq'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyFilter_MappingConstraintPairSeq':tc())),
+ ?match("IDL:omg.org/CosNotifyFilter/MappingConstraintPairSeq:1.0",
+ 'CosNotifyFilter_MappingConstraintPairSeq':id()),
+ ?match("CosNotifyFilter_MappingConstraintPairSeq",
+ 'CosNotifyFilter_MappingConstraintPairSeq':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyComm_InvalidEventType'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyComm_InvalidEventType'(doc) -> ["CosNotifyComm_InvalidEventType"];
+'CosNotifyComm_InvalidEventType'(suite) -> [];
+'CosNotifyComm_InvalidEventType'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyComm_InvalidEventType':tc())),
+ ?match("IDL:omg.org/CosNotifyComm/InvalidEventType:1.0",
+ 'CosNotifyComm_InvalidEventType':id()),
+ ?match("CosNotifyComm_InvalidEventType",
+ 'CosNotifyComm_InvalidEventType':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_ProxyNotFound'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_ProxyNotFound'(doc) -> ["CosNotifyChannelAdmin_ProxyNotFound"];
+'CosNotifyChannelAdmin_ProxyNotFound'(suite) -> [];
+'CosNotifyChannelAdmin_ProxyNotFound'(_) ->
+ ?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_ProxyNotFound':tc())),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/ProxyNotFound:1.0",
+ 'CosNotifyChannelAdmin_ProxyNotFound':id()),
+ ?match("CosNotifyChannelAdmin_ProxyNotFound",
+ 'CosNotifyChannelAdmin_ProxyNotFound':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotification_AdminPropertiesAdmin'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotification_AdminPropertiesAdmin'(doc) -> ["CosNotification_AdminPropertiesAdmin"];
+'CosNotification_AdminPropertiesAdmin'(suite) -> [];
+'CosNotification_AdminPropertiesAdmin'(_) ->
+ ?nomatch(undefined, 'CosNotification_AdminPropertiesAdmin':oe_tc(get_admin)),
+ ?nomatch(undefined, 'CosNotification_AdminPropertiesAdmin':oe_tc(set_admin)),
+ ?match(undefined, 'CosNotification_AdminPropertiesAdmin':oe_tc(undefined)),
+ ?match([_|_], 'CosNotification_AdminPropertiesAdmin':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotification/AdminPropertiesAdmin:1.0",
+ 'CosNotification_AdminPropertiesAdmin':typeID()),
+ check_tc('CosNotification_AdminPropertiesAdmin':oe_get_interface()),
+ ?match(true, 'CosNotification_AdminPropertiesAdmin':oe_is_a('CosNotification_AdminPropertiesAdmin':typeID())),
+ ?match(false, 'CosNotification_AdminPropertiesAdmin':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotification_QoSAdmin'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotification_QoSAdmin'(doc) -> ["CosNotification_QoSAdmin"];
+'CosNotification_QoSAdmin'(suite) -> [];
+'CosNotification_QoSAdmin'(_) ->
+ ?nomatch(undefined, 'CosNotification_QoSAdmin':oe_tc(get_qos)),
+ ?nomatch(undefined, 'CosNotification_QoSAdmin':oe_tc(set_qos)),
+ ?nomatch(undefined, 'CosNotification_QoSAdmin':oe_tc(validate_qos)),
+ ?match(undefined, 'CosNotification_QoSAdmin':oe_tc(undefined)),
+ ?match([_|_], 'CosNotification_QoSAdmin':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotification/QoSAdmin:1.0",
+ 'CosNotification_QoSAdmin':typeID()),
+ check_tc('CosNotification_QoSAdmin':oe_get_interface()),
+ ?match(true, 'CosNotification_QoSAdmin':oe_is_a('CosNotification_QoSAdmin':typeID())),
+ ?match(false, 'CosNotification_QoSAdmin':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_ConsumerAdmin'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_ConsumerAdmin'(doc) -> ["CosNotifyChannelAdmin_ConsumerAdmin"];
+'CosNotifyChannelAdmin_ConsumerAdmin'(suite) -> [];
+'CosNotifyChannelAdmin_ConsumerAdmin'(_) ->
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc('_get_MyID')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc('_get_MyChannel')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc('_get_MyOperator')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc('_get_priority_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc('_set_priority_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc('_get_lifetime_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc('_set_lifetime_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc('_get_pull_suppliers')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc('_get_push_suppliers')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc(get_proxy_supplier)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc(obtain_notification_pull_supplier)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc(obtain_notification_push_supplier)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc(destroy)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc(get_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc(set_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc(validate_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc(subscription_change)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc(add_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc(remove_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc(get_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc(get_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc(remove_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc(obtain_push_supplier)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc(obtain_pull_supplier)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc(callSeq)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc(callAny)),
+ ?match(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyChannelAdmin_ConsumerAdmin':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/ConsumerAdmin:1.0",
+ 'CosNotifyChannelAdmin_ConsumerAdmin':typeID()),
+ check_tc('CosNotifyChannelAdmin_ConsumerAdmin':oe_get_interface()),
+ ?match(true, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_is_a('CosNotifyChannelAdmin_ConsumerAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_is_a('CosNotification_QoSAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_is_a('CosNotifyComm_NotifySubscribe':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_is_a('CosNotifyFilter_FilterAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_is_a('CosEventChannelAdmin_ConsumerAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_is_a('oe_CosNotificationComm_Event':typeID())),
+ ?match(false, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_EventChannel'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_EventChannel'(doc) -> ["CosNotifyChannelAdmin_EventChannel"];
+'CosNotifyChannelAdmin_EventChannel'(suite) -> [];
+'CosNotifyChannelAdmin_EventChannel'(_) ->
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc('_get_MyFactory')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc('_get_default_consumer_admin')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc('_get_default_supplier_admin')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc('_get_default_filter_factory')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc(new_for_consumers)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc(new_for_suppliers)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc(get_consumeradmin)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc(get_supplieradmin)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc(get_all_consumeradmins)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc(get_all_supplieradmins)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc(get_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc(set_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc(validate_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc(get_admin)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc(set_admin)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc(for_consumers)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc(for_suppliers)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc(destroy)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc(callSeq)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc(callAny)),
+ ?match(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyChannelAdmin_EventChannel':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/EventChannel:1.0",
+ 'CosNotifyChannelAdmin_EventChannel':typeID()),
+ check_tc('CosNotifyChannelAdmin_EventChannel':oe_get_interface()),
+ ?match(true, 'CosNotifyChannelAdmin_EventChannel':oe_is_a('CosNotifyChannelAdmin_EventChannel':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_EventChannel':oe_is_a('CosNotification_QoSAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_EventChannel':oe_is_a('CosNotification_AdminPropertiesAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_EventChannel':oe_is_a('CosEventChannelAdmin_EventChannel':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_EventChannel':oe_is_a('oe_CosNotificationComm_Event':typeID())),
+ ?match(false, 'CosNotifyChannelAdmin_EventChannel':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_EventChannelFactory'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_EventChannelFactory'(doc) -> ["CosNotifyChannelAdmin_EventChannelFactory"];
+'CosNotifyChannelAdmin_EventChannelFactory'(suite) -> [];
+'CosNotifyChannelAdmin_EventChannelFactory'(_) ->
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannelFactory':oe_tc(create_channel)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannelFactory':oe_tc(get_all_channels)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannelFactory':oe_tc(get_event_channel)),
+ ?match(undefined, 'CosNotifyChannelAdmin_EventChannelFactory':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyChannelAdmin_EventChannelFactory':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/EventChannelFactory:1.0",
+ 'CosNotifyChannelAdmin_EventChannelFactory':typeID()),
+ check_tc('CosNotifyChannelAdmin_EventChannelFactory':oe_get_interface()),
+ ?match(true, 'CosNotifyChannelAdmin_EventChannelFactory':oe_is_a('CosNotifyChannelAdmin_EventChannelFactory':typeID())),
+ ?match(false, 'CosNotifyChannelAdmin_EventChannelFactory':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_ProxyConsumer'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_ProxyConsumer'(doc) -> ["CosNotifyChannelAdmin_ProxyConsumer"];
+'CosNotifyChannelAdmin_ProxyConsumer'(suite) -> [];
+'CosNotifyChannelAdmin_ProxyConsumer'(_) ->
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyConsumer':oe_tc('_get_MyType')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyConsumer':oe_tc('_get_MyAdmin')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyConsumer':oe_tc(obtain_subscription_types)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyConsumer':oe_tc(validate_event_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyConsumer':oe_tc(get_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyConsumer':oe_tc(set_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyConsumer':oe_tc(validate_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyConsumer':oe_tc(add_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyConsumer':oe_tc(remove_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyConsumer':oe_tc(get_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyConsumer':oe_tc(get_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyConsumer':oe_tc(remove_all_filters)),
+ ?match(undefined, 'CosNotifyChannelAdmin_ProxyConsumer':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyChannelAdmin_ProxyConsumer':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/ProxyConsumer:1.0",
+ 'CosNotifyChannelAdmin_ProxyConsumer':typeID()),
+ check_tc('CosNotifyChannelAdmin_ProxyConsumer':oe_get_interface()),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyConsumer':oe_is_a('CosNotifyChannelAdmin_ProxyConsumer':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyConsumer':oe_is_a('CosNotification_QoSAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyConsumer':oe_is_a('CosNotifyFilter_FilterAdmin':typeID())),
+ ?match(false, 'CosNotifyChannelAdmin_ProxyConsumer':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_ProxyPullConsumer'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_ProxyPullConsumer'(doc) -> ["CosNotifyChannelAdmin_ProxyPullConsumer"];
+'CosNotifyChannelAdmin_ProxyPullConsumer'(suite) -> [];
+'CosNotifyChannelAdmin_ProxyPullConsumer'(_) ->
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_tc(connect_any_pull_supplier)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_tc(suspend_connection)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_tc(resume_connection)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_tc('_get_MyType')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_tc('_get_MyAdmin')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_tc(obtain_subscription_types)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_tc(validate_event_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_tc(get_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_tc(set_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_tc(validate_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_tc(add_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_tc(remove_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_tc(get_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_tc(get_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_tc(remove_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_tc(offer_change)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_tc(disconnect_pull_consumer)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_tc(connect_pull_supplier)),
+ ?match(undefined, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/ProxyPullConsumer:1.0",
+ 'CosNotifyChannelAdmin_ProxyPullConsumer':typeID()),
+ check_tc('CosNotifyChannelAdmin_ProxyPullConsumer':oe_get_interface()),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_is_a('CosNotifyChannelAdmin_ProxyPullConsumer':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_is_a('CosNotifyChannelAdmin_ProxyConsumer':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_is_a('CosNotification_QoSAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_is_a('CosNotifyFilter_FilterAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_is_a('CosNotifyComm_PullConsumer':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_is_a('CosNotifyComm_NotifyPublish':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_is_a('CosEventComm_PullConsumer':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_is_a('CosEventChannelAdmin_ProxyPullConsumer':typeID())),
+ ?match(false, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_ProxyPullSupplier'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_ProxyPullSupplier'(doc) -> ["CosNotifyChannelAdmin_ProxyPullSupplier"];
+'CosNotifyChannelAdmin_ProxyPullSupplier'(suite) -> [];
+'CosNotifyChannelAdmin_ProxyPullSupplier'(_) ->
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc('_get_MyType')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc('_get_MyAdmin')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc('_get_priority_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc('_set_priority_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc('_get_lifetime_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc('_set_lifetime_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc(obtain_offered_types)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc(validate_event_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc(get_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc(set_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc(validate_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc(add_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc(remove_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc(get_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc(get_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc(remove_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc(subscription_change)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc(pull)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc(try_pull)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc(disconnect_pull_supplier)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc(connect_pull_consumer)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc(callSeq)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc(callAny)),
+ ?match(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/ProxyPullSupplier:1.0",
+ 'CosNotifyChannelAdmin_ProxyPullSupplier':typeID()),
+ check_tc('CosNotifyChannelAdmin_ProxyPullSupplier':oe_get_interface()),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_is_a('CosNotifyChannelAdmin_ProxyPullSupplier':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_is_a('CosNotifyChannelAdmin_ProxySupplier':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_is_a('CosNotification_QoSAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_is_a('CosNotifyFilter_FilterAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_is_a('CosNotifyComm_PullSupplier':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_is_a('CosNotifyComm_NotifySubscribe':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_is_a('CosEventComm_PullSupplier':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_is_a('CosEventChannelAdmin_ProxyPullSupplier':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_is_a('oe_CosNotificationComm_Event':typeID())),
+ ?match(false, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_ProxyPushConsumer'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_ProxyPushConsumer'(doc) -> ["CosNotifyChannelAdmin_ProxyPushConsumer"];
+'CosNotifyChannelAdmin_ProxyPushConsumer'(suite) -> [];
+'CosNotifyChannelAdmin_ProxyPushConsumer'(_) ->
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_tc(connect_any_push_supplier)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_tc('_get_MyType')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_tc('_get_MyAdmin')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_tc(obtain_subscription_types)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_tc(validate_event_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_tc(get_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_tc(set_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_tc(validate_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_tc(add_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_tc(remove_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_tc(get_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_tc(get_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_tc(remove_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_tc(offer_change)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_tc(push)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_tc(disconnect_push_consumer)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_tc(connect_push_supplier)),
+ ?match(undefined, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/ProxyPushConsumer:1.0",
+ 'CosNotifyChannelAdmin_ProxyPushConsumer':typeID()),
+ check_tc('CosNotifyChannelAdmin_ProxyPushConsumer':oe_get_interface()),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_is_a('CosNotifyChannelAdmin_ProxyPushConsumer':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_is_a('CosNotifyChannelAdmin_ProxyConsumer':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_is_a('CosNotification_QoSAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_is_a('CosNotifyFilter_FilterAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_is_a('CosNotifyComm_PushConsumer':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_is_a('CosNotifyComm_NotifyPublish':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_is_a('CosEventComm_PushConsumer':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_is_a('CosEventChannelAdmin_ProxyPushConsumer':typeID())),
+ ?match(false, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_ProxyPushSupplier'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_ProxyPushSupplier'(doc) -> ["CosNotifyChannelAdmin_ProxyPushSupplier"];
+'CosNotifyChannelAdmin_ProxyPushSupplier'(suite) -> [];
+'CosNotifyChannelAdmin_ProxyPushSupplier'(_) ->
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc(connect_any_push_consumer)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc(suspend_connection)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc(resume_connection)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc('_get_MyType')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc('_get_MyAdmin')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc('_get_priority_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc('_set_priority_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc('_get_lifetime_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc('_set_lifetime_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc(obtain_offered_types)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc(validate_event_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc(get_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc(set_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc(validate_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc(add_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc(remove_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc(get_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc(get_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc(remove_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc(subscription_change)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc(disconnect_push_supplier)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc(connect_push_consumer)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc(callSeq)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc(callAny)),
+ ?match(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/ProxyPushSupplier:1.0",
+ 'CosNotifyChannelAdmin_ProxyPushSupplier':typeID()),
+ check_tc('CosNotifyChannelAdmin_ProxyPushSupplier':oe_get_interface()),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_is_a('CosNotifyChannelAdmin_ProxyPushSupplier':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_is_a('CosNotifyChannelAdmin_ProxySupplier':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_is_a('CosNotification_QoSAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_is_a('CosNotifyFilter_FilterAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_is_a('CosNotifyComm_PushSupplier':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_is_a('CosNotifyComm_NotifySubscribe':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_is_a('CosEventComm_PushSupplier':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_is_a('CosEventChannelAdmin_ProxyPushSupplier':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_is_a('oe_CosNotificationComm_Event':typeID())),
+ ?match(false, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_ProxySupplier'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_ProxySupplier'(doc) -> ["CosNotifyChannelAdmin_ProxySupplier"];
+'CosNotifyChannelAdmin_ProxySupplier'(suite) -> [];
+'CosNotifyChannelAdmin_ProxySupplier'(_) ->
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxySupplier':oe_tc('_get_MyType')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxySupplier':oe_tc('_get_MyAdmin')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxySupplier':oe_tc('_get_priority_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxySupplier':oe_tc('_set_priority_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxySupplier':oe_tc('_get_lifetime_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxySupplier':oe_tc('_set_lifetime_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxySupplier':oe_tc(obtain_offered_types)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxySupplier':oe_tc(validate_event_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxySupplier':oe_tc(get_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxySupplier':oe_tc(set_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxySupplier':oe_tc(validate_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxySupplier':oe_tc(add_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxySupplier':oe_tc(remove_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxySupplier':oe_tc(get_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxySupplier':oe_tc(get_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_ProxySupplier':oe_tc(remove_all_filters)),
+ ?match(undefined, 'CosNotifyChannelAdmin_ProxySupplier':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyChannelAdmin_ProxySupplier':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/ProxySupplier:1.0",
+ 'CosNotifyChannelAdmin_ProxySupplier':typeID()),
+ check_tc('CosNotifyChannelAdmin_ProxySupplier':oe_get_interface()),
+ ?match(true, 'CosNotifyChannelAdmin_ProxySupplier':oe_is_a('CosNotifyChannelAdmin_ProxySupplier':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxySupplier':oe_is_a('CosNotification_QoSAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_ProxySupplier':oe_is_a('CosNotifyFilter_FilterAdmin':typeID())),
+ ?match(false, 'CosNotifyChannelAdmin_ProxySupplier':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_SequenceProxyPullConsumer'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_SequenceProxyPullConsumer'(doc) -> ["CosNotifyChannelAdmin_SequenceProxyPullConsumer"];
+'CosNotifyChannelAdmin_SequenceProxyPullConsumer'(suite) -> [];
+'CosNotifyChannelAdmin_SequenceProxyPullConsumer'(_) ->
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_tc(connect_sequence_pull_supplier)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_tc(suspend_connection)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_tc(resume_connection)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_tc('_get_MyType')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_tc('_get_MyAdmin')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_tc(obtain_subscription_types)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_tc(validate_event_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_tc(get_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_tc(set_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_tc(validate_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_tc(add_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_tc(remove_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_tc(get_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_tc(get_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_tc(remove_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_tc(disconnect_sequence_pull_consumer)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_tc(offer_change)),
+ ?match(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/SequenceProxyPullConsumer:1.0",
+ 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':typeID()),
+ check_tc('CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_get_interface()),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_is_a('CosNotifyChannelAdmin_SequenceProxyPullConsumer':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_is_a('CosNotifyChannelAdmin_ProxyConsumer':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_is_a('CosNotification_QoSAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_is_a('CosNotifyFilter_FilterAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_is_a('CosNotifyComm_SequencePullConsumer':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_is_a('CosNotifyComm_NotifyPublish':typeID())),
+ ?match(false, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_SequenceProxyPullSupplier'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_SequenceProxyPullSupplier'(doc) -> ["CosNotifyChannelAdmin_SequenceProxyPullSupplier"];
+'CosNotifyChannelAdmin_SequenceProxyPullSupplier'(suite) -> [];
+'CosNotifyChannelAdmin_SequenceProxyPullSupplier'(_) ->
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc(connect_sequence_pull_consumer)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc('_get_MyType')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc('_get_MyAdmin')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc('_get_priority_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc('_set_priority_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc('_get_lifetime_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc('_set_lifetime_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc(obtain_offered_types)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc(validate_event_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc(get_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc(set_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc(validate_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc(add_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc(remove_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc(get_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc(get_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc(remove_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc(pull_structured_events)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc(try_pull_structured_events)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc(disconnect_sequence_pull_supplier)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc(subscription_change)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc(callSeq)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc(callAny)),
+ ?match(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/SequenceProxyPullSupplier:1.0",
+ 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':typeID()),
+ check_tc('CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_get_interface()),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_is_a('CosNotifyChannelAdmin_SequenceProxyPullSupplier':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_is_a('CosNotifyChannelAdmin_ProxySupplier':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_is_a('CosNotification_QoSAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_is_a('CosNotifyFilter_FilterAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_is_a('CosNotifyComm_SequencePullSupplier':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_is_a('CosNotifyComm_NotifySubscribe':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_is_a('oe_CosNotificationComm_Event':typeID())),
+ ?match(false, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_SequenceProxyPushConsumer'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_SequenceProxyPushConsumer'(doc) -> ["CosNotifyChannelAdmin_SequenceProxyPushConsumer"];
+'CosNotifyChannelAdmin_SequenceProxyPushConsumer'(suite) -> [];
+'CosNotifyChannelAdmin_SequenceProxyPushConsumer'(_) ->
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_tc(connect_sequence_push_supplier)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_tc('_get_MyType')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_tc('_get_MyAdmin')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_tc(obtain_subscription_types)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_tc(validate_event_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_tc(get_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_tc(set_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_tc(validate_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_tc(add_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_tc(remove_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_tc(get_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_tc(get_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_tc(remove_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_tc(push_structured_events)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_tc(disconnect_sequence_push_consumer)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_tc(offer_change)),
+ ?match(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/SequenceProxyPushConsumer:1.0",
+ 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':typeID()),
+ check_tc('CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_get_interface()),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_is_a('CosNotifyChannelAdmin_SequenceProxyPushConsumer':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_is_a('CosNotifyChannelAdmin_ProxyConsumer':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_is_a('CosNotification_QoSAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_is_a('CosNotifyFilter_FilterAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_is_a('CosNotifyComm_SequencePushConsumer':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_is_a('CosNotifyComm_NotifyPublish':typeID())),
+ ?match(false, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_SequenceProxyPushSupplier'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_SequenceProxyPushSupplier'(doc) -> ["CosNotifyChannelAdmin_SequenceProxyPushSupplier"];
+'CosNotifyChannelAdmin_SequenceProxyPushSupplier'(suite) -> [];
+'CosNotifyChannelAdmin_SequenceProxyPushSupplier'(_) ->
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc(connect_sequence_push_consumer)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc(suspend_connection)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc(resume_connection)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc('_get_MyType')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc('_get_MyAdmin')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc('_get_priority_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc('_set_priority_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc('_get_lifetime_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc('_set_lifetime_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc(obtain_offered_types)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc(validate_event_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc(get_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc(set_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc(validate_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc(add_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc(remove_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc(get_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc(get_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc(remove_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc(disconnect_sequence_push_supplier)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc(subscription_change)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc(callSeq)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc(callAny)),
+ ?match(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/SequenceProxyPushSupplier:1.0",
+ 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':typeID()),
+ check_tc('CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_get_interface()),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_is_a('CosNotifyChannelAdmin_SequenceProxyPushSupplier':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_is_a('CosNotifyChannelAdmin_ProxySupplier':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_is_a('CosNotification_QoSAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_is_a('CosNotifyFilter_FilterAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_is_a('CosNotifyComm_SequencePushSupplier':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_is_a('CosNotifyComm_NotifySubscribe':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_is_a('oe_CosNotificationComm_Event':typeID())),
+ ?match(false, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_StructuredProxyPullConsumer'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_StructuredProxyPullConsumer'(doc) -> ["CosNotifyChannelAdmin_StructuredProxyPullConsumer"];
+'CosNotifyChannelAdmin_StructuredProxyPullConsumer'(suite) -> [];
+'CosNotifyChannelAdmin_StructuredProxyPullConsumer'(_) ->
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_tc(connect_structured_pull_supplier)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_tc(suspend_connection)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_tc(resume_connection)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_tc('_get_MyType')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_tc('_get_MyAdmin')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_tc(obtain_subscription_types)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_tc(validate_event_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_tc(get_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_tc(set_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_tc(validate_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_tc(add_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_tc(remove_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_tc(get_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_tc(get_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_tc(remove_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_tc(disconnect_structured_pull_consumer)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_tc(offer_change)),
+ ?match(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/StructuredProxyPullConsumer:1.0",
+ 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':typeID()),
+ check_tc('CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_get_interface()),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_is_a('CosNotifyChannelAdmin_StructuredProxyPullConsumer':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_is_a('CosNotifyChannelAdmin_ProxyConsumer':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_is_a('CosNotification_QoSAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_is_a('CosNotifyFilter_FilterAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_is_a('CosNotifyComm_StructuredPullConsumer':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_is_a('CosNotifyComm_NotifyPublish':typeID())),
+ ?match(false, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_StructuredProxyPullSupplier'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_StructuredProxyPullSupplier'(doc) -> ["CosNotifyChannelAdmin_StructuredProxyPullSupplier"];
+'CosNotifyChannelAdmin_StructuredProxyPullSupplier'(suite) -> [];
+'CosNotifyChannelAdmin_StructuredProxyPullSupplier'(_) ->
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc(connect_structured_pull_consumer)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc('_get_MyType')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc('_get_MyAdmin')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc('_get_priority_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc('_set_priority_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc('_get_lifetime_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc('_set_lifetime_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc(obtain_offered_types)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc(validate_event_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc(get_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc(set_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc(validate_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc(add_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc(remove_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc(get_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc(get_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc(remove_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc(pull_structured_event)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc(try_pull_structured_event)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc(disconnect_structured_pull_supplier)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc(subscription_change)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc(callSeq)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc(callAny)),
+ ?match(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/StructuredProxyPullSupplier:1.0",
+ 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':typeID()),
+ check_tc('CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_get_interface()),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_is_a('CosNotifyChannelAdmin_StructuredProxyPullSupplier':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_is_a('CosNotifyChannelAdmin_ProxySupplier':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_is_a('CosNotification_QoSAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_is_a('CosNotifyFilter_FilterAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_is_a('CosNotifyComm_StructuredPullSupplier':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_is_a('CosNotifyComm_NotifySubscribe':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_is_a('oe_CosNotificationComm_Event':typeID())),
+ ?match(false, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_StructuredProxyPushConsumer'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_StructuredProxyPushConsumer'(doc) -> ["CosNotifyChannelAdmin_StructuredProxyPushConsumer"];
+'CosNotifyChannelAdmin_StructuredProxyPushConsumer'(suite) -> [];
+'CosNotifyChannelAdmin_StructuredProxyPushConsumer'(_) ->
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_tc(connect_structured_push_supplier)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_tc('_get_MyType')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_tc('_get_MyAdmin')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_tc(obtain_subscription_types)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_tc(validate_event_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_tc(get_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_tc(set_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_tc(validate_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_tc(add_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_tc(remove_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_tc(get_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_tc(get_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_tc(remove_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_tc(push_structured_event)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_tc(disconnect_structured_push_consumer)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_tc(offer_change)),
+ ?match(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/StructuredProxyPushConsumer:1.0",
+ 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':typeID()),
+ check_tc('CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_get_interface()),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_is_a('CosNotifyChannelAdmin_StructuredProxyPushConsumer':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_is_a('CosNotifyChannelAdmin_ProxyConsumer':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_is_a('CosNotification_QoSAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_is_a('CosNotifyFilter_FilterAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_is_a('CosNotifyComm_StructuredPushConsumer':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_is_a('CosNotifyComm_NotifyPublish':typeID())),
+ ?match(false, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_StructuredProxyPushSupplier'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_StructuredProxyPushSupplier'(doc) -> ["CosNotifyChannelAdmin_StructuredProxyPushSupplier"];
+'CosNotifyChannelAdmin_StructuredProxyPushSupplier'(suite) -> [];
+'CosNotifyChannelAdmin_StructuredProxyPushSupplier'(_) ->
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc(connect_structured_push_consumer)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc(suspend_connection)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc(resume_connection)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc('_get_MyType')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc('_get_MyAdmin')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc('_get_priority_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc('_set_priority_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc('_get_lifetime_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc('_set_lifetime_filter')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc(obtain_offered_types)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc(validate_event_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc(get_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc(set_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc(validate_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc(add_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc(remove_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc(get_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc(get_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc(remove_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc(disconnect_structured_push_supplier)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc(subscription_change)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc(callSeq)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc(callAny)),
+ ?match(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/StructuredProxyPushSupplier:1.0",
+ 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':typeID()),
+ check_tc('CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_get_interface()),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_is_a('CosNotifyChannelAdmin_StructuredProxyPushSupplier':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_is_a('CosNotifyChannelAdmin_ProxySupplier':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_is_a('CosNotification_QoSAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_is_a('CosNotifyFilter_FilterAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_is_a('CosNotifyComm_StructuredPushSupplier':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_is_a('CosNotifyComm_NotifySubscribe':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_is_a('oe_CosNotificationComm_Event':typeID())),
+ ?match(false, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyChannelAdmin_SupplierAdmin'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyChannelAdmin_SupplierAdmin'(doc) -> ["CosNotifyChannelAdmin_SupplierAdmin"];
+'CosNotifyChannelAdmin_SupplierAdmin'(suite) -> [];
+'CosNotifyChannelAdmin_SupplierAdmin'(_) ->
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc('_get_MyID')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc('_get_MyChannel')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc('_get_MyOperator')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc('_get_pull_consumers')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc('_get_push_consumers')),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc(get_proxy_consumer)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc(obtain_notification_pull_consumer)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc(obtain_notification_push_consumer)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc(destroy)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc(get_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc(set_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc(validate_qos)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc(offer_change)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc(add_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc(remove_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc(get_filter)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc(get_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc(remove_all_filters)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc(obtain_push_consumer)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc(obtain_pull_consumer)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc(callSeq)),
+ ?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc(callAny)),
+ ?match(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyChannelAdmin_SupplierAdmin':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyChannelAdmin/SupplierAdmin:1.0",
+ 'CosNotifyChannelAdmin_SupplierAdmin':typeID()),
+ check_tc('CosNotifyChannelAdmin_SupplierAdmin':oe_get_interface()),
+ ?match(true, 'CosNotifyChannelAdmin_SupplierAdmin':oe_is_a('CosNotifyChannelAdmin_SupplierAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SupplierAdmin':oe_is_a('CosNotification_QoSAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SupplierAdmin':oe_is_a('CosNotifyComm_NotifyPublish':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SupplierAdmin':oe_is_a('CosNotifyFilter_FilterAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SupplierAdmin':oe_is_a('CosEventChannelAdmin_SupplierAdmin':typeID())),
+ ?match(true, 'CosNotifyChannelAdmin_SupplierAdmin':oe_is_a('oe_CosNotificationComm_Event':typeID())),
+ ?match(false, 'CosNotifyChannelAdmin_SupplierAdmin':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyFilter_Filter'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyFilter_Filter'(doc) -> ["CosNotifyFilter_Filter"];
+'CosNotifyFilter_Filter'(suite) -> [];
+'CosNotifyFilter_Filter'(_) ->
+ ?nomatch(undefined, 'CosNotifyFilter_Filter':oe_tc('_get_constraint_grammar')),
+ ?nomatch(undefined, 'CosNotifyFilter_Filter':oe_tc(add_constraints)),
+ ?nomatch(undefined, 'CosNotifyFilter_Filter':oe_tc(modify_constraints)),
+ ?nomatch(undefined, 'CosNotifyFilter_Filter':oe_tc(get_constraints)),
+ ?nomatch(undefined, 'CosNotifyFilter_Filter':oe_tc(get_all_constraints)),
+ ?nomatch(undefined, 'CosNotifyFilter_Filter':oe_tc(remove_all_constraints)),
+ ?nomatch(undefined, 'CosNotifyFilter_Filter':oe_tc(destroy)),
+ ?nomatch(undefined, 'CosNotifyFilter_Filter':oe_tc(match)),
+ ?nomatch(undefined, 'CosNotifyFilter_Filter':oe_tc(match_structured)),
+ ?nomatch(undefined, 'CosNotifyFilter_Filter':oe_tc(match_typed)),
+ ?nomatch(undefined, 'CosNotifyFilter_Filter':oe_tc(attach_callback)),
+ ?nomatch(undefined, 'CosNotifyFilter_Filter':oe_tc(detach_callback)),
+ ?nomatch(undefined, 'CosNotifyFilter_Filter':oe_tc(get_callbacks)),
+ ?match(undefined, 'CosNotifyFilter_Filter':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyFilter_Filter':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyFilter/Filter:1.0",
+ 'CosNotifyFilter_Filter':typeID()),
+ check_tc('CosNotifyFilter_Filter':oe_get_interface()),
+ ?match(true, 'CosNotifyFilter_Filter':oe_is_a('CosNotifyFilter_Filter':typeID())),
+ ?match(false, 'CosNotifyFilter_Filter':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyFilter_FilterAdmin'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyFilter_FilterAdmin'(doc) -> ["CosNotifyFilter_FilterAdmin"];
+'CosNotifyFilter_FilterAdmin'(suite) -> [];
+'CosNotifyFilter_FilterAdmin'(_) ->
+ ?nomatch(undefined, 'CosNotifyFilter_FilterAdmin':oe_tc(add_filter)),
+ ?nomatch(undefined, 'CosNotifyFilter_FilterAdmin':oe_tc(remove_filter)),
+ ?nomatch(undefined, 'CosNotifyFilter_FilterAdmin':oe_tc(get_filter)),
+ ?nomatch(undefined, 'CosNotifyFilter_FilterAdmin':oe_tc(get_all_filters)),
+ ?nomatch(undefined, 'CosNotifyFilter_FilterAdmin':oe_tc(remove_all_filters)),
+ ?match(undefined, 'CosNotifyFilter_FilterAdmin':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyFilter_FilterAdmin':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyFilter/FilterAdmin:1.0",
+ 'CosNotifyFilter_FilterAdmin':typeID()),
+ check_tc('CosNotifyFilter_FilterAdmin':oe_get_interface()),
+ ?match(true, 'CosNotifyFilter_FilterAdmin':oe_is_a('CosNotifyFilter_FilterAdmin':typeID())),
+ ?match(false, 'CosNotifyFilter_FilterAdmin':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyFilter_FilterFactory'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyFilter_FilterFactory'(doc) -> ["CosNotifyFilter_FilterFactory"];
+'CosNotifyFilter_FilterFactory'(suite) -> [];
+'CosNotifyFilter_FilterFactory'(_) ->
+ ?nomatch(undefined, 'CosNotifyFilter_FilterFactory':oe_tc(create_filter)),
+ ?nomatch(undefined, 'CosNotifyFilter_FilterFactory':oe_tc(create_mapping_filter)),
+ ?match(undefined, 'CosNotifyFilter_FilterFactory':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyFilter_FilterFactory':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyFilter/FilterFactory:1.0",
+ 'CosNotifyFilter_FilterFactory':typeID()),
+ check_tc('CosNotifyFilter_FilterFactory':oe_get_interface()),
+ ?match(true, 'CosNotifyFilter_FilterFactory':oe_is_a('CosNotifyFilter_FilterFactory':typeID())),
+ ?match(false, 'CosNotifyFilter_FilterFactory':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyFilter_MappingFilter'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyFilter_MappingFilter'(doc) -> ["CosNotifyFilter_MappingFilter"];
+'CosNotifyFilter_MappingFilter'(suite) -> [];
+'CosNotifyFilter_MappingFilter'(_) ->
+ ?nomatch(undefined, 'CosNotifyFilter_MappingFilter':oe_tc('_get_constraint_grammar')),
+ ?nomatch(undefined, 'CosNotifyFilter_MappingFilter':oe_tc('_get_value_type')),
+ ?nomatch(undefined, 'CosNotifyFilter_MappingFilter':oe_tc('_get_default_value')),
+ ?nomatch(undefined, 'CosNotifyFilter_MappingFilter':oe_tc(add_mapping_constraints)),
+ ?nomatch(undefined, 'CosNotifyFilter_MappingFilter':oe_tc(modify_mapping_constraints)),
+ ?nomatch(undefined, 'CosNotifyFilter_MappingFilter':oe_tc(get_mapping_constraints)),
+ ?nomatch(undefined, 'CosNotifyFilter_MappingFilter':oe_tc(get_all_mapping_constraints)),
+ ?nomatch(undefined, 'CosNotifyFilter_MappingFilter':oe_tc(remove_all_mapping_constraints)),
+ ?nomatch(undefined, 'CosNotifyFilter_MappingFilter':oe_tc(destroy)),
+ ?nomatch(undefined, 'CosNotifyFilter_MappingFilter':oe_tc(match)),
+ ?nomatch(undefined, 'CosNotifyFilter_MappingFilter':oe_tc(match_structured)),
+ ?nomatch(undefined, 'CosNotifyFilter_MappingFilter':oe_tc(match_typed)),
+ ?match(undefined, 'CosNotifyFilter_MappingFilter':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyFilter_MappingFilter':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyFilter/MappingFilter:1.0",
+ 'CosNotifyFilter_MappingFilter':typeID()),
+ check_tc('CosNotifyFilter_MappingFilter':oe_get_interface()),
+ ?match(true, 'CosNotifyFilter_MappingFilter':oe_is_a('CosNotifyFilter_MappingFilter':typeID())),
+ ?match(false, 'CosNotifyFilter_MappingFilter':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyComm_NotifyPublish'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyComm_NotifyPublish'(doc) -> ["CosNotifyComm_NotifyPublish"];
+'CosNotifyComm_NotifyPublish'(suite) -> [];
+'CosNotifyComm_NotifyPublish'(_) ->
+ ?nomatch(undefined, 'CosNotifyComm_NotifyPublish':oe_tc(offer_change)),
+ ?match(undefined, 'CosNotifyComm_NotifyPublish':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyComm_NotifyPublish':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyComm/NotifyPublish:1.0",
+ 'CosNotifyComm_NotifyPublish':typeID()),
+ check_tc('CosNotifyComm_NotifyPublish':oe_get_interface()),
+ ?match(true, 'CosNotifyComm_NotifyPublish':oe_is_a('CosNotifyComm_NotifyPublish':typeID())),
+ ?match(false, 'CosNotifyComm_NotifyPublish':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyComm_NotifySubscribe'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyComm_NotifySubscribe'(doc) -> ["CosNotifyComm_NotifySubscribe"];
+'CosNotifyComm_NotifySubscribe'(suite) -> [];
+'CosNotifyComm_NotifySubscribe'(_) ->
+ ?nomatch(undefined, 'CosNotifyComm_NotifySubscribe':oe_tc(subscription_change)),
+ ?match(undefined, 'CosNotifyComm_NotifySubscribe':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyComm_NotifySubscribe':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyComm/NotifySubscribe:1.0",
+ 'CosNotifyComm_NotifySubscribe':typeID()),
+ check_tc('CosNotifyComm_NotifySubscribe':oe_get_interface()),
+ ?match(true, 'CosNotifyComm_NotifySubscribe':oe_is_a('CosNotifyComm_NotifySubscribe':typeID())),
+ ?match(false, 'CosNotifyComm_NotifySubscribe':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyComm_PullConsumer'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyComm_PullConsumer'(doc) -> ["CosNotifyComm_PullConsumer"];
+'CosNotifyComm_PullConsumer'(suite) -> [];
+'CosNotifyComm_PullConsumer'(_) ->
+ ?nomatch(undefined, 'CosNotifyComm_PullConsumer':oe_tc(offer_change)),
+ ?nomatch(undefined, 'CosNotifyComm_PullConsumer':oe_tc(disconnect_pull_consumer)),
+ ?match(undefined, 'CosNotifyComm_PullConsumer':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyComm_PullConsumer':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyComm/PullConsumer:1.0",
+ 'CosNotifyComm_PullConsumer':typeID()),
+ check_tc('CosNotifyComm_PullConsumer':oe_get_interface()),
+ ?match(true, 'CosNotifyComm_PullConsumer':oe_is_a('CosNotifyComm_PullConsumer':typeID())),
+ ?match(true, 'CosNotifyComm_PullConsumer':oe_is_a('CosNotifyComm_NotifyPublish':typeID())),
+ ?match(true, 'CosNotifyComm_PullConsumer':oe_is_a('CosEventComm_PullConsumer':typeID())),
+ ?match(false, 'CosNotifyComm_PullConsumer':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyComm_PullSupplier'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyComm_PullSupplier'(doc) -> ["CosNotifyComm_PullSupplier"];
+'CosNotifyComm_PullSupplier'(suite) -> [];
+'CosNotifyComm_PullSupplier'(_) ->
+ ?nomatch(undefined, 'CosNotifyComm_PullSupplier':oe_tc(subscription_change)),
+ ?nomatch(undefined, 'CosNotifyComm_PullSupplier':oe_tc(pull)),
+ ?nomatch(undefined, 'CosNotifyComm_PullSupplier':oe_tc(try_pull)),
+ ?nomatch(undefined, 'CosNotifyComm_PullSupplier':oe_tc(disconnect_pull_supplier)),
+ ?match(undefined, 'CosNotifyComm_PullSupplier':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyComm_PullSupplier':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyComm/PullSupplier:1.0",
+ 'CosNotifyComm_PullSupplier':typeID()),
+ check_tc('CosNotifyComm_PullSupplier':oe_get_interface()),
+ ?match(true, 'CosNotifyComm_PullSupplier':oe_is_a('CosNotifyComm_PullSupplier':typeID())),
+ ?match(true, 'CosNotifyComm_PullSupplier':oe_is_a('CosNotifyComm_NotifySubscribe':typeID())),
+ ?match(true, 'CosNotifyComm_PullSupplier':oe_is_a('CosEventComm_PullSupplier':typeID())),
+ ?match(false, 'CosNotifyComm_PullSupplier':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyComm_PushConsumer'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyComm_PushConsumer'(doc) -> ["CosNotifyComm_PushConsumer"];
+'CosNotifyComm_PushConsumer'(suite) -> [];
+'CosNotifyComm_PushConsumer'(_) ->
+ ?nomatch(undefined, 'CosNotifyComm_PushConsumer':oe_tc(offer_change)),
+ ?nomatch(undefined, 'CosNotifyComm_PushConsumer':oe_tc(push)),
+ ?nomatch(undefined, 'CosNotifyComm_PushConsumer':oe_tc(disconnect_push_consumer)),
+ ?match(undefined, 'CosNotifyComm_PushConsumer':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyComm_PushConsumer':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyComm/PushConsumer:1.0",
+ 'CosNotifyComm_PushConsumer':typeID()),
+ check_tc('CosNotifyComm_PushConsumer':oe_get_interface()),
+ ?match(true, 'CosNotifyComm_PushConsumer':oe_is_a('CosNotifyComm_PushConsumer':typeID())),
+ ?match(true, 'CosNotifyComm_PushConsumer':oe_is_a('CosNotifyComm_NotifyPublish':typeID())),
+ ?match(true, 'CosNotifyComm_PushConsumer':oe_is_a('CosEventComm_PushConsumer':typeID())),
+ ?match(false, 'CosNotifyComm_PushConsumer':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyComm_PushSupplier'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyComm_PushSupplier'(doc) -> ["CosNotifyComm_PushSupplier"];
+'CosNotifyComm_PushSupplier'(suite) -> [];
+'CosNotifyComm_PushSupplier'(_) ->
+ ?nomatch(undefined, 'CosNotifyComm_PushSupplier':oe_tc(subscription_change)),
+ ?nomatch(undefined, 'CosNotifyComm_PushSupplier':oe_tc(disconnect_push_supplier)),
+ ?match(undefined, 'CosNotifyComm_PushSupplier':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyComm_PushSupplier':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyComm/PushSupplier:1.0",
+ 'CosNotifyComm_PushSupplier':typeID()),
+ check_tc('CosNotifyComm_PushSupplier':oe_get_interface()),
+ ?match(true, 'CosNotifyComm_PushSupplier':oe_is_a('CosNotifyComm_PushSupplier':typeID())),
+ ?match(true, 'CosNotifyComm_PushSupplier':oe_is_a('CosNotifyComm_NotifySubscribe':typeID())),
+ ?match(true, 'CosNotifyComm_PushSupplier':oe_is_a('CosEventComm_PushSupplier':typeID())),
+ ?match(false, 'CosNotifyComm_PushSupplier':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyComm_SequencePullConsumer'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyComm_SequencePullConsumer'(doc) -> ["CosNotifyComm_SequencePullConsumer"];
+'CosNotifyComm_SequencePullConsumer'(suite) -> [];
+'CosNotifyComm_SequencePullConsumer'(_) ->
+ ?nomatch(undefined, 'CosNotifyComm_SequencePullConsumer':oe_tc(disconnect_sequence_pull_consumer)),
+ ?nomatch(undefined, 'CosNotifyComm_SequencePullConsumer':oe_tc(offer_change)),
+ ?match(undefined, 'CosNotifyComm_SequencePullConsumer':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyComm_SequencePullConsumer':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyComm/SequencePullConsumer:1.0",
+ 'CosNotifyComm_SequencePullConsumer':typeID()),
+ check_tc('CosNotifyComm_SequencePullConsumer':oe_get_interface()),
+ ?match(true, 'CosNotifyComm_SequencePullConsumer':oe_is_a('CosNotifyComm_SequencePullConsumer':typeID())),
+ ?match(true, 'CosNotifyComm_SequencePullConsumer':oe_is_a('CosNotifyComm_NotifyPublish':typeID())),
+ ?match(false, 'CosNotifyComm_SequencePullConsumer':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyComm_SequencePullSupplier'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyComm_SequencePullSupplier'(doc) -> ["CosNotifyComm_SequencePullSupplier"];
+'CosNotifyComm_SequencePullSupplier'(suite) -> [];
+'CosNotifyComm_SequencePullSupplier'(_) ->
+ ?nomatch(undefined, 'CosNotifyComm_SequencePullSupplier':oe_tc(pull_structured_events)),
+ ?nomatch(undefined, 'CosNotifyComm_SequencePullSupplier':oe_tc(try_pull_structured_events)),
+ ?nomatch(undefined, 'CosNotifyComm_SequencePullSupplier':oe_tc(disconnect_sequence_pull_supplier)),
+ ?nomatch(undefined, 'CosNotifyComm_SequencePullSupplier':oe_tc(subscription_change)),
+ ?match(undefined, 'CosNotifyComm_SequencePullSupplier':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyComm_SequencePullSupplier':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyComm/SequencePullSupplier:1.0",
+ 'CosNotifyComm_SequencePullSupplier':typeID()),
+ check_tc('CosNotifyComm_SequencePullSupplier':oe_get_interface()),
+ ?match(true, 'CosNotifyComm_SequencePullSupplier':oe_is_a('CosNotifyComm_SequencePullSupplier':typeID())),
+ ?match(true, 'CosNotifyComm_SequencePullSupplier':oe_is_a('CosNotifyComm_NotifySubscribe':typeID())),
+ ?match(false, 'CosNotifyComm_SequencePullSupplier':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyComm_SequencePushConsumer'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyComm_SequencePushConsumer'(doc) -> ["CosNotifyComm_SequencePushConsumer"];
+'CosNotifyComm_SequencePushConsumer'(suite) -> [];
+'CosNotifyComm_SequencePushConsumer'(_) ->
+ ?nomatch(undefined, 'CosNotifyComm_SequencePushConsumer':oe_tc(push_structured_events)),
+ ?nomatch(undefined, 'CosNotifyComm_SequencePushConsumer':oe_tc(disconnect_sequence_push_consumer)),
+ ?nomatch(undefined, 'CosNotifyComm_SequencePushConsumer':oe_tc(offer_change)),
+ ?match(undefined, 'CosNotifyComm_SequencePushConsumer':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyComm_SequencePushConsumer':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyComm/SequencePushConsumer:1.0",
+ 'CosNotifyComm_SequencePushConsumer':typeID()),
+ check_tc('CosNotifyComm_SequencePushConsumer':oe_get_interface()),
+ ?match(true, 'CosNotifyComm_SequencePushConsumer':oe_is_a('CosNotifyComm_SequencePushConsumer':typeID())),
+ ?match(true, 'CosNotifyComm_SequencePushConsumer':oe_is_a('CosNotifyComm_NotifyPublish':typeID())),
+ ?match(false, 'CosNotifyComm_SequencePushConsumer':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyComm_SequencePushSupplier'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyComm_SequencePushSupplier'(doc) -> ["CosNotifyComm_SequencePushSupplier"];
+'CosNotifyComm_SequencePushSupplier'(suite) -> [];
+'CosNotifyComm_SequencePushSupplier'(_) ->
+ ?nomatch(undefined, 'CosNotifyComm_SequencePushSupplier':oe_tc(disconnect_sequence_push_supplier)),
+ ?nomatch(undefined, 'CosNotifyComm_SequencePushSupplier':oe_tc(subscription_change)),
+ ?match(undefined, 'CosNotifyComm_SequencePushSupplier':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyComm_SequencePushSupplier':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyComm/SequencePushSupplier:1.0",
+ 'CosNotifyComm_SequencePushSupplier':typeID()),
+ check_tc('CosNotifyComm_SequencePushSupplier':oe_get_interface()),
+ ?match(true, 'CosNotifyComm_SequencePushSupplier':oe_is_a('CosNotifyComm_SequencePushSupplier':typeID())),
+ ?match(true, 'CosNotifyComm_SequencePushSupplier':oe_is_a('CosNotifyComm_NotifySubscribe':typeID())),
+ ?match(false, 'CosNotifyComm_SequencePushSupplier':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyComm_StructuredPullConsumer'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyComm_StructuredPullConsumer'(doc) -> ["CosNotifyComm_StructuredPullConsumer"];
+'CosNotifyComm_StructuredPullConsumer'(suite) -> [];
+'CosNotifyComm_StructuredPullConsumer'(_) ->
+ ?nomatch(undefined, 'CosNotifyComm_StructuredPullConsumer':oe_tc(disconnect_structured_pull_consumer)),
+ ?nomatch(undefined, 'CosNotifyComm_StructuredPullConsumer':oe_tc(offer_change)),
+ ?match(undefined, 'CosNotifyComm_StructuredPullConsumer':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyComm_StructuredPullConsumer':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyComm/StructuredPullConsumer:1.0",
+ 'CosNotifyComm_StructuredPullConsumer':typeID()),
+ check_tc('CosNotifyComm_StructuredPullConsumer':oe_get_interface()),
+ ?match(true, 'CosNotifyComm_StructuredPullConsumer':oe_is_a('CosNotifyComm_StructuredPullConsumer':typeID())),
+ ?match(true, 'CosNotifyComm_StructuredPullConsumer':oe_is_a('CosNotifyComm_NotifyPublish':typeID())),
+ ?match(false, 'CosNotifyComm_StructuredPullConsumer':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyComm_StructuredPullSupplier'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyComm_StructuredPullSupplier'(doc) -> ["CosNotifyComm_StructuredPullSupplier"];
+'CosNotifyComm_StructuredPullSupplier'(suite) -> [];
+'CosNotifyComm_StructuredPullSupplier'(_) ->
+ ?nomatch(undefined, 'CosNotifyComm_StructuredPullSupplier':oe_tc(pull_structured_event)),
+ ?nomatch(undefined, 'CosNotifyComm_StructuredPullSupplier':oe_tc(try_pull_structured_event)),
+ ?nomatch(undefined, 'CosNotifyComm_StructuredPullSupplier':oe_tc(disconnect_structured_pull_supplier)),
+ ?nomatch(undefined, 'CosNotifyComm_StructuredPullSupplier':oe_tc(subscription_change)),
+ ?match(undefined, 'CosNotifyComm_StructuredPullSupplier':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyComm_StructuredPullSupplier':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyComm/StructuredPullSupplier:1.0",
+ 'CosNotifyComm_StructuredPullSupplier':typeID()),
+ check_tc('CosNotifyComm_StructuredPullSupplier':oe_get_interface()),
+ ?match(true, 'CosNotifyComm_StructuredPullSupplier':oe_is_a('CosNotifyComm_StructuredPullSupplier':typeID())),
+ ?match(true, 'CosNotifyComm_StructuredPullSupplier':oe_is_a('CosNotifyComm_NotifySubscribe':typeID())),
+ ?match(false, 'CosNotifyComm_StructuredPullSupplier':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyComm_StructuredPushConsumer'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyComm_StructuredPushConsumer'(doc) -> ["CosNotifyComm_StructuredPushConsumer"];
+'CosNotifyComm_StructuredPushConsumer'(suite) -> [];
+'CosNotifyComm_StructuredPushConsumer'(_) ->
+ ?nomatch(undefined, 'CosNotifyComm_StructuredPushConsumer':oe_tc(push_structured_event)),
+ ?nomatch(undefined, 'CosNotifyComm_StructuredPushConsumer':oe_tc(disconnect_structured_push_consumer)),
+ ?nomatch(undefined, 'CosNotifyComm_StructuredPushConsumer':oe_tc(offer_change)),
+ ?match(undefined, 'CosNotifyComm_StructuredPushConsumer':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyComm_StructuredPushConsumer':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyComm/StructuredPushConsumer:1.0",
+ 'CosNotifyComm_StructuredPushConsumer':typeID()),
+ check_tc('CosNotifyComm_StructuredPushConsumer':oe_get_interface()),
+ ?match(true, 'CosNotifyComm_StructuredPushConsumer':oe_is_a('CosNotifyComm_StructuredPushConsumer':typeID())),
+ ?match(true, 'CosNotifyComm_StructuredPushConsumer':oe_is_a('CosNotifyComm_NotifyPublish':typeID())),
+ ?match(false, 'CosNotifyComm_StructuredPushConsumer':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNotifyComm_StructuredPushSupplier'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNotifyComm_StructuredPushSupplier'(doc) -> ["CosNotifyComm_StructuredPushSupplier"];
+'CosNotifyComm_StructuredPushSupplier'(suite) -> [];
+'CosNotifyComm_StructuredPushSupplier'(_) ->
+ ?nomatch(undefined, 'CosNotifyComm_StructuredPushSupplier':oe_tc(disconnect_structured_push_supplier)),
+ ?nomatch(undefined, 'CosNotifyComm_StructuredPushSupplier':oe_tc(subscription_change)),
+ ?match(undefined, 'CosNotifyComm_StructuredPushSupplier':oe_tc(undefined)),
+ ?match([_|_], 'CosNotifyComm_StructuredPushSupplier':oe_get_interface()),
+ ?match("IDL:omg.org/CosNotifyComm/StructuredPushSupplier:1.0",
+ 'CosNotifyComm_StructuredPushSupplier':typeID()),
+ check_tc('CosNotifyComm_StructuredPushSupplier':oe_get_interface()),
+ ?match(true, 'CosNotifyComm_StructuredPushSupplier':oe_is_a('CosNotifyComm_StructuredPushSupplier':typeID())),
+ ?match(true, 'CosNotifyComm_StructuredPushSupplier':oe_is_a('CosNotifyComm_NotifySubscribe':typeID())),
+ ?match(false, 'CosNotifyComm_StructuredPushSupplier':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'oe_CosNotificationComm_Event'
+%% Description:
+%%-----------------------------------------------------------------
+'oe_CosNotificationComm_Event'(doc) -> ["oe_CosNotificationComm_Event"];
+'oe_CosNotificationComm_Event'(suite) -> [];
+'oe_CosNotificationComm_Event'(_) ->
+ ?nomatch(undefined, 'oe_CosNotificationComm_Event':oe_tc(callSeq)),
+ ?nomatch(undefined, 'oe_CosNotificationComm_Event':oe_tc(callAny)),
+ ?match(undefined, 'oe_CosNotificationComm_Event':oe_tc(undefined)),
+ ?match([_|_], 'oe_CosNotificationComm_Event':oe_get_interface()),
+ ?match("IDL:oe_CosNotificationComm/Event:1.0",
+ 'oe_CosNotificationComm_Event':typeID()),
+ check_tc('oe_CosNotificationComm_Event':oe_get_interface()),
+ ?match(true, 'oe_CosNotificationComm_Event':oe_is_a('oe_CosNotificationComm_Event':typeID())),
+ ?match(false, 'oe_CosNotificationComm_Event':oe_is_a("wrong")),
+ ok.
+
+
+
+
+%%-----------------------------------------------------------------
+%% MISC functions
+%%-----------------------------------------------------------------
+check_tc([]) ->
+ ok;
+check_tc([{Op, {RetType, InParameters, OutParameters}}|T]) ->
+ io:format("checked - ~s~n", [Op]),
+ lists:all(?checktc(Op), [RetType|InParameters]),
+ lists:all(?checktc(Op), OutParameters),
+ check_tc(T).
+
+
diff --git a/lib/cosNotification/test/grammar_SUITE.erl b/lib/cosNotification/test/grammar_SUITE.erl
new file mode 100644
index 0000000000..30aec89e5f
--- /dev/null
+++ b/lib/cosNotification/test/grammar_SUITE.erl
@@ -0,0 +1,1094 @@
+%%--------------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2000-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%
+%%
+%%
+%%--------------------------------------------------------------------
+%% File : grammar_SUITE.erl
+%% Purpose : Testing the CosNotification BNF grammar.
+%%--------------------------------------------------------------------
+
+-module(grammar_SUITE).
+
+
+
+%%--------------- INCLUDES -----------------------------------
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/include/ifr_types.hrl").
+%% cosEvent files.
+-include_lib("cosEvent/include/CosEventChannelAdmin.hrl").
+%% Application files
+-include_lib("cosNotification/include/CosNotification.hrl").
+-include_lib("cosNotification/include/CosNotifyChannelAdmin.hrl").
+-include_lib("cosNotification/include/CosNotifyComm.hrl").
+-include_lib("cosNotification/include/CosNotifyFilter.hrl").
+
+-include_lib("cosNotification/src/CosNotification_Definitions.hrl").
+
+-include("idl_output/notify_test.hrl").
+
+-include("test_server.hrl").
+
+%%--------------- DEFINES ------------------------------------
+-define(default_timeout, ?t:minutes(20)).
+-define(match(ExpectedRes, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1, cases/0, init_all/1, finish_all/1,
+ union_api/1, enum_api/1, simple_types_api/1,
+ components_api/1, positional_api/1, variable_api/1,
+ init_per_testcase/2, fin_per_testcase/2]).
+
+-import(cosNotification_Filter, [create_filter/1, eval/2]).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["API tests for the cosNotification interfaces", ""];
+all(suite) -> {req,
+ [],
+ {conf, init_all, cases(), finish_all}}.
+
+cases() ->
+ [variable_api, union_api, enum_api, simple_types_api, components_api,
+ positional_api].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+
+init_per_testcase(_Case, Config) ->
+ Path = code:which(?MODULE),
+ code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Path = code:which(?MODULE),
+ code:del_path(filename:join(filename:dirname(Path), "idl_output")),
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+init_all(Config) ->
+ Path = code:which(?MODULE),
+ code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
+ if
+ is_list(Config) ->
+ Config;
+ true ->
+ exit("Config not a list")
+ end.
+
+finish_all(Config) ->
+ Path = code:which(?MODULE),
+ code:del_path(filename:join(filename:dirname(Path), "idl_output")),
+ Config.
+
+
+%%-----------------------------------------------------------------
+%% simple types grammar tests
+%%-----------------------------------------------------------------
+simple_types_api(doc) -> ["CosNotification simple types grammar tests", ""];
+simple_types_api(suite) -> [];
+simple_types_api(_Config) ->
+ %% Will always be true, no matter what kind of event we receive.
+ {ok,T1} = ?match({ok, _}, create_filter("2==2 and 3<4")),
+ ?match(true, eval(T1, ?not_CreateSE("DomainName","TypeName","EventName",
+ [],[], any:create(orber_tc:null(), null)))),
+
+ %% Will always be true, no matter what kind of event we receive.
+ {ok,T2} = ?match({ok, _}, create_filter("")),
+ ?match(true, eval(T2, ?not_CreateSE("DomainName","TypeName","EventName",
+ [],[], any:create(orber_tc:null(), null)))),
+
+ %% Check if $variable works
+ {ok,T3} = ?match({ok, _}, create_filter("$city == \'Berlin\'")),
+ ?match(true, eval(T3, ?not_CreateSE("DomainName","TypeName","EventName",
+ [#'CosNotification_Property'{name="city",
+ value=any:create(orber_tc:string(0), "Berlin")}],
+ [], any:create(orber_tc:null(), null)))),
+ ?match(false, eval(T3, ?not_CreateSE("DomainName","TypeName", "EventName",
+ [#'CosNotification_Property'{name="city",
+ value=any:create(orber_tc:string(0), "Dallas")}],
+
+ [], any:create(orber_tc:null(), null)))),
+
+
+ {ok,T4} = ?match({ok, _}, create_filter("$zip == 44")),
+ ?match(true, eval(T4, ?not_CreateSE("DomainName","TypeName", "EventName",
+ [#'CosNotification_Property'{name="zip",
+ value=any:create(orber_tc:short(), 44)}],
+
+ [], any:create(orber_tc:null(), null)))),
+ ?match(true, eval(T4, ?not_CreateSE("DomainName","TypeName", "EventName",
+ [],[],
+ any:create('CosNotification_Property':tc(),
+ #'CosNotification_Property'
+ {name="zip",
+ value=any:create(orber_tc:short(),
+ 44)})))),
+ ?match(false, eval(T4, ?not_CreateSE("DomainName","TypeName", "EventName",
+ [#'CosNotification_Property'{name="zip",
+ value=any:create(orber_tc:short(), 33)}],
+
+ [], any:create(orber_tc:null(), null)))),
+
+ %% Will always be true, no matter what kind of event we receive.
+ {ok,T5} = ?match({ok, _}, create_filter("\'oo'\~\'foobar\'")),
+ ?match(true, eval(T5, ?not_CreateSE("DomainName","TypeName","EventName",
+ [],[], any:create(orber_tc:null(), null)))),
+ %% Will always be false, no matter what kind of event we receive.
+ {ok,T6} = ?match({ok, _}, create_filter("\'o1'\~\'foobar\'")),
+ ?match(false, eval(T6, ?not_CreateSE("DomainName","TypeName","EventName",
+ [],[], any:create(orber_tc:null(), null)))),
+
+ %% Can we apply the ~ operation as above using a variable
+ {ok,T7} = ?match({ok, _}, create_filter("$str~\'foobar\'")),
+ ?match(true, eval(T7, ?not_CreateSE("DomainName","TypeName","EventName",
+ [#'CosNotification_Property'{name="str",
+ value=any:create(orber_tc:string(0), "oo")}],
+ [], any:create(orber_tc:null(), null)))),
+ ?match(false, eval(T7, ?not_CreateSE("DomainName","TypeName","EventName",
+ [#'CosNotification_Property'{name="str",
+ value=any:create(orber_tc:string(0), "ok")}],
+ [], any:create(orber_tc:null(), null)))),
+
+
+
+ {ok,_T8} = ?match({ok, _}, create_filter("$\\zip == 44444")),
+
+ ok.
+
+%%-----------------------------------------------------------------
+%% enum grammar tests
+%%-----------------------------------------------------------------
+enum_api(doc) -> ["CosNotification enum grammar tests", ""];
+enum_api(suite) -> [];
+enum_api(_Config) ->
+ %% Accept events whose 'in' enum is set to the value 'HOUSE' or 'CAR'.
+ {ok,T1} = ?match({ok, _}, create_filter("$.\\in == HOUSE or $.\\in == CAR")),
+
+ ?match(true, eval(T1, any:create(orber_tc:alias("IFRId","in",tk_any),
+ any:create({tk_enum, "IFRId", "in", ["HOUSE", "CAR"]},
+ 'HOUSE')))),
+ ?match(false, eval(T1, any:create(orber_tc:alias("IFRId","in",tk_any),
+ any:create({tk_enum, "IFRId", "in", ["HOUSE", "CAR"]},
+ 'GARAGE')))),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Union grammar tests
+%%-----------------------------------------------------------------
+union_api(doc) -> ["CosNotification union grammar tests", ""];
+union_api(suite) -> [];
+union_api(_Config) ->
+ {ok,T1} = ?match({ok, _}, create_filter("exist $.uni1._d and $.uni1._d == 1 and $.uni1.(1) == 10")),
+ {ok,T2} = ?match({ok, _}, create_filter("default $.uni1._d and $.uni1.() == 10")),
+ {ok,T3} = ?match({ok, _}, create_filter("default $.uni1._d and $.uni1.(999) == 10")),
+ ?match(true, eval(T1, ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "EventName",[],[],
+ any:create(orber_tc:alias("IDL:notify_test/namedAny:1.0",
+ "uni1",
+ tk_any),
+ any:create(notify_test_uni1:tc(),
+ #notify_test_uni1{label= 1,
+ value=10}))))),
+ ?match(true, eval(T2, ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "EventName",[],[],
+ any:create(orber_tc:alias("IDL:notify_test/namedAny:1.0",
+ "uni1",
+ tk_any),
+ any:create(notify_test_uni1:tc(),
+ #notify_test_uni1{label= 100,
+ value=10}))))),
+ ?match(true, eval(T3, ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "EventName",[],[],
+ any:create(orber_tc:alias("IDL:notify_test/namedAny:1.0",
+ "uni1",
+ tk_any),
+ any:create(notify_test_uni1:tc(),
+ #notify_test_uni1{label= 100,
+ value=10}))))),
+ ?match(true, eval(T1, any:create(orber_tc:alias("IDL:notify_test/namedAny:1.0",
+ "uni1",
+ tk_any),
+ any:create(notify_test_uni1:tc(),
+ #notify_test_uni1{label= 1,
+ value=10})))),
+ ?match(false, eval(T2, any:create(orber_tc:alias("IDL:notify_test/namedAny:1.0",
+ "uni1",
+ tk_any),
+ any:create(notify_test_uni1:tc(),
+ #notify_test_uni1{label= 1,
+ value=10})))),
+ ?match(false, eval(T3, any:create(orber_tc:alias("IDL:notify_test/namedAny:1.0",
+ "uni1",
+ tk_any),
+ any:create(notify_test_uni1:tc(),
+ #notify_test_uni1{label= 1,
+ value=10})))),
+ ?match(true, eval(T1, ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "EventName",[],[],
+ any:create(notify_test_studies:tc(), #notify_test_studies
+ {uni1 = #notify_test_uni1{label= 1, value=10},
+ gpa = 90,
+ tests = [#'CosNotification_Property'
+ {name="midterm", value=any:create(orber_tc:short(), 70)},
+ #'CosNotification_Property'
+ {name="final", value=any:create(orber_tc:short(), 60)}],
+ monthly_attendance = {0,1,2,10}})))),
+ ?match(false, eval(T2, ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "EventName",[],[],
+ any:create(notify_test_studies:tc(), #notify_test_studies
+ {uni1 = #notify_test_uni1{label= 1, value=10},
+ gpa = 90,
+ tests = [#'CosNotification_Property'
+ {name="midterm", value=any:create(orber_tc:short(), 70)},
+ #'CosNotification_Property'
+ {name="final", value=any:create(orber_tc:short(), 60)}],
+ monthly_attendance = {0,1,2,10}})))),
+ ?match(false, eval(T3, ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "EventName",[],[],
+ any:create(notify_test_studies:tc(), #notify_test_studies
+ {uni1 = #notify_test_uni1{label= 1, value=10},
+ gpa = 90,
+ tests = [#'CosNotification_Property'
+ {name="midterm", value=any:create(orber_tc:short(), 70)},
+ #'CosNotification_Property'
+ {name="final", value=any:create(orber_tc:short(), 60)}],
+ monthly_attendance = {0,1,2,10}})))),
+ ?match(true, eval(T1, any:create(notify_test_studies:tc(), #notify_test_studies
+ {uni1 = #notify_test_uni1{label= 1, value=10},
+ gpa = 90,
+ tests = [#'CosNotification_Property'
+ {name="midterm", value=any:create(orber_tc:short(), 70)},
+ #'CosNotification_Property'
+ {name="final", value=any:create(orber_tc:short(), 60)}],
+ monthly_attendance = {0,1,2,10}}))),
+ ?match(false, eval(T2, any:create(notify_test_studies:tc(), #notify_test_studies
+ {uni1 = #notify_test_uni1{label= 1, value=10},
+ gpa = 90,
+ tests = [#'CosNotification_Property'
+ {name="midterm", value=any:create(orber_tc:short(), 70)},
+ #'CosNotification_Property'
+ {name="final", value=any:create(orber_tc:short(), 60)}],
+ monthly_attendance = {0,1,2,10}}))),
+ ?match(false, eval(T3, any:create(notify_test_studies:tc(), #notify_test_studies
+ {uni1 = #notify_test_uni1{label= 1, value=10},
+ gpa = 90,
+ tests = [#'CosNotification_Property'
+ {name="midterm", value=any:create(orber_tc:short(), 70)},
+ #'CosNotification_Property'
+ {name="final", value=any:create(orber_tc:short(), 60)}],
+ monthly_attendance = {0,1,2,10}}))),
+
+ {ok,T4} = ?match({ok, _}, create_filter("exist $.alias.uni1._d and $.alias.uni1._d == 1 and $.alias.uni1.(1) == 10")),
+ ?match(true, eval(T4, ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "EventName",[],[],
+ any:create(orber_tc:alias(notify_test_studies:id(),
+ "alias",
+ notify_test_studies:tc()),
+ #notify_test_studies
+ {uni1 = #notify_test_uni1{label= 1, value=10},
+ gpa = 90, tests = [],
+ monthly_attendance = {0,1,2,10}})))),
+ ?match(true, eval(T4, any:create(orber_tc:alias(notify_test_studies:id(),
+ "alias",
+ notify_test_studies:tc()),
+ #notify_test_studies
+ {uni1 = #notify_test_uni1{label= 1, value=10},
+ gpa = 90, tests = [],
+ monthly_attendance = {0,1,2,10}}))),
+ %% Accept events with a default union discriminator set to the value 2.
+ {ok,T5} = ?match({ok, _}, create_filter("default $._d and $.defvalue == 2")),
+ ?match(true, eval(T5, any:create(notify_test_uni1:tc(),
+ #notify_test_uni1{label= 100, value=2}))),
+ %% label not default.
+ ?match(false, eval(T5, any:create(notify_test_uni1:tc(),
+ #notify_test_uni1{label= 2, value=2}))),
+ %% Default does not exist (nor the component defvalue)
+ ?match(false, eval(T5, any:create(notify_test_uni2:tc(),
+ #notify_test_uni2{label= 100, value=2}))),
+ %% Both wrong
+ ?match(false, eval(T5, any:create(notify_test_uni2:tc(),
+ #notify_test_uni2{label= 2, value=2}))),
+
+ {ok,T6} = ?match({ok, _}, create_filter("default $._d and $.(-8) == 2")),
+ ?match(true, eval(T6, any:create(notify_test_uni1:tc(),
+ #notify_test_uni1{label= 100, value=2}))),
+ %% label not default.
+ ?match(false, eval(T6, any:create(notify_test_uni1:tc(),
+ #notify_test_uni1{label= 2, value=2}))),
+ %% Default does not exist (nor the component defvalue)
+ ?match(false, eval(T6, any:create(notify_test_uni2:tc(),
+ #notify_test_uni2{label= 100, value=2}))),
+ %% Both wrong
+ ?match(false, eval(T6, any:create(notify_test_uni2:tc(),
+ #notify_test_uni2{label= 2, value=2}))),
+ %% the same as the above, but we try to access a label that is not default
+ {ok,T7} = ?match({ok, _}, create_filter("default $._d and $.(2) == 2")),
+ ?match({error, _}, eval(T7, any:create(notify_test_uni1:tc(),
+ #notify_test_uni1{label= 100, value=2}))),
+
+ %% Must be a default-union with its 'defvalue' set to 2.
+ {ok,T8} = ?match({ok, _}, create_filter("default $._d and $.('defvalue') == 2")),
+ ?match(true, eval(T8, any:create(notify_test_uni1:tc(),
+ #notify_test_uni1{label= 100, value=2}))),
+ %% label not default.
+ ?match(false, eval(T8, any:create(notify_test_uni1:tc(),
+ #notify_test_uni1{label= 2, value=2}))),
+ %% Default does not exist (nor the component defvalue)
+ ?match(false, eval(T8, any:create(notify_test_uni2:tc(),
+ #notify_test_uni2{label= 100, value=2}))),
+ %% Both wrong
+ ?match(false, eval(T8, any:create(notify_test_uni2:tc(),
+ #notify_test_uni2{label= 2, value=2}))),
+
+ %% Must be a default-union with its value set to 2.
+ {ok,T9} = ?match({ok, _}, create_filter("default $._d and $.(+100) == 2")),
+ ?match(true, eval(T9, any:create(notify_test_uni1:tc(),
+ #notify_test_uni1{label= 100, value=2}))),
+ %% label not default.
+ ?match(false, eval(T9, any:create(notify_test_uni1:tc(),
+ #notify_test_uni1{label= 2, value=2}))),
+ %% Default does not exist (nor the component defvalue)
+ ?match(false, eval(T9, any:create(notify_test_uni2:tc(),
+ #notify_test_uni2{label= 100, value=2}))),
+ %% Both wrong
+ ?match(false, eval(T9, any:create(notify_test_uni2:tc(),
+ #notify_test_uni2{label= 2, value=2}))),
+
+ %% So far, we have only tested to access the union itself. No will use more
+ %% complex union members.
+ %% T10 and T11 is "equal"
+ {ok,T10} = ?match({ok, _}, create_filter("$.M < 54")),
+ {ok,T11} = ?match({ok, _}, create_filter("$.(5) < 54")),
+ ?match(false, eval(T10, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 5, value=54}))),
+ ?match(false, eval(T11, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 5, value=54}))),
+ ?match(true, eval(T10, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 5, value=50}))),
+ ?match(true, eval(T11, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 5, value=50}))),
+ ?match({error,_}, eval(T10, any:create(notify_test_K:tc(),
+ #notify_test_K{label= -1, value=50}))),
+ ?match({error,_}, eval(T11, any:create(notify_test_K:tc(),
+ #notify_test_K{label= -1, value=50}))),
+
+ %% T12 and T13 is "equal"
+ {ok,T12} = ?match({ok, _}, create_filter("$.L.C < 128")),
+ {ok,T13} = ?match({ok, _}, create_filter("$.(3).2 < 128")),
+ ?match(true, eval(T12, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 3, value=
+ #notify_test_X{'A' = 1,
+ 'B' = "string",
+ 'C' = 120}}))),
+ ?match(true, eval(T13, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 3, value=
+ #notify_test_X{'A' = 1,
+ 'B' = "string",
+ 'C' = 120}}))),
+ ?match(false, eval(T12, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 3, value=
+ #notify_test_X{'A' = 1,
+ 'B' = "string",
+ 'C' = 200}}))),
+ ?match(false, eval(T13, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 3, value=
+ #notify_test_X{'A' = 1,
+ 'B' = "string",
+ 'C' = 200}}))),
+
+ %% Test if 'putty' is a substring of K
+ {ok,T15} = ?match({ok, _}, create_filter("'putty' ~ $.(2)")),
+ {ok,T16} = ?match({ok, _}, create_filter("'putty' ~ $.K")),
+ ?match(true, eval(T15, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 2, value= "isputtyok"}))),
+ ?match(true, eval(T16, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 2, value= "isputtyok"}))),
+ ?match(false, eval(T15, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 2, value= "notputtok"}))),
+ ?match(false, eval(T16, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 2, value= "notputtok"}))),
+
+ {ok,_T17} = ?match({ok, _}, create_filter("'putty' ~ $.(3).1")),
+ {ok,_T18} = ?match({ok, _}, create_filter("'putty' ~ $.L.B")),
+ ?match(true, eval(T12, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 3, value=
+ #notify_test_X{'A' = 1,
+ 'B' = "isputtyok",
+ 'C' = 120}}))),
+ ?match(true, eval(T13, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 3, value=
+ #notify_test_X{'A' = 1,
+ 'B' = "isputtyok",
+ 'C' = 120}}))),
+ ?match(false, eval(T12, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 3, value=
+ #notify_test_X{'A' = 1,
+ 'B' = "notputtok",
+ 'C' = 200}}))),
+ ?match(false, eval(T13, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 3, value=
+ #notify_test_X{'A' = 1,
+ 'B' = "notputtok",
+ 'C' = 200}}))),
+
+ %% Please observe that the switch 0 and 2 is defined to be equivalent.
+ {ok,T19} = ?match({ok, _}, create_filter("$._d == 2 and $.(0) != 'hoob'")),
+ {ok,T20} = ?match({ok, _}, create_filter("$._d == 2 and $.(2) != 'hoob'")),
+ ?match(true, eval(T19, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 2, value= "nothoob"}))),
+ ?match(true, eval(T20, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 2, value= "nothoob"}))),
+ ?match(false, eval(T19, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 2, value= "hoob"}))),
+ ?match(false, eval(T20, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 2, value= "hoob"}))),
+
+ ?match(false, eval(T19, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 5, value= 55}))),
+ ?match(false, eval(T20, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 5, value= 55}))),
+
+ ?match(false, eval(T19, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 100, value= "nothoob"}))),
+ ?match(false, eval(T20, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 100, value= "nothoob"}))),
+
+ {ok,T21} = ?match({ok, _}, create_filter("exist $.K")),
+ {ok,T22} = ?match({ok, _}, create_filter("exist $.(0) or exist $.(2)")),
+ ?match(true, eval(T21, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 0, value= "hoob"}))),
+ ?match(true, eval(T22, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 0, value= "hoob"}))),
+ ?match(true, eval(T21, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 2, value= "hoob"}))),
+ ?match(true, eval(T22, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 2, value= "hoob"}))),
+ ?match(false, eval(T21, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 5, value= 55}))),
+ ?match(false, eval(T22, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 5, value= 55}))),
+
+
+ %% Please observe that the switch 0 and 2 is defined to be equivalent.
+ {ok,T23} = ?match({ok, _}, create_filter("exist $.(2)")),
+ {ok,T24} = ?match({ok, _}, create_filter("exist $.(0)")),
+ ?match(true, eval(T23, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 2, value= "hoob"}))),
+ ?match(false, eval(T24, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 2, value= "hoob"}))),
+ ?match(false, eval(T23, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 0, value= "hoob"}))),
+ ?match(true, eval(T24, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 0, value= "hoob"}))),
+ ?match(false, eval(T23, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 5, value= 55}))),
+ ?match(false, eval(T24, any:create(notify_test_K:tc(),
+ #notify_test_K{label= 5, value= 55}))),
+
+ ok.
+
+%%-----------------------------------------------------------------
+%% Variables grammar tests
+%%-----------------------------------------------------------------
+variable_api(doc) -> ["CosNotification variables grammar tests", ""];
+variable_api(suite) -> [];
+variable_api(_Config) ->
+ %% Accept all "CommunicationsAlarm" events
+ {ok,T0} = ?match({ok, _}, create_filter("$type_name == 'CommunicationsAlarm'")),
+
+ ?match(true, eval(T0, ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "EventName",[],[],
+ any:create(orber_tc:null(), null)))),
+ ?match(false, eval(T0, ?not_CreateSE("DomainName","CommunicationsOK",
+ "EventName", [],[],
+ any:create(orber_tc:null(), null)))),
+ ?match(true, eval(T0, ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "EventName", [],[],
+ any:create(orber_tc:alias("IFRId", "type_name",
+ orber_tc:string(0)),
+ "CommunicationsOK")))),
+
+ ?match(true, eval(T0, any:create(orber_tc:alias("IFRId", "type_name",
+ orber_tc:string(0)),
+ "CommunicationsAlarm"))),
+ ?match(false, eval(T0, any:create(orber_tc:alias("IFRId", "type_name",
+ orber_tc:string(0)),
+ "CommunicationsOK"))),
+
+
+ %% Accept all "CommunicationsAlarm" events but no "lost_packet" messages.
+ {ok,T1} = ?match({ok, _}, create_filter("$type_name == 'CommunicationsAlarm' and not ($event_name == 'lost_packet')")),
+
+ ?match(true, eval(T1, ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "EventName",[],[],
+ any:create(orber_tc:null(), null)))),
+ ?match(false, eval(T1, ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "lost_packet", [],[],
+ any:create(orber_tc:null(), null)))),
+ ?match(true,
+ eval(T1, any:create(orber_tc:sequence('CosNotification_Property':tc(),0),
+ [#'CosNotification_Property'{name="type_name",
+ value=any:create(orber_tc:string(0), "CommunicationsAlarm")},
+ #'CosNotification_Property'{name="event_name",
+ value=any:create(orber_tc:string(0), "EventName")}]))),
+ ?match(false,
+ eval(T1, any:create(orber_tc:sequence('CosNotification_Property':tc(),0),
+ [#'CosNotification_Property'{name="type_name",
+ value=any:create(orber_tc:string(0), "CommunicationsAlarm")},
+ #'CosNotification_Property'{name="event_name",
+ value=any:create(orber_tc:string(0), "lost_packet")}]))),
+
+
+ %% Accept "CommunicationsAlarm" events with priorities ranging from 1 to 5.
+ {ok,T2} = ?match({ok, _}, create_filter("$type_name == 'CommunicationsAlarm' and $priority >= 1 and $priority <= 5")),
+ ?match(true, eval(T2, ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "EventName",
+ [#'CosNotification_Property'{name="priority",
+ value=any:create(orber_tc:short(), 2)}],
+ [], any:create(orber_tc:null(), null)))),
+ ?match(false, eval(T2, ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "EventName",
+ [#'CosNotification_Property'{name="priority",
+ value=any:create(orber_tc:short(), 20)}],
+ [], any:create(orber_tc:null(), null)))),
+
+ %% Select "MOVIE" events featuring at least 3 of the Marx Brothers.
+ {ok,T3} = ?match({ok, _}, create_filter("$type_name == 'MOVIE' and (('groucho' in $starlist) + ('chico' in $starlist) + ('harpo' in $starlist) + ('zeppo' in $starlist) + ('gummo' in $starlist)) > 2")),
+ ?match(true, eval(T3, ?not_CreateSE("DomainName","MOVIE",
+ "EventName",
+ [#'CosNotification_Property'{name="starlist",
+ value=any:create(orber_tc:sequence(orber_tc:string(0),0),
+ ["groucho", "harpo", "sam", "gummo"])}],
+ [], any:create(orber_tc:null(), null)))),
+ ?match(false, eval(T3, ?not_CreateSE("DomainName","MOVIE",
+ "EventName",
+ [#'CosNotification_Property'{name="starlist",
+ value=any:create(orber_tc:sequence(orber_tc:string(0),0),
+ ["frodo", "bilbo", "sam", "gummo"])}],
+ [], any:create(orber_tc:null(), null)))),
+ %% Accept students that took all 3 tests and had an average score of at least 80%.
+ {ok,T4} = ?match({ok, _}, create_filter("$test._length == 3 and ($test[0].score + $test[1].score + $test[2].score)/3 >=80")),
+ ?match(true, eval(T4, ?not_CreateSE("DomainName","TypeName",
+ "EventName", [],
+ [#'CosNotification_Property'{name="test",
+ value=any:create(orber_tc:array(notify_test_data:tc(),0),
+ {#notify_test_data{score=75},
+ #notify_test_data{score=80},
+ #notify_test_data{score=85}})}],
+ any:create(orber_tc:null(), null)))),
+ ?match(false, eval(T4, ?not_CreateSE("DomainName","TypeName",
+ "EventName", [],
+ [#'CosNotification_Property'{name="test",
+ value=any:create(orber_tc:array(notify_test_data:tc(),0),
+ {#notify_test_data{score=75},
+ #notify_test_data{score=80},
+ #notify_test_data{score=80}})}],
+ any:create(orber_tc:null(), null)))),
+ ?match(false, eval(T4, ?not_CreateSE("DomainName","TypeName",
+ "EventName", [],
+ [#'CosNotification_Property'{name="test",
+ value=any:create(orber_tc:array(notify_test_data:tc(),0),
+ {#notify_test_data{score=75},
+ #notify_test_data{score=85}})}],
+ any:create(orber_tc:null(), null)))),
+ %% Select processes that exceed a certain usage threshold.
+ {ok,T5} = ?match({ok, _}, create_filter("$memsize / 5.5 + $cputime * 1275.0 + $filesize * 1.25 > 500000.0")),
+ ?match(true, eval(T5, ?not_CreateSE("DomainName","TypeName",
+ "EventName", [],
+ [#'CosNotification_Property'{name="memsize",
+ value=any:create(orber_tc:float(), 5.5)},
+ #'CosNotification_Property'{name="cputime",
+ value=any:create(orber_tc:float(), 0.00078431137)},
+ #'CosNotification_Property'{name="filesize",
+ value=any:create(orber_tc:float(), 500000)}],
+ any:create(orber_tc:null(), null)))),
+ ?match(false, eval(T5, ?not_CreateSE("DomainName","TypeName",
+ "EventName", [],
+ [#'CosNotification_Property'{name="memsize",
+ value=any:create(orber_tc:float(), 5.5)},
+ #'CosNotification_Property'{name="cputime",
+ value=any:create(orber_tc:float(), 0.00078431137)},
+ #'CosNotification_Property'{name="filesize",
+ value=any:create(orber_tc:float(), 500)}],
+ any:create(orber_tc:null(), null)))),
+ ?match({error, _}, eval(T5, ?not_CreateSE("DomainName","TypeName",
+ "EventName", [],
+ [#'CosNotification_Property'{name="memsize",
+ value=any:create(orber_tc:float(), 5.5)},
+ #'CosNotification_Property'{name="filesize",
+ value=any:create(orber_tc:float(), 500)}],
+ any:create(orber_tc:null(), null)))),
+
+ ?match(true, eval(T5, ?not_CreateSE("DomainName","TypeName",
+ "EventName", [], [],
+ any:create(orber_tc:sequence('CosNotification_Property':tc(),0),
+ [#'CosNotification_Property'{name="memsize",
+ value=any:create(orber_tc:float(), 5.5)},
+ #'CosNotification_Property'{name="cputime",
+ value=any:create(orber_tc:float(), 0.00078431137)},
+ #'CosNotification_Property'{name="filesize",
+ value=any:create(orber_tc:float(), 500000)}])))),
+ ?match(false, eval(T5, ?not_CreateSE("DomainName","TypeName",
+ "EventName", [], [],
+ any:create(orber_tc:sequence('CosNotification_Property':tc(),0),
+ [#'CosNotification_Property'{name="memsize",
+ value=any:create(orber_tc:float(), 5.5)},
+ #'CosNotification_Property'{name="cputime",
+ value=any:create(orber_tc:float(), 0.00078431137)},
+ #'CosNotification_Property'{name="filesize",
+ value=any:create(orber_tc:float(), 500)}])))),
+ ?match({error, _}, eval(T5, ?not_CreateSE("DomainName","TypeName",
+ "EventName", [], [],
+ any:create(orber_tc:sequence('CosNotification_Property':tc(),0),
+ [#'CosNotification_Property'{name="memsize",
+ value=any:create(orber_tc:float(), 5.5)},
+ #'CosNotification_Property'{name="filesize",
+ value=any:create(orber_tc:float(), 500)}])))),
+
+ ?match(true, eval(T5, any:create(orber_tc:sequence('CosNotification_Property':tc(),0),
+ [#'CosNotification_Property'{name="memsize",
+ value=any:create(orber_tc:float(), 5.5)},
+ #'CosNotification_Property'{name="cputime",
+ value=any:create(orber_tc:float(), 0.00078431137)},
+ #'CosNotification_Property'{name="filesize",
+ value=any:create(orber_tc:float(), 500000)}]))),
+ ?match(false, eval(T5, any:create(orber_tc:sequence('CosNotification_Property':tc(),0),
+ [#'CosNotification_Property'{name="memsize",
+ value=any:create(orber_tc:float(), 5.5)},
+ #'CosNotification_Property'{name="cputime",
+ value=any:create(orber_tc:float(), 0.00078431137)},
+ #'CosNotification_Property'{name="filesize",
+ value=any:create(orber_tc:float(), 500)}]))),
+ ?match({error, _}, eval(T5, any:create(orber_tc:sequence('CosNotification_Property':tc(),0),
+ [#'CosNotification_Property'{name="memsize",
+ value=any:create(orber_tc:float(), 5.5)},
+ #'CosNotification_Property'{name="filesize",
+ value=any:create(orber_tc:float(), 500)}]))),
+
+ %% Accept events where a threshold has the unscoped type name 'data'.
+ {ok,T6} = ?match({ok, _}, create_filter("exist $threshold._type_id and $threshold._type_id == 'data'")),
+ ?match(true, eval(T6, any:create(orber_tc:alias(notify_test_data:id(),
+ "threshold",
+ notify_test_data:tc()),
+ #notify_test_data{score = 10, name = "Erlang"}))),
+
+
+
+ ?match(true, eval(T6, ?not_CreateSE("DomainName","TypeName",
+ "EventName", [],
+ [#'CosNotification_Property'
+ {name="threshold",
+ value=any:create(notify_test_data:tc(),
+ #notify_test_data
+ {score = 10,
+ name = "Erlang"})}],
+ any:create(orber_tc:null(), null)))),
+
+
+ ?match(true, eval(T6, ?not_CreateSE("DomainName","TypeName",
+ "EventName", [],
+ [#'CosNotification_Property'
+ {name="NotThreshold",
+ value=any:create(notify_test_data:tc(),
+ #notify_test_data
+ {score = 10,
+ name = "Erlang"})}],
+ any:create(orber_tc:alias(notify_test_data:id(),
+ "threshold",
+ notify_test_data:tc()),
+ #notify_test_data{score = 10, name = "Erlang"})))),
+
+
+
+ %% Accept events with a serviceUser property of the correct standard type.
+ {ok,T7} = ?match({ok, _}, create_filter("$violation(TestData)._repos_id == 'IDL:notify_test/data:1.0'")),
+ ?match(true, eval(T7, ?not_CreateSE("DomainName","TypeName",
+ "EventName", [],
+ [#'CosNotification_Property'
+ {name="violation",
+ value=any:create(orber_tc:array('CosNotification_Property':tc(),0),
+ [#'CosNotification_Property'
+ {name="TestData",
+ value=any:create(notify_test_data:tc(),
+ #notify_test_data
+ {score=100,
+ name="perfect score"})}])}],
+ any:create(orber_tc:null(), null)))),
+
+ {ok,T8} = ?match({ok, _}, create_filter("$type_name == 'CommunicationsAlarm' and $event_name == 'lost_packet' and $priority < 2")),
+ %% All correct
+ Event1 = ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "lost_packet",
+ [#'CosNotification_Property'{name="priority",
+ value=any:create(orber_tc:short(), 1)}],
+ [], any:create(orber_tc:null(), null)),
+ %% Priority to high
+ Event2 = ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "lost_packet",
+ [#'CosNotification_Property'{name="priority",
+ value=any:create(orber_tc:short(), 2)}],
+ [], any:create(orber_tc:null(), null)),
+ %% Misspell event_name, i.e., lost_packets instead of lost_packet
+ Event3 = ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "lost_packets",
+ [#'CosNotification_Property'{name="priority",
+ value=any:create(orber_tc:short(), 1)}],
+ [], any:create(orber_tc:null(), null)),
+ %% Another type_name
+ Event4 = ?not_CreateSE("DomainName","TemperatureAlarm",
+ "lost_packets",
+ [#'CosNotification_Property'{name="priority",
+ value=any:create(orber_tc:short(), 1)}],
+ [], any:create(orber_tc:null(), null)),
+
+ ?match(true, eval(T8, Event1)),
+ ?match(false, eval(T8, Event2)),
+ ?match(false, eval(T8, Event3)),
+ ?match(false, eval(T8, Event4)),
+
+ {ok,T9} = ?match({ok, _}, create_filter("$gpa < 80 or $tests(midterm) > $tests(final) or $monthly_attendance[3] < 10")),
+
+ %% midterm > final yields true, the others false
+ Event5 = ?not_CreateSE("DomainName","TypeName",
+ "EventName", [],
+ [#'CosNotification_Property'
+ {name="tests",
+ value=any:create(orber_tc:array('CosNotification_Property':tc(),0),
+ [#'CosNotification_Property'{name="midterm",
+ value=any:create(orber_tc:short(), 70)},
+ #'CosNotification_Property'{name="final",
+ value=any:create(orber_tc:short(), 60)}])},
+ #'CosNotification_Property'{name="monthly_attendance",
+ value=any:create(orber_tc:array(orber_tc:short(), 0),
+ {0,1,2,10})},
+ #'CosNotification_Property'{name="gpa",
+ value=any:create(orber_tc:short(), 90)}],
+ any:create(orber_tc:null(), null)),
+
+ %% monthly_attendance[3] < 10 yields true, the others false
+ Event6 = ?not_CreateSE("DomainName","TypeName",
+ "EventName", [],
+ [#'CosNotification_Property'{name="tests",
+ value=any:create(orber_tc:array('CosNotification_Property':tc(),0),
+ [#'CosNotification_Property'{name="midterm",
+ value=any:create(orber_tc:short(), 70)},
+ #'CosNotification_Property'{name="final",
+ value=any:create(orber_tc:short(), 80)}])},
+ #'CosNotification_Property'{name="monthly_attendance",
+ value=any:create(orber_tc:array(orber_tc:short(), 0),
+ {0,1,2,9})},
+ #'CosNotification_Property'{name="gpa",
+ value=any:create(orber_tc:short(), 90)}],
+ any:create(orber_tc:null(), null)),
+
+ %% gpa < 80 true, rest false.
+ Event7 = ?not_CreateSE("DomainName","TypeName",
+ "EventName", [],
+ [#'CosNotification_Property'{name="tests",
+ value=any:create(orber_tc:array('CosNotification_Property':tc(),0),
+ [#'CosNotification_Property'{name="midterm",
+ value=any:create(orber_tc:short(), 70)},
+ #'CosNotification_Property'{name="final",
+ value=any:create(orber_tc:short(), 80)}])},
+ #'CosNotification_Property'{name="monthly_attendance",
+ value=any:create(orber_tc:array(orber_tc:short(), 0),
+ {0,1,2,10})},
+ #'CosNotification_Property'{name="gpa",
+ value=any:create(orber_tc:short(), 70)}],
+ any:create(orber_tc:null(), null)),
+
+ %% All false
+ Event8 = ?not_CreateSE("DomainName","TypeName",
+ "EventName", [],
+ [#'CosNotification_Property'{name="tests",
+ value=any:create(orber_tc:array('CosNotification_Property':tc(),0),
+ [#'CosNotification_Property'{name="midterm",
+ value=any:create(orber_tc:short(), 70)},
+ #'CosNotification_Property'{name="final",
+ value=any:create(orber_tc:short(), 80)}])},
+ #'CosNotification_Property'{name="monthly_attendance",
+ value=any:create(orber_tc:array(orber_tc:short(), 0),
+ {0,1,2,10})},
+ #'CosNotification_Property'{name="gpa",
+ value=any:create(orber_tc:short(), 80)}],
+ any:create(orber_tc:null(), null)),
+
+ ?match(true, eval(T9, Event5)),
+ ?match(true, eval(T9, Event6)),
+ ?match(true, eval(T9, Event7)),
+ ?match(false, eval(T9, Event8)),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Misc grammar tests
+%%-----------------------------------------------------------------
+positional_api(doc) -> ["CosNotification positional notation grammar tests", ""];
+positional_api(suite) -> [];
+positional_api(_Config) ->
+ {ok,T1} = ?match({ok, _}, create_filter("$.3 < 80 or $.1(midterm) > $.1(final) or $.2[3] < 10")),
+
+ %% midterm > final yields true, the others false
+ Event1 = any:create(notify_test_studies:tc(), #notify_test_studies
+ {gpa = 90,
+ tests = [#'CosNotification_Property'
+ {name="midterm", value=any:create(orber_tc:short(), 70)},
+ #'CosNotification_Property'
+ {name="final", value=any:create(orber_tc:short(), 60)}],
+ monthly_attendance = {0,1,2,10}}),
+ %% monthly_attendance[3] < 10 yields true, the others false
+ Event2 = any:create(notify_test_studies:tc(), #notify_test_studies
+ {gpa = 90,
+ tests = [#'CosNotification_Property'
+ {name="midterm", value=any:create(orber_tc:short(), 70)},
+ #'CosNotification_Property'
+ {name="final", value=any:create(orber_tc:short(), 80)}],
+ monthly_attendance = {0,1,2,9}}),
+ %% gpa < 80 true, rest false.
+ Event3 = any:create(notify_test_studies:tc(), #notify_test_studies
+ {gpa = 70,
+ tests = [#'CosNotification_Property'
+ {name="midterm", value=any:create(orber_tc:short(), 70)},
+ #'CosNotification_Property'
+ {name="final", value=any:create(orber_tc:short(), 80)}],
+ monthly_attendance = {0,1,2,10}}),
+ %% All false
+ Event4 = any:create(notify_test_studies:tc(), #notify_test_studies
+ {gpa = 80,
+ tests = [#'CosNotification_Property'
+ {name="midterm", value=any:create(orber_tc:short(), 70)},
+ #'CosNotification_Property'
+ {name="final", value=any:create(orber_tc:short(), 80)}],
+ monthly_attendance = {0,1,2,10}}),
+
+ ?match(true, eval(T1, Event1)),
+ ?match(true, eval(T1, Event2)),
+ ?match(true, eval(T1, Event3)),
+ ?match(false, eval(T1, Event4)),
+
+ {ok,T2} = ?match({ok, _}, create_filter("$.0.0.0.1 == 'CommunicationsAlarm'")),
+
+ Event5 = ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "lost_packet", [], [],
+ any:create(orber_tc:null(), null)),
+
+ ?match(true, eval(T2, Event5)),
+
+ ok.
+
+%%-----------------------------------------------------------------
+%% Components grammar tests
+%%-----------------------------------------------------------------
+components_api(doc) -> ["CosNotification components grammar tests", ""];
+components_api(suite) -> [];
+components_api(_Config) ->
+ {ok,T1} = ?match({ok, _}, create_filter("$ == 2")),
+ ?match(true, eval(T1, ?not_CreateSE("DomainName","TypeName","EventName",
+ [],[], any:create(orber_tc:short(), 2)))),
+ ?match(true, eval(T1, any:create(orber_tc:short(), 2))),
+ ?match(false, eval(T1, ?not_CreateSE("DomainName","TypeName","EventName",
+ [],[], any:create(orber_tc:short(), 3)))),
+ ?match(false, eval(T1, any:create(orber_tc:short(), 3))),
+
+ %% Select "MOVIE" events featuring at least 3 of the Marx Brothers.
+ {ok,T2} = ?match({ok, _}, create_filter("$type_name == 'MOVIE' and (('groucho' in $.starlist) + ('chico' in $.starlist) + ('harpo' in $.starlist) + ('zeppo' in $.starlist) + ('gummo' in $.starlist)) > 2")),
+ ?match(true, eval(T2, ?not_CreateSE("DomainName","MOVIE", "EventName", [], [],
+ any:create(orber_tc:alias("IFRId","starlist",tk_any),
+ any:create(orber_tc:sequence(orber_tc:string(0),0),
+ ["groucho", "harpo", "sam", "gummo"]))))),
+ ?match(false, eval(T2, ?not_CreateSE("DomainName","MOVIE", "EventName", [], [],
+ any:create(orber_tc:alias("IFRId","starlist",tk_any),
+ any:create(orber_tc:sequence(orber_tc:string(0),0),
+ ["frodo", "bilbo", "sam", "gummo"]))))),
+
+ %% Accept only recent events (e.g., generated within the last 15 minutes or so).
+ {ok,_T3} = ?match({ok, _}, create_filter("$origination_timestamp.high + 2 < $curtime.high")),
+
+
+ %% Accept students that took all 3 tests and had an average score of at least 80%.
+ {ok,T4} = ?match({ok, _}, create_filter("$.test._length == 3 and ($.test[0].score + $.test[1].score + $.test[2].score)/3 >=80")),
+ ?match(true, eval(T4, ?not_CreateSE("DomainName","TypeName", "EventName", [], [],
+ any:create(orber_tc:alias("IFRId","test",tk_any),
+ any:create(orber_tc:array(notify_test_data:tc(),0),
+ {#notify_test_data{score=75},
+ #notify_test_data{score=80},
+ #notify_test_data{score=85}}))))),
+ ?match(false, eval(T4, ?not_CreateSE("DomainName","TypeName", "EventName", [], [],
+ any:create(orber_tc:alias("IFRId","test",tk_any),
+ any:create(orber_tc:array(notify_test_data:tc(),0),
+ {#notify_test_data{score=75},
+ #notify_test_data{score=80},
+ #notify_test_data{score=80}}))))),
+ ?match(false, eval(T4, ?not_CreateSE("DomainName","TypeName", "EventName", [], [],
+ any:create(orber_tc:alias("IFRId","test",tk_any),
+ any:create(orber_tc:array(notify_test_data:tc(),0),
+ {#notify_test_data{score=75},
+ #notify_test_data{score=80}}))))),
+
+ %% Select processes that exceed a certain usage threshold.
+ {ok,T5} = ?match({ok, _}, create_filter("$.memsize / 5.5 + $.cputime * 1275.0 + $.filesize * 1.25 > 500000.0")),
+ ?match(true, eval(T5, ?not_CreateSE("DomainName","TypeName", "EventName", [], [],
+ any:create(notify_test_computer:tc(),
+ #notify_test_computer
+ {memsize=5.5,
+ cputime = 0.00078431137,
+ filesize = 500000})))),
+ ?match(false, eval(T5, ?not_CreateSE("DomainName","TypeName", "EventName", [], [],
+ any:create(notify_test_computer:tc(),
+ #notify_test_computer
+ {memsize=5.5,
+ cputime = 0.00078431137,
+ filesize = 500})))),
+ ?match({error,_}, eval(T5, ?not_CreateSE("DomainName","TypeName", "EventName", [], [],
+ any:create(notify_test_computer:tc(),
+ #notify_test_computer
+ {memsize=5.5,
+ cputime = 0.00078431137})))),
+
+ %% Accept only Notification Service structured events.
+ {ok,T6} = ?match({ok, _}, create_filter("$._repos_id == 'IDL:omg.org/CosNotification/StructuredEvent:1.0'")),
+ ?match(true, eval(T6, ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "EventName",
+ [], [], any:create(orber_tc:null(), null)))),
+
+
+
+ %% Accept only those events that have a specified security "rights list".
+ {ok,T7} = ?match({ok, _}, create_filter("exist $.header.variable_header(required_rights)")),
+ ?match(false, eval(T7, ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "lost_packet",
+ [#'CosNotification_Property'{name="priority",
+ value=any:create(orber_tc:short(), 1)}],
+ [], any:create(orber_tc:null(), null)))),
+ ?match(true, eval(T7, ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "lost_packet",
+ [#'CosNotification_Property'{name="required_rights",
+ value=any:create(orber_tc:short(), 1)}],
+ [], any:create(orber_tc:null(), null)))),
+
+
+ {ok,T8} = ?match({ok, _}, create_filter("$.header.fixed_header.event_type.type_name == 'CommunicationsAlarm' and $.header.fixed_header.event_name == 'lost_packet' and $.header.variable_header(priority) < 2")),
+ %% All correct
+ Event1 = ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "lost_packet",
+ [#'CosNotification_Property'{name="priority",
+ value=any:create(orber_tc:short(), 1)}],
+ [], any:create(orber_tc:null(), null)),
+ %% Priority to high
+ Event2 = ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "lost_packet",
+ [#'CosNotification_Property'{name="priority",
+ value=any:create(orber_tc:short(), 2)}],
+ [], any:create(orber_tc:null(), null)),
+ %% Misspell event_name, i.e., lost_packets instead of lost_packet
+ Event3 = ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "lost_packets",
+ [#'CosNotification_Property'{name="priority",
+ value=any:create(orber_tc:short(), 1)}],
+ [], any:create(orber_tc:null(), null)),
+ %% Another type_name
+ Event4 = ?not_CreateSE("DomainName","TemperatureAlarm",
+ "lost_packets",
+ [#'CosNotification_Property'{name="priority",
+ value=any:create(orber_tc:short(), 1)}],
+ [], any:create(orber_tc:null(), null)),
+
+ ?match(true, eval(T8, Event1)),
+ ?match(false, eval(T8, Event2)),
+ ?match(false, eval(T8, Event3)),
+ ?match(false, eval(T8, Event4)),
+
+
+ {ok,T9} = ?match({ok, _}, create_filter("$.gpa < 80 or $.tests(midterm) > $.tests(final) or $.monthly_attendance[3] < 10")),
+
+ %% midterm > final yields true, the others false
+ Event5 = ?not_CreateSE("DomainName","TypeName",
+ "EventName", [], [],
+ any:create(notify_test_studies:tc(), #notify_test_studies
+ {gpa = 90,
+ tests = [#'CosNotification_Property'
+ {name="midterm", value=any:create(orber_tc:short(), 70)},
+ #'CosNotification_Property'
+ {name="final", value=any:create(orber_tc:short(), 60)}],
+ monthly_attendance = {0,1,2,10}})),
+ %% monthly_attendance[3] < 10 yields true, the others false
+ Event6 = ?not_CreateSE("DomainName","TypeName",
+ "EventName", [], [],
+ any:create(notify_test_studies:tc(), #notify_test_studies
+ {gpa = 90,
+ tests = [#'CosNotification_Property'
+ {name="midterm", value=any:create(orber_tc:short(), 70)},
+ #'CosNotification_Property'
+ {name="final", value=any:create(orber_tc:short(), 80)}],
+ monthly_attendance = {0,1,2,9}})),
+ %% gpa < 80 true, rest false.
+ Event7 = ?not_CreateSE("DomainName","TypeName",
+ "EventName", [], [],
+ any:create(notify_test_studies:tc(), #notify_test_studies
+ {gpa = 70,
+ tests = [#'CosNotification_Property'
+ {name="midterm", value=any:create(orber_tc:short(), 70)},
+ #'CosNotification_Property'
+ {name="final", value=any:create(orber_tc:short(), 80)}],
+ monthly_attendance = {0,1,2,10}})),
+ %% All false
+ Event8 = ?not_CreateSE("DomainName","TypeName",
+ "EventName", [], [],
+ any:create(notify_test_studies:tc(), #notify_test_studies
+ {gpa = 80,
+ tests = [#'CosNotification_Property'
+ {name="midterm", value=any:create(orber_tc:short(), 70)},
+ #'CosNotification_Property'
+ {name="final", value=any:create(orber_tc:short(), 80)}],
+ monthly_attendance = {0,1,2,10}})),
+
+ ?match(true, eval(T9, Event5)),
+ ?match(true, eval(T9, Event6)),
+ ?match(true, eval(T9, Event7)),
+ ?match(false, eval(T9, Event8)),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Internal functions
+%%-----------------------------------------------------------------
+
+%%-------------------- End of Module ------------------------------
diff --git a/lib/cosNotification/test/notification_SUITE.erl b/lib/cosNotification/test/notification_SUITE.erl
new file mode 100644
index 0000000000..e2c560e4de
--- /dev/null
+++ b/lib/cosNotification/test/notification_SUITE.erl
@@ -0,0 +1,2185 @@
+%%--------------------------------------------------------------------
+%%
+%% %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%
+%%
+%%
+%%--------------------------------------------------------------------
+%% File : notification_SUITE.erl
+%% Purpose :
+%%--------------------------------------------------------------------
+
+-module(notification_SUITE).
+
+%%--------------- INCLUDES -----------------------------------
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/include/ifr_types.hrl").
+%% cosEvent files.
+-include_lib("cosEvent/include/CosEventChannelAdmin.hrl").
+%% Application files
+-include_lib("cosNotification/include/CosNotification.hrl").
+-include_lib("cosNotification/include/CosNotifyChannelAdmin.hrl").
+-include_lib("cosNotification/include/CosNotifyComm.hrl").
+-include_lib("cosNotification/include/CosNotifyFilter.hrl").
+
+-include_lib("cosNotification/src/CosNotification_Definitions.hrl").
+
+-include("idl_output/notify_test.hrl").
+
+-include("test_server.hrl").
+
+%%--------------- DEFINES ------------------------------------
+-define(default_timeout, ?t:minutes(20)).
+-define(match(ExpectedRes, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+-define(defaultQoS,
+ [#'CosNotification_Property'{name='CosNotification':'MaximumBatchSize'(),
+ value=any:create(orber_tc:long(), 100)},
+ #'CosNotification_Property'{name='CosNotification':'PacingInterval'(),
+ value=any:create(orber_tc:unsigned_long_long(),
+ 20000000)},
+ #'CosNotification_Property'{name='CosNotification':'OrderPolicy'(),
+ value=any:create(orber_tc:short(),
+ 'CosNotification':'AnyOrder'())},
+ #'CosNotification_Property'{name='CosNotification':'EventReliability'(),
+ value=any:create(orber_tc:short(),
+ 'CosNotification':'BestEffort'())},
+ #'CosNotification_Property'{name='CosNotification':'ConnectionReliability'(),
+ value=any:create(orber_tc:short(),
+ 'CosNotification':'BestEffort'())},
+ #'CosNotification_Property'{name='CosNotification':'DiscardPolicy'(),
+ value=any:create(orber_tc:short(),
+ 'CosNotification':'AnyOrder'())},
+ #'CosNotification_Property'{name='CosNotification':'StartTimeSupported'(),
+ value=any:create(orber_tc:boolean(), false)},
+ #'CosNotification_Property'{name='CosNotification':'StopTimeSupported'(),
+ value=any:create(orber_tc:boolean(), false)},
+ #'CosNotification_Property'{name='CosNotification':'Priority'(),
+ value=any:create(orber_tc:short(),
+ 'CosNotification':'DefaultPriority'())}]).
+-define(defaultQoS2,
+ [#'CosNotification_Property'{name='CosNotification':'MaximumBatchSize'(),
+ value=any:create(orber_tc:long(), 1)},
+ #'CosNotification_Property'{name='CosNotification':'PacingInterval'(),
+ value=any:create(orber_tc:unsigned_long_long(),
+ 0)},
+ #'CosNotification_Property'{name='CosNotification':'OrderPolicy'(),
+ value=any:create(orber_tc:short(),
+ 'CosNotification':'AnyOrder'())},
+ #'CosNotification_Property'{name='CosNotification':'EventReliability'(),
+ value=any:create(orber_tc:short(),
+ 'CosNotification':'BestEffort'())},
+ #'CosNotification_Property'{name='CosNotification':'ConnectionReliability'(),
+ value=any:create(orber_tc:short(),
+ 'CosNotification':'BestEffort'())},
+ #'CosNotification_Property'{name='CosNotification':'DiscardPolicy'(),
+ value=any:create(orber_tc:short(),
+ 'CosNotification':'AnyOrder'())},
+ #'CosNotification_Property'{name='CosNotification':'StartTimeSupported'(),
+ value=any:create(orber_tc:boolean(), false)},
+ #'CosNotification_Property'{name='CosNotification':'StopTimeSupported'(),
+ value=any:create(orber_tc:boolean(), false)},
+ #'CosNotification_Property'{name='CosNotification':'Priority'(),
+ value=any:create(orber_tc:short(),
+ 'CosNotification':'DefaultPriority'())}]).
+-define(defaultAdm,
+ [#'CosNotification_Property'{name='CosNotification':'MaxQueueLength'(),
+ value=any:create(orber_tc:long(), 100)},
+ #'CosNotification_Property'{name='CosNotification':'MaxConsumers'(),
+ value=any:create(orber_tc:long(), 100)},
+ #'CosNotification_Property'{name='CosNotification':'MaxSuppliers'(),
+ value=any:create(orber_tc:long(), 100)}]).
+
+-define(FAC_OPT, []).
+
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1, cases/0, init_all/1, finish_all/1, qos_api/1, adm_api/1,
+ cosevent_api/1, filter_adm_api/1, events_api/1, events2_api/1,
+ event_qos_api/1, filter_api/1, mapping_filter_api/1, subscription_api/1,
+ init_per_testcase/2, fin_per_testcase/2, persistent_max_events_api/1,
+ persistent_timeout_events_api/1, persistent_recover_events_api/1,
+ app_test/1]).
+
+-export([terminated/1]).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["API tests for the cosNotification interfaces", ""];
+all(suite) -> {req,
+ [mnesia, orber],
+ {conf, init_all, cases(), finish_all}}.
+
+cases() ->
+ [persistent_max_events_api, persistent_timeout_events_api,
+ persistent_recover_events_api, mapping_filter_api, filter_api, filter_adm_api,
+ event_qos_api, qos_api, adm_api, cosevent_api, subscription_api,
+ events_api, events2_api, app_test].
+
+
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+
+init_per_testcase(_Case, Config) ->
+ Path = code:which(?MODULE),
+ code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Path = code:which(?MODULE),
+ code:del_path(filename:join(filename:dirname(Path), "idl_output")),
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+init_all(Config) ->
+ Path = code:which(?MODULE),
+ code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
+ ok = corba:orb_init([{flags, 16#02}, {orber_debug_level, 10}]),
+ orber:jump_start(),
+ cosNotificationApp:install_event(),
+ cosNotificationApp:install(),
+ 'oe_notify_test_server':'oe_register'(),
+ cosNotificationApp:start(),
+ if
+ is_list(Config) ->
+ Config;
+ true ->
+ exit("Config not a list")
+ end.
+
+finish_all(Config) ->
+ cosNotificationApp:stop(),
+ Path = code:which(?MODULE),
+ code:del_path(filename:join(filename:dirname(Path), "idl_output")),
+ 'oe_notify_test_server':'oe_unregister'(),
+ cosNotificationApp:uninstall(),
+ cosNotificationApp:uninstall_event(),
+ orber:jump_stop(),
+ Config.
+
+
+%%-----------------------------------------------------------------
+%% Tests app file
+%%-----------------------------------------------------------------
+app_test(doc) -> [];
+app_test(suite) -> [];
+app_test(_Config) ->
+ ok=test_server:app_test(cosNotification),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Persistent events max limit
+%%-----------------------------------------------------------------
+persistent_max_events_api(doc) -> ["CosNotification QoS EventReliability Persistent",
+ ""];
+persistent_max_events_api(suite) -> [];
+persistent_max_events_api(_Config) ->
+ QoSPersistent =
+ [#'CosNotification_Property'{name='CosNotification':'ConnectionReliability'(),
+ value=any:create(orber_tc:short(),
+ 'CosNotification':'Persistent'())}],
+ QoSEventPersistent =
+ [#'CosNotification_Property'{name='CosNotification':'EventReliability'(),
+ value=any:create(orber_tc:short(),
+ 'CosNotification':'Persistent'())}],
+ application:set_env(cosNotification, notify, ?MODULE),
+ application:set_env(cosNotification, max_events, 2),
+ application:set_env(cosNotification, timeout_events, 300000),
+ application:set_env(cosNotification, interval_events, 10000),
+ %% Initialize the application.
+ Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
+ ?match({_,key,_,_,_,_}, Fac),
+ {Ch, _Id1} = (catch 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(Fac, ?defaultQoS2, ?defaultAdm)),
+ ?match({_,key,_,_,_,_}, Ch),
+
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(Ch, QoSEventPersistent)),
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(Ch, QoSPersistent)),
+
+ %% Create the Admin objects
+ {AdminSupplier, _ASID}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_EventChannel':new_for_suppliers(Ch,'AND_OP')),
+ {AdminConsumer, _ACID}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_EventChannel':new_for_consumers(Ch,'AND_OP')),
+
+ %% Create Proxies and clients
+ {SequenceProxyPushSupplier,_ID}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_ConsumerAdmin':obtain_notification_push_supplier(AdminConsumer, 'SEQUENCE_EVENT')),
+ PushSeqC=?match({_,key,_,_,_,_}, 'notify_test_SeqPushC':oe_create(['PUSH_SEQUENCE',SequenceProxyPushSupplier],
+ [{local_typecheck, false}])),
+ ?match(ok, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':connect_sequence_push_consumer(SequenceProxyPushSupplier, PushSeqC)),
+
+ {SequenceProxyPushConsumer,_ID}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_SupplierAdmin':obtain_notification_push_consumer(AdminSupplier, 'SEQUENCE_EVENT')),
+ PushSeqS=?match({_,key,_,_,_,_}, 'notify_test_SeqPushS':oe_create(['PUSH_SEQUENCE',SequenceProxyPushConsumer],
+ [{local_typecheck, false}])),
+ ?match(ok, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':connect_sequence_push_supplier(SequenceProxyPushConsumer, PushSeqS)),
+
+ %% Create a couple of Events to test with.
+ Event = ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "lost_packet",
+ [#'CosNotification_Property'{name="priority",
+ value=any:create(orber_tc:short(), 1)}],
+ [], any:create(orber_tc:null(), null)),
+
+ ?match(ok, 'notify_test_SeqPushC':doAction(PushSeqC, {action, action})),
+
+ %% Push and check the state.
+ ?match(ok,'CosNotifyChannelAdmin_SequenceProxyPushConsumer':push_structured_events(SequenceProxyPushConsumer, [Event])),
+ ?match([], 'notify_test_SeqPushC':doAction(PushSeqC, return_data)),
+ ?match(false, corba_object:non_existent(SequenceProxyPushSupplier)),
+
+ ?match(ok,'CosNotifyChannelAdmin_SequenceProxyPushConsumer':push_structured_events(SequenceProxyPushConsumer, [Event])),
+ ?match([], 'notify_test_SeqPushC':doAction(PushSeqC, return_data)),
+ ?match(false, corba_object:non_existent(SequenceProxyPushSupplier)),
+ %% Now we've reached the limit. This call will terminate the proxy.
+ %% We cannot check for data at this point since the broken connection
+ %% will result in that the client terminates.
+ ?match(ok,'CosNotifyChannelAdmin_SequenceProxyPushConsumer':push_structured_events(SequenceProxyPushConsumer, [Event])),
+ timer:sleep(5000),
+ ?match(true, corba_object:non_existent(SequenceProxyPushSupplier)),
+ ?match(true, corba_object:non_existent(PushSeqC)),
+
+
+ catch corba:dispose(SequenceProxyPushConsumer),
+ catch corba:dispose(SequenceProxyPushSupplier),
+ catch corba:dispose(AdminConsumer),
+ catch corba:dispose(AdminSupplier),
+ catch corba:dispose(Ch),
+ catch cosNotificationApp:stop_factory(Fac),
+ catch corba:dispose(PushSeqS),
+ catch corba:dispose(PushSeqC),
+ application:set_env(cosNotification, notify, undefined),
+ application:set_env(cosNotification, max_events, undefined),
+ application:set_env(cosNotification, timeout_events, undefined),
+ application:set_env(cosNotification, interval_events, undefined),
+ ok.
+
+terminated(Items) ->
+ io:format("Proxy terminated due to: ~p~n", [Items]).
+
+%%-----------------------------------------------------------------
+%% Persistent events timeout
+%%-----------------------------------------------------------------
+persistent_timeout_events_api(doc) ->
+ ["CosNotification QoS EventReliability Persistent",
+ ""];
+persistent_timeout_events_api(suite) -> [];
+persistent_timeout_events_api(_Config) ->
+ QoSPersistent =
+ [#'CosNotification_Property'{name='CosNotification':'ConnectionReliability'(),
+ value=any:create(orber_tc:short(),
+ 'CosNotification':'Persistent'())}],
+ QoSEventPersistent =
+ [#'CosNotification_Property'{name='CosNotification':'EventReliability'(),
+ value=any:create(orber_tc:short(),
+ 'CosNotification':'Persistent'())}],
+ application:set_env(cosNotification, notify, ?MODULE),
+ application:set_env(cosNotification, max_events, 1000),
+ application:set_env(cosNotification, timeout_events, 4000),
+ application:set_env(cosNotification, interval_events, 1000),
+ %% Initialize the application.
+ Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
+ ?match({_,key,_,_,_,_}, Fac),
+ {Ch, _Id1} = (catch 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(Fac, ?defaultQoS2, ?defaultAdm)),
+ ?match({_,key,_,_,_,_}, Ch),
+
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(Ch, QoSEventPersistent)),
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(Ch, QoSPersistent)),
+
+ %% Create the Admin objects
+ {AdminSupplier, _ASID}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_EventChannel':new_for_suppliers(Ch,'AND_OP')),
+ {AdminConsumer, _ACID}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_EventChannel':new_for_consumers(Ch,'AND_OP')),
+
+ %% Create Proxies and clients
+ {SequenceProxyPushSupplier,_ID}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_ConsumerAdmin':obtain_notification_push_supplier(AdminConsumer, 'SEQUENCE_EVENT')),
+ PushSeqC=?match({_,key,_,_,_,_}, 'notify_test_SeqPushC':oe_create(['PUSH_SEQUENCE',SequenceProxyPushSupplier],
+ [{local_typecheck, false}])),
+ ?match(ok, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':connect_sequence_push_consumer(SequenceProxyPushSupplier, PushSeqC)),
+
+ {SequenceProxyPushConsumer,_ID}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_SupplierAdmin':obtain_notification_push_consumer(AdminSupplier, 'SEQUENCE_EVENT')),
+ PushSeqS=?match({_,key,_,_,_,_}, 'notify_test_SeqPushS':oe_create(['PUSH_SEQUENCE',SequenceProxyPushConsumer],
+ [{local_typecheck, false}])),
+ ?match(ok, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':connect_sequence_push_supplier(SequenceProxyPushConsumer, PushSeqS)),
+
+ %% Create a couple of Events to test with.
+ Event = ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "lost_packet",
+ [#'CosNotification_Property'{name="priority",
+ value=any:create(orber_tc:short(), 1)}],
+ [], any:create(orber_tc:null(), null)),
+
+ ?match(ok, 'notify_test_SeqPushC':doAction(PushSeqC, {action, action})),
+
+ %% Push and check the state.
+ ?match(ok,'CosNotifyChannelAdmin_SequenceProxyPushConsumer':push_structured_events(SequenceProxyPushConsumer, [Event])),
+ ?match([], 'notify_test_SeqPushC':doAction(PushSeqC, return_data)),
+ ?match(false, corba_object:non_existent(SequenceProxyPushSupplier)),
+
+ %% Now we've reached the limit. This call will terminate the proxy.
+ %% We cannot check for data at this point since the broken connection
+ %% will result in that the client terminates.
+ ?match(ok,'CosNotifyChannelAdmin_SequenceProxyPushConsumer':push_structured_events(SequenceProxyPushConsumer, [Event])),
+ timer:sleep(10000),
+ ?match(true, corba_object:non_existent(SequenceProxyPushSupplier)),
+ ?match(true, corba_object:non_existent(PushSeqC)),
+
+
+ catch corba:dispose(SequenceProxyPushConsumer),
+ catch corba:dispose(SequenceProxyPushSupplier),
+ catch corba:dispose(AdminConsumer),
+ catch corba:dispose(AdminSupplier),
+ catch corba:dispose(Ch),
+ catch cosNotificationApp:stop_factory(Fac),
+ catch corba:dispose(PushSeqS),
+ catch corba:dispose(PushSeqC),
+ application:set_env(cosNotification, notify, undefined),
+ application:set_env(cosNotification, max_events, undefined),
+ application:set_env(cosNotification, timeout_events, undefined),
+ application:set_env(cosNotification, interval_events, undefined),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Persistent events max limit
+%%-----------------------------------------------------------------
+persistent_recover_events_api(doc) ->
+ ["CosNotification QoS EventReliability Persistent",
+ ""];
+persistent_recover_events_api(suite) -> [];
+persistent_recover_events_api(_Config) ->
+ QoSPersistent =
+ [#'CosNotification_Property'{name='CosNotification':'ConnectionReliability'(),
+ value=any:create(orber_tc:short(),
+ 'CosNotification':'Persistent'())}],
+ QoSEventPersistent =
+ [#'CosNotification_Property'{name='CosNotification':'EventReliability'(),
+ value=any:create(orber_tc:short(),
+ 'CosNotification':'Persistent'())}],
+ application:set_env(cosNotification, notify, ?MODULE),
+ application:set_env(cosNotification, max_events, 1000),
+ application:set_env(cosNotification, timeout_events, 100000),
+ application:set_env(cosNotification, interval_events, 1000),
+ %% Initialize the application.
+ Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
+ ?match({_,key,_,_,_,_}, Fac),
+ {Ch, _Id1} = (catch 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(Fac, ?defaultQoS2, ?defaultAdm)),
+ ?match({_,key,_,_,_,_}, Ch),
+
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(Ch, QoSEventPersistent)),
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(Ch, QoSPersistent)),
+
+ %% Create the Admin objects
+ {AdminSupplier, _ASID}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_EventChannel':new_for_suppliers(Ch,'AND_OP')),
+ {AdminConsumer, _ACID}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_EventChannel':new_for_consumers(Ch,'AND_OP')),
+
+ %% Create Proxies and clients
+ {SequenceProxyPushSupplier,_ID}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_ConsumerAdmin':obtain_notification_push_supplier(AdminConsumer, 'SEQUENCE_EVENT')),
+ PushSeqC=?match({_,key,_,_,_,_}, 'notify_test_SeqPushC':oe_create(['PUSH_SEQUENCE',SequenceProxyPushSupplier],
+ [{local_typecheck, false}])),
+ ?match(ok, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':connect_sequence_push_consumer(SequenceProxyPushSupplier, PushSeqC)),
+
+ {SequenceProxyPushConsumer,_ID}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_SupplierAdmin':obtain_notification_push_consumer(AdminSupplier, 'SEQUENCE_EVENT')),
+ PushSeqS=?match({_,key,_,_,_,_}, 'notify_test_SeqPushS':oe_create(['PUSH_SEQUENCE',SequenceProxyPushConsumer],
+ [{local_typecheck, false}])),
+ ?match(ok, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':connect_sequence_push_supplier(SequenceProxyPushConsumer, PushSeqS)),
+
+ %% Create a couple of Events to test with.
+ Event = ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "lost_packet",
+ [#'CosNotification_Property'{name="priority",
+ value=any:create(orber_tc:short(), 1)}],
+ [], any:create(orber_tc:null(), null)),
+
+ ?match(ok, 'notify_test_SeqPushC':doAction(PushSeqC, {action, action})),
+
+ %% Push and check the state.
+ ?match(ok,'CosNotifyChannelAdmin_SequenceProxyPushConsumer':push_structured_events(SequenceProxyPushConsumer, [Event])),
+ ?match([], 'notify_test_SeqPushC':doAction(PushSeqC, return_data)),
+ ?match(false, corba_object:non_existent(SequenceProxyPushSupplier)),
+ %% Allow the proxy to try a few times and then change the client behavior
+ timer:sleep(4000),
+ ?match(ok, 'notify_test_SeqPushC':doAction(PushSeqC, {action, undefined})),
+ %% Wait some time so that the proxy timeout has kicked in.
+ timer:sleep(4000),
+
+ %% Now the communication should work again.
+ ?match([Event], 'notify_test_SeqPushC':doAction(PushSeqC, return_data)),
+ ?match(false, corba_object:non_existent(SequenceProxyPushSupplier)),
+
+ ?match(ok,'CosNotifyChannelAdmin_SequenceProxyPushConsumer':push_structured_events(SequenceProxyPushConsumer, [Event])),
+ timer:sleep(4000),
+ ?match([Event], 'notify_test_SeqPushC':doAction(PushSeqC, return_data)),
+
+ catch corba:dispose(SequenceProxyPushConsumer),
+ catch corba:dispose(SequenceProxyPushSupplier),
+ catch corba:dispose(AdminConsumer),
+ catch corba:dispose(AdminSupplier),
+ catch corba:dispose(Ch),
+ catch cosNotificationApp:stop_factory(Fac),
+ catch corba:dispose(PushSeqS),
+ catch corba:dispose(PushSeqC),
+ application:set_env(cosNotification, notify, undefined),
+ application:set_env(cosNotification, max_events, undefined),
+ application:set_env(cosNotification, timeout_events, undefined),
+ application:set_env(cosNotification, interval_events, undefined),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% CosNotifyFilter::Filter API tests
+%%-----------------------------------------------------------------
+mapping_filter_api(doc) -> ["CosNotifyFilter::MappingFilter API tests.", ""];
+mapping_filter_api(suite) -> [];
+mapping_filter_api(_Config) ->
+ FiFac = 'CosNotifyFilter_FilterFactory':oe_create(),
+ ?match({_,key,_,_,_,_}, FiFac),
+
+ Filter = 'CosNotifyFilter_FilterFactory':create_mapping_filter(FiFac,
+ "EXTENDED_TCL",
+ any:create(orber_tc:short(), 10)),
+ ?match({_,key,_,_,_,_}, Filter),
+
+ ?match("EXTENDED_TCL", 'CosNotifyFilter_MappingFilter':'_get_constraint_grammar'(Filter)),
+
+ %% Test before we add any constarints.
+ ?match([], 'CosNotifyFilter_MappingFilter':get_all_mapping_constraints(Filter)),
+ ?match({'EXCEPTION', {'CosNotifyFilter_ConstraintNotFound', _, 1}},
+ 'CosNotifyFilter_MappingFilter':get_mapping_constraints(Filter, [1])),
+ ?match(ok, 'CosNotifyFilter_MappingFilter':remove_all_mapping_constraints(Filter)),
+
+ %% Try adding an incorrect constraint_expr
+ ?match({'EXCEPTION',{'CosNotifyFilter_InvalidConstraint',_,_}},
+ 'CosNotifyFilter_MappingFilter':add_mapping_constraints(Filter,
+ [#'CosNotifyFilter_MappingConstraintPair'
+ {constraint_expression = #'CosNotifyFilter_ConstraintExp'
+ {event_types = [#'CosNotification_EventType'
+ {domain_name = "name",
+ type_name = "type"}],
+ constraint_expr = "2==2 and 3<"},
+ result_to_set = any:create(orber_tc:short(), 10)}])),
+ %% Try adding two correct constraint_expr
+ ?line[{_,_,CID1,_},{_,_,CID2,_}]=
+ ?match([{'CosNotifyFilter_MappingConstraintInfo',_,_,_}, {'CosNotifyFilter_MappingConstraintInfo',_,_,_}],
+ 'CosNotifyFilter_MappingFilter':add_mapping_constraints(Filter,
+ [#'CosNotifyFilter_MappingConstraintPair'
+ {constraint_expression = #'CosNotifyFilter_ConstraintExp'
+ {event_types = [#'CosNotification_EventType'
+ {domain_name = "name",
+ type_name = "type"}],
+ constraint_expr = "2==2 and 3<4"},
+ result_to_set = any:create(orber_tc:short(), 10)},
+ #'CosNotifyFilter_MappingConstraintPair'
+ {constraint_expression = #'CosNotifyFilter_ConstraintExp'
+ {event_types = [#'CosNotification_EventType'
+ {domain_name = "name2",
+ type_name = "type2"}],
+ constraint_expr = "$.test._length == 3 and ($.test[0].score + $.test[1].score + $.test[2].score)/3 >=80"},
+ result_to_set = any:create(orber_tc:short(), 10)}])),
+
+ ?match([{'CosNotifyFilter_MappingConstraintInfo',_,CID2,_}, {'CosNotifyFilter_MappingConstraintInfo',_,CID1,_}],
+ 'CosNotifyFilter_MappingFilter':get_all_mapping_constraints(Filter)),
+ ?match([{'CosNotifyFilter_MappingConstraintInfo',_,CID1,_}],
+ 'CosNotifyFilter_MappingFilter':get_mapping_constraints(Filter, [CID1])),
+ ?match(ok, 'CosNotifyFilter_MappingFilter':remove_all_mapping_constraints(Filter)),
+ ?match([], 'CosNotifyFilter_MappingFilter':get_all_mapping_constraints(Filter)),
+
+ %% Try adding a constraint_expr with using invalid value, i.e., not short.
+ ?match({'EXCEPTION',{'CosNotifyFilter_InvalidValue',_,_,_}},
+ 'CosNotifyFilter_MappingFilter':add_mapping_constraints(Filter,
+ [#'CosNotifyFilter_MappingConstraintPair'
+ {constraint_expression = #'CosNotifyFilter_ConstraintExp'
+ {event_types = [#'CosNotification_EventType'
+ {domain_name = "name",
+ type_name = "type"}],
+ constraint_expr = "2==2 and 3<8"},
+ result_to_set = any:create(orber_tc:long(), 10)}])),
+
+ %% Try adding one correct and one incorrect constraint_expr
+ ?match({'EXCEPTION',{'CosNotifyFilter_InvalidConstraint',_,_}},
+ 'CosNotifyFilter_MappingFilter':add_mapping_constraints(Filter,
+ [#'CosNotifyFilter_MappingConstraintPair'
+ {constraint_expression = #'CosNotifyFilter_ConstraintExp'
+ {event_types = [#'CosNotification_EventType'
+ {domain_name = "name",
+ type_name = "type"}],
+ constraint_expr = "2==2 and 3<"},
+ result_to_set = any:create(orber_tc:short(), 10)},
+ #'CosNotifyFilter_MappingConstraintPair'
+ {constraint_expression = #'CosNotifyFilter_ConstraintExp'
+ {event_types = [#'CosNotification_EventType'
+ {domain_name = "name2",
+ type_name = "type2"}],
+ constraint_expr = "$.test._length == 3 and ($.test[0].score + $.test[1].score + $.test[2].score)/3 >=80"},
+ result_to_set = any:create(orber_tc:short(), 10)}])),
+
+ %% Following testcases test different domain_name and type_name, e.g.,
+ %% wildcards etc.
+ [{_,ConInfoData,CID3,_}] =
+ ?match([{'CosNotifyFilter_MappingConstraintInfo',_,_,_}],
+ 'CosNotifyFilter_MappingFilter':add_mapping_constraints(Filter,
+ [#'CosNotifyFilter_MappingConstraintPair'
+ {constraint_expression = #'CosNotifyFilter_ConstraintExp'
+ {event_types = [#'CosNotification_EventType'
+ {domain_name = "domain",
+ type_name = ""},
+ #'CosNotification_EventType'
+ {domain_name = "*",
+ type_name = "type"}],
+ constraint_expr = "2==2 and 3<4"},
+ result_to_set = any:create(orber_tc:short(), 10)}])),
+
+ %% Try removing a constraint
+ ?match(ok, 'CosNotifyFilter_MappingFilter':modify_mapping_constraints(Filter,[CID3],[])),
+ ?match([], 'CosNotifyFilter_MappingFilter':get_all_mapping_constraints(Filter)),
+
+ %% Add e new constraint
+ [{_,_,CID4,_}] =
+ ?match([{'CosNotifyFilter_MappingConstraintInfo',_,_,_}],
+ 'CosNotifyFilter_MappingFilter':add_mapping_constraints(Filter,
+ [#'CosNotifyFilter_MappingConstraintPair'
+ {constraint_expression = #'CosNotifyFilter_ConstraintExp'
+ {event_types = [#'CosNotification_EventType'
+ {domain_name = "domain1",
+ type_name = ""},
+ #'CosNotification_EventType'
+ {domain_name = "domain2",
+ type_name = "*"}],
+ constraint_expr = "2==2 and 3<4"},
+ result_to_set = any:create(orber_tc:short(), 10)}])),
+
+ %% Try to update the constraint associated with CID4 to equal CID3.
+ ?match(ok, 'CosNotifyFilter_MappingFilter':modify_mapping_constraints(Filter,[],
+ [#'CosNotifyFilter_MappingConstraintInfo'
+ {constraint_expression=
+ #'CosNotifyFilter_ConstraintExp'
+ {event_types =[#'CosNotification_EventType'
+ {domain_name = "domain",
+ type_name = ""},
+ #'CosNotification_EventType'
+ {domain_name = "*",
+ type_name = "type"}],
+ constraint_expr = "2==2 and 3<4"},
+ constraint_id=CID4,
+ value = any:create(orber_tc:short(), 10)}])),
+
+ ?match([{_,ConInfoData,CID4,_}], 'CosNotifyFilter_MappingFilter':get_all_mapping_constraints(Filter)),
+
+ ?match({'EXCEPTION', {'CosNotifyFilter_ConstraintNotFound', _, CID3}},
+ 'CosNotifyFilter_MappingFilter':get_mapping_constraints(Filter, [CID3])),
+ ?match(ok, 'CosNotifyFilter_MappingFilter':remove_all_mapping_constraints(Filter)),
+ ?match([], 'CosNotifyFilter_MappingFilter':get_all_mapping_constraints(Filter)),
+
+ ?match([{'CosNotifyFilter_MappingConstraintInfo',_,_,_}],
+ 'CosNotifyFilter_MappingFilter':add_mapping_constraints(Filter,
+ [#'CosNotifyFilter_MappingConstraintPair'
+ {constraint_expression = #'CosNotifyFilter_ConstraintExp'
+ {event_types = [#'CosNotification_EventType'
+ {domain_name = "",
+ type_name = "type1"},
+ #'CosNotification_EventType'
+ {domain_name = "*",
+ type_name = "type2"}],
+ constraint_expr = "2==2 and 3<4"},
+ result_to_set = any:create(orber_tc:short(), 10)}])),
+
+ ?match([{'CosNotifyFilter_MappingConstraintInfo',_,_,_}],
+ 'CosNotifyFilter_MappingFilter':add_mapping_constraints(Filter,
+ [#'CosNotifyFilter_MappingConstraintPair'
+ {constraint_expression = #'CosNotifyFilter_ConstraintExp'
+ {event_types = [#'CosNotification_EventType'
+ {domain_name = "domain1",
+ type_name = "type1"},
+ #'CosNotification_EventType'
+ {domain_name = "domain2",
+ type_name = "type2"}],
+ constraint_expr = "2==2 and 3<4"},
+ result_to_set = any:create(orber_tc:short(), 10)}])),
+
+ ?match([{'CosNotifyFilter_MappingConstraintInfo',_,_,_}],
+ 'CosNotifyFilter_MappingFilter':add_mapping_constraints(Filter,
+ [#'CosNotifyFilter_MappingConstraintPair'
+ {constraint_expression = #'CosNotifyFilter_ConstraintExp'
+ {event_types = [#'CosNotification_EventType'
+ {domain_name = "dom*",
+ type_name = "type1"},
+ #'CosNotification_EventType'
+ {domain_name = "domain2",
+ type_name = "typ*"}],
+ constraint_expr = "2==2 and 3<4"},
+ result_to_set = any:create(orber_tc:short(), 10)}])),
+
+ ?match([{'CosNotifyFilter_MappingConstraintInfo',_,_,_}],
+ 'CosNotifyFilter_MappingFilter':add_mapping_constraints(Filter,
+ [#'CosNotifyFilter_MappingConstraintPair'
+ {constraint_expression = #'CosNotifyFilter_ConstraintExp'
+ {event_types = [#'CosNotification_EventType'
+ {domain_name = "dom*1",
+ type_name = "type1"},
+ #'CosNotification_EventType'
+ {domain_name = "domain2",
+ type_name = "typ*2"}],
+ constraint_expr = "2==2 and 3<4"},
+ result_to_set = any:create(orber_tc:short(), 10)}])),
+
+ catch corba:dispose(FiFac),
+ catch corba:dispose(Filter),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% CosNotifyFilter::Filter API tests
+%%-----------------------------------------------------------------
+filter_api(doc) -> ["CosNotifyFilter::Filter API tests.", ""];
+filter_api(suite) -> [];
+filter_api(_Config) ->
+ Fac = cosNotificationApp:start_global_factory(?FAC_OPT),
+ ?match({_,key,_,_,_,_}, Fac),
+ {Ch, _Id1} = 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(Fac, ?defaultQoS, ?defaultAdm),
+ AC= 'CosNotifyChannelAdmin_EventChannel':for_consumers(Ch),
+
+ FiFac = 'CosNotifyFilter_FilterFactory':oe_create(),
+ ?match({_,key,_,_,_,_}, FiFac),
+
+ Filter = 'CosNotifyFilter_FilterFactory':create_filter(FiFac,"EXTENDED_TCL"),
+ ?match({_,key,_,_,_,_}, Filter),
+
+ ?match("EXTENDED_TCL", 'CosNotifyFilter_Filter':'_get_constraint_grammar'(Filter)),
+
+ %% Test Callback management.
+ ?match({'EXCEPTION',{'BAD_PARAM',_,_,_}},
+ 'CosNotifyFilter_Filter':attach_callback(Filter, Ch)),
+ ?match([], 'CosNotifyFilter_Filter':get_callbacks(Filter)),
+ ?match({'EXCEPTION',{'CosNotifyFilter_CallbackNotFound',_}},
+ 'CosNotifyFilter_Filter':detach_callback(Filter, 0)),
+ ID='CosNotifyFilter_Filter':attach_callback(Filter, AC),
+ ?match([ID], 'CosNotifyFilter_Filter':get_callbacks(Filter)),
+ ?match(ok, 'CosNotifyFilter_Filter':detach_callback(Filter, ID)),
+ ?match([], 'CosNotifyFilter_Filter':get_callbacks(Filter)),
+
+ %% This callback is just attached so we can test that we can call notify_subscribe.
+ _ID2='CosNotifyFilter_Filter':attach_callback(Filter, AC),
+
+ %% Test before we add any constarints.
+ ?match([], 'CosNotifyFilter_Filter':get_all_constraints(Filter)),
+ ?match({'EXCEPTION', {'CosNotifyFilter_ConstraintNotFound', _, 1}},
+ 'CosNotifyFilter_Filter':get_constraints(Filter, [1])),
+ ?match(ok, 'CosNotifyFilter_Filter':remove_all_constraints(Filter)),
+
+ %% Try adding an incorrect constraint_expr
+ ?match({'EXCEPTION',{'CosNotifyFilter_InvalidConstraint',_,_}},
+ 'CosNotifyFilter_Filter':add_constraints(Filter,
+ [#'CosNotifyFilter_ConstraintExp'{event_types =
+ [#'CosNotification_EventType'{
+ domain_name = "name",
+ type_name = "type"}],
+ constraint_expr = "2==2 and 3<"}])),
+ %% Try adding two correct constraint_expr
+ ?line[{_,_,CID1},{_,_,CID2}]=
+ ?match([{'CosNotifyFilter_ConstraintInfo',_,_}, {'CosNotifyFilter_ConstraintInfo',_,_}],
+ 'CosNotifyFilter_Filter':add_constraints(Filter,
+ [#'CosNotifyFilter_ConstraintExp'{event_types =
+ [#'CosNotification_EventType'{
+ domain_name = "name",
+ type_name = "type"}],
+ constraint_expr = "2==2 and 3<4"},
+ #'CosNotifyFilter_ConstraintExp'{event_types =
+ [#'CosNotification_EventType'{
+ domain_name = "name2",
+ type_name = "type2"}],
+ constraint_expr = "$.test._length == 3 and ($.test[0].score + $.test[1].score + $.test[2].score)/3 >=80"}])),
+
+ ?match([{'CosNotifyFilter_ConstraintInfo',_,CID2}, {'CosNotifyFilter_ConstraintInfo',_,CID1}],
+ 'CosNotifyFilter_Filter':get_all_constraints(Filter)),
+ ?match([{'CosNotifyFilter_ConstraintInfo',_,CID1}],
+ 'CosNotifyFilter_Filter':get_constraints(Filter, [CID1])),
+ ?match(ok, 'CosNotifyFilter_Filter':remove_all_constraints(Filter)),
+ ?match([], 'CosNotifyFilter_Filter':get_all_constraints(Filter)),
+
+ %% Try adding one correct and one incorrect constraint_expr
+ ?match({'EXCEPTION',{'CosNotifyFilter_InvalidConstraint',_,_}},
+ 'CosNotifyFilter_Filter':add_constraints(Filter,
+ [#'CosNotifyFilter_ConstraintExp'{event_types =
+ [#'CosNotification_EventType'{
+ domain_name = "name",
+ type_name = "type"}],
+ constraint_expr = "2==2 and 3<"},
+ #'CosNotifyFilter_ConstraintExp'{event_types =
+ [#'CosNotification_EventType'{
+ domain_name = "name2",
+ type_name = "type2"}],
+ constraint_expr = "$.test._length == 3 and ($.test[0].score + $.test[1].score + $.test[2].score)/3 >=80"}])),
+
+ %% Following testcases test different domain_name and type_name, e.g.,
+ %% wildcards etc.
+ [{_,ConInfoData,CID3}] =
+ ?match([{'CosNotifyFilter_ConstraintInfo',_,_}],
+ 'CosNotifyFilter_Filter':add_constraints(Filter,
+ [#'CosNotifyFilter_ConstraintExp'{event_types =
+ [#'CosNotification_EventType'{
+ domain_name = "domain",
+ type_name = ""},
+ #'CosNotification_EventType'{
+ domain_name = "*",
+ type_name = "type"}],
+ constraint_expr = "2==2 and 3<4"}])),
+
+ %% Try removing a constraint
+ ?match(ok, 'CosNotifyFilter_Filter':modify_constraints(Filter,[CID3],[])),
+ ?match([], 'CosNotifyFilter_Filter':get_all_constraints(Filter)),
+
+ %% Add e new constraint
+ [{_,_,CID4}] =
+ ?match([{'CosNotifyFilter_ConstraintInfo',_,_}],
+ 'CosNotifyFilter_Filter':add_constraints(Filter,
+ [#'CosNotifyFilter_ConstraintExp'{event_types =
+ [#'CosNotification_EventType'{
+ domain_name = "domain1",
+ type_name = ""},
+ #'CosNotification_EventType'{
+ domain_name = "domain2",
+ type_name = "*"}],
+ constraint_expr = "2==2 and 3<4"}])),
+
+ %% Try to update the constraint associated with CID4 to equal CID3.
+ ?match(ok, 'CosNotifyFilter_Filter':modify_constraints(Filter,[],
+ [#'CosNotifyFilter_ConstraintInfo'{constraint_expression=
+ #'CosNotifyFilter_ConstraintExp'{event_types =
+ [#'CosNotification_EventType'{
+ domain_name = "domain",
+ type_name = ""},
+ #'CosNotification_EventType'{
+ domain_name = "*",
+ type_name = "type"}],
+ constraint_expr = "2==2 and 3<4"},
+ constraint_id=CID4}])),
+
+ ?match([{_,ConInfoData,CID4}], 'CosNotifyFilter_Filter':get_all_constraints(Filter)),
+
+ ?match({'EXCEPTION', {'CosNotifyFilter_ConstraintNotFound', _, CID3}},
+ 'CosNotifyFilter_Filter':get_constraints(Filter, [CID3])),
+ ?match(ok, 'CosNotifyFilter_Filter':remove_all_constraints(Filter)),
+ ?match([], 'CosNotifyFilter_Filter':get_all_constraints(Filter)),
+
+ ?match([{'CosNotifyFilter_ConstraintInfo',_,_}],
+ 'CosNotifyFilter_Filter':add_constraints(Filter,
+ [#'CosNotifyFilter_ConstraintExp'{event_types =
+ [#'CosNotification_EventType'{
+ domain_name = "",
+ type_name = "type1"},
+ #'CosNotification_EventType'{
+ domain_name = "*",
+ type_name = "type2"}],
+ constraint_expr = "2==2 and 3<4"}])),
+
+ ?match([{'CosNotifyFilter_ConstraintInfo',_,_}],
+ 'CosNotifyFilter_Filter':add_constraints(Filter,
+ [#'CosNotifyFilter_ConstraintExp'{event_types =
+ [#'CosNotification_EventType'{
+ domain_name = "domain1",
+ type_name = "type1"},
+ #'CosNotification_EventType'{
+ domain_name = "domain2",
+ type_name = "type2"}],
+ constraint_expr = "2==2 and 3<4"}])),
+
+ ?match([{'CosNotifyFilter_ConstraintInfo',_,_}],
+ 'CosNotifyFilter_Filter':add_constraints(Filter,
+ [#'CosNotifyFilter_ConstraintExp'{event_types =
+ [#'CosNotification_EventType'{
+ domain_name = "dom*",
+ type_name = "type1"},
+ #'CosNotification_EventType'{
+ domain_name = "domain2",
+ type_name = "typ*"}],
+ constraint_expr = "2==2 and 3<4"}])),
+
+ ?match([{'CosNotifyFilter_ConstraintInfo',_,_}],
+ 'CosNotifyFilter_Filter':add_constraints(Filter,
+ [#'CosNotifyFilter_ConstraintExp'{event_types =
+ [#'CosNotification_EventType'{
+ domain_name = "dom*1",
+ type_name = "type1"},
+ #'CosNotification_EventType'{
+ domain_name = "domain2",
+ type_name = "typ*2"}],
+ constraint_expr = "2==2 and 3<4"}])),
+
+ catch corba:dispose(FiFac),
+ catch corba:dispose(Filter),
+ catch corba:dispose(AC),
+ catch corba:dispose(Ch),
+ catch corba:dispose(Fac),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Subscription handling API tests
+%%-----------------------------------------------------------------
+subscription_api(doc) -> ["CosNotification subscription handling", ""];
+subscription_api(suite) -> [];
+subscription_api(_Config) ->
+ %% Initialize the application.
+ Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
+ ?match({_,key,_,_,_,_}, Fac),
+ {Ch, _Id1} = (catch 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(Fac, ?defaultQoS, ?defaultAdm)),
+ ?match({_,key,_,_,_,_}, Ch),
+
+ %% Create the Admin objects
+ {AdminSupplier, _ASID}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_EventChannel':new_for_suppliers(Ch,'OR_OP')),
+ {AdminConsumer, _ACID}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_EventChannel':new_for_consumers(Ch,'OR_OP')),
+
+ %% Create Suppliers Proxies
+ {StructuredProxyPullSupplier,_}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_ConsumerAdmin':obtain_notification_pull_supplier(AdminConsumer, 'STRUCTURED_EVENT')),
+ {StructuredProxyPushSupplier,_}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_ConsumerAdmin':obtain_notification_push_supplier(AdminConsumer, 'STRUCTURED_EVENT')),
+
+ %% Now we must create a Client for each proxy and connect them.
+ PushStrC=?match({_,key,_,_,_,_}, 'notify_test_StrPushC':oe_create(['PUSH_STRUCTURED',StructuredProxyPushSupplier],
+ [{local_typecheck, false}])),
+ ?match(ok, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':connect_structured_push_consumer(StructuredProxyPushSupplier, PushStrC)),
+ PullStrC=?match({_,key,_,_,_,_}, 'notify_test_StrPullC':oe_create(['PULL_STRUCTURED',StructuredProxyPullSupplier],
+ [{local_typecheck, false}])),
+ ?match(ok, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':connect_structured_pull_consumer(StructuredProxyPullSupplier, PullStrC)),
+
+ %% Create Consumers Proxies
+ {StructuredProxyPullConsumer,_}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_SupplierAdmin':obtain_notification_pull_consumer(AdminSupplier, 'STRUCTURED_EVENT')),
+ {StructuredProxyPushConsumer,_}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_SupplierAdmin':obtain_notification_push_consumer(AdminSupplier, 'STRUCTURED_EVENT')),
+
+ %% Now we must create a Client for each proxy and connect them.
+ PushStrS=?match({_,key,_,_,_,_}, 'notify_test_StrPushS':oe_create(['PUSH_STRUCTURED',StructuredProxyPushConsumer],
+ [{local_typecheck, false}])),
+ ?match(ok, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':connect_structured_push_supplier(StructuredProxyPushConsumer, PushStrS)),
+
+ PullStrS=?match({_,key,_,_,_,_}, 'notify_test_StrPullS':oe_create(['PULL_STRUCTURED',StructuredProxyPullConsumer],
+ [{local_typecheck, false}])),
+ ?match(ok, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':connect_structured_pull_supplier(StructuredProxyPullConsumer, PullStrS)),
+
+ ES1=[#'CosNotification_EventType'{domain_name = "name1", type_name = "type1"},
+ #'CosNotification_EventType'{domain_name = "name2", type_name = "type2"}],
+ ES2=[#'CosNotification_EventType'{domain_name = "name3", type_name = "type3"},
+ #'CosNotification_EventType'{domain_name = "name4", type_name = "type4"}],
+
+ %% Initially it should have no associated types. Test that and set that
+ %% all updates should be forwarded to client.
+ ?match([], 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':
+ obtain_subscription_types(StructuredProxyPushConsumer,
+ 'ALL_NOW_UPDATES_ON')),
+ ?match([], 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':
+ obtain_subscription_types(StructuredProxyPullConsumer,
+ 'ALL_NOW_UPDATES_ON')),
+
+ %% Update the offered types.
+ ?match(ok, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':
+ offer_change(StructuredProxyPushConsumer, ES1, [])),
+ ?match(ok, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':
+ offer_change(StructuredProxyPullConsumer, ES1, [])),
+
+ %% To be sure, wait a couple of seconds.
+ timer:sleep(5000),
+ ?match([{'CosNotification_EventType',_,_},
+ {'CosNotification_EventType',_,_}],
+ 'notify_test_StrPushC':doAction(PushStrS, return_data)),
+ ?match([{'CosNotification_EventType',_,_},
+ {'CosNotification_EventType',_,_}],
+ 'notify_test_StrPullC':doAction(PullStrS, return_data)),
+
+ %% Update the offered types. Remove ES1 and add ES2.
+ ?match(ok, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':
+ offer_change(StructuredProxyPushConsumer, ES2, ES1)),
+ ?match(ok, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':
+ offer_change(StructuredProxyPullConsumer, ES2, ES1)),
+
+ %% To be sure, wait a couple of seconds.
+ timer:sleep(5000),
+ ?match([{'CosNotification_EventType',_,_},
+ {'CosNotification_EventType',_,_}],
+ 'notify_test_StrPushC':doAction(PushStrS, return_data)),
+ ?match([{'CosNotification_EventType',_,_},
+ {'CosNotification_EventType',_,_}],
+ 'notify_test_StrPullC':doAction(PullStrS, return_data)),
+
+ %% Now, the objects should only contain 'ES2'. Test it.
+ ?match([{'CosNotification_EventType',_,_},
+ {'CosNotification_EventType',_,_}],
+ 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':
+ obtain_subscription_types(StructuredProxyPushConsumer,
+ 'ALL_NOW_UPDATES_ON')),
+ ?match([{'CosNotification_EventType',_,_},
+ {'CosNotification_EventType',_,_}],
+ 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':
+ obtain_subscription_types(StructuredProxyPullConsumer,
+ 'ALL_NOW_UPDATES_ON')),
+
+ %% Now we will use wildcards, empty strings and test if they really
+ %% are ignored if so requested.
+ ES3=[#'CosNotification_EventType'{domain_name = "name1", type_name = "*"},
+ #'CosNotification_EventType'{domain_name = "*", type_name = "type2"}],
+ ES4=[#'CosNotification_EventType'{domain_name = "name1", type_name = "*"},
+ #'CosNotification_EventType'{domain_name = "name2", type_name = ""}],
+ ES5=[#'CosNotification_EventType'{domain_name = "na*", type_name = "type1"}],
+ ES6=[#'CosNotification_EventType'{domain_name = "n*1", type_name = "type1"}],
+ ES7=[#'CosNotification_EventType'{domain_name = "*1", type_name = "type1"}],
+ ES8=[#'CosNotification_EventType'{domain_name = "n*m*1", type_name = "type1"}],
+ ES9=[#'CosNotification_EventType'{domain_name = "n**1", type_name = "type1"}],
+ ES10=[#'CosNotification_EventType'{domain_name = "nam*1", type_name = "type1"}],
+
+ Event1 = ?not_CreateSE("name1","type1",
+ "event_name",
+ [#'CosNotification_Property'{name="property_name",
+ value=any:create(orber_tc:short(), 1)}],
+ [], any:create(orber_tc:null(), null)),
+ Event2 = ?not_CreateSE("name2","type1",
+ "event_name",
+ [#'CosNotification_Property'{name="property_name",
+ value=any:create(orber_tc:short(), 1)}],
+ [], any:create(orber_tc:null(), null)),
+ Event3 = ?not_CreateSE("mame1","type1",
+ "event_name",
+ [#'CosNotification_Property'{name="property_name",
+ value=any:create(orber_tc:short(), 1)}],
+ [], any:create(orber_tc:null(), null)),
+ Event4 = ?not_CreateSE("naame1","type1",
+ "event_name",
+ [#'CosNotification_Property'{name="property_name",
+ value=any:create(orber_tc:short(), 1)}],
+ [], any:create(orber_tc:null(), null)),
+ Event5 = ?not_CreateSE("nname1","type1",
+ "event_name",
+ [#'CosNotification_Property'{name="property_name",
+ value=any:create(orber_tc:short(), 1)}],
+ [], any:create(orber_tc:null(), null)),
+ Event6 = ?not_CreateSE("name12","type1",
+ "event_name",
+ [#'CosNotification_Property'{name="property_name",
+ value=any:create(orber_tc:short(), 1)}],
+ [], any:create(orber_tc:null(), null)),
+
+ ?match(ok, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':
+ subscription_change(StructuredProxyPullSupplier, ES3, [])),
+
+ ?match(ok,'CosNotifyChannelAdmin_StructuredProxyPushConsumer':push_structured_event(StructuredProxyPushConsumer, Event1)),
+
+ ?match(Event1, 'notify_test_StrPullC':doAction(PullStrC, pull_str)),
+
+ ?match(ok, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':
+ subscription_change(StructuredProxyPullSupplier, ES4, ES3)),
+ ?match(ok,'CosNotifyChannelAdmin_StructuredProxyPushConsumer':push_structured_event(StructuredProxyPushConsumer, Event1)),
+ ?match(Event1, 'notify_test_StrPullC':doAction(PullStrC, pull_str)),
+
+ ?match(ok, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':
+ subscription_change(StructuredProxyPullSupplier, ES5, ES4)),
+ ?match(ok,'CosNotifyChannelAdmin_StructuredProxyPushConsumer':push_structured_event(StructuredProxyPushConsumer, Event1)),
+ ?match(Event1, 'notify_test_StrPullC':doAction(PullStrC, pull_str)),
+
+ ?match(ok, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':
+ subscription_change(StructuredProxyPullSupplier, ES6, ES5)),
+ ?match(ok,'CosNotifyChannelAdmin_StructuredProxyPushConsumer':push_structured_event(StructuredProxyPushConsumer, Event1)),
+ ?match(Event1, 'notify_test_StrPullC':doAction(PullStrC, pull_str)),
+
+ ?match(ok, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':
+ subscription_change(StructuredProxyPullSupplier, ES7, ES6)),
+ ?match(ok,'CosNotifyChannelAdmin_StructuredProxyPushConsumer':push_structured_event(StructuredProxyPushConsumer, Event1)),
+ ?match(Event1, 'notify_test_StrPullC':doAction(PullStrC, pull_str)),
+
+ ?match(ok, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':
+ subscription_change(StructuredProxyPullSupplier, ES8, ES7)),
+ ?match(ok,'CosNotifyChannelAdmin_StructuredProxyPushConsumer':push_structured_event(StructuredProxyPushConsumer, Event1)),
+ ?match(Event1, 'notify_test_StrPullC':doAction(PullStrC, pull_str)),
+
+ ?match(ok, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':
+ subscription_change(StructuredProxyPullSupplier, ES9, ES8)),
+ ?match(ok,'CosNotifyChannelAdmin_StructuredProxyPushConsumer':push_structured_event(StructuredProxyPushConsumer, Event1)),
+ ?match(Event1, 'notify_test_StrPullC':doAction(PullStrC, pull_str)),
+
+ ?match(ok,'CosNotifyChannelAdmin_StructuredProxyPushConsumer':push_structured_event(StructuredProxyPushConsumer, Event2)),
+ ?match(ok,'CosNotifyChannelAdmin_StructuredProxyPushConsumer':push_structured_event(StructuredProxyPushConsumer, Event3)),
+
+ timer:sleep(5000),
+ ?match({_NilStrEvent,false}, 'notify_test_StrPullC':doAction(PullStrC, try_pull_str)),
+
+ ?match(ok, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':
+ subscription_change(StructuredProxyPullSupplier, ES10, ES9)),
+ ?match(ok,'CosNotifyChannelAdmin_StructuredProxyPushConsumer':push_structured_event(StructuredProxyPushConsumer, Event1)),
+ ?match(Event1, 'notify_test_StrPullC':doAction(PullStrC, pull_str)),
+
+ ?match(ok,'CosNotifyChannelAdmin_StructuredProxyPushConsumer':push_structured_event(StructuredProxyPushConsumer, Event4)),
+ ?match(ok,'CosNotifyChannelAdmin_StructuredProxyPushConsumer':push_structured_event(StructuredProxyPushConsumer, Event5)),
+ ?match(ok,'CosNotifyChannelAdmin_StructuredProxyPushConsumer':push_structured_event(StructuredProxyPushConsumer, Event6)),
+
+ timer:sleep(5000),
+ ?match({_NilStrEvent,false}, 'notify_test_StrPullC':doAction(PullStrC, try_pull_str)),
+
+
+ catch corba:dispose(StructuredProxyPushConsumer),
+ catch corba:dispose(StructuredProxyPullConsumer),
+ catch corba:dispose(StructuredProxyPushSupplier),
+ catch corba:dispose(StructuredProxyPullSupplier),
+ catch corba:dispose(AdminConsumer),
+ catch corba:dispose(AdminSupplier),
+ catch corba:dispose(Ch),
+ catch cosNotificationApp:stop_factory(Fac),
+
+ timer:sleep(5000),
+ ?match(true, corba_object:non_existent(PullStrS)),
+ ?match(true, corba_object:non_existent(PushStrS)),
+ ?match(true, corba_object:non_existent(PullStrC)),
+ ?match(true, corba_object:non_existent(PushStrC)),
+
+ ok.
+
+%%-----------------------------------------------------------------
+%% Filter admin API tests
+%%-----------------------------------------------------------------
+filter_adm_api(doc) -> ["CosNotification filter admin tests", ""];
+filter_adm_api(suite) -> [];
+filter_adm_api(_Config) ->
+ Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
+ ?match({_,key,_,_,_,_}, Fac),
+ {Ch, _Id1} = (catch 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(Fac, ?defaultQoS, ?defaultAdm)),
+ ?match({_,key,_,_,_,_}, Ch),
+
+ FiFac = 'CosNotifyFilter_FilterFactory':oe_create(),
+ ?match({_,key,_,_,_,_}, FiFac),
+
+ Filter = 'CosNotifyFilter_FilterFactory':create_filter(FiFac,"EXTENDED_TCL"),
+ ?match({_,key,_,_,_,_}, Filter),
+
+ AC=?match({_,key,_,_,_,_},
+ 'CosNotifyChannelAdmin_EventChannel':for_consumers(Ch)),
+ filter_tests('CosNotifyChannelAdmin_ConsumerAdmin', AC, Filter, Ch),
+
+ AS=?match({_,key,_,_,_,_},
+ 'CosNotifyChannelAdmin_EventChannel':for_suppliers(Ch)),
+ filter_tests('CosNotifyChannelAdmin_SupplierAdmin', AS, Filter, Ch),
+
+ PushS=?match({_,key,_,_,_,_},
+ 'CosNotifyChannelAdmin_ConsumerAdmin':obtain_push_supplier(AC)),
+ filter_tests('CosNotifyChannelAdmin_ProxyPushSupplier', PushS, Filter, Ch),
+
+ PullS=?match({_,key,_,_,_,_},
+ 'CosNotifyChannelAdmin_ConsumerAdmin':obtain_pull_supplier(AC)),
+ filter_tests('CosNotifyChannelAdmin_ProxyPullSupplier', PullS, Filter, Ch),
+
+ PushC=?match({_,key,_,_,_,_},
+ 'CosNotifyChannelAdmin_SupplierAdmin':obtain_push_consumer(AS)),
+ filter_tests('CosNotifyChannelAdmin_ProxyPushConsumer', PushC, Filter, Ch),
+
+ PullC=?match({_,key,_,_,_,_},
+ 'CosNotifyChannelAdmin_SupplierAdmin':obtain_pull_consumer(AS)),
+ filter_tests('CosNotifyChannelAdmin_ProxyPullConsumer', PullC, Filter, Ch),
+
+ catch corba:dispose(FiFac),
+ catch corba:dispose(Filter),
+ catch corba:dispose(PushS),
+ catch corba:dispose(PullS),
+ catch corba:dispose(PushC),
+ catch corba:dispose(PullC),
+ catch corba:dispose(AC),
+ catch corba:dispose(AS),
+ catch corba:dispose(Ch),
+ catch cosNotificationApp:stop_factory(Fac),
+ ok.
+
+filter_tests(Mod, Obj, Filter, Ch) ->
+ io:format("############ TESTING MODULE ~p FILTER ############~n", [Mod]),
+ %% No filter added.
+ ?match([], Mod:get_all_filters(Obj)),
+ ?match(ok, Mod:remove_all_filters(Obj)),
+ ?match({'EXCEPTION',{'CosNotifyFilter_FilterNotFound',_}},
+ Mod:get_filter(Obj, 0)),
+ %% Try add a Filter which is not a filter.
+ ?match({'EXCEPTION',{'BAD_PARAM',_,_,_}}, Mod:add_filter(Obj, Ch)),
+ %% Try to remove a single filter.
+ ?match({'EXCEPTION',{'CosNotifyFilter_FilterNotFound',_}},
+ Mod:remove_filter(Obj, 0)),
+ ID = Mod:add_filter(Obj, Filter),
+ ?match([ID], Mod:get_all_filters(Obj)),
+ ?match(Filter, Mod:get_filter(Obj, ID)),
+ ?match(ok, Mod:remove_filter(Obj, ID)),
+ ?match([], Mod:get_all_filters(Obj)),
+ ID2 = Mod:add_filter(Obj, Filter),
+ ?match([ID2], Mod:get_all_filters(Obj)),
+ ?match(ok, Mod:remove_all_filters(Obj)),
+ ?match([], Mod:get_all_filters(Obj)),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Creating different event pushing and pulling API tests
+%%-----------------------------------------------------------------
+events_api(doc) -> ["CosNotification event pushing and pulling tests", ""];
+events_api(suite) -> [];
+events_api(_Config) ->
+ %% Initialize the application.
+ Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
+ ?match({_,key,_,_,_,_}, Fac),
+ {Ch, Id1} = (catch 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(Fac, ?defaultQoS, ?defaultAdm)),
+ ?match({_,key,_,_,_,_}, Ch),
+ events_api_helper(Fac, Ch, Id1).
+
+events2_api(doc) -> ["CosNotification event pushing and pulling tests II", ""];
+events2_api(suite) -> [];
+events2_api(_Config) ->
+ %% Initialize the application.
+ Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
+ ?match({_,key,_,_,_,_}, Fac),
+ {Ch, Id1} = (catch 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(Fac, ?defaultQoS2, ?defaultAdm)),
+ ?match({_,key,_,_,_,_}, Ch),
+ events_api_helper(Fac, Ch, Id1).
+
+events_api_helper(Fac, Ch, _Id1) ->
+ %% Now we will set up a test environment, with the following structure:
+ %%
+ %% Channel
+ %% / \
+ %% Supplier Adm Consumer Adm
+ %% / \
+ %% 1 proxy of each possible type
+ %% To each proxy we will connect a test client
+ %% The events will flow in ===>> direction.
+ %%
+ %% For the supplier Admins this include:
+ %% - ProxyPushConsumer
+ %% - SequenceProxyPushConsumer
+ %% - StructuredProxyPushConsumer
+ %% - ProxyPullConsumer
+ %% - SequenceProxyPullConsumer
+ %% - StructuredProxyPullConsumer
+ %%
+ %% For the consumer Admins this include:
+ %% - ProxyPushSupplier
+ %% - SequenceProxyPushSupplier
+ %% - StructuredProxyPushSupplier
+ %% - ProxyPullSupplier
+ %% - SequenceProxyPullSupplier
+ %% - StructuredProxyPullSupplier
+ %%
+ %%
+ %% We will not use any Filters to begin with, just want to make sure we can
+ %% deliver events from all start- to end-points.
+
+ %% Create the Admin objects
+ {AdminSupplier, _ASID}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_EventChannel':new_for_suppliers(Ch,'AND_OP')),
+ {AdminConsumer, _ACID}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_EventChannel':new_for_consumers(Ch,'AND_OP')),
+
+ %% Create Suppliers Proxies
+ {ProxyPullSupplier,_ID1}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_ConsumerAdmin':obtain_notification_pull_supplier(AdminConsumer, 'ANY_EVENT')),
+ {StructuredProxyPullSupplier,_ID2}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_ConsumerAdmin':obtain_notification_pull_supplier(AdminConsumer, 'STRUCTURED_EVENT')),
+ {SequenceProxyPullSupplier,_ID3}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_ConsumerAdmin':obtain_notification_pull_supplier(AdminConsumer, 'SEQUENCE_EVENT')),
+
+ {ProxyPushSupplier,_I4D}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_ConsumerAdmin':obtain_notification_push_supplier(AdminConsumer, 'ANY_EVENT')),
+ {StructuredProxyPushSupplier,_ID5}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_ConsumerAdmin':obtain_notification_push_supplier(AdminConsumer, 'STRUCTURED_EVENT')),
+ {SequenceProxyPushSupplier,_ID6}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_ConsumerAdmin':obtain_notification_push_supplier(AdminConsumer, 'SEQUENCE_EVENT')),
+
+ %% Now we must create a Client for each proxy and connect them.
+ PushAnyC=?match({_,key,_,_,_,_}, 'notify_test_AnyPushC':oe_create(['PUSH_ANY', ProxyPushSupplier],
+ [{local_typecheck, false}])),
+ ?match(ok, 'CosNotifyChannelAdmin_ProxyPushSupplier':connect_any_push_consumer(ProxyPushSupplier, PushAnyC)),
+
+ PushStrC=?match({_,key,_,_,_,_}, 'notify_test_StrPushC':oe_create(['PUSH_STRUCTURED',StructuredProxyPushSupplier],
+ [{local_typecheck, false}])),
+ ?match(ok, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':connect_structured_push_consumer(StructuredProxyPushSupplier, PushStrC)),
+
+ PushSeqC=?match({_,key,_,_,_,_}, 'notify_test_SeqPushC':oe_create(['PUSH_SEQUENCE',SequenceProxyPushSupplier],
+ [{local_typecheck, false}])),
+ ?match(ok, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':connect_sequence_push_consumer(SequenceProxyPushSupplier, PushSeqC)),
+
+ PullAnyC=?match({_,key,_,_,_,_}, 'notify_test_AnyPullC':oe_create(['PULL_ANY', ProxyPullSupplier],
+ [{local_typecheck, false}])),
+ ?match(ok, 'CosNotifyChannelAdmin_ProxyPullSupplier':connect_any_pull_consumer(ProxyPullSupplier, PullAnyC)),
+
+ PullStrC=?match({_,key,_,_,_,_}, 'notify_test_StrPullC':oe_create(['PULL_STRUCTURED',StructuredProxyPullSupplier],
+ [{local_typecheck, false}])),
+ ?match(ok, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':connect_structured_pull_consumer(StructuredProxyPullSupplier, PullStrC)),
+
+ PullSeqC=?match({_,key,_,_,_,_}, 'notify_test_SeqPullC':oe_create(['PULL_SEQUENCE',SequenceProxyPullSupplier],
+ [{local_typecheck, false}])),
+ ?match(ok, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':connect_sequence_pull_consumer(SequenceProxyPullSupplier, PullSeqC)),
+
+
+ %% Create Consumers Proxies
+ {ProxyPullConsumer,_ID7}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_SupplierAdmin':obtain_notification_pull_consumer(AdminSupplier, 'ANY_EVENT')),
+ {StructuredProxyPullConsumer,_ID8}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_SupplierAdmin':obtain_notification_pull_consumer(AdminSupplier, 'STRUCTURED_EVENT')),
+ {SequenceProxyPullConsumer,_ID9}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_SupplierAdmin':obtain_notification_pull_consumer(AdminSupplier, 'SEQUENCE_EVENT')),
+
+ {ProxyPushConsumer,_ID10}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_SupplierAdmin':obtain_notification_push_consumer(AdminSupplier, 'ANY_EVENT')),
+ {StructuredProxyPushConsumer,_ID11}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_SupplierAdmin':obtain_notification_push_consumer(AdminSupplier, 'STRUCTURED_EVENT')),
+ {SequenceProxyPushConsumer,_ID12}=?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_SupplierAdmin':obtain_notification_push_consumer(AdminSupplier, 'SEQUENCE_EVENT')),
+
+ %% Now we must create a Client for each proxy and connect them.
+ PushAnyS=?match({_,key,_,_,_,_}, 'notify_test_AnyPushS':oe_create(['PUSH_ANY', ProxyPushConsumer],
+ [{local_typecheck, false}])),
+ ?match(ok, 'CosNotifyChannelAdmin_ProxyPushConsumer':connect_any_push_supplier(ProxyPushConsumer, PushAnyS)),
+
+ PushStrS=?match({_,key,_,_,_,_}, 'notify_test_StrPushS':oe_create(['PUSH_STRUCTURED',StructuredProxyPushConsumer],
+ [{local_typecheck, false}])),
+ ?match(ok, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':connect_structured_push_supplier(StructuredProxyPushConsumer, PushStrS)),
+
+ PushSeqS=?match({_,key,_,_,_,_}, 'notify_test_SeqPushS':oe_create(['PUSH_SEQUENCE',SequenceProxyPushConsumer],
+ [{local_typecheck, false}])),
+ ?match(ok, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':connect_sequence_push_supplier(SequenceProxyPushConsumer, PushSeqS)),
+
+ PullAnyS=?match({_,key,_,_,_,_}, 'notify_test_AnyPullS':oe_create(['PULL_ANY', ProxyPullConsumer],
+ [{local_typecheck, false}])),
+ ?match(ok, 'CosNotifyChannelAdmin_ProxyPullConsumer':connect_any_pull_supplier(ProxyPullConsumer, PullAnyS)),
+
+ PullStrS=?match({_,key,_,_,_,_}, 'notify_test_StrPullS':oe_create(['PULL_STRUCTURED',StructuredProxyPullConsumer],
+ [{local_typecheck, false}])),
+ ?match(ok, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':connect_structured_pull_supplier(StructuredProxyPullConsumer, PullStrS)),
+
+ PullSeqS=?match({_,key,_,_,_,_}, 'notify_test_SeqPullS':oe_create(['PULL_SEQUENCE',SequenceProxyPullConsumer],
+ [{local_typecheck, false}])),
+ ?match(ok, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':connect_sequence_pull_supplier(SequenceProxyPullConsumer, PullSeqS)),
+
+
+ %% Create a couple of Events to test with.
+ Event = ?not_CreateSE("DomainName","CommunicationsAlarm",
+ "lost_packet",
+ [#'CosNotification_Property'{name="priority",
+ value=any:create(orber_tc:short(), 1)}],
+ [], any:create(orber_tc:null(), null)),
+
+ Event2 = ?not_CreateSE("DomainName","TemperatureAlarm",
+ "over_heated",
+ [#'CosNotification_Property'{name="priority",
+ value=any:create(orber_tc:short(), 10)}],
+ [], any:create(orber_tc:null(), null)),
+
+
+ AnyEvent = any:create(orber_tc:long(), 100),
+
+ StrEvent = ?not_CreateSE("","%ANY","",[],[],AnyEvent),
+ NilAnyEvent = any:create(orber_tc:null(), null),
+ NilStrEvent = ?not_CreateSE("","","",[],[],NilAnyEvent),
+
+ ConvertedStr = any:create('CosNotification_StructuredEvent':tc(), Event),
+
+ io:format("###################### PUSH STRUCTURED ########################"),
+
+ %% Test with pushing a structured event.
+ ?match(ok,'CosNotifyChannelAdmin_StructuredProxyPushConsumer':push_structured_event(StructuredProxyPushConsumer, Event)),
+
+ %% Wait for a while so we are sure that all events have been delivered as far
+ %% as the Notification service can automatically.
+ timer:sleep(5000),
+
+ %% Check if the Clients have received and stored the events.
+ ?match([{any,_,Event}], 'notify_test_AnyPushC':doAction(PushAnyC, return_data)),
+ ?match([Event], 'notify_test_StrPushC':doAction(PushStrC, return_data)),
+ ?match([Event], 'notify_test_SeqPushC':doAction(PushSeqC, return_data)),
+
+ %% Instruct the Clients to pull the events and check if they match.
+ ?match({any,_,Event}, 'notify_test_AnyPullC':doAction(PullAnyC, pull_any)),
+ ?match(Event, 'notify_test_StrPullC':doAction(PullStrC, pull_str)),
+ ?match([Event], 'notify_test_SeqPullC':doAction(PullSeqC, {pull_seq,1})),
+
+ io:format("###################### PUSH SEQUENCE ########################"),
+
+ %% Create an Event Sequence and push it.
+ EventSeq = [Event, Event2],
+
+ %% Test with pushing a event sequence.
+ ?match(ok,'CosNotifyChannelAdmin_SequenceProxyPushConsumer':push_structured_events(SequenceProxyPushConsumer, EventSeq)),
+
+ %% Wait for a while so we are sure that all events have been delivered as far
+ %% as the Notification service can automatically.
+ timer:sleep(5000),
+
+ %% Instruct the Clients to pull the events and check if they match.
+ ?match({any,_,Event}, 'notify_test_AnyPullC':doAction(PullAnyC, pull_any)),
+ ?match(Event, 'notify_test_StrPullC':doAction(PullStrC, pull_str)),
+ ?match([Event,Event2], 'notify_test_SeqPullC':doAction(PullSeqC, {pull_seq,2})),
+ ?match({any,_,Event2}, 'notify_test_AnyPullC':doAction(PullAnyC, pull_any)),
+ ?match(Event2, 'notify_test_StrPullC':doAction(PullStrC, pull_str)),
+
+ %% Check if the Push Clients have received and stored the events.
+ ?match([{any,_,Event}, {any,_,Event2}], 'notify_test_AnyPushC':doAction(PushAnyC, return_data)),
+ ?match([Event, Event2], 'notify_test_StrPushC':doAction(PushStrC, return_data)),
+ ?match([Event, Event2], 'notify_test_SeqPushC':doAction(PushSeqC, return_data)),
+
+ io:format("###################### PUSH ANY ########################"),
+
+ %% Test with pushing an any event.
+ ?match(ok,'CosEventChannelAdmin_ProxyPushConsumer':push(ProxyPushConsumer, AnyEvent)),
+
+ %% Wait for a while so we are sure that all events have been delivered as far
+ %% as the Notification service can automatically.
+ timer:sleep(5000),
+
+ %% Check if the Clients have received and stored the events.
+ ?match([AnyEvent], 'notify_test_AnyPushC':doAction(PushAnyC, return_data)),
+ ?match([StrEvent], 'notify_test_StrPushC':doAction(PushStrC, return_data)),
+ ?match([StrEvent], 'notify_test_SeqPushC':doAction(PushSeqC, return_data)),
+
+ %% Instruct the Clients to pull the events and check if they match.
+ ?match(AnyEvent, 'notify_test_AnyPullC':doAction(PullAnyC, pull_any)),
+ ?match(StrEvent, 'notify_test_StrPullC':doAction(PullStrC, pull_str)),
+ ?match([StrEvent], 'notify_test_SeqPullC':doAction(PullSeqC, {pull_seq,10})),
+
+
+
+ io:format("###################### PUSH CONVERTED ANY #############"),
+
+ %% Test with pushing a structured event.
+ ?match(ok,'CosNotifyChannelAdmin_StructuredProxyPushConsumer':push_structured_event(StructuredProxyPushConsumer, StrEvent)),
+
+ %% Wait for a while so we are sure that all events have been delivered as far
+ %% as the Notification service can automatically.
+ timer:sleep(5000),
+
+ %% Check if the Clients have received and stored the events.
+ ?match([AnyEvent], 'notify_test_AnyPushC':doAction(PushAnyC, return_data)),
+ ?match([StrEvent], 'notify_test_StrPushC':doAction(PushStrC, return_data)),
+ ?match([StrEvent], 'notify_test_SeqPushC':doAction(PushSeqC, return_data)),
+
+ %% Instruct the Clients to pull the events and check if they match.
+ ?match(AnyEvent, 'notify_test_AnyPullC':doAction(PullAnyC, pull_any)),
+ ?match(StrEvent, 'notify_test_StrPullC':doAction(PullStrC, pull_str)),
+ ?match([StrEvent], 'notify_test_SeqPullC':doAction(PullSeqC, {pull_seq,1})),
+
+
+ io:format("###################### PUSH CONVERTED STRUCTURED ########"),
+
+ %% Test with pushing an any event.
+ ?match(ok,'CosEventChannelAdmin_ProxyPushConsumer':push(ProxyPushConsumer, ConvertedStr)),
+
+ %% Wait for a while so we are sure that all events have been delivered as far
+ %% as the Notification service can automatically.
+ timer:sleep(5000),
+
+ %% Check if the Clients have received and stored the events.
+ ?match([ConvertedStr], 'notify_test_AnyPushC':doAction(PushAnyC, return_data)),
+ ?match([Event], 'notify_test_StrPushC':doAction(PushStrC, return_data)),
+ ?match([Event], 'notify_test_SeqPushC':doAction(PushSeqC, return_data)),
+
+ %% Instruct the Clients to pull the events and check if they match.
+ ?match(ConvertedStr, 'notify_test_AnyPullC':doAction(PullAnyC, pull_any)),
+ ?match(Event, 'notify_test_StrPullC':doAction(PullStrC, pull_str)),
+ ?match([Event], 'notify_test_SeqPullC':doAction(PullSeqC, {pull_seq,10})),
+
+
+ io:format("###################### TRY PULL ########################"),
+
+ %% Now we will push an any event after a delay. This means that try_pull-functions,
+ %% since it's not blocking, will return, [], NilAny or NilStructured events and
+ %% the Boolean false.
+ spawn(notify_test_impl, delay, [ProxyPushConsumer, AnyEvent, 20000,
+ 'CosEventChannelAdmin_ProxyPushConsumer',push]),
+ ?match([], 'notify_test_AnyPushC':doAction(PushAnyC, return_data)),
+ ?match([], 'notify_test_StrPushC':doAction(PushStrC, return_data)),
+ ?match([], 'notify_test_SeqPushC':doAction(PushSeqC, return_data)),
+
+ %% Instruct the Clients to pull the events and check if they match.
+ ?match({NilAnyEvent,false}, 'notify_test_AnyPullC':doAction(PullAnyC, try_pull_any)),
+ ?match({NilStrEvent,false}, 'notify_test_StrPullC':doAction(PullStrC, try_pull_str)),
+ ?match({[],false}, 'notify_test_SeqPullC':doAction(PullSeqC, {try_pull_seq,10})),
+
+
+ %% Instruct the Clients to pull the events and check if they match.
+ %% Pull is blocking so in the print-out we should see that nothing
+ %% is returned until the pushed event reaches the end proxies.
+ ?match(AnyEvent, 'notify_test_AnyPullC':doAction(PullAnyC, pull_any)),
+ ?match(StrEvent, 'notify_test_StrPullC':doAction(PullStrC, pull_str)),
+ ?match([StrEvent], 'notify_test_SeqPullC':doAction(PullSeqC, {pull_seq,1})),
+
+ %% To make sure there are no other circumstanses which lead to a delay we
+ %% hold for some time.
+ timer:sleep(5000),
+ %% Check if the Clients have received and stored the events.
+ ?match([AnyEvent], 'notify_test_AnyPushC':doAction(PushAnyC, return_data)),
+ ?match([StrEvent], 'notify_test_StrPushC':doAction(PushStrC, return_data)),
+ ?match([StrEvent], 'notify_test_SeqPushC':doAction(PushSeqC, return_data)),
+
+ %% Test with pushing a event sequence but only pull sequences of length 1.
+ ?match(ok,'CosNotifyChannelAdmin_SequenceProxyPushConsumer':push_structured_events(SequenceProxyPushConsumer, EventSeq)),
+
+ %% Wait for a while so we are sure that all events have been delivered as far
+ %% as the Notification service can automatically.
+ timer:sleep(5000),
+ %% Pull 1 event at a time.
+ ?match([Event], 'notify_test_SeqPullC':doAction(PullSeqC, {pull_seq,1})),
+ ?match([Event2], 'notify_test_SeqPullC':doAction(PullSeqC, {pull_seq,1})),
+
+ %% Following cases already tested; done for clean up.
+ ?match({any,_,Event}, 'notify_test_AnyPullC':doAction(PullAnyC, pull_any)),
+ ?match(Event, 'notify_test_StrPullC':doAction(PullStrC, pull_str)),
+ ?match({any,_,Event2}, 'notify_test_AnyPullC':doAction(PullAnyC, pull_any)),
+ ?match(Event2, 'notify_test_StrPullC':doAction(PullStrC, pull_str)),
+ ?match([{any,_,Event}, {any,_,Event2}], 'notify_test_AnyPushC':doAction(PushAnyC, return_data)),
+ ?match([Event, Event2], 'notify_test_StrPushC':doAction(PushStrC, return_data)),
+ ?match([Event, Event2], 'notify_test_SeqPushC':doAction(PushSeqC, return_data)),
+ %% clean up done
+
+
+ io:format("###################### PROXY PULLER ########################"),
+
+ %% Now we will just add Events to a cleint and wait for the Notification service
+ %% to pull the events and forward them to the consumer clients.
+ ?match(ok, 'notify_test_SeqPushC':doAction(PullAnyS, {set_data, [AnyEvent]})),
+
+
+ %% Instruct the Clients to pull the events and check if they match.
+ %% Pull is blocking so in the print-out we should see that nothing
+ %% is returned until the pushed event reaches the end proxies.
+ ?match(AnyEvent, 'notify_test_AnyPullC':doAction(PullAnyC, pull_any)),
+ ?match(StrEvent, 'notify_test_StrPullC':doAction(PullStrC, pull_str)),
+ ?match([StrEvent], 'notify_test_SeqPullC':doAction(PullSeqC, {pull_seq,10})),
+
+ %% To make sure there are no other circumstanses which lead to a delay we
+ %% hold for some time.
+ timer:sleep(5000),
+ %% Check if the Clients have received and stored the events.
+ ?match([AnyEvent], 'notify_test_AnyPushC':doAction(PushAnyC, return_data)),
+ ?match([StrEvent], 'notify_test_StrPushC':doAction(PushStrC, return_data)),
+ ?match([StrEvent], 'notify_test_SeqPushC':doAction(PushSeqC, return_data)),
+
+ io:format("###################### SUSPENDED CONNECTION ################"),
+
+
+ %% Suspend the connections
+ ?match(ok,'CosNotifyChannelAdmin_SequenceProxyPushSupplier':suspend_connection(SequenceProxyPushSupplier)),
+ ?match(ok,'CosNotifyChannelAdmin_StructuredProxyPushSupplier':suspend_connection(StructuredProxyPushSupplier)),
+
+ %% Test with pushing a event sequence.
+ ?match(ok,'CosNotifyChannelAdmin_SequenceProxyPushConsumer':push_structured_events(SequenceProxyPushConsumer, EventSeq)),
+
+ %% Wait for a while so we are sure that all events have been delivered as far
+ %% as the Notification service can automatically.
+ timer:sleep(5000),
+
+ %% Instruct the Clients to pull the events and check if they match.
+ ?match({any,_,Event}, 'notify_test_AnyPullC':doAction(PullAnyC, pull_any)),
+ ?match(Event, 'notify_test_StrPullC':doAction(PullStrC, pull_str)),
+ ?match([Event,Event2], 'notify_test_SeqPullC':doAction(PullSeqC, {pull_seq,2})),
+ ?match({any,_,Event2}, 'notify_test_AnyPullC':doAction(PullAnyC, pull_any)),
+ ?match(Event2, 'notify_test_StrPullC':doAction(PullStrC, pull_str)),
+
+ %% Check if the Any Client have received and stored the events.
+ ?match([{any,_,Event}, {any,_,Event2}], 'notify_test_AnyPushC':doAction(PushAnyC, return_data)),
+
+ %% Check if the other Clients have received any events. Error if have.
+ ?match([], 'notify_test_StrPushC':doAction(PushStrC, return_data)),
+ ?match([], 'notify_test_SeqPushC':doAction(PushSeqC, return_data)),
+
+ ?match(ok,'CosNotifyChannelAdmin_SequenceProxyPushSupplier':resume_connection(SequenceProxyPushSupplier)),
+ ?match(ok,'CosNotifyChannelAdmin_StructuredProxyPushSupplier':resume_connection(StructuredProxyPushSupplier)),
+
+ %% To be sure the test case don't fail due to time-race, sleep.
+ timer:sleep(5000),
+
+ ?match([Event, Event2], 'notify_test_StrPushC':doAction(PushStrC, return_data)),
+ ?match([Event, Event2], 'notify_test_SeqPushC':doAction(PushSeqC, return_data)),
+
+
+ io:format("###################### FILTER EVENTS #######################"),
+
+ %% Now we will add filters and see if the system behaves correctly.
+ FiFac = 'CosNotifyFilter_FilterFactory':oe_create(),
+ Filter = 'CosNotifyFilter_FilterFactory':create_filter(FiFac,"EXTENDED_TCL"),
+ %% Add constraints to the Filter
+ ?line[{_,_,CID1},{_,_,CID2}]=
+ ?match([{'CosNotifyFilter_ConstraintInfo',_,_}, {'CosNotifyFilter_ConstraintInfo',_,_}],
+ 'CosNotifyFilter_Filter':add_constraints(Filter,
+ [#'CosNotifyFilter_ConstraintExp'{event_types =
+ [#'CosNotification_EventType'{
+ domain_name = "Spare*",
+ type_name = "MOVIE"}],
+ constraint_expr = "$type_name == 'MOVIE' and (('groucho' in $starlist) + ('chico' in $starlist) + ('harpo' in $starlist) + ('zeppo' in $starlist) + ('gummo' in $starlist)) > 2"},
+ #'CosNotifyFilter_ConstraintExp'{event_types =
+ [#'CosNotification_EventType'{
+ domain_name = "*",
+ type_name = "TestResults"}],
+ constraint_expr = "$test._length == 3 and ($test[0].score + $test[1].score + $test[2].score)/3 >=80"}])),
+
+ ?match([{'CosNotifyFilter_ConstraintInfo',_,CID2}, {'CosNotifyFilter_ConstraintInfo',_,CID1}],
+ 'CosNotifyFilter_Filter':get_all_constraints(Filter)),
+ ?match([{'CosNotifyFilter_ConstraintInfo',_,CID1}],
+ 'CosNotifyFilter_Filter':get_constraints(Filter, [CID1])),
+
+ %% Associate the Filter with different objects.
+ %% Since we use the same filter for both objects the events will never reach the admin.
+ _FilterID = 'CosNotifyChannelAdmin_ConsumerAdmin':add_filter(AdminConsumer, Filter),
+
+ _FilterID2 = 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':add_filter(StructuredProxyPushConsumer, Filter),
+ event_filtering(FiFac, Filter, AdminConsumer, StructuredProxyPushConsumer, PushAnyC,
+ PushStrC, PushSeqC, PullAnyC, PullStrC, PullSeqC),
+ %% Remove the proxy filter so we can check if the events are filtered correctly by the admin.
+ ?match(ok, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':remove_all_filters(StructuredProxyPushConsumer)),
+ event_filtering(FiFac, Filter, AdminConsumer, StructuredProxyPushConsumer, PushAnyC,
+ PushStrC, PushSeqC, PullAnyC, PullStrC, PullSeqC),
+
+
+ catch corba:dispose(Filter),
+ catch corba:dispose(FiFac),
+ catch corba:dispose(SequenceProxyPushConsumer),
+ catch corba:dispose(StructuredProxyPushConsumer),
+ catch corba:dispose(ProxyPushConsumer),
+ catch corba:dispose(SequenceProxyPullConsumer),
+ catch corba:dispose(StructuredProxyPullConsumer),
+ catch corba:dispose(ProxyPullConsumer),
+ catch corba:dispose(SequenceProxyPushSupplier),
+ catch corba:dispose(StructuredProxyPushSupplier),
+ catch corba:dispose(ProxyPushSupplier),
+ catch corba:dispose(SequenceProxyPullSupplier),
+ catch corba:dispose(StructuredProxyPullSupplier),
+ catch corba:dispose(ProxyPullSupplier),
+ catch corba:dispose(AdminConsumer),
+ catch corba:dispose(AdminSupplier),
+ catch corba:dispose(Ch),
+ catch cosNotificationApp:stop_factory(Fac),
+ %% The Clients should have terminated by now. Check if it is so.
+ timer:sleep(5000),
+ ?match(true, corba_object:non_existent(PullSeqS)),
+ ?match(true, corba_object:non_existent(PullStrS)),
+ ?match(true, corba_object:non_existent(PullAnyS)),
+ ?match(true, corba_object:non_existent(PushSeqS)),
+ ?match(true, corba_object:non_existent(PushStrS)),
+ ?match(true, corba_object:non_existent(PushAnyS)),
+ ?match(true, corba_object:non_existent(PullSeqC)),
+ ?match(true, corba_object:non_existent(PullStrC)),
+ ?match(true, corba_object:non_existent(PullAnyC)),
+ ?match(true, corba_object:non_existent(PushSeqC)),
+ ?match(true, corba_object:non_existent(PushStrC)),
+ ?match(true, corba_object:non_existent(PushAnyC)),
+ ok.
+
+event_filtering(_FiFac, _Filter, _AdminConsumer, StructuredProxyPushConsumer, PushAnyC, PushStrC, PushSeqC, PullAnyC, PullStrC, PullSeqC) ->
+ NilAnyEvent = any:create(orber_tc:null(), null),
+ NilStrEvent = ?not_CreateSE("","","",[],[],NilAnyEvent),
+
+ TrueEvent1 = ?not_CreateSE("SpareTime","MOVIE",
+ "EventName",
+ [#'CosNotification_Property'{name="starlist",
+ value=any:create(orber_tc:sequence(orber_tc:string(0),0),
+ ["groucho", "harpo", "sam", "gummo"])}],
+ [], any:create(orber_tc:null(), null)),
+ TrueEvent2 = ?not_CreateSE("Studies","TestResults",
+ "EventName", [],
+ [#'CosNotification_Property'{name="test",
+ value=any:create(orber_tc:array(notify_test_data:tc(),3),
+ {#notify_test_data{score=75,
+ name="name"},
+ #notify_test_data{score=80,
+ name="name"},
+ #notify_test_data{score=85,
+ name="name"}})}],
+ any:create(orber_tc:null(), null)),
+
+ FalseEvent1 = ?not_CreateSE("SpareTime","MOVIE",
+ "EventName",
+ [#'CosNotification_Property'{name="starlist",
+ value=any:create(orber_tc:sequence(orber_tc:string(0),0),
+ ["frodo", "bilbo", "sam", "gummo"])}],
+ [], any:create(orber_tc:null(), null)),
+ FalseEvent2 = ?not_CreateSE("Studies","TestResults",
+ "EventName", [],
+ [#'CosNotification_Property'{name="test",
+ value=any:create(orber_tc:array(notify_test_data:tc(),3),
+ {#notify_test_data{score=75,
+ name="name"},
+ #notify_test_data{score=80,
+ name="name"},
+ #notify_test_data{score=80,
+ name="name"}})}],
+ any:create(orber_tc:null(), null)),
+ %% Test with pushing the first structured event that should not be filtered away.
+ ?match(ok,'CosNotifyChannelAdmin_StructuredProxyPushConsumer':push_structured_event(StructuredProxyPushConsumer, TrueEvent1)),
+
+ %% Wait for a while so we are sure that all events have been delivered as far
+ %% as the Notification service can automatically.
+ timer:sleep(5000),
+
+ %% Check if the Clients have received and stored the events.
+ ?match([{any,_,TrueEvent1}], 'notify_test_AnyPushC':doAction(PushAnyC, return_data)),
+ ?match([TrueEvent1], 'notify_test_StrPushC':doAction(PushStrC, return_data)),
+ ?match([TrueEvent1], 'notify_test_SeqPushC':doAction(PushSeqC, return_data)),
+
+ %% Instruct the Clients to pull the events and check if they match.
+ ?match({any,_,TrueEvent1}, 'notify_test_AnyPullC':doAction(PullAnyC, pull_any)),
+ ?match(TrueEvent1, 'notify_test_StrPullC':doAction(PullStrC, pull_str)),
+ ?match([TrueEvent1], 'notify_test_SeqPullC':doAction(PullSeqC, {pull_seq,1})),
+
+ %% Test with pushing the second structured event that should not be filtered away.
+ ?match(ok,'CosNotifyChannelAdmin_StructuredProxyPushConsumer':push_structured_event(StructuredProxyPushConsumer, TrueEvent2)),
+
+ %% Wait for a while so we are sure that all events have been delivered as far
+ %% as the Notification service can automatically.
+ timer:sleep(5000),
+
+ %% Check if the Clients have received and stored the events.
+ ?match([{any,_,TrueEvent2}], 'notify_test_AnyPushC':doAction(PushAnyC, return_data)),
+ ?match([TrueEvent2], 'notify_test_StrPushC':doAction(PushStrC, return_data)),
+ ?match([TrueEvent2], 'notify_test_SeqPushC':doAction(PushSeqC, return_data)),
+
+ %% Instruct the Clients to pull the events and check if they match.
+ ?match({any,_,TrueEvent2}, 'notify_test_AnyPullC':doAction(PullAnyC, pull_any)),
+ ?match(TrueEvent2, 'notify_test_StrPullC':doAction(PullStrC, pull_str)),
+ ?match([TrueEvent2], 'notify_test_SeqPullC':doAction(PullSeqC, {pull_seq,1})),
+
+ %% Test with pushing the first structured event that should be filtered away.
+ ?match(ok,'CosNotifyChannelAdmin_StructuredProxyPushConsumer':push_structured_event(StructuredProxyPushConsumer, FalseEvent1)),
+
+ %% Wait for a while so we are sure that all events have been delivered as far
+ %% as the Notification service can automatically.
+ timer:sleep(5000),
+
+ %% Check if the Clients have received and stored the events.
+ ?match([], 'notify_test_AnyPushC':doAction(PushAnyC, return_data)),
+ ?match([], 'notify_test_StrPushC':doAction(PushStrC, return_data)),
+ ?match([], 'notify_test_SeqPushC':doAction(PushSeqC, return_data)),
+
+ %% Instruct the Clients to pull the events and check if they match.
+ ?match({NilAnyEvent,false}, 'notify_test_AnyPullC':doAction(PullAnyC, try_pull_any)),
+ ?match({NilStrEvent,false}, 'notify_test_StrPullC':doAction(PullStrC, try_pull_str)),
+ ?match({[],false}, 'notify_test_SeqPullC':doAction(PullSeqC, {try_pull_seq,10})),
+
+ %% Test with pushing the second structured event that should be filtered away.
+ ?match(ok,'CosNotifyChannelAdmin_StructuredProxyPushConsumer':push_structured_event(StructuredProxyPushConsumer, FalseEvent2)),
+
+ %% Wait for a while so we are sure that all events have been delivered as far
+ %% as the Notification service can automatically.
+ timer:sleep(5000),
+
+ %% Check if the Clients have received and stored the events.
+ ?match([], 'notify_test_AnyPushC':doAction(PushAnyC, return_data)),
+ ?match([], 'notify_test_StrPushC':doAction(PushStrC, return_data)),
+ ?match([], 'notify_test_SeqPushC':doAction(PushSeqC, return_data)),
+
+ %% Instruct the Clients to pull the events and check if they match.
+ ?match({NilAnyEvent,false}, 'notify_test_AnyPullC':doAction(PullAnyC, try_pull_any)),
+ ?match({NilStrEvent,false}, 'notify_test_StrPullC':doAction(PullStrC, try_pull_str)),
+ ?match({[],false}, 'notify_test_SeqPullC':doAction(PullSeqC, {try_pull_seq,10})).
+
+
+
+%%-----------------------------------------------------------------
+%% Creating different cosEvent API tests
+%%-----------------------------------------------------------------
+cosevent_api(doc) -> ["CosNotification Objects tested with CosEvent API", ""];
+cosevent_api(suite) -> [];
+cosevent_api(_Config) ->
+ Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
+ ?match({_,key,_,_,_,_}, Fac),
+ {Ch, _Id1} = (catch 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(Fac, ?defaultQoS, ?defaultAdm)),
+ ?match({_,key,_,_,_,_}, Ch),
+ AC=?match({_,key,_,_,_,_},
+ 'CosEventChannelAdmin_EventChannel':for_consumers(Ch)),
+ AS=?match({_,key,_,_,_,_},
+ 'CosEventChannelAdmin_EventChannel':for_suppliers(Ch)),
+
+ PushS=?match({_,key,_,_,_,_},
+ 'CosEventChannelAdmin_ConsumerAdmin':obtain_push_supplier(AC)),
+ PullS=?match({_,key,_,_,_,_},
+ 'CosEventChannelAdmin_ConsumerAdmin':obtain_pull_supplier(AC)),
+
+ PushC=?match({_,key,_,_,_,_},
+ 'CosEventChannelAdmin_SupplierAdmin':obtain_push_consumer(AS)),
+ PullC=?match({_,key,_,_,_,_},
+ 'CosEventChannelAdmin_SupplierAdmin':obtain_pull_consumer(AS)),
+
+ PushAnyC=?match({_,key,_,_,_,_},
+ 'notify_test_AnyPushC':oe_create(['PUSH_ANY', PushC],
+ [{local_typecheck, false}])),
+ PushStrC=?match({_,key,_,_,_,_},
+ 'notify_test_StrPushC':oe_create(['PUSH_STRUCTURED',false],
+ [{local_typecheck, false}])),
+ PushSeqC=?match({_,key,_,_,_,_},
+ 'notify_test_SeqPushC':oe_create(['PUSH_SEQUENCE',false],
+ [{local_typecheck, false}])),
+
+ PullAnyC=?match({_,key,_,_,_,_},
+ 'notify_test_AnyPullC':oe_create(['PULL_ANY', PullC],
+ [{local_typecheck, false}])),
+ PullStrC=?match({_,key,_,_,_,_},
+ 'notify_test_StrPullC':oe_create(['PULL_STRUCTURED',false],
+ [{local_typecheck, false}])),
+ PullSeqC=?match({_,key,_,_,_,_},
+ 'notify_test_SeqPullC':oe_create(['PULL_SEQUENCE',false],
+ [{local_typecheck, false}])),
+
+ PushAnyS=?match({_,key,_,_,_,_},
+ 'notify_test_AnyPushS':oe_create(['PUSH_ANY', PushC],
+ [{local_typecheck, false}])),
+ PushStrS=?match({_,key,_,_,_,_},
+ 'notify_test_StrPushS':oe_create(['PUSH_STRUCTURED',false],
+ [{local_typecheck, false}])),
+ PushSeqS=?match({_,key,_,_,_,_},
+ 'notify_test_SeqPushS':oe_create(['PUSH_SEQUENCE',false],
+ [{local_typecheck, false}])),
+
+ PullAnyS=?match({_,key,_,_,_,_},
+ 'notify_test_AnyPullS':oe_create(['PULL_ANY', PullS],
+ [{local_typecheck, false}])),
+ PullStrS=?match({_,key,_,_,_,_},
+ 'notify_test_StrPullS':oe_create(['PULL_STRUCTURED',false],
+ [{local_typecheck, false}])),
+ PullSeqS=?match({_,key,_,_,_,_},
+ 'notify_test_SeqPullS':oe_create(['PULL_SEQUENCE',false],
+ [{local_typecheck, false}])),
+
+ %% In the OMG specification Proxies do not inherrit from CosEvent. Must use
+ %% Notify interface.
+ ?match({'EXCEPTION',{'BAD_PARAM',_,_,_}},
+ 'CosEventChannelAdmin_ProxyPullConsumer':connect_pull_supplier(PullC, PushStrS)),
+
+ ?match(ok,
+ 'CosEventChannelAdmin_ProxyPushSupplier':connect_push_consumer(PushS, PushAnyC)),
+ ?match(ok,
+ 'CosEventChannelAdmin_ProxyPullSupplier':connect_pull_consumer(PullS, PullAnyC)),
+
+ ?match(ok,
+ 'CosEventChannelAdmin_ProxyPushConsumer':connect_push_supplier(PushC, PushAnyS)),
+ ?match(ok,
+ 'CosEventChannelAdmin_ProxyPullConsumer':connect_pull_supplier(PullC, PullAnyS)),
+
+ ?match({'EXCEPTION',{'CosEventChannelAdmin_AlreadyConnected',_}},
+ 'CosEventChannelAdmin_ProxyPullConsumer':connect_pull_supplier(PullC, PullAnyS)),
+
+ ?match({'EXCEPTION',{'CosEventChannelAdmin_AlreadyConnected',_}},
+ 'CosNotifyChannelAdmin_ProxyPullConsumer':connect_pull_supplier(PullC, PullAnyS)),
+
+ ?match(true, corba_object:is_a(PushS, "IDL:omg.org/CosNotifyChannelAdmin/ProxyPushSupplier:1.0")),
+ ?match(true, corba_object:is_a(PushS, "IDL:omg.org/CosEventChannelAdmin/ProxyPushSupplier:1.0")),
+
+ catch corba:dispose(PushStrC),
+ catch corba:dispose(PushSeqC),
+ catch corba:dispose(PullStrC),
+ catch corba:dispose(PullSeqC),
+ catch corba:dispose(PushStrS),
+ catch corba:dispose(PushSeqS),
+ catch corba:dispose(PullStrS),
+ catch corba:dispose(PullSeqS),
+ catch corba:dispose(PushS),
+ catch corba:dispose(PullS),
+ catch corba:dispose(PushC),
+ catch corba:dispose(PullC),
+ catch corba:dispose(AC),
+ catch corba:dispose(AS),
+ catch corba:dispose(Ch),
+ catch cosNotificationApp:stop_factory(Fac),
+
+ %% The Clients should have terminated by now. Check if it is so.
+ timer:sleep(5000),
+ ?match(true, corba_object:non_existent(PullAnyS)),
+ ?match(true, corba_object:non_existent(PushAnyS)),
+ ?match(true, corba_object:non_existent(PullAnyC)),
+ ?match(true, corba_object:non_existent(PushAnyC)),
+
+
+ ok.
+
+%%-----------------------------------------------------------------
+%% AdminPropertiesAdmin API tests
+%%-----------------------------------------------------------------
+adm_api(doc) -> ["CosNotification AdminPropertiesAdmin tests", ""];
+adm_api(suite) -> [];
+adm_api(_Config) ->
+ Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
+ ?match({_,key,_,_,_,_}, Fac),
+
+ %% We need a few AdminProp:s to "play" with.
+ MQ0 = [#'CosNotification_Property'{name='CosNotification':'MaxQueueLength'(),
+ value=any:create(orber_tc:long(), 0)}],
+ MC0 = [#'CosNotification_Property'{name='CosNotification':'MaxConsumers'(),
+ value=any:create(orber_tc:long(), 0)}],
+ MS0 = [#'CosNotification_Property'{name='CosNotification':'MaxSuppliers'(),
+ value=any:create(orber_tc:long(), 0)}],
+ MQError1 = [#'CosNotification_Property'{name='CosNotification':'MaxQueueLength'(),
+ value=any:create(orber_tc:'float'(), 1.5)}],
+ MQError2 = [#'CosNotification_Property'{name='CosNotification':'MaxQueueLength'(),
+ value=any:create(orber_tc:long(), -1)}],
+
+ {Ch, _Id1} = (catch 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(Fac, ?defaultQoS, ?defaultAdm)),
+ ?match({_,key,_,_,_,_}, Ch),
+
+ %% Set new admin
+ ?match(ok, 'CosNotification_AdminPropertiesAdmin':set_admin(Ch, MQ0)),
+ %% It should be a list of three items. If we support more admin:s this
+ %% must be updated.
+ ?match([_,_,_], 'CosNotification_AdminPropertiesAdmin':get_admin(Ch)),
+
+ %% Try to set admin with an uncorrect value, i.e., not integer >= 0.
+ ?match({'EXCEPTION',{'CosNotification_UnsupportedAdmin',_,_}},
+ 'CosNotification_AdminPropertiesAdmin':set_admin(Ch, MQError1)),
+ ?match({'EXCEPTION',{'CosNotification_UnsupportedAdmin',_,_}},
+ 'CosNotification_AdminPropertiesAdmin':set_admin(Ch, MQError2)),
+
+ %% Try setting the other two admins and chech if the value is correct.
+ ?match(ok, 'CosNotification_AdminPropertiesAdmin':set_admin(Ch, MC0)),
+ ?match([_,_,_], 'CosNotification_AdminPropertiesAdmin':get_admin(Ch)),
+
+ ?match(ok, 'CosNotification_AdminPropertiesAdmin':set_admin(Ch, MS0)),
+ ?match([_,_,_], 'CosNotification_AdminPropertiesAdmin':get_admin(Ch)),
+
+ catch corba:dispose(Ch),
+ catch cosNotificationApp:stop_factory(Fac),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% QoSAdm API tests
+%%-----------------------------------------------------------------
+qos_api(doc) -> ["CosNotification QoSAdmin tests", ""];
+qos_api(suite) -> [];
+qos_api(_Config) ->
+ Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
+ ?match({_,key,_,_,_,_}, Fac),
+
+ {Ch, _Id1} = (catch 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(Fac, ?defaultQoS, ?defaultAdm)),
+ ?match({_,key,_,_,_,_}, Ch),
+
+
+ QoSPersistent = [#'CosNotification_Property'{name='CosNotification':'ConnectionReliability'(),
+ value=any:create(orber_tc:short(),
+ 'CosNotification':'Persistent'())}],
+ QoSBestEffort = [#'CosNotification_Property'{name='CosNotification':'ConnectionReliability'(),
+ value=any:create(orber_tc:short(),
+ 'CosNotification':'BestEffort'())}],
+
+ QoSEventPersistent = [#'CosNotification_Property'{name='CosNotification':'EventReliability'(),
+ value=any:create(orber_tc:short(),
+ 'CosNotification':'Persistent'())}],
+ QoSEventBestEffort = [#'CosNotification_Property'{name='CosNotification':'EventReliability'(),
+ value=any:create(orber_tc:short(),
+ 'CosNotification':'BestEffort'())}],
+
+ QoSOKMaxBatchSize = [#'CosNotification_Property'{name='CosNotification':'MaximumBatchSize'(),
+ value=any:create(orber_tc:long(), 200)}],
+ QoSToHighMaxBatchSize = [#'CosNotification_Property'{name='CosNotification':'MaximumBatchSize'(),
+ value=any:create(orber_tc:long(), 100000000)}],
+
+ QoSToLowMaxBatchSize = [#'CosNotification_Property'{name='CosNotification':'MaximumBatchSize'(),
+ value=any:create(orber_tc:long(), -1)}],
+
+ QoSOKStopTimeSupp = [#'CosNotification_Property'{name='CosNotification':'StopTimeSupported'(),
+ value=any:create(orber_tc:boolean(), true)}],
+ QoSWrongStopTimeSupp = [#'CosNotification_Property'{name="StopTimeSupp",
+ value=any:create(orber_tc:boolean(), true)}],
+
+ QoSOKStartTimeSupp = [#'CosNotification_Property'{name='CosNotification':'StartTimeSupported'(),
+ value=any:create(orber_tc:boolean(), true)}],
+ QoSWrongStartTimeSupp = [#'CosNotification_Property'{name="StartTimeSupp",
+ value=any:create(orber_tc:boolean(), true)}],
+ QoSOKTimout = [#'CosNotification_Property'{name='CosNotification':'Timeout'(),
+ value=any:create(orber_tc:unsigned_long_long(), 100)}],
+
+
+ %% The most complex QoS to set is ConnectionReliability, and the reason for this
+ %% is that we cannot set the Channel to offer best effort while its children
+ %% offer persistent. A child may only offer Persistent if its parent do, which
+ %% is why we must check the following:
+ %%
+ %% # Persistent Change to Best Effort
+ %% _____
+ %% | | (1) -> Check if children BE
+ %% |Chann| (2) ok <-
+ %% -----
+ %% |
+ %% _____
+ %% | | (3) -> Check if children BE
+ %% |Admin| (4) Check if parent Pers. <-
+ %% -----
+ %% |
+ %% _____
+ %% | | (5) -> ok
+ %% |Proxy| (6) Check if parent Pers. <-
+ %% -----
+ %% NOTE: a parent always exists but we may change the QoS before creating any
+ %% childrens. The cases (2) and (5) is always ok, i.e., no need to confirm
+ %% with parent or children.
+
+ %% We only have a channel. At the moment we can set ConnectionReliability
+ %% without asking anyone.
+ Q1='CosNotification_QoSAdmin':get_qos(Ch),
+ ?match({ok, _}, 'CosNotification_QoSAdmin':validate_qos(Ch, QoSBestEffort)),
+
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(Ch, QoSPersistent)),
+ %% Match if no problems occur if we try to set QoS as is.
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(Ch, QoSPersistent)),
+
+ %% Check validate.
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(Ch, QoSEventPersistent)),
+ ?match({ok, _}, 'CosNotification_QoSAdmin':validate_qos(Ch, QoSOKTimout)),
+ ?match({ok, _}, 'CosNotification_QoSAdmin':validate_qos(Ch, QoSEventBestEffort)),
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(Ch, QoSEventBestEffort)),
+ ?match({ok, _}, 'CosNotification_QoSAdmin':validate_qos(Ch, QoSOKTimout)),
+
+ Q2='CosNotification_QoSAdmin':get_qos(Ch),
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(Ch, QoSBestEffort)),
+ ?match(Q1, 'CosNotification_QoSAdmin':get_qos(Ch)),
+
+ %% Now we add an Admin object. An Admin object cannot switch ConnectionReliability
+ %% to BestEffort without checking with its children or Persistent without
+ %% confirming this with its Parent. At the moment, however, we only have a parent.
+ {CAdm, Id2} = 'CosNotifyChannelAdmin_EventChannel':new_for_consumers(Ch, 'AND_OP'),
+ ?match(Q1,'CosNotification_QoSAdmin':get_qos(CAdm)),
+ ?match({'EXCEPTION',{'CosNotification_UnsupportedQoS',_,_}},
+ 'CosNotification_QoSAdmin':set_qos(CAdm, QoSPersistent)),
+ ?match(Q1, 'CosNotification_QoSAdmin':get_qos(CAdm)),
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(CAdm, QoSBestEffort)),
+ ?match(Q1, 'CosNotification_QoSAdmin':get_qos(CAdm)),
+
+ %% Check if we can extract the Admin from the channel correctly.
+ ?match([0,Id2],'CosNotifyChannelAdmin_EventChannel':get_all_consumeradmins(Ch)),
+ ?match(CAdm,'CosNotifyChannelAdmin_EventChannel':get_consumeradmin(Ch, Id2)),
+ ?match(Ch, 'CosNotifyChannelAdmin_ConsumerAdmin':'_get_MyChannel'(CAdm)),
+ ?match(Id2, 'CosNotifyChannelAdmin_ConsumerAdmin':'_get_MyID'(CAdm)),
+
+ %% Change the channel to provide Persistent service. Now we can set the
+ %% Admin service to Persistent to. (4)
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(Ch, QoSPersistent)),
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(CAdm, QoSPersistent)),
+ ?match(Q2, 'CosNotification_QoSAdmin':get_qos(CAdm)),
+
+ %% Since the Admin object now provide Persistent the Channel cannot switch
+ %% to BestEffort. (1)
+ ?match({'EXCEPTION',{'CosNotification_UnsupportedQoS',_,_}},
+ 'CosNotification_QoSAdmin':set_qos(Ch, QoSBestEffort)),
+ %% Should still match Persistent.
+ ?match(Q2, 'CosNotification_QoSAdmin':get_qos(Ch)),
+ {PSup, _Id3} = 'CosNotifyChannelAdmin_ConsumerAdmin':obtain_notification_push_supplier(CAdm, 'ANY_EVENT'),
+ ?match(Q2, 'CosNotification_QoSAdmin':get_qos(CAdm)),
+ ?match('PUSH_ANY', 'CosNotifyChannelAdmin_ProxyPushConsumer':'_get_MyType'(PSup)),
+ ?match(CAdm, 'CosNotifyChannelAdmin_ProxyPushConsumer':'_get_MyAdmin'(PSup)),
+ ?match(Q2, 'CosNotification_QoSAdmin':get_qos(PSup)),
+
+ %% At this point they all offer persistent connection, which means we have
+ %% to start with the proxy if we want to change to Best Effort. Hence,
+ %% the following two cases will fail.
+ ?match({'EXCEPTION',{'CosNotification_UnsupportedQoS',_,_}},
+ 'CosNotification_QoSAdmin':set_qos(Ch, QoSBestEffort)),
+ ?match({'EXCEPTION',{'CosNotification_UnsupportedQoS',_,_}},
+ 'CosNotification_QoSAdmin':set_qos(CAdm, QoSBestEffort)),
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(PSup, QoSBestEffort)),
+ %% Still not possible to change channel to Best Effort.
+ ?match({'EXCEPTION',{'CosNotification_UnsupportedQoS',_,_}},
+ 'CosNotification_QoSAdmin':set_qos(Ch, QoSBestEffort)),
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(CAdm, QoSBestEffort)),
+ %% Now we change the channel to Best Effort.
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(Ch, QoSBestEffort)),
+
+ %% Test if really are Best Effort
+ ?match(Q1, 'CosNotification_QoSAdmin':get_qos(Ch)),
+ ?match(Q1, 'CosNotification_QoSAdmin':get_qos(CAdm)),
+ ?match(Q1, 'CosNotification_QoSAdmin':get_qos(PSup)),
+
+ %% Testing MaximumBatchSize (The highest value is defined in
+ %% CosNotification_Common.erl
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(Ch, QoSOKMaxBatchSize)),
+ ?match({'EXCEPTION',{'CosNotification_UnsupportedQoS',_,_}},
+ 'CosNotification_QoSAdmin':set_qos(Ch, QoSToHighMaxBatchSize)),
+ ?match({'EXCEPTION',{'CosNotification_UnsupportedQoS',_,_}},
+ 'CosNotification_QoSAdmin':set_qos(Ch, QoSToLowMaxBatchSize)),
+
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(Ch, QoSOKStartTimeSupp)),
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(Ch, QoSOKStopTimeSupp)),
+ ?match({'EXCEPTION',{'CosNotification_UnsupportedQoS',_,_}},
+ 'CosNotification_QoSAdmin':set_qos(Ch, QoSWrongStartTimeSupp)),
+ ?match({'EXCEPTION',{'CosNotification_UnsupportedQoS',_,_}},
+ 'CosNotification_QoSAdmin':set_qos(Ch, QoSWrongStopTimeSupp)),
+
+ catch corba:dispose(CAdm),
+ catch corba:dispose(PSup),
+ catch corba:dispose(Ch),
+ cosNotificationApp:stop_factory(Fac),
+ ok.
+
+%%-----------------------------------------------------------------
+%% QoSAdm API tests
+%%-----------------------------------------------------------------
+event_qos_api(doc) -> ["CosNotification QoSAdmin tests", ""];
+event_qos_api(suite) -> [];
+event_qos_api(_Config) ->
+ Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
+ ?match({_,key,_,_,_,_}, Fac),
+
+ %% Create some objects to test with. We start with default settings.
+ {Ch, _Id1} = (catch 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(Fac, ?defaultQoS, ?defaultAdm)),
+ {CAdm, _Id2} = 'CosNotifyChannelAdmin_EventChannel':new_for_consumers(Ch, 'AND_OP'),
+ {PSup, _Id3} = 'CosNotifyChannelAdmin_ConsumerAdmin':obtain_notification_push_supplier(CAdm, 'ANY_EVENT'),
+
+ %% Try setting an unsupported QoS.
+ ?match({'EXCEPTION',{'CosNotification_UnsupportedQoS',_,_}},
+ 'CosNotifyChannelAdmin_ProxyConsumer':
+ validate_event_qos(PSup,
+ [#'CosNotification_Property'{name="Unsupported QoS",
+ value=any:create(orber_tc:short(), 1)}])),
+ %% Try setting min and max priority.
+ ?match({ok, _}, 'CosNotifyChannelAdmin_ProxyConsumer':
+ validate_event_qos(PSup,
+ [#'CosNotification_Property'{name=?not_Priority,
+ value=any:create(orber_tc:short(),
+ ?not_LowestPriority)},
+ #'CosNotification_Property'{name=?not_Priority,
+ value=any:create(orber_tc:short(),
+ ?not_HighestPriority)}])),
+ %% Try setting priority values which are 1 to high and 1 to low respectively.
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ 'CosNotifyChannelAdmin_ProxyConsumer':
+ validate_event_qos(PSup,
+ [#'CosNotification_Property'{name=?not_Priority,
+ value=any:create(orber_tc:short(),
+ ?not_LowestPriority-1)},
+ #'CosNotification_Property'{name=?not_Priority,
+ value=any:create(orber_tc:short(),
+ ?not_HighestPriority+1)}])),
+ %% Try setting start- and stop-time (false default). Note the value associated
+ %% with this property is not really a short but that is not what we are testing
+ %% here so...
+ ?match({'EXCEPTION',{'CosNotification_UnsupportedQoS',_,_}},
+ 'CosNotifyChannelAdmin_ProxyConsumer':
+ validate_event_qos(PSup,
+ [#'CosNotification_Property'{name=?not_StartTime,
+ value=any:create(orber_tc:short(), 0)}])),
+ ?match({'EXCEPTION',{'CosNotification_UnsupportedQoS',_,_}},
+ 'CosNotifyChannelAdmin_ProxyConsumer':
+ validate_event_qos(PSup,
+ [#'CosNotification_Property'{name=?not_StopTime,
+ value=any:create(orber_tc:short(), 0)}])),
+ %% Allow StopTime
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(PSup, [#'CosNotification_Property'{name='CosNotification':'StopTimeSupported'(),
+ value=any:create(orber_tc:boolean(), true)}])),
+ ?match({ok,_},
+ 'CosNotifyChannelAdmin_ProxyConsumer':
+ validate_event_qos(PSup,
+ [#'CosNotification_Property'{name=?not_StopTime,
+ value=any:create(orber_tc:short(), 0)}])),
+ %% Allow StartTime
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(PSup, [#'CosNotification_Property'{name='CosNotification':'StartTimeSupported'(),
+ value=any:create(orber_tc:boolean(), true)}])),
+ ?match({ok,_},
+ 'CosNotifyChannelAdmin_ProxyConsumer':
+ validate_event_qos(PSup,
+ [#'CosNotification_Property'{name=?not_StopTime,
+ value=any:create(orber_tc:short(), 0)},
+ #'CosNotification_Property'{name=?not_StartTime,
+ value=any:create(orber_tc:short(), 0)}])),
+
+ %% We must reset StopTime since we cannot guarantee that an event will be delivered
+ %% if risk beeing discarded due to a delay.
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(PSup, [#'CosNotification_Property'{name='CosNotification':'StopTimeSupported'(),
+ value=any:create(orber_tc:boolean(), false)}])),
+ %% Does it accept Best Effort EventReliability? Must always be true.
+ ?match({ok,_},
+ 'CosNotifyChannelAdmin_ProxyConsumer':
+ validate_event_qos(PSup,
+ [#'CosNotification_Property'{name=?not_EventReliability,
+ value=any:create(orber_tc:short(), ?not_BestEffort)}])),
+ %% Default is Best Effort; test if we can set Persistent EventReliability.
+ ?match({'EXCEPTION',{'CosNotification_UnsupportedQoS',_,_}},
+ 'CosNotifyChannelAdmin_ProxyConsumer':
+ validate_event_qos(PSup,
+ [#'CosNotification_Property'{name=?not_EventReliability,
+ value=any:create(orber_tc:short(), ?not_Persistent)}])),
+
+ %% Set Persistent
+ QoSPersistent = [#'CosNotification_Property'{name='CosNotification':'ConnectionReliability'(),
+ value=any:create(orber_tc:short(),
+ 'CosNotification':'Persistent'())}],
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(Ch, QoSPersistent)),
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(CAdm, QoSPersistent)),
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(PSup, QoSPersistent)),
+
+ %% Does it accept Best Effort EventReliability? Must always be true.
+ ?match({ok, _},
+ 'CosNotifyChannelAdmin_ProxyConsumer':
+ validate_event_qos(PSup,
+ [#'CosNotification_Property'{name=?not_EventReliability,
+ value=any:create(orber_tc:short(), ?not_BestEffort)}])),
+ %% Test if we can use Persistent EventReliability.
+ ?match({'EXCEPTION',{'CosNotification_UnsupportedQoS',_,_}},
+ 'CosNotifyChannelAdmin_ProxyConsumer':
+ validate_event_qos(PSup,
+ [#'CosNotification_Property'{name=?not_EventReliability,
+ value=any:create(orber_tc:short(), ?not_Persistent)}])),
+ QoSEventPersistent = [#'CosNotification_Property'{name='CosNotification':'EventReliability'(),
+ value=any:create(orber_tc:short(),
+ 'CosNotification':'Persistent'())}],
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(Ch, QoSEventPersistent)),
+ ?match({'EXCEPTION',{'CosNotification_UnsupportedQoS',_,_}},
+ 'CosNotification_QoSAdmin':set_qos(CAdm, QoSEventPersistent)),
+ ?match({'EXCEPTION',{'CosNotification_UnsupportedQoS',_,_}},
+ 'CosNotification_QoSAdmin':set_qos(PSup, QoSEventPersistent)),
+
+ ?match(ok, 'CosNotification_QoSAdmin':set_qos(PSup, [#'CosNotification_Property'{name='CosNotification':'StopTimeSupported'(),
+ value=any:create(orber_tc:boolean(), true)}])),
+ ?match({ok,_},
+ 'CosNotifyChannelAdmin_ProxyConsumer':
+ validate_event_qos(PSup,
+ [#'CosNotification_Property'{name=?not_StopTime,
+ value=any:create(orber_tc:short(), 0)},
+ #'CosNotification_Property'{name=?not_StartTime,
+ value=any:create(orber_tc:short(), 0)}])),
+ catch corba:dispose(CAdm),
+ catch corba:dispose(PSup),
+ catch corba:dispose(Ch),
+ cosNotificationApp:stop_factory(Fac),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Internal functions
+%%-----------------------------------------------------------------
+
+%%-------------------- End of Module ------------------------------
diff --git a/lib/cosNotification/test/notify_test_impl.erl b/lib/cosNotification/test/notify_test_impl.erl
new file mode 100644
index 0000000000..483610befd
--- /dev/null
+++ b/lib/cosNotification/test/notify_test_impl.erl
@@ -0,0 +1,299 @@
+%%
+%% %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%
+%%
+%%
+%%----------------------------------------------------------------------
+%% File : notify_test_impl.erl
+%%----------------------------------------------------------------------
+
+-module(notify_test_impl).
+
+-include_lib("orber/include/corba.hrl").
+-include("idl_output/notify_test.hrl").
+
+%%--------------- specified functions ------------------------
+-export([stop_normal/2,
+ stop_brutal/2,
+ print/2,
+ doAction/3,
+ delay/5,
+ %% Exports from CosNotifyComm::StructuredPushConsumer
+ push_structured_event/3, disconnect_structured_push_consumer/2,
+ %% Exports from "CosNotifyComm::SequencePushConsumer"
+ push_structured_events/3, disconnect_sequence_push_consumer/2,
+ %% Exports from CosEventComm::PushConsumer
+ push/3, disconnect_push_consumer/2,
+ %% Exports from CosNotifyComm::NotifyPublish
+ disconnect_sequence_pull_consumer/2,
+ %% Exports from CosNotifyComm::StructuredPullConsumer
+ disconnect_structured_pull_consumer/2,
+ %% Exports from CosEventComm::PullConsumer
+ disconnect_pull_consumer/2,
+ %% Exports from CosNotifyComm::SequencePushSupplier
+ disconnect_sequence_push_supplier/2,
+ %% Exports from CosNotifyComm::StructuredPushSupplier
+ disconnect_structured_push_supplier/2,
+ %% Exports from CosEventComm::PushSupplier
+ disconnect_push_supplier/2,
+ %% Exports from CosNotifyComm::SequencePullSupplier
+ pull_structured_events/3,
+ try_pull_structured_events/3,
+ disconnect_sequence_pull_supplier/2,
+ %% Exports from CosNotifyComm::StructuredPullSupplier
+ pull_structured_event/2,
+ try_pull_structured_event/2,
+ disconnect_structured_pull_supplier/2,
+ %% Exports from CosEventComm::PullSupplier
+ pull/2,
+ try_pull/2,
+ disconnect_pull_supplier/2,
+ %% Exports from CosNotifyComm::SequencePullConsumer
+ offer_change/4,
+ %% Exports from CosNotifyComm::NotifySubscribe
+ subscription_change/4]).
+
+%%--------------- gen_server specific ------------------------
+-export([init/1, terminate/2]).
+-export([handle_call/3, handle_cast/2, handle_info/2, code_change/3]).
+%% Data structures
+-record(state, {myType, proxy, data, action}).
+
+%%--------------- LOCAL DATA ---------------------------------
+
+%%------------------------------------------------------------
+%% function : init, terminate
+%%------------------------------------------------------------
+init([MyType, Proxy]) ->
+ process_flag(trap_exit,true),
+ {ok, #state{myType=MyType, proxy=Proxy, data=[]}}.
+
+terminate(Reason, State) ->
+ io:format("notify_test:terminate(~p ~p)~n",[Reason, State#state.myType]),
+ ok.
+
+code_change(_OldVsn, State, _Extra) ->
+ {ok, State}.
+handle_call(_,_, State) ->
+ {noreply, State}.
+handle_cast(_, State) ->
+ {noreply, State}.
+handle_info(_Info, State) ->
+ {noreply, State}.
+
+%%--------------- SERVER FUNCTIONS ---------------------------
+
+print(Self, State) ->
+ io:format("notify_test:print(~p ~p)~n",[Self, State]),
+ {reply, ok, State}.
+
+doAction(_Self, State, {set_data, Data}) ->
+ io:format("notify_test:doAction(add_data) ~p~n",[Data]),
+ {reply, ok, State#state{data=Data}};
+doAction(_Self, State, {add_data, Data}) ->
+ io:format("notify_test:doAction(add_data) ~p~n",[Data]),
+ {reply, ok, State#state{data=State#state.data++Data}};
+doAction(_Self, State, return_data) ->
+ io:format("notify_test:doAction(return_data)~n",[]),
+ {reply, State#state.data, State#state{data=[]}};
+doAction(_Self, State, clear_data) ->
+ io:format("notify_test:doAction(return_data)~n",[]),
+ {reply, ok, State#state{data=[]}};
+doAction(_Self, State, pull_any) ->
+ io:format("notify_test:doAction(pull_any)~n",[]),
+ Event='CosNotifyChannelAdmin_ProxyPullSupplier':pull(State#state.proxy),
+ {reply, Event, State};
+doAction(_Self, State, {pull_seq, Max}) ->
+ io:format("notify_test:doAction(pull_sequence)~n",[]),
+ Event='CosNotifyChannelAdmin_SequenceProxyPullSupplier':pull_structured_events(State#state.proxy, Max),
+ {reply, Event, State};
+doAction(_Self, State, pull_str) ->
+ Event='CosNotifyChannelAdmin_StructuredProxyPullSupplier':pull_structured_event(State#state.proxy),
+ io:format("notify_test:doAction(pull_structured)~n",[]),
+ {reply, Event, State};
+doAction(_Self, State, try_pull_any) ->
+ io:format("notify_test:doAction(try_pull_any)~n",[]),
+ Event='CosNotifyChannelAdmin_ProxyPullSupplier':try_pull(State#state.proxy),
+ {reply, Event, State};
+doAction(_Self, State, {try_pull_seq, Max}) ->
+ io:format("notify_test:doAction(try_pull_sequence)~n",[]),
+ Event='CosNotifyChannelAdmin_SequenceProxyPullSupplier':try_pull_structured_events(State#state.proxy, Max),
+ {reply, Event, State};
+doAction(_Self, State, try_pull_str) ->
+ Event='CosNotifyChannelAdmin_StructuredProxyPullSupplier':try_pull_structured_event(State#state.proxy),
+ io:format("notify_test:doAction(try_pull_structured)~n",[]),
+ {reply, Event, State};
+doAction(_Self, State, {action, Action}) ->
+ io:format("notify_test:doAction(~p)~n",[Action]),
+ {reply, ok, State#state{action = Action}};
+
+doAction(_, State, _) ->
+ {reply, nop, State}.
+
+stop_normal(_Self, State) ->
+ {stop, normal, ok, State}.
+
+stop_brutal(_Self, _State) ->
+ exit("killed_brutal").
+
+
+
+%%--------------- CosNotifyComm::NotifyPublish --------
+offer_change(_Self, State, Added, Removed) ->
+ ND=loop(Removed, State#state.data),
+ ND2=Added++ND,
+ {reply, ok, State#state{data=ND2}}.
+
+loop([],Data) ->
+ Data;
+loop([H|T], Data) ->
+ ND=lists:delete(H,Data),
+ loop(T, ND).
+
+%%--------------- CosNotifyComm::NotifySubscribe --------
+subscription_change(_Self, State, Added, Removed) ->
+ ND=loop(Removed, State#state.data),
+ ND2=Added++ND,
+ {reply, ok, State#state{data=ND2}}.
+
+%%--------------- CosNotifyComm::SequencePushConsumer --------
+push_structured_events(_Self, #state{action = undefined} = State, Event) ->
+ io:format("notify_test:push_structured_events(~p)~n",[Event]),
+ {reply, ok, State#state{data=State#state.data++Event}};
+push_structured_events(_Self, #state{action = Action} = State, Event) ->
+ io:format("notify_test:push_structured_events(~p)~nAction: ~p~n",
+ [Event, Action]),
+ corba:raise(#'INTERNAL'{completion_status=?COMPLETED_NO}),
+ {reply, ok, State#state{data=State#state.data++Event}}.
+disconnect_sequence_push_consumer(_Self, State) ->
+ io:format("disconnect_sequence_push_consumer~n",[]),
+ {stop, normal, ok, State}.
+
+%%--------------- CosNotifyComm::StructuredPushConsumer --------
+push_structured_event(_Self, State, Event) ->
+ io:format("notify_test:push_structured_event(~p)~n",[Event]),
+ {reply, ok, State#state{data=State#state.data++[Event]}}.
+disconnect_structured_push_consumer(_Self, State) ->
+ io:format("disconnect_structured_push_consumer~n",[]),
+ {stop, normal, ok, State}.
+
+%%--------------- CosEventComm::PushConsumer --------
+push(_Self, State, Event) ->
+ io:format("notify_test:push(~p)~n",[Event]),
+ {reply, ok, State#state{data=State#state.data++[Event]}}.
+disconnect_push_consumer(_Self, State) ->
+ io:format("disconnect_push_consumer~n",[]),
+ {stop, normal, ok, State}.
+
+%%--------------- CosNotifyComm::SequencePullConsumer --------
+disconnect_sequence_pull_consumer(_Self, State) ->
+ io:format("disconnect_sequence_pull_consumer~n",[]),
+ {stop, normal, ok, State}.
+
+%%--------------- CosNotifyComm::StructuredPullConsumer --------
+disconnect_structured_pull_consumer(_Self, State) ->
+ io:format("disconnect_structured_pull_consumer~n",[]),
+ {stop, normal, ok, State}.
+
+%%--------------- CosEventComm::PullConsumer --------
+disconnect_pull_consumer(_Self, State) ->
+ io:format("disconnect_pull_consumer~n",[]),
+ {stop, normal, ok, State}.
+
+%%--------------- CosNotifyComm::SequencePushSupplier --------
+disconnect_sequence_push_supplier(_Self, State) ->
+ io:format("disconnect_sequence_push_supplier~n",[]),
+ {stop, normal, ok, State}.
+
+%%--------------- CosNotifyComm::StructuredPushSupplier --------
+disconnect_structured_push_supplier(_Self, State) ->
+ io:format("disconnect_structured_push_supplier~n",[]),
+ {stop, normal, ok, State}.
+
+%%--------------- CosEventComm::PushSupplier --------
+disconnect_push_supplier(_Self, State) ->
+ io:format("disconnect_push_supplier~n",[]),
+ {stop, normal, ok, State}.
+
+%%--------------- CosNotifyComm::SequencePullSupplier --------
+pull_structured_events(_Self, State, _Max) ->
+ io:format("notify_test:pullstructured_events()~n",[]),
+ {reply, ok, State}.
+try_pull_structured_events(_Self, State, Max) ->
+ io:format("notify_test:try_pull_structured_events()~n",[]),
+ case State#state.data of
+ [] ->
+ {reply, {[],false}, State};
+ List ->
+ R = split(List,Max),
+ {reply, {lists:sublist(List, Max), true}, State#state{data=R}}
+ end.
+
+split([],_) ->
+ [];
+split(R,0) ->
+ R;
+split([_H|T],Max) ->
+ split(T, Max-1).
+
+disconnect_sequence_pull_supplier(_Self, State) ->
+ io:format("disconnect_sequence_pull_supplier~n",[]),
+ {stop, normal, ok, State}.
+
+%%--------------- CosNotifyComm::StructuredPullSupplier --------
+pull_structured_event(_Self, State) ->
+ io:format("notify_test:pull_structured_event()~n",[]),
+ {reply, ok, State}.
+try_pull_structured_event(_Self, State) ->
+ io:format("notify_test:try_pull_structured_event()~n",[]),
+ case State#state.data of
+ [] ->
+ {reply, {[],false}, State};
+ [H|T] ->
+ {reply, {H, true}, State#state{data=T}}
+ end.
+disconnect_structured_pull_supplier(_Self, State) ->
+ io:format("disconnect_structured_pull_supplier~n",[]),
+ {stop, normal, ok, State}.
+
+%%--------------- CosEventComm::PullSupplier --------
+pull(_Self, State) ->
+ io:format("notify_test:pull()~n",[]),
+ {reply, 'CosEventComm_PullSupplier':pull(State#state.proxy), State}.
+try_pull(_Self, State) ->
+ io:format("notify_test:try_pull()~n",[]),
+ case State#state.data of
+ [] ->
+ {reply, {[],false}, State};
+ [H|T] ->
+ {reply, {H, true}, State#state{data=T}}
+ end.
+disconnect_pull_supplier(_Self, State) ->
+ io:format("disconnect_pull_supplier~n",[]),
+ {stop, normal, ok, State}.
+
+%%--------------- LOCAL FUNCTIONS ----------------------------
+
+delay(Obj, Event, Time, Mod, F) ->
+ io:format("notify_test:delay(~p) TIME: ~p~n",[Event, now()]),
+ timer:sleep(Time),
+ Mod:F(Obj, Event),
+ io:format("notify_test:delay() DONE: ~p~n",[now()]),
+ ok.
+
+%%--------------- END OF MODULE ------------------------------
+
diff --git a/lib/cosNotification/test/notify_test_server.cfg b/lib/cosNotification/test/notify_test_server.cfg
new file mode 100644
index 0000000000..8621327b57
--- /dev/null
+++ b/lib/cosNotification/test/notify_test_server.cfg
@@ -0,0 +1,54 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1999-2010. 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%
+%%
+{this, "notify_test::SeqPushC"}.
+{{handle_info, "notify_test::SeqPushC"}, true}.
+{{impl, "notify_test::SeqPushC"}, "notify_test_impl"}.
+{this, "notify_test::StrPushC"}.
+{{handle_info, "notify_test::StrPushC"}, true}.
+{{impl, "notify_test::StrPushC"}, "notify_test_impl"}.
+{this, "notify_test::AnyPushC"}.
+{{handle_info, "notify_test::AnyPushC"}, true}.
+{{impl, "notify_test::AnyPushC"}, "notify_test_impl"}.
+{this, "notify_test::SeqPullC"}.
+{{handle_info, "notify_test::SeqPullC"}, true}.
+{{impl, "notify_test::SeqPullC"}, "notify_test_impl"}.
+{this, "notify_test::StrPullC"}.
+{{handle_info, "notify_test::StrPullC"}, true}.
+{{impl, "notify_test::StrPullC"}, "notify_test_impl"}.
+{this, "notify_test::AnyPullC"}.
+{{handle_info, "notify_test::AnyPullC"}, true}.
+{{impl, "notify_test::AnyPullC"}, "notify_test_impl"}.
+{this, "notify_test::SeqPushS"}.
+{{handle_info, "notify_test::SeqPushS"}, true}.
+{{impl, "notify_test::SeqPushS"}, "notify_test_impl"}.
+{this, "notify_test::StrPushS"}.
+{{handle_info, "notify_test::StrPushS"}, true}.
+{{impl, "notify_test::StrPushS"}, "notify_test_impl"}.
+{this, "notify_test::AnyPushS"}.
+{{handle_info, "notify_test::AnyPushS"}, true}.
+{{impl, "notify_test::AnyPushS"}, "notify_test_impl"}.
+{this, "notify_test::SeqPullS"}.
+{{handle_info, "notify_test::SeqPullS"}, true}.
+{{impl, "notify_test::SeqPullS"}, "notify_test_impl"}.
+{this, "notify_test::StrPullS"}.
+{{handle_info, "notify_test::StrPullS"}, true}.
+{{impl, "notify_test::StrPullS"}, "notify_test_impl"}.
+{this, "notify_test::AnyPullS"}.
+{{handle_info, "notify_test::AnyPullS"}, true}.
+{{impl, "notify_test::AnyPullS"}, "notify_test_impl"}.
diff --git a/lib/cosNotification/test/notify_test_server.idl b/lib/cosNotification/test/notify_test_server.idl
new file mode 100644
index 0000000000..4dc0202890
--- /dev/null
+++ b/lib/cosNotification/test/notify_test_server.idl
@@ -0,0 +1,113 @@
+//
+// %CopyrightBegin%
+//
+// Copyright Ericsson AB 1999-2010. 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%
+//
+
+#ifndef _NOTIFY_TEST_SERVER_IDL
+#define _NOTIFY_TEST_SERVER_IDL
+
+#include <CosNotification.idl>
+#include <CosNotifyComm.idl>
+
+module notify_test {
+
+ enum action {PULL_SEQ, PULL_STR, PULL_ANY, PUSH_SEQ, PUSH_STR, PUSH_ANY};
+
+ struct data {
+ short score;
+ string name;
+ };
+
+ struct computer {
+ float memsize;
+ float cputime;
+ float filesize;
+ };
+
+ struct X {
+ long A;
+ string B;
+ short C;
+ };
+
+
+ union K switch(short) {
+ case -1: short neg;
+ case 0:
+ case 2: string K;
+ case 3: X L;
+ case 5: long M;
+ default: short N;
+ };
+
+ union uni1 switch(long) {
+ case 1:
+ case 2: long lo;
+ case 3: short sh;
+ default: short defvalue;
+ };
+
+ union uni2 switch(long) {
+ case 1:
+ case 2: long lo;
+ case 3: short sh;
+ };
+
+ typedef any namedAny;
+ typedef short ShortArray[4];
+ struct studies {
+ uni1 uni1;
+ CosNotification::PropertySeq tests;
+ ShortArray monthly_attendance;
+ short gpa;
+ };
+
+ interface funcs {
+ void print();
+ void doAction(in action Act);
+ };
+
+ // interface server
+ interface SeqPushC : funcs, CosNotifyComm::SequencePushConsumer {
+ };
+ interface StrPushC : funcs, CosNotifyComm::StructuredPushConsumer {
+ };
+ interface AnyPushC : funcs, CosEventComm::PushConsumer {
+ };
+ interface SeqPullC : funcs, CosNotifyComm::SequencePullConsumer {
+ };
+ interface StrPullC : funcs, CosNotifyComm::StructuredPullConsumer {
+ };
+ interface AnyPullC : funcs, CosEventComm::PullConsumer {
+ };
+
+ interface SeqPushS : funcs, CosNotifyComm::SequencePushSupplier {
+ };
+ interface StrPushS : funcs, CosNotifyComm::StructuredPushSupplier {
+ };
+ interface AnyPushS : funcs, CosEventComm::PushSupplier {
+ };
+ interface SeqPullS : funcs, CosNotifyComm::SequencePullSupplier {
+ };
+ interface StrPullS : funcs, CosNotifyComm::StructuredPullSupplier {
+ };
+ interface AnyPullS : funcs, CosEventComm::PullSupplier {
+ };
+
+};
+
+#endif
diff --git a/lib/cosNotification/vsn.mk b/lib/cosNotification/vsn.mk
index f4196a2f33..a19facffd5 100644
--- a/lib/cosNotification/vsn.mk
+++ b/lib/cosNotification/vsn.mk
@@ -1,6 +1,7 @@
COSNOTIFICATION_VSN = 1.1.14
-TICKETS = OTP-8489
+TICKETS = OTP-8489 \
+ OTP-8543
TICKETS_1.1.13 = OTP-8353 \
OTP-8354 \
diff --git a/lib/cosProperty/doc/src/notes.xml b/lib/cosProperty/doc/src/notes.xml
index e80c90849f..11e6205ee9 100644
--- a/lib/cosProperty/doc/src/notes.xml
+++ b/lib/cosProperty/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2009</year>
+ <year>2000</year><year>2010</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -13,12 +13,12 @@
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.
-
+
</legalnotice>
<title>cosProperty Release Notes</title>
@@ -32,6 +32,22 @@
</header>
<section>
+ <title>cosProperty 1.1.12</title>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>
+ Test suites published.</p>
+ <p>
+ Own Id: OTP-8543 Aux Id:</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
<title>cosProperty 1.1.11</title>
<section>
diff --git a/lib/cosProperty/test/Makefile b/lib/cosProperty/test/Makefile
new file mode 100644
index 0000000000..ac0f4e298d
--- /dev/null
+++ b/lib/cosProperty/test/Makefile
@@ -0,0 +1,129 @@
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 2000-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%
+#
+#
+include $(ERL_TOP)/make/target.mk
+include $(ERL_TOP)/make/$(TARGET)/otp.mk
+
+# ----------------------------------------------------
+# Application version
+# ----------------------------------------------------
+include ../vsn.mk
+VSN=$(COSPROPERTY_VSN)
+# ----------------------------------------------------
+# Release directory specification
+# ----------------------------------------------------
+RELSYSDIR = $(RELEASE_PATH)/cosProperty_test
+
+# ----------------------------------------------------
+# Target Specs
+# ----------------------------------------------------
+TEST_SPEC_FILE = cosProperty.spec
+
+
+IDL_FILES =
+
+IDLOUTDIR = idl_output
+
+MODULES = \
+ property_SUITE \
+ generated_SUITE
+
+GEN_MODULES = \
+
+GEN_HRL_FILES = \
+
+ERL_FILES = $(MODULES:%=%.erl)
+
+HRL_FILES =
+
+GEN_FILES = \
+ $(GEN_HRL_FILES:%=$(IDLOUTDIR)/%) \
+ $(GEN_MODULES:%=$(IDLOUTDIR)/%.erl)
+
+GEN_TARGET_FILES = $(GEN_MODULES:%=$(IDLOUTDIR)/%.$(EMULATOR))
+
+SUITE_TARGET_FILES = $(MODULES:%=%.$(EMULATOR))
+
+TARGET_FILES = \
+ $(GEN_TARGET_FILES) \
+ $(SUITE_TARGET_FILES)
+
+
+# ----------------------------------------------------
+# PROGRAMS
+# ----------------------------------------------------
+LOCAL_CLASSPATH = $(ERL_TOP)lib/cosProperty/priv:$(ERL_TOP)lib/cosProperty/test
+# ----------------------------------------------------
+# FLAGS
+# ----------------------------------------------------
+ERL_IDL_FLAGS += -pa $(ERL_TOP)/lib/cosProperty/ebin \
+ -pa $(ERL_TOP)/lib/cosProperty/src \
+ -pa $(ERL_TOP)/lib/orber/ebin \
+ -pa $(ERL_TOP)/lib/ic/ebin
+
+ERL_COMPILE_FLAGS += \
+ $(ERL_IDL_FLAGS) \
+ -pa $(ERL_TOP)/lib/orber/include \
+ -pa $(ERL_TOP)/internal_tools/test_server/ebin \
+ -pa $(ERL_TOP)/lib/cosProperty/ebin \
+ -pa $(ERL_TOP)/lib/cosProperty/test/idl_output \
+ -I$(ERL_TOP)/lib/orber/include \
+ -I$(ERL_TOP)/lib/cosProperty/src \
+ -I$(ERL_TOP)/lib/cosProperty \
+ -I$(ERL_TOP)/lib/cosProperty/test/$(IDLOUTDIR) \
+ -I$(ERL_TOP)/lib/test_server/include
+
+# ----------------------------------------------------
+# Targets
+# ----------------------------------------------------
+
+
+tests debug opt: $(TARGET_FILES)
+
+clean:
+ rm -f idl_output/*
+ rm -f $(TARGET_FILES)
+ rm -f errs core *~
+
+docs:
+
+# ----------------------------------------------------
+# Special Targets
+# ----------------------------------------------------
+
+# ----------------------------------------------------
+# Release Targets
+# ----------------------------------------------------
+# We don't copy generated intermediate erlang and hrl files
+
+include $(ERL_TOP)/make/otp_release_targets.mk
+
+release_spec:
+
+release_docs_spec:
+
+release_tests_spec: tests
+ $(INSTALL_DIR) $(RELSYSDIR)
+ $(INSTALL_DATA) $(IDL_FILES) $(TEST_SPEC_FILE) \
+ $(ERL_FILES) $(RELSYSDIR)
+ $(INSTALL_DATA) $(SUITE_TARGET_FILES) $(RELSYSDIR)
+# $(INSTALL_DIR) $(RELSYSDIR)/$(IDLOUTDIR)
+# $(INSTALL_DATA) $(GEN_TARGET_FILES) $(GEN_FILES) \
+# $(RELSYSDIR)/$(IDLOUTDIR)
+
diff --git a/lib/cosProperty/test/cosProperty.spec b/lib/cosProperty/test/cosProperty.spec
new file mode 100644
index 0000000000..d3e0001eef
--- /dev/null
+++ b/lib/cosProperty/test/cosProperty.spec
@@ -0,0 +1,20 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2000-2010. 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%
+%%
+{topcase, {dir, "../cosProperty_test"}}.
+
diff --git a/lib/cosProperty/test/generated_SUITE.erl b/lib/cosProperty/test/generated_SUITE.erl
new file mode 100644
index 0000000000..80a7953949
--- /dev/null
+++ b/lib/cosProperty/test/generated_SUITE.erl
@@ -0,0 +1,571 @@
+%%-----------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2004-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%
+%%
+%%
+%%-----------------------------------------------------------------
+%% File : generated_SUITE.erl
+%% Purpose :
+%%-----------------------------------------------------------------
+
+-module(generated_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/include/corba.hrl").
+
+-define(default_timeout, ?t:minutes(3)).
+
+-define(match(ExpectedRes, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+-define(nomatch(Not, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ Not ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS);
+ _ ->
+ AcTuAlReS
+ end
+ end()).
+
+
+-define(checktc(_Op),
+ fun(TC) ->
+ case orber_tc:check_tc(TC) of
+ false ->
+ io:format("###### ERROR ERROR ######~n~p - ~p~n", [Op, TC]),
+ ?line exit(TC);
+ true ->
+ true
+ end
+ end).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-export([]).
+-compile(export_all).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["This suite is for testing IC generated files"];
+all(suite) ->
+ ['CosPropertyService_ConflictingProperty', 'CosPropertyService_ConstraintNotSupported',
+ 'CosPropertyService_FixedProperty', 'CosPropertyService_InvalidPropertyName',
+ 'CosPropertyService_MultipleExceptions', 'CosPropertyService_Properties',
+ 'CosPropertyService_Property', 'CosPropertyService_PropertyDef',
+ 'CosPropertyService_PropertyDefs', 'CosPropertyService_PropertyException',
+ 'CosPropertyService_PropertyExceptions', 'CosPropertyService_PropertyMode',
+ 'CosPropertyService_PropertyModes', 'CosPropertyService_PropertyNames',
+ 'CosPropertyService_PropertyNotFound', 'CosPropertyService_PropertyTypes',
+ 'CosPropertyService_ReadOnlyProperty', 'CosPropertyService_UnsupportedMode',
+ 'CosPropertyService_UnsupportedProperty', 'CosPropertyService_UnsupportedTypeCode',
+ 'CosPropertyService_PropertyNamesIterator', 'CosPropertyService_PropertiesIterator',
+ 'CosPropertyService_PropertySet', 'CosPropertyService_PropertySetDef',
+ 'CosPropertyService_PropertySetDefFactory', 'CosPropertyService_PropertySetFactory'].
+
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_ConflictingProperty'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_ConflictingProperty'(doc) -> ["CosPropertyService_ConflictingProperty"];
+'CosPropertyService_ConflictingProperty'(suite) -> [];
+'CosPropertyService_ConflictingProperty'(_) ->
+ ?match(true, orber_tc:check_tc('CosPropertyService_ConflictingProperty':tc())),
+ ?match("IDL:omg.org/CosPropertyService/ConflictingProperty:1.0",
+ 'CosPropertyService_ConflictingProperty':id()),
+ ?match("CosPropertyService_ConflictingProperty",
+ 'CosPropertyService_ConflictingProperty':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_ConstraintNotSupported'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_ConstraintNotSupported'(doc) -> ["CosPropertyService_ConstraintNotSupported"];
+'CosPropertyService_ConstraintNotSupported'(suite) -> [];
+'CosPropertyService_ConstraintNotSupported'(_) ->
+ ?match(true, orber_tc:check_tc('CosPropertyService_ConstraintNotSupported':tc())),
+ ?match("IDL:omg.org/CosPropertyService/ConstraintNotSupported:1.0",
+ 'CosPropertyService_ConstraintNotSupported':id()),
+ ?match("CosPropertyService_ConstraintNotSupported",
+ 'CosPropertyService_ConstraintNotSupported':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_FixedProperty'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_FixedProperty'(doc) -> ["CosPropertyService_FixedProperty"];
+'CosPropertyService_FixedProperty'(suite) -> [];
+'CosPropertyService_FixedProperty'(_) ->
+ ?match(true, orber_tc:check_tc('CosPropertyService_FixedProperty':tc())),
+ ?match("IDL:omg.org/CosPropertyService/FixedProperty:1.0",
+ 'CosPropertyService_FixedProperty':id()),
+ ?match("CosPropertyService_FixedProperty",
+ 'CosPropertyService_FixedProperty':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_InvalidPropertyName'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_InvalidPropertyName'(doc) -> ["CosPropertyService_InvalidPropertyName"];
+'CosPropertyService_InvalidPropertyName'(suite) -> [];
+'CosPropertyService_InvalidPropertyName'(_) ->
+ ?match(true, orber_tc:check_tc('CosPropertyService_InvalidPropertyName':tc())),
+ ?match("IDL:omg.org/CosPropertyService/InvalidPropertyName:1.0",
+ 'CosPropertyService_InvalidPropertyName':id()),
+ ?match("CosPropertyService_InvalidPropertyName",
+ 'CosPropertyService_InvalidPropertyName':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_MultipleExceptions'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_MultipleExceptions'(doc) -> ["CosPropertyService_MultipleExceptions"];
+'CosPropertyService_MultipleExceptions'(suite) -> [];
+'CosPropertyService_MultipleExceptions'(_) ->
+ ?match(true, orber_tc:check_tc('CosPropertyService_MultipleExceptions':tc())),
+ ?match("IDL:omg.org/CosPropertyService/MultipleExceptions:1.0",
+ 'CosPropertyService_MultipleExceptions':id()),
+ ?match("CosPropertyService_MultipleExceptions",
+ 'CosPropertyService_MultipleExceptions':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_Properties'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_Properties'(doc) -> ["CosPropertyService_Properties"];
+'CosPropertyService_Properties'(suite) -> [];
+'CosPropertyService_Properties'(_) ->
+ ?match(true, orber_tc:check_tc('CosPropertyService_Properties':tc())),
+ ?match("IDL:omg.org/CosPropertyService/Properties:1.0",
+ 'CosPropertyService_Properties':id()),
+ ?match("CosPropertyService_Properties",
+ 'CosPropertyService_Properties':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_Property'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_Property'(doc) -> ["CosPropertyService_Property"];
+'CosPropertyService_Property'(suite) -> [];
+'CosPropertyService_Property'(_) ->
+ ?match(true, orber_tc:check_tc('CosPropertyService_Property':tc())),
+ ?match("IDL:omg.org/CosPropertyService/Property:1.0",
+ 'CosPropertyService_Property':id()),
+ ?match("CosPropertyService_Property",
+ 'CosPropertyService_Property':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_PropertyDef'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_PropertyDef'(doc) -> ["CosPropertyService_PropertyDef"];
+'CosPropertyService_PropertyDef'(suite) -> [];
+'CosPropertyService_PropertyDef'(_) ->
+ ?match(true, orber_tc:check_tc('CosPropertyService_PropertyDef':tc())),
+ ?match("IDL:omg.org/CosPropertyService/PropertyDef:1.0",
+ 'CosPropertyService_PropertyDef':id()),
+ ?match("CosPropertyService_PropertyDef",
+ 'CosPropertyService_PropertyDef':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_PropertyDefs'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_PropertyDefs'(doc) -> ["CosPropertyService_PropertyDefs"];
+'CosPropertyService_PropertyDefs'(suite) -> [];
+'CosPropertyService_PropertyDefs'(_) ->
+ ?match(true, orber_tc:check_tc('CosPropertyService_PropertyDefs':tc())),
+ ?match("IDL:omg.org/CosPropertyService/PropertyDefs:1.0",
+ 'CosPropertyService_PropertyDefs':id()),
+ ?match("CosPropertyService_PropertyDefs",
+ 'CosPropertyService_PropertyDefs':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_PropertyException'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_PropertyException'(doc) -> ["CosPropertyService_PropertyException"];
+'CosPropertyService_PropertyException'(suite) -> [];
+'CosPropertyService_PropertyException'(_) ->
+ ?match(true, orber_tc:check_tc('CosPropertyService_PropertyException':tc())),
+ ?match("IDL:omg.org/CosPropertyService/PropertyException:1.0",
+ 'CosPropertyService_PropertyException':id()),
+ ?match("CosPropertyService_PropertyException",
+ 'CosPropertyService_PropertyException':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_PropertyExceptions'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_PropertyExceptions'(doc) -> ["CosPropertyService_PropertyExceptions"];
+'CosPropertyService_PropertyExceptions'(suite) -> [];
+'CosPropertyService_PropertyExceptions'(_) ->
+ ?match(true, orber_tc:check_tc('CosPropertyService_PropertyExceptions':tc())),
+ ?match("IDL:omg.org/CosPropertyService/PropertyExceptions:1.0",
+ 'CosPropertyService_PropertyExceptions':id()),
+ ?match("CosPropertyService_PropertyExceptions",
+ 'CosPropertyService_PropertyExceptions':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_PropertyMode'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_PropertyMode'(doc) -> ["CosPropertyService_PropertyMode"];
+'CosPropertyService_PropertyMode'(suite) -> [];
+'CosPropertyService_PropertyMode'(_) ->
+ ?match(true, orber_tc:check_tc('CosPropertyService_PropertyMode':tc())),
+ ?match("IDL:omg.org/CosPropertyService/PropertyMode:1.0",
+ 'CosPropertyService_PropertyMode':id()),
+ ?match("CosPropertyService_PropertyMode",
+ 'CosPropertyService_PropertyMode':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_PropertyModes'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_PropertyModes'(doc) -> ["CosPropertyService_PropertyModes"];
+'CosPropertyService_PropertyModes'(suite) -> [];
+'CosPropertyService_PropertyModes'(_) ->
+ ?match(true, orber_tc:check_tc('CosPropertyService_PropertyModes':tc())),
+ ?match("IDL:omg.org/CosPropertyService/PropertyModes:1.0",
+ 'CosPropertyService_PropertyModes':id()),
+ ?match("CosPropertyService_PropertyModes",
+ 'CosPropertyService_PropertyModes':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_PropertyNames'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_PropertyNames'(doc) -> ["CosPropertyService_PropertyNames"];
+'CosPropertyService_PropertyNames'(suite) -> [];
+'CosPropertyService_PropertyNames'(_) ->
+ ?match(true, orber_tc:check_tc('CosPropertyService_PropertyNames':tc())),
+ ?match("IDL:omg.org/CosPropertyService/PropertyNames:1.0",
+ 'CosPropertyService_PropertyNames':id()),
+ ?match("CosPropertyService_PropertyNames",
+ 'CosPropertyService_PropertyNames':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_PropertyNotFound'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_PropertyNotFound'(doc) -> ["CosPropertyService_PropertyNotFound"];
+'CosPropertyService_PropertyNotFound'(suite) -> [];
+'CosPropertyService_PropertyNotFound'(_) ->
+ ?match(true, orber_tc:check_tc('CosPropertyService_PropertyNotFound':tc())),
+ ?match("IDL:omg.org/CosPropertyService/PropertyNotFound:1.0",
+ 'CosPropertyService_PropertyNotFound':id()),
+ ?match("CosPropertyService_PropertyNotFound",
+ 'CosPropertyService_PropertyNotFound':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_PropertyTypes'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_PropertyTypes'(doc) -> ["CosPropertyService_PropertyTypes"];
+'CosPropertyService_PropertyTypes'(suite) -> [];
+'CosPropertyService_PropertyTypes'(_) ->
+ ?match(true, orber_tc:check_tc('CosPropertyService_PropertyTypes':tc())),
+ ?match("IDL:omg.org/CosPropertyService/PropertyTypes:1.0",
+ 'CosPropertyService_PropertyTypes':id()),
+ ?match("CosPropertyService_PropertyTypes",
+ 'CosPropertyService_PropertyTypes':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_ReadOnlyProperty'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_ReadOnlyProperty'(doc) -> ["CosPropertyService_ReadOnlyProperty"];
+'CosPropertyService_ReadOnlyProperty'(suite) -> [];
+'CosPropertyService_ReadOnlyProperty'(_) ->
+ ?match(true, orber_tc:check_tc('CosPropertyService_ReadOnlyProperty':tc())),
+ ?match("IDL:omg.org/CosPropertyService/ReadOnlyProperty:1.0",
+ 'CosPropertyService_ReadOnlyProperty':id()),
+ ?match("CosPropertyService_ReadOnlyProperty",
+ 'CosPropertyService_ReadOnlyProperty':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_UnsupportedMode'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_UnsupportedMode'(doc) -> ["CosPropertyService_UnsupportedMode"];
+'CosPropertyService_UnsupportedMode'(suite) -> [];
+'CosPropertyService_UnsupportedMode'(_) ->
+ ?match(true, orber_tc:check_tc('CosPropertyService_UnsupportedMode':tc())),
+ ?match("IDL:omg.org/CosPropertyService/UnsupportedMode:1.0",
+ 'CosPropertyService_UnsupportedMode':id()),
+ ?match("CosPropertyService_UnsupportedMode",
+ 'CosPropertyService_UnsupportedMode':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_UnsupportedProperty'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_UnsupportedProperty'(doc) -> ["CosPropertyService_UnsupportedProperty"];
+'CosPropertyService_UnsupportedProperty'(suite) -> [];
+'CosPropertyService_UnsupportedProperty'(_) ->
+ ?match(true, orber_tc:check_tc('CosPropertyService_UnsupportedProperty':tc())),
+ ?match("IDL:omg.org/CosPropertyService/UnsupportedProperty:1.0",
+ 'CosPropertyService_UnsupportedProperty':id()),
+ ?match("CosPropertyService_UnsupportedProperty",
+ 'CosPropertyService_UnsupportedProperty':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_UnsupportedTypeCode'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_UnsupportedTypeCode'(doc) -> ["CosPropertyService_UnsupportedTypeCode"];
+'CosPropertyService_UnsupportedTypeCode'(suite) -> [];
+'CosPropertyService_UnsupportedTypeCode'(_) ->
+ ?match(true, orber_tc:check_tc('CosPropertyService_UnsupportedTypeCode':tc())),
+ ?match("IDL:omg.org/CosPropertyService/UnsupportedTypeCode:1.0",
+ 'CosPropertyService_UnsupportedTypeCode':id()),
+ ?match("CosPropertyService_UnsupportedTypeCode",
+ 'CosPropertyService_UnsupportedTypeCode':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_PropertyNamesIterator'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_PropertyNamesIterator'(doc) -> ["CosPropertyService_PropertyNamesIterator"];
+'CosPropertyService_PropertyNamesIterator'(suite) -> [];
+'CosPropertyService_PropertyNamesIterator'(_) ->
+ ?nomatch(undefined, 'CosPropertyService_PropertyNamesIterator':oe_tc(reset)),
+ ?nomatch(undefined, 'CosPropertyService_PropertyNamesIterator':oe_tc(next_one)),
+ ?nomatch(undefined, 'CosPropertyService_PropertyNamesIterator':oe_tc(next_n)),
+ ?nomatch(undefined, 'CosPropertyService_PropertyNamesIterator':oe_tc(destroy)),
+ ?match(undefined, 'CosPropertyService_PropertyNamesIterator':oe_tc(undefined)),
+ ?match([_|_], 'CosPropertyService_PropertyNamesIterator':oe_get_interface()),
+ ?match("IDL:omg.org/CosPropertyService/PropertyNamesIterator:1.0",
+ 'CosPropertyService_PropertyNamesIterator':typeID()),
+ check_tc('CosPropertyService_PropertyNamesIterator':oe_get_interface()),
+ ?match(true, 'CosPropertyService_PropertyNamesIterator':oe_is_a('CosPropertyService_PropertyNamesIterator':typeID())),
+ ?match(false, 'CosPropertyService_PropertyNamesIterator':oe_is_a("wrong")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_PropertiesIterator'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_PropertiesIterator'(doc) -> ["CosPropertyService_PropertiesIterator"];
+'CosPropertyService_PropertiesIterator'(suite) -> [];
+'CosPropertyService_PropertiesIterator'(_) ->
+ ?nomatch(undefined, 'CosPropertyService_PropertiesIterator':oe_tc(reset)),
+ ?nomatch(undefined, 'CosPropertyService_PropertiesIterator':oe_tc(next_one)),
+ ?nomatch(undefined, 'CosPropertyService_PropertiesIterator':oe_tc(next_n)),
+ ?nomatch(undefined, 'CosPropertyService_PropertiesIterator':oe_tc(destroy)),
+ ?match(undefined, 'CosPropertyService_PropertiesIterator':oe_tc(undefined)),
+ ?match([_|_], 'CosPropertyService_PropertiesIterator':oe_get_interface()),
+ ?match("IDL:omg.org/CosPropertyService/PropertiesIterator:1.0",
+ 'CosPropertyService_PropertiesIterator':typeID()),
+ check_tc('CosPropertyService_PropertiesIterator':oe_get_interface()),
+ ?match(true, 'CosPropertyService_PropertiesIterator':oe_is_a('CosPropertyService_PropertiesIterator':typeID())),
+ ?match(false, 'CosPropertyService_PropertiesIterator':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_PropertySet'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_PropertySet'(doc) -> ["CosPropertyService_PropertySet"];
+'CosPropertyService_PropertySet'(suite) -> [];
+'CosPropertyService_PropertySet'(_) ->
+ ?nomatch(undefined, 'CosPropertyService_PropertySet':oe_tc(define_property)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySet':oe_tc(define_properties)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySet':oe_tc(get_number_of_properties)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySet':oe_tc(get_all_property_names)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySet':oe_tc(get_property_value)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySet':oe_tc(get_properties)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySet':oe_tc(get_all_properties)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySet':oe_tc(delete_property)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySet':oe_tc(delete_properties)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySet':oe_tc(delete_all_properties)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySet':oe_tc(is_property_defined)),
+ ?match(undefined, 'CosPropertyService_PropertySet':oe_tc(undefined)),
+ ?match([_|_], 'CosPropertyService_PropertySet':oe_get_interface()),
+ ?match("IDL:omg.org/CosPropertyService/PropertySet:1.0",
+ 'CosPropertyService_PropertySet':typeID()),
+ check_tc('CosPropertyService_PropertySet':oe_get_interface()),
+ ?match(true, 'CosPropertyService_PropertySet':oe_is_a('CosPropertyService_PropertySet':typeID())),
+ ?match(false, 'CosPropertyService_PropertySet':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_PropertySetDef'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_PropertySetDef'(doc) -> ["CosPropertyService_PropertySetDef"];
+'CosPropertyService_PropertySetDef'(suite) -> [];
+'CosPropertyService_PropertySetDef'(_) ->
+ ?nomatch(undefined, 'CosPropertyService_PropertySetDef':oe_tc(get_allowed_property_types)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySetDef':oe_tc(get_allowed_properties)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySetDef':oe_tc(define_property_with_mode)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySetDef':oe_tc(define_properties_with_modes)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySetDef':oe_tc(get_property_mode)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySetDef':oe_tc(get_property_modes)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySetDef':oe_tc(set_property_mode)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySetDef':oe_tc(set_property_modes)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySetDef':oe_tc(define_property)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySetDef':oe_tc(define_properties)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySetDef':oe_tc(get_number_of_properties)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySetDef':oe_tc(get_all_property_names)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySetDef':oe_tc(get_property_value)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySetDef':oe_tc(get_properties)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySetDef':oe_tc(get_all_properties)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySetDef':oe_tc(delete_property)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySetDef':oe_tc(delete_properties)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySetDef':oe_tc(delete_all_properties)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySetDef':oe_tc(is_property_defined)),
+ ?match(undefined, 'CosPropertyService_PropertySetDef':oe_tc(undefined)),
+ ?match([_|_], 'CosPropertyService_PropertySetDef':oe_get_interface()),
+ ?match("IDL:omg.org/CosPropertyService/PropertySetDef:1.0",
+ 'CosPropertyService_PropertySetDef':typeID()),
+ check_tc('CosPropertyService_PropertySetDef':oe_get_interface()),
+ ?match(true, 'CosPropertyService_PropertySetDef':oe_is_a('CosPropertyService_PropertySetDef':typeID())),
+ ?match(true, 'CosPropertyService_PropertySetDef':oe_is_a('CosPropertyService_PropertySet':typeID())),
+ ?match(false, 'CosPropertyService_PropertySetDef':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_PropertySetDefFactory'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_PropertySetDefFactory'(doc) -> ["CosPropertyService_PropertySetDefFactory"];
+'CosPropertyService_PropertySetDefFactory'(suite) -> [];
+'CosPropertyService_PropertySetDefFactory'(_) ->
+ ?nomatch(undefined, 'CosPropertyService_PropertySetDefFactory':oe_tc(create_propertysetdef)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySetDefFactory':oe_tc(create_constrained_propertysetdef)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySetDefFactory':oe_tc(create_initial_propertysetdef)),
+ ?match(undefined, 'CosPropertyService_PropertySetDefFactory':oe_tc(undefined)),
+ ?match([_|_], 'CosPropertyService_PropertySetDefFactory':oe_get_interface()),
+ ?match("IDL:omg.org/CosPropertyService/PropertySetDefFactory:1.0",
+ 'CosPropertyService_PropertySetDefFactory':typeID()),
+ check_tc('CosPropertyService_PropertySetDefFactory':oe_get_interface()),
+ ?match(true, 'CosPropertyService_PropertySetDefFactory':oe_is_a('CosPropertyService_PropertySetDefFactory':typeID())),
+ ?match(false, 'CosPropertyService_PropertySetDefFactory':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosPropertyService_PropertySetFactory'
+%% Description:
+%%-----------------------------------------------------------------
+'CosPropertyService_PropertySetFactory'(doc) -> ["CosPropertyService_PropertySetFactory"];
+'CosPropertyService_PropertySetFactory'(suite) -> [];
+'CosPropertyService_PropertySetFactory'(_) ->
+ ?nomatch(undefined, 'CosPropertyService_PropertySetFactory':oe_tc(create_propertyset)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySetFactory':oe_tc(create_constrained_propertyset)),
+ ?nomatch(undefined, 'CosPropertyService_PropertySetFactory':oe_tc(create_initial_propertyset)),
+ ?match(undefined, 'CosPropertyService_PropertySetFactory':oe_tc(undefined)),
+ ?match([_|_], 'CosPropertyService_PropertySetFactory':oe_get_interface()),
+ ?match("IDL:omg.org/CosPropertyService/PropertySetFactory:1.0",
+ 'CosPropertyService_PropertySetFactory':typeID()),
+ check_tc('CosPropertyService_PropertySetFactory':oe_get_interface()),
+ ?match(true, 'CosPropertyService_PropertySetFactory':oe_is_a('CosPropertyService_PropertySetFactory':typeID())),
+ ?match(false, 'CosPropertyService_PropertySetFactory':oe_is_a("wrong")),
+ ok.
+
+
+
+%%-----------------------------------------------------------------
+%% MISC functions
+%%-----------------------------------------------------------------
+check_tc([]) ->
+ ok;
+check_tc([{Op, {RetType, InParameters, OutParameters}}|T]) ->
+ io:format("checked - ~s~n", [Op]),
+ lists:all(?checktc(Op), [RetType|InParameters]),
+ lists:all(?checktc(Op), OutParameters),
+ check_tc(T).
+
+
diff --git a/lib/cosProperty/test/property_SUITE.erl b/lib/cosProperty/test/property_SUITE.erl
new file mode 100644
index 0000000000..8fed3128ef
--- /dev/null
+++ b/lib/cosProperty/test/property_SUITE.erl
@@ -0,0 +1,747 @@
+%%----------------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2000-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%
+%%
+%%
+%%----------------------------------------------------------------------
+%% File : property_SUITE.erl
+%% Description :
+%%
+%%----------------------------------------------------------------------
+-module(property_SUITE).
+
+
+%%--------------- INCLUDES -----------------------------------
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/src/orber_iiop.hrl").
+-include_lib("cosProperty/src/cosProperty.hrl").
+-include_lib("cosProperty/include/CosPropertyService.hrl").
+
+-include("test_server.hrl").
+
+%%--------------- DEFINES ------------------------------------
+-define(default_timeout, ?t:minutes(20)).
+-define(match(ExpectedRes, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ exit(AcTuAlReS)
+ end
+ end()).
+
+-define(match_inverse(NotExpectedRes, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ NotExpectedRes ->
+ io:format("###### ERROR ERROR ######~n ~p~n",
+ [AcTuAlReS]),
+ exit(AcTuAlReS);
+ _ ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS
+ end
+ end()).
+
+
+-define(val1, #any{typecode=tk_short, value=1}).
+-define(val2, #any{typecode=tk_short, value=2}).
+-define(val3, #any{typecode=tk_short, value=3}).
+-define(val4, #any{typecode=tk_short, value=4}).
+-define(val5, #any{typecode=tk_long, value=5}).
+-define(badval, #any{typecode=tk_shirt, value=5}).
+
+-define(id1, "id1").
+-define(id2, "id2").
+-define(id3, "id3").
+-define(id4, "id4").
+-define(id5, "id5").
+-define(badid, "").
+
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+%% Fixed exports
+-export([all/1, cases/0, init_all/1, finish_all/1,
+ init_per_testcase/2, fin_per_testcase/2]).
+%% Test cases
+-export([create_setdef_api/1, create_set_api/1, define_with_mode_api/1,
+ define_api/1, names_iterator_api/1, properties_iterator_api/1,
+ app_test/1]).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["API tests for the cosProperty interfaces", ""];
+all(suite) -> {req,
+ [mnesia, orber],
+ {conf, init_all, cases(), finish_all}}.
+
+cases() ->
+ [create_setdef_api, create_set_api, define_with_mode_api, define_api,
+ names_iterator_api, properties_iterator_api, app_test].
+
+
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+
+init_per_testcase(_Case, Config) ->
+ Path = code:which(?MODULE),
+ code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Path = code:which(?MODULE),
+ code:del_path(filename:join(filename:dirname(Path), "idl_output")),
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+init_all(Config) ->
+ Path = code:which(?MODULE),
+ code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
+ orber:jump_start(),
+ cosProperty:install(),
+ cosProperty:install_db(),
+ ?line ?match(ok, application:start(cosProperty)),
+ if
+ is_list(Config) ->
+ Config;
+ true ->
+ exit("Config not a list")
+ end.
+
+finish_all(Config) ->
+ Path = code:which(?MODULE),
+ code:del_path(filename:join(filename:dirname(Path), "idl_output")),
+ application:stop(cosProperty),
+ cosProperty:uninstall_db(),
+ cosProperty:uninstall(),
+ orber:jump_stop(),
+ Config.
+
+%%-----------------------------------------------------------------
+%% Tests app file
+%%-----------------------------------------------------------------
+app_test(doc) -> [];
+app_test(suite) -> [];
+app_test(_Config) ->
+ ok=test_server:app_test(cosProperty),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% CosPropertyService_PropertySetDefFactory API tests
+%%-----------------------------------------------------------------
+create_setdef_api(doc) -> ["CosPropertyService_PropertySetDefFactory API tests.",
+ ""];
+create_setdef_api(suite) -> [];
+create_setdef_api(_Config) ->
+
+ ValidDefs = [#'CosPropertyService_PropertyDef'
+ {property_name = ?id1,
+ property_value = ?val1,
+ property_mode = normal},
+ #'CosPropertyService_PropertyDef'
+ {property_name = ?id2,
+ property_value = ?val2,
+ property_mode = normal}],
+ InvalidDefs = [#'CosPropertyService_PropertyDef'
+ {property_name = ?id1,
+ property_value = ?val1,
+ property_mode = normal},
+ #'CosPropertyService_PropertyDef'
+ {property_name = ?badid,
+ property_value = ?badval,
+ property_mode = normal}],
+
+ Fac = ?match({_,pseudo,_,_,_,_}, cosProperty:start_SetDefFactory()),
+
+ Obj1 = ?match({_,pseudo,_,_,_,_}, 'CosPropertyService_PropertySetDefFactory':
+ create_propertysetdef(Fac)),
+ 'CosPropertyService_PropertySetDef_impl':dump(),
+ corba:dispose(Obj1),
+
+
+ Obj2 = ?match({_,pseudo,_,_,_,_}, 'CosPropertyService_PropertySetDefFactory':
+ create_constrained_propertysetdef(Fac, [tk_short], ValidDefs)),
+ 'CosPropertyService_PropertySetDef_impl':dump(),
+ corba:dispose(Obj2),
+
+ %% Both arguments correct but 'ValidDefs' contain other TC:s than
+ %% tk_null.
+ ?match({'EXCEPTION', _}, 'CosPropertyService_PropertySetDefFactory':
+ create_constrained_propertysetdef(Fac, [tk_null], ValidDefs)),
+ 'CosPropertyService_PropertySetDef_impl':dump(),
+
+ ?match({'EXCEPTION', _}, 'CosPropertyService_PropertySetDefFactory':
+ create_constrained_propertysetdef(Fac, [tk_null], InvalidDefs)),
+ 'CosPropertyService_PropertySetDef_impl':dump(),
+
+ %% The allowed TC not supported.
+ ?match({'EXCEPTION', _}, 'CosPropertyService_PropertySetDefFactory':
+ create_constrained_propertysetdef(Fac, [tk_noll], ValidDefs)),
+ 'CosPropertyService_PropertySetDef_impl':dump(),
+
+ Obj4 = ?match({_,pseudo,_,_,_,_}, 'CosPropertyService_PropertySetDefFactory':
+ create_initial_propertysetdef(Fac, ValidDefs)),
+ 'CosPropertyService_PropertySetDef_impl':dump(),
+ corba:dispose(Obj4),
+
+ ?match({'EXCEPTION', _}, 'CosPropertyService_PropertySetDefFactory':
+ create_initial_propertysetdef(Fac, InvalidDefs)),
+
+ ?match(ok, cosProperty:stop_SetDefFactory(Fac)),
+
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% CosPropertyService_PropertySetFactory API tests
+%%-----------------------------------------------------------------
+create_set_api(doc) -> ["CosPropertyService_PropertySetFactory API tests.",
+ ""];
+create_set_api(suite) -> [];
+create_set_api(_Config) ->
+ Valid = [#'CosPropertyService_Property'
+ {property_name = ?id1,
+ property_value = ?val1},
+ #'CosPropertyService_Property'
+ {property_name = ?id2,
+ property_value = ?val2}],
+ Invalid = [#'CosPropertyService_Property'
+ {property_name = ?id1,
+ property_value = ?val1},
+ #'CosPropertyService_Property'
+ {property_name = ?badid,
+ property_value = ?badval}],
+
+ Fac = ?match({_,pseudo,_,_,_,_}, cosProperty:start_SetFactory()),
+ Obj1 = ?match({_,pseudo,_,_,_,_}, 'CosPropertyService_PropertySetFactory':
+ create_propertyset(Fac)),
+ 'CosPropertyService_PropertySetDef_impl':dump(),
+ corba:dispose(Obj1),
+
+
+ Obj2 = ?match({_,pseudo,_,_,_,_}, 'CosPropertyService_PropertySetFactory':
+ create_constrained_propertyset(Fac, [tk_short], Valid)),
+ 'CosPropertyService_PropertySetDef_impl':dump(),
+ corba:dispose(Obj2),
+
+ %% Both arguments correct but 'Valid' contain other TC:s than
+ %% tk_null.
+ ?match({'EXCEPTION', _}, 'CosPropertyService_PropertySetFactory':
+ create_constrained_propertyset(Fac, [tk_null], Valid)),
+ 'CosPropertyService_PropertySetDef_impl':dump(),
+
+ ?match({'EXCEPTION', _}, 'CosPropertyService_PropertySetFactory':
+ create_constrained_propertyset(Fac, [tk_null], Invalid)),
+ 'CosPropertyService_PropertySetDef_impl':dump(),
+
+ %% The allowed TC not supported.
+ ?match({'EXCEPTION', _}, 'CosPropertyService_PropertySetFactory':
+ create_constrained_propertyset(Fac, [tk_noll], Valid)),
+ 'CosPropertyService_PropertySetDef_impl':dump(),
+
+ Obj4 = ?match({_,pseudo,_,_,_,_}, 'CosPropertyService_PropertySetFactory':
+ create_initial_propertyset(Fac, Valid)),
+ 'CosPropertyService_PropertySetDef_impl':dump(),
+ corba:dispose(Obj4),
+
+ ?match({'EXCEPTION', _}, 'CosPropertyService_PropertySetFactory':
+ create_initial_propertyset(Fac, Invalid)),
+ ?match(ok, cosProperty:stop_SetFactory(Fac)),
+ ok.
+
+%%-----------------------------------------------------------------
+%% CosPropertyService_PropertySetDef API tests
+%%-----------------------------------------------------------------
+define_api(doc) -> ["CosPropertyService_PropertySet API tests.",
+ ""];
+define_api(suite) -> [];
+define_api(_Config) ->
+ ValidDefs = [#'CosPropertyService_Property'
+ {property_name = ?id1,
+ property_value = ?val1},
+ #'CosPropertyService_Property'
+ {property_name = ?id2,
+ property_value = ?val2},
+ #'CosPropertyService_Property'
+ {property_name = ?id3,
+ property_value = ?val3}],
+
+ Fac = ?match({_,pseudo,_,_,_,_}, cosProperty:start_SetFactory()),
+
+ io:format("@@@@ Testing PropertySet returned by the factory operation create_propertyset/1 @@@@", []),
+ Obj = ?match({_,pseudo,_,_,_,_}, 'CosPropertyService_PropertySetFactory':
+ create_propertyset(Fac)),
+ ?match(ok, 'CosPropertyService_PropertySet':define_property(Obj, ?id1, ?val1)),
+ ?match(ok, 'CosPropertyService_PropertySet':define_property(Obj, ?id1, ?val1)),
+
+ ?match(1, 'CosPropertyService_PropertySet':get_number_of_properties(Obj)),
+ ?match(ok, 'CosPropertyService_PropertySet':
+ define_properties(Obj, [#'CosPropertyService_Property'{property_name = ?id2,
+ property_value = ?val2},
+ #'CosPropertyService_Property'{property_name = ?id3,
+ property_value = ?val3}])),
+
+ ?match(3, 'CosPropertyService_PropertySet':get_number_of_properties(Obj)),
+
+ ?match({true, [_]}, 'CosPropertyService_PropertySet':get_properties(Obj, [?id1])),
+ ?match({true, [_, _, _]}, 'CosPropertyService_PropertySet':get_properties(Obj, [?id1, ?id2, ?id3])),
+ ?match({false,[_, _, _]}, 'CosPropertyService_PropertySet':get_properties(Obj, [?id1, "wrong", ?id3])),
+
+ ?match(?val2, 'CosPropertyService_PropertySet':get_property_value(Obj, ?id2)),
+ ?match(ok, 'CosPropertyService_PropertySet':delete_property(Obj, ?id1)),
+
+ ?match(2, 'CosPropertyService_PropertySet':get_number_of_properties(Obj)),
+
+ ?match(ok, 'CosPropertyService_PropertySet':define_property(Obj, ?id1, ?val1)),
+ ?match(ok, 'CosPropertyService_PropertySet':define_property(Obj, ?id2, ?val2)),
+ ?match(ok, 'CosPropertyService_PropertySet':define_property(Obj, ?id3, ?val3)),
+
+ ?match(true, 'CosPropertyService_PropertySet':delete_all_properties(Obj)),
+ ?match(0, 'CosPropertyService_PropertySet':get_number_of_properties(Obj)),
+
+ ?match(ok, 'CosPropertyService_PropertySet':
+ define_properties(Obj, [#'CosPropertyService_Property'{property_name = ?id1,
+ property_value = ?val1},
+ #'CosPropertyService_Property'{property_name = ?id2,
+ property_value = ?val2},
+ #'CosPropertyService_Property'{property_name = ?id3,
+ property_value = ?val3}])),
+
+ ?match(3, 'CosPropertyService_PropertySet':get_number_of_properties(Obj)),
+ ?match(?val2, 'CosPropertyService_PropertySet':get_property_value(Obj, ?id2)),
+
+ ?match({'EXCEPTION',{'CosPropertyService_PropertyNotFound',_}},
+ 'CosPropertyService_PropertySet':get_property_value(Obj, "wrongID")),
+ ?match({'EXCEPTION',{'CosPropertyService_InvalidPropertyName',_}},
+ 'CosPropertyService_PropertySet':get_property_value(Obj, "")),
+ ?match({'EXCEPTION',{'CosPropertyService_InvalidPropertyName',_}},
+ 'CosPropertyService_PropertySet':is_property_defined(Obj, "")),
+ ?match(false, 'CosPropertyService_PropertySet':is_property_defined(Obj, "wrongID")),
+ ?match(true, 'CosPropertyService_PropertySet':is_property_defined(Obj, ?id1)),
+
+ %% This function is not supported by PropertySet.
+ ?match({'EXCEPTION',{'NO_IMPLEMENT',_,_,_}},
+ 'CosPropertyService_PropertySetDef':get_property_modes(Obj, [?id1, ?id2, ?id3])),
+
+ ?match({'EXCEPTION',{'CosPropertyService_MultipleExceptions',_,_}},
+ 'CosPropertyService_PropertySet':delete_properties(Obj, [?id1, ?id2, ?id3, "wrongID"])),
+ ?match(0, 'CosPropertyService_PropertySet':get_number_of_properties(Obj)),
+ corba:dispose(Obj),
+
+ io:format("@@@@ Testing PropertySet returned by the factory operation create_constrained_propertyset/3 @@@@", []),
+ Obj2 = ?match({_,pseudo,_,_,_,_}, 'CosPropertyService_PropertySetFactory':
+ create_constrained_propertyset(Fac, [tk_short], ValidDefs)),
+
+ ?match(0, 'CosPropertyService_PropertySet':get_number_of_properties(Obj2)),
+ ?match({'EXCEPTION', {'CosPropertyService_UnsupportedProperty',_}},
+ 'CosPropertyService_PropertySet':define_property(Obj2, ?id4, ?val4)),
+ ?match({'EXCEPTION', {'CosPropertyService_UnsupportedTypeCode',_}},
+ 'CosPropertyService_PropertySet':define_property(Obj2, ?id1, ?val5)),
+ ?match(ok, 'CosPropertyService_PropertySet':define_property(Obj2, ?id1, ?val1)),
+ ?match(1, 'CosPropertyService_PropertySet':get_number_of_properties(Obj2)),
+ ?match({'EXCEPTION',{'CosPropertyService_MultipleExceptions',_,_}},
+ 'CosPropertyService_PropertySet':
+ define_properties(Obj2, [#'CosPropertyService_Property'{property_name = ?id2,
+ property_value = ?val2},
+ #'CosPropertyService_Property'{property_name = ?id3,
+ property_value = ?val3},
+ #'CosPropertyService_Property'{property_name = "wrongId",
+ property_value = ?val2}])),
+ ?match(ok,'CosPropertyService_PropertySet':
+ define_properties(Obj2, [#'CosPropertyService_Property'{property_name = ?id2,
+ property_value = ?val2},
+ #'CosPropertyService_Property'{property_name = ?id3,
+ property_value = ?val3}])),
+ ?match(3, 'CosPropertyService_PropertySet':get_number_of_properties(Obj2)),
+ ?match({'EXCEPTION',{'CosPropertyService_PropertyNotFound',_}},
+ 'CosPropertyService_PropertySet':get_property_value(Obj2, "wrongID")),
+ ?match(?val2, 'CosPropertyService_PropertySet':get_property_value(Obj2, ?id2)),
+ ?match({'EXCEPTION',{'CosPropertyService_InvalidPropertyName',_}},
+ 'CosPropertyService_PropertySet':get_property_value(Obj2, "")),
+ ?match({'EXCEPTION',{'CosPropertyService_InvalidPropertyName',_}},
+ 'CosPropertyService_PropertySet':is_property_defined(Obj2, "")),
+ ?match(false, 'CosPropertyService_PropertySet':is_property_defined(Obj2, "wrongID")),
+ ?match(true, 'CosPropertyService_PropertySet':is_property_defined(Obj2, ?id1)),
+
+
+ ?match({'EXCEPTION',{'CosPropertyService_PropertyNotFound',_}},
+ 'CosPropertyService_PropertySet':delete_property(Obj2, "wrongID")),
+ ?match(3, 'CosPropertyService_PropertySet':get_number_of_properties(Obj2)),
+ ?match(ok, 'CosPropertyService_PropertySet':delete_property(Obj2, ?id1)),
+ ?match(2, 'CosPropertyService_PropertySet':get_number_of_properties(Obj2)),
+
+ ?match(ok, 'CosPropertyService_PropertySet':delete_properties(Obj2, [?id2])),
+ ?match(1, 'CosPropertyService_PropertySet':get_number_of_properties(Obj2)),
+
+ ?match({'EXCEPTION',{'CosPropertyService_MultipleExceptions',_,_}},
+ 'CosPropertyService_PropertySet':delete_properties(Obj2, [?id3, "wrongID"])),
+ ?match(0, 'CosPropertyService_PropertySet':get_number_of_properties(Obj2)),
+ corba:dispose(Obj2),
+
+ io:format("@@@@ Testing PropertySet returned by the factory operation create_initial_propertyset/2 @@@@", []),
+ Obj3 = ?match({_,pseudo,_,_,_,_}, 'CosPropertyService_PropertySetFactory':
+ create_initial_propertyset(Fac, ValidDefs)),
+ ?match(3, 'CosPropertyService_PropertySet':get_number_of_properties(Obj3)),
+
+ ?match(ok, 'CosPropertyService_PropertySet':define_property(Obj3, ?id4, ?val4)),
+ ?match(4, 'CosPropertyService_PropertySet':get_number_of_properties(Obj3)),
+
+ ?match(ok,'CosPropertyService_PropertySet':
+ define_properties(Obj3, [#'CosPropertyService_Property'{property_name = ?id5,
+ property_value = ?val5}])),
+
+ ?match(5, 'CosPropertyService_PropertySet':get_number_of_properties(Obj3)),
+
+ ?match({'EXCEPTION',{'CosPropertyService_PropertyNotFound',_}},
+ 'CosPropertyService_PropertySet':get_property_value(Obj3, "wrongID")),
+ ?match(?val2, 'CosPropertyService_PropertySet':get_property_value(Obj3, ?id2)),
+ ?match({'EXCEPTION',{'CosPropertyService_InvalidPropertyName',_}},
+ 'CosPropertyService_PropertySet':get_property_value(Obj3, "")),
+ ?match({'EXCEPTION',{'CosPropertyService_InvalidPropertyName',_}},
+ 'CosPropertyService_PropertySet':is_property_defined(Obj3, "")),
+ ?match(false, 'CosPropertyService_PropertySet':is_property_defined(Obj3, "wrongID")),
+ ?match(true, 'CosPropertyService_PropertySet':is_property_defined(Obj3, ?id1)),
+
+ ?match({'EXCEPTION',{'CosPropertyService_PropertyNotFound',_}},
+ 'CosPropertyService_PropertySet':delete_property(Obj3, "wrongId")),
+ ?match(ok, 'CosPropertyService_PropertySet':delete_property(Obj3, ?id5)),
+ ?match(4, 'CosPropertyService_PropertySet':get_number_of_properties(Obj3)),
+
+ ?match({'EXCEPTION',{'CosPropertyService_MultipleExceptions',_,_}},
+ 'CosPropertyService_PropertySet':delete_properties(Obj3, [?id1, ?id2, ?id3, "wrongID"])),
+ ?match(1, 'CosPropertyService_PropertySet':get_number_of_properties(Obj3)),
+
+ ?match(true, 'CosPropertyService_PropertySet':delete_all_properties(Obj3)),
+ ?match(0, 'CosPropertyService_PropertySet':get_number_of_properties(Obj3)),
+
+ corba:dispose(Obj3),
+ ?match(ok, cosProperty:stop_SetFactory(Fac)),
+
+ ok.
+
+%%-----------------------------------------------------------------
+%% CosPropertyService_PropertySetDef API tests
+%%-----------------------------------------------------------------
+define_with_mode_api(doc) -> ["CosPropertyService_PropertySetDef API tests.",
+ ""];
+define_with_mode_api(suite) -> [];
+define_with_mode_api(_Config) ->
+ ValidDefs = [#'CosPropertyService_PropertyDef'
+ {property_name = ?id1,
+ property_value = ?val1,
+ property_mode = normal},
+ #'CosPropertyService_PropertyDef'
+ {property_name = ?id2,
+ property_value = ?val2,
+ property_mode = normal},
+ #'CosPropertyService_PropertyDef'
+ {property_name = ?id3,
+ property_value = ?val3,
+ property_mode = normal}],
+
+ Fac = ?match({_,pseudo,_,_,_,_}, cosProperty:start_SetDefFactory()),
+
+ io:format("@@@@ Testing PropertySetDef returned by the factory operation create_propertysetdef/1 @@@@", []),
+ Obj = ?match({_,pseudo,_,_,_,_}, 'CosPropertyService_PropertySetDefFactory':
+ create_propertysetdef(Fac)),
+
+ %% Initally no prop's created and no restrictions at all
+ ?match(0, 'CosPropertyService_PropertySetDef':get_number_of_properties(Obj)),
+ ?match({ok, []}, 'CosPropertyService_PropertySetDef':get_allowed_property_types(Obj)),
+ ?match({ok, []}, 'CosPropertyService_PropertySetDef':get_allowed_properties(Obj)),
+
+ %% Add two properties.
+ ?match(ok, 'CosPropertyService_PropertySetDef':define_property_with_mode(Obj, ?id4, ?val4, read_only)),
+ ?match(ok, 'CosPropertyService_PropertySetDef':define_property_with_mode(Obj, ?id5, ?val5, normal)),
+ %% Try to add the same property again (shouldn't add another since using the sam Id).
+ ?match(ok, 'CosPropertyService_PropertySetDef':define_property_with_mode(Obj, ?id5, ?val5, normal)),
+
+ %% Try to add another identical proprty with wrong TC.
+ ?match({'EXCEPTION',{'CosPropertyService_ConflictingProperty',_}},
+ 'CosPropertyService_PropertySetDef':define_property_with_mode(Obj, ?id5, ?val4, normal)),
+
+
+ %% Should be two now.
+ ?match(2, 'CosPropertyService_PropertySetDef':get_number_of_properties(Obj)),
+
+ ?match(read_only, 'CosPropertyService_PropertySetDef':get_property_mode(Obj, ?id4)),
+ ?match(normal, 'CosPropertyService_PropertySetDef':get_property_mode(Obj, ?id5)),
+ ?match(ok, 'CosPropertyService_PropertySetDef':
+ define_properties_with_modes(Obj,
+ [#'CosPropertyService_PropertyDef'{property_name = ?id1,
+ property_value = ?val1,
+ property_mode = normal},
+ #'CosPropertyService_PropertyDef'{property_name = ?id2,
+ property_value = ?val2,
+ property_mode = normal},
+ #'CosPropertyService_PropertyDef'{property_name = ?id3,
+ property_value = ?val3,
+ property_mode = normal}])),
+ %% Should be five now.
+ ?match(5, 'CosPropertyService_PropertySetDef':get_number_of_properties(Obj)),
+ ?match({true, [_,_]}, 'CosPropertyService_PropertySetDef':get_property_modes(Obj, [?id1, ?id3])),
+ ?match({false, [_,_,_]}, 'CosPropertyService_PropertySetDef':get_property_modes(Obj, [?id1, ?id3, "wrongID"])),
+
+ ?match(ok, 'CosPropertyService_PropertySetDef':set_property_mode(Obj, ?id1, read_only)),
+ ?match(read_only, 'CosPropertyService_PropertySetDef':get_property_mode(Obj, ?id1)),
+
+ ?match({'EXCEPTION',{'CosPropertyService_PropertyNotFound',_}},
+ 'CosPropertyService_PropertySetDef':set_property_mode(Obj, "wrongID", read_only)),
+
+ ?match({'EXCEPTION',{'CosPropertyService_MultipleExceptions',_,_}},
+ 'CosPropertyService_PropertySetDef':
+ set_property_modes(Obj,
+ [#'CosPropertyService_PropertyMode'{property_name = ?id2,
+ property_mode = read_only},
+ #'CosPropertyService_PropertyMode'{property_name = ?id3,
+ property_mode = read_only},
+ #'CosPropertyService_PropertyMode'{property_name = "wrongID",
+ property_mode = read_only}])),
+ ?match(normal, 'CosPropertyService_PropertySetDef':get_property_mode(Obj, ?id2)),
+ ?match(ok,
+ 'CosPropertyService_PropertySetDef':
+ set_property_modes(Obj,
+ [#'CosPropertyService_PropertyMode'{property_name = ?id2,
+ property_mode = read_only},
+ #'CosPropertyService_PropertyMode'{property_name = ?id3,
+ property_mode = read_only}])),
+ ?match(read_only, 'CosPropertyService_PropertySetDef':get_property_mode(Obj, ?id2)),
+
+ corba:dispose(Obj),
+
+
+ io:format("@@@@ Testing PropertySetDef returned by the factory operation create_constrained_propertysetdef/3 @@@@", []),
+ Obj2 = ?match({_,pseudo,_,_,_,_}, 'CosPropertyService_PropertySetDefFactory':
+ create_constrained_propertysetdef(Fac, [tk_short], ValidDefs)),
+
+ %% Initally no prop's created and the restrictions that only Properties eq. to ValidDefs
+ %% may be handled.
+ ?match(0, 'CosPropertyService_PropertySetDef':get_number_of_properties(Obj2)),
+ ?match({ok, [tk_short]}, 'CosPropertyService_PropertySetDef':get_allowed_property_types(Obj2)),
+ %% We cannot be sure in which order it's returned. Hmm, that's not really true but it
+ %% may change in the future.
+ ?match({ok, [_,_,_]}, 'CosPropertyService_PropertySetDef':get_allowed_properties(Obj2)),
+ %% Try to add a Property with and Id not eq. to ?id1, ?id2 or ?id3; must fail.
+ ?match({'EXCEPTION', {'CosPropertyService_UnsupportedProperty',_}},
+ 'CosPropertyService_PropertySetDef':define_property_with_mode(Obj2, ?id4, ?val4, read_only)),
+ %% To be sure that nothing was updated.
+ ?match(0, 'CosPropertyService_PropertySetDef':get_number_of_properties(Obj2)),
+ %% Add a valid Property.
+ ?match(ok, 'CosPropertyService_PropertySetDef':define_property_with_mode(Obj2, ?id1, ?val1, normal)),
+ ?match(1, 'CosPropertyService_PropertySetDef':get_number_of_properties(Obj2)),
+ %% Add a sequence of 1 valid and one invalid Prop's
+ ?match({'EXCEPTION', {'CosPropertyService_MultipleExceptions',_,_}},
+ 'CosPropertyService_PropertySetDef':
+ define_properties_with_modes(Obj2,
+ [#'CosPropertyService_PropertyDef'{property_name = ?id2,
+ property_value = ?val2,
+ property_mode = normal},
+ #'CosPropertyService_PropertyDef'{property_name = "wrongID",
+ property_value = ?val2,
+ property_mode = normal}])),
+ %% One should be added.
+ ?match(1, 'CosPropertyService_PropertySetDef':get_number_of_properties(Obj2)),
+ ?match(ok, 'CosPropertyService_PropertySetDef':
+ define_properties_with_modes(Obj2,
+ [#'CosPropertyService_PropertyDef'{property_name = ?id3,
+ property_value = ?val3,
+ property_mode = normal}])),
+ %% Add a sequence of 1 valid Prop.
+ ?match(2, 'CosPropertyService_PropertySetDef':get_number_of_properties(Obj2)),
+ ?match(normal, 'CosPropertyService_PropertySetDef':get_property_mode(Obj2, ?id1)),
+ ?match(normal, 'CosPropertyService_PropertySetDef':get_property_mode(Obj2, ?id3)),
+
+
+ ?match({true, [_,_]}, 'CosPropertyService_PropertySetDef':get_property_modes(Obj2, [?id1, ?id3])),
+ ?match({false, [_,_,_]}, 'CosPropertyService_PropertySetDef':get_property_modes(Obj2, [?id1, ?id3, "wrongID"])),
+
+ ?match(ok, 'CosPropertyService_PropertySetDef':set_property_mode(Obj2, ?id1, read_only)),
+ ?match(read_only, 'CosPropertyService_PropertySetDef':get_property_mode(Obj2, ?id1)),
+ ?match(ok, 'CosPropertyService_PropertySetDef':
+ set_property_modes(Obj2,
+ [#'CosPropertyService_PropertyMode'{property_name = ?id1,
+ property_mode = read_only},
+ #'CosPropertyService_PropertyMode'{property_name = ?id3,
+ property_mode = read_only}])),
+ ?match(read_only, 'CosPropertyService_PropertySetDef':get_property_mode(Obj2, ?id1)),
+ ?match(read_only, 'CosPropertyService_PropertySetDef':get_property_mode(Obj2, ?id3)),
+ ?match({'EXCEPTION',{'CosPropertyService_MultipleExceptions',_,_}},
+ 'CosPropertyService_PropertySetDef':
+ set_property_modes(Obj2,
+ [#'CosPropertyService_PropertyMode'{property_name = ?id1,
+ property_mode = normal},
+ #'CosPropertyService_PropertyMode'{property_name = ?id3,
+ property_mode = normal},
+ #'CosPropertyService_PropertyMode'{property_name = "wrongID",
+ property_mode = normal}])),
+
+ ?match(read_only, 'CosPropertyService_PropertySetDef':get_property_mode(Obj2, ?id1)),
+ ?match(read_only, 'CosPropertyService_PropertySetDef':get_property_mode(Obj2, ?id3)),
+ corba:dispose(Obj2),
+
+ io:format("@@@@ Testing PropertySetDef returned by the factory operation create_initial_propertysetdef/2 @@@@", []),
+ Obj3 = ?match({_,pseudo,_,_,_,_}, 'CosPropertyService_PropertySetDefFactory':
+ create_initial_propertysetdef(Fac, ValidDefs)),
+
+ %% Initally the supplied prop's are created and no restrictions.
+ ?match(3, 'CosPropertyService_PropertySetDef':get_number_of_properties(Obj3)),
+ ?match({ok, []}, 'CosPropertyService_PropertySetDef':get_allowed_property_types(Obj3)),
+ ?match({ok, []}, 'CosPropertyService_PropertySetDef':get_allowed_properties(Obj3)),
+
+ %% Add a new properties an test if they have been inserted.
+ ?match(ok, 'CosPropertyService_PropertySetDef':define_property_with_mode(Obj3, ?id4, ?val4, read_only)),
+ ?match(4, 'CosPropertyService_PropertySetDef':get_number_of_properties(Obj3)),
+ ?match(ok, 'CosPropertyService_PropertySetDef':define_property_with_mode(Obj3, ?id5, ?val5, read_only)),
+ ?match(5, 'CosPropertyService_PropertySetDef':get_number_of_properties(Obj3)),
+
+ %% Lookup each Property's mode.
+ ?match(normal, 'CosPropertyService_PropertySetDef':get_property_mode(Obj3, ?id1)),
+ ?match(normal, 'CosPropertyService_PropertySetDef':get_property_mode(Obj3, ?id2)),
+ ?match(normal, 'CosPropertyService_PropertySetDef':get_property_mode(Obj3, ?id3)),
+ ?match(read_only, 'CosPropertyService_PropertySetDef':get_property_mode(Obj3, ?id4)),
+ ?match(read_only, 'CosPropertyService_PropertySetDef':get_property_mode(Obj3, ?id5)),
+
+ ?match({true, [_,_,_,_,_]},
+ 'CosPropertyService_PropertySetDef':get_property_modes(Obj3, [?id1, ?id2, ?id3, ?id4, ?id5])),
+ ?match({false, [_,_]},
+ 'CosPropertyService_PropertySetDef':get_property_modes(Obj3, [?id1, "wrongID"])),
+ ?match(ok, 'CosPropertyService_PropertySetDef':set_property_mode(Obj3, ?id4, normal)),
+ ?match(normal, 'CosPropertyService_PropertySetDef':get_property_mode(Obj3, ?id4)),
+
+ ?match(ok, 'CosPropertyService_PropertySetDef':
+ set_property_modes(Obj3,
+ [#'CosPropertyService_PropertyMode'{property_name = ?id1,
+ property_mode = read_only},
+ #'CosPropertyService_PropertyMode'{property_name = ?id2,
+ property_mode = read_only}])),
+ ?match(read_only, 'CosPropertyService_PropertySetDef':get_property_mode(Obj3, ?id1)),
+ ?match(read_only, 'CosPropertyService_PropertySetDef':get_property_mode(Obj3, ?id2)),
+ ?match({'EXCEPTION',{'CosPropertyService_MultipleExceptions',_,_}},
+ 'CosPropertyService_PropertySetDef':
+ set_property_modes(Obj3,
+ [#'CosPropertyService_PropertyMode'{property_name = ?id3,
+ property_mode = read_only},
+ #'CosPropertyService_PropertyMode'{property_name = ?id4,
+ property_mode = read_only},
+ #'CosPropertyService_PropertyMode'{property_name = "wrongID",
+ property_mode = read_only}])),
+
+ ?match(normal, 'CosPropertyService_PropertySetDef':get_property_mode(Obj3, ?id3)),
+ ?match(normal, 'CosPropertyService_PropertySetDef':get_property_mode(Obj3, ?id4)),
+
+ corba:dispose(Obj3),
+
+ ?match(ok, cosProperty:stop_SetDefFactory(Fac)),
+
+ ok.
+
+
+
+%%-----------------------------------------------------------------
+%% CosPropertyService_PropertyNamesIterator API tests
+%%-----------------------------------------------------------------
+names_iterator_api(doc) -> ["CosPropertyService_PropertyNamesIterator API tests.",
+ ""];
+names_iterator_api(suite) -> [];
+names_iterator_api(_Config) ->
+ Fac = ?match({_,pseudo,_,_,_,_}, cosProperty:start_SetFactory()),
+ Obj = ?match({_,pseudo,_,_,_,_}, 'CosPropertyService_PropertySetFactory':
+ create_propertyset(Fac)),
+ ?match(ok, 'CosPropertyService_PropertySet':
+ define_properties(Obj, [#'CosPropertyService_Property'{property_name = ?id1,
+ property_value = ?val1},
+ #'CosPropertyService_Property'{property_name = ?id2,
+ property_value = ?val2},
+ #'CosPropertyService_Property'{property_name = ?id3,
+ property_value = ?val3}])),
+
+ ?match(3, 'CosPropertyService_PropertySetDef':get_number_of_properties(Obj)),
+ {_, _,ItObj} = ?match({ok, [], _}, 'CosPropertyService_PropertySetDef':get_all_property_names(Obj, 0)),
+ ?match({false, [_,_,_]}, 'CosPropertyService_PropertyNamesIterator':next_n(ItObj,3)),
+ ?match(ok, 'CosPropertyService_PropertyNamesIterator':reset(ItObj)),
+ ?match({false, [_,_,_]}, 'CosPropertyService_PropertyNamesIterator':next_n(ItObj,4)),
+ ?match(ok, 'CosPropertyService_PropertyNamesIterator':reset(ItObj)),
+ ?match({true, [_]}, 'CosPropertyService_PropertyNamesIterator':next_n(ItObj,1)),
+ ?match({true, _}, 'CosPropertyService_PropertyNamesIterator':next_one(ItObj)),
+ ?match({true, _}, 'CosPropertyService_PropertyNamesIterator':next_one(ItObj)),
+ ?match({false, _}, 'CosPropertyService_PropertyNamesIterator':next_one(ItObj)),
+ ?match(ok, 'CosPropertyService_PropertyNamesIterator':destroy(ItObj)),
+
+ corba:dispose(Obj),
+ ok.
+
+%%-----------------------------------------------------------------
+%% CosPropertyService_PropertiesIterator API tests
+%%-----------------------------------------------------------------
+properties_iterator_api(doc) -> ["CosPropertyService_PropertiesIterator API tests.",
+ ""];
+properties_iterator_api(suite) -> [];
+properties_iterator_api(_Config) ->
+ Fac = ?match({_,pseudo,_,_,_,_}, cosProperty:start_SetFactory()),
+ Obj = ?match({_,pseudo,_,_,_,_}, 'CosPropertyService_PropertySetFactory':
+ create_propertyset(Fac)),
+
+ ?match(ok, 'CosPropertyService_PropertySet':
+ define_properties(Obj, [#'CosPropertyService_Property'{property_name = ?id1,
+ property_value = ?val1},
+ #'CosPropertyService_Property'{property_name = ?id2,
+ property_value = ?val2},
+ #'CosPropertyService_Property'{property_name = ?id3,
+ property_value = ?val3}])),
+
+ ?match(3, 'CosPropertyService_PropertySetDef':get_number_of_properties(Obj)),
+ {_, _,ItObj} = ?match({ok, [], _},
+ 'CosPropertyService_PropertySetDef':get_all_properties(Obj, 0)),
+ ?match({false, [_,_,_]}, 'CosPropertyService_PropertiesIterator':next_n(ItObj,3)),
+ ?match(ok, 'CosPropertyService_PropertiesIterator':reset(ItObj)),
+ ?match({false, [_,_,_]}, 'CosPropertyService_PropertiesIterator':next_n(ItObj,4)),
+ ?match(ok, 'CosPropertyService_PropertiesIterator':reset(ItObj)),
+ ?match({true, [_]}, 'CosPropertyService_PropertiesIterator':next_n(ItObj,1)),
+ ?match({true, {'CosPropertyService_Property',_,_}},
+ 'CosPropertyService_PropertiesIterator':next_one(ItObj)),
+ ?match({true, {'CosPropertyService_Property',_,_}},
+ 'CosPropertyService_PropertiesIterator':next_one(ItObj)),
+ ?match({false, {'CosPropertyService_Property',_,_}},
+ 'CosPropertyService_PropertiesIterator':next_one(ItObj)),
+ ?match(ok, 'CosPropertyService_PropertiesIterator':destroy(ItObj)),
+ corba:dispose(Obj),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% END OF MODULE
+%%-----------------------------------------------------------------
diff --git a/lib/cosProperty/vsn.mk b/lib/cosProperty/vsn.mk
index c221e6fa4a..3d594a8329 100644
--- a/lib/cosProperty/vsn.mk
+++ b/lib/cosProperty/vsn.mk
@@ -1,6 +1,8 @@
-COSPROPERTY_VSN = 1.1.11
+COSPROPERTY_VSN = 1.1.12
-TICKETS = OTP-8355
+TICKETS = OTP-8543
+
+TICKETS_1.1.11 = OTP-8355
TICKETS_1.1.10 = OTP-8201
diff --git a/lib/cosTime/doc/src/notes.xml b/lib/cosTime/doc/src/notes.xml
index 9f23a8633c..40ebf42753 100644
--- a/lib/cosTime/doc/src/notes.xml
+++ b/lib/cosTime/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2009</year>
+ <year>2000</year><year>2010</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -13,12 +13,12 @@
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.
-
+
</legalnotice>
<title>cosTime Release Notes</title>
@@ -33,6 +33,22 @@
</header>
<section>
+ <title>cosTime 1.1.9</title>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>
+ Test suites published.</p>
+ <p>
+ Own Id: OTP-8543 Aux Id:</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
<title>cosTime 1.1.8</title>
<section>
diff --git a/lib/cosTime/test/Makefile b/lib/cosTime/test/Makefile
new file mode 100644
index 0000000000..fde5c4facc
--- /dev/null
+++ b/lib/cosTime/test/Makefile
@@ -0,0 +1,135 @@
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 2000-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%
+#
+#
+include $(ERL_TOP)/make/target.mk
+include $(ERL_TOP)/make/$(TARGET)/otp.mk
+
+# ----------------------------------------------------
+# Application version
+# ----------------------------------------------------
+include ../vsn.mk
+VSN=$(COSTIME_VSN)
+# ----------------------------------------------------
+# Release directory specification
+# ----------------------------------------------------
+RELSYSDIR = $(RELEASE_PATH)/cosTime_test
+
+# ----------------------------------------------------
+# Target Specs
+# ----------------------------------------------------
+TEST_SPEC_FILE = cosTime.spec
+
+
+IDL_FILES =
+
+IDLOUTDIR = idl_output
+
+MODULES = \
+ time_SUITE \
+ generated_SUITE
+
+GEN_MODULES = \
+
+GEN_HRL_FILES = \
+
+ERL_FILES = $(MODULES:%=%.erl)
+
+HRL_FILES =
+
+GEN_FILES = \
+ $(GEN_HRL_FILES:%=$(IDLOUTDIR)/%) \
+ $(GEN_MODULES:%=$(IDLOUTDIR)/%.erl)
+
+GEN_TARGET_FILES = $(GEN_MODULES:%=$(IDLOUTDIR)/%.$(EMULATOR))
+
+SUITE_TARGET_FILES = $(MODULES:%=%.$(EMULATOR))
+
+TARGET_FILES = \
+ $(GEN_TARGET_FILES) \
+ $(SUITE_TARGET_FILES)
+
+
+# ----------------------------------------------------
+# PROGRAMS
+# ----------------------------------------------------
+LOCAL_CLASSPATH = $(ERL_TOP)lib/cosTime/priv:$(ERL_TOP)lib/cosTime/test
+# ----------------------------------------------------
+# FLAGS
+# ----------------------------------------------------
+ERL_IDL_FLAGS += -pa $(ERL_TOP)/lib/cosTime/ebin \
+ -pa $(ERL_TOP)/lib/cosTime/src \
+ -pa $(ERL_TOP)/lib/cosTime/include \
+ -pa $(ERL_TOP)/lib/cosNotification/ebin \
+ -pa $(ERL_TOP)/lib/orber/ebin \
+ -pa $(ERL_TOP)/lib/ic/ebin
+
+ERL_COMPILE_FLAGS += \
+ $(ERL_IDL_FLAGS) \
+ -pa $(ERL_TOP)/lib/orber/include \
+ -pa $(ERL_TOP)/lib/cosNotification/include \
+ -pa $(ERL_TOP)/internal_tools/test_server/ebin \
+ -pa $(ERL_TOP)/lib/cosTime/ebin \
+ -pa $(ERL_TOP)/lib/cosTime/include \
+ -pa $(ERL_TOP)/lib/cosTime/test/idl_output \
+ -I$(ERL_TOP)/lib/orber/include \
+ -I$(ERL_TOP)/lib/cosNotification/include \
+ -I$(ERL_TOP)/lib/cosTime/src \
+ -I$(ERL_TOP)/lib/cosTime/include \
+ -I$(ERL_TOP)/lib/cosTime \
+ -I$(ERL_TOP)/lib/cosTime/test/$(IDLOUTDIR) \
+ -I$(ERL_TOP)/lib/test_server/include
+
+# ----------------------------------------------------
+# Targets
+# ----------------------------------------------------
+
+
+tests debug opt: $(TARGET_FILES)
+
+clean:
+ rm -f idl_output/*
+ rm -f $(TARGET_FILES)
+ rm -f errs core *~
+
+docs:
+
+# ----------------------------------------------------
+# Special Targets
+# ----------------------------------------------------
+
+# ----------------------------------------------------
+# Release Targets
+# ----------------------------------------------------
+# We don't copy generated intermediate erlang and hrl files
+
+include $(ERL_TOP)/make/otp_release_targets.mk
+
+release_spec:
+
+release_docs_spec:
+
+release_tests_spec: tests
+ $(INSTALL_DIR) $(RELSYSDIR)
+ $(INSTALL_DATA) $(IDL_FILES) $(TEST_SPEC_FILE) \
+ $(ERL_FILES) $(RELSYSDIR)
+ $(INSTALL_DATA) $(SUITE_TARGET_FILES) $(RELSYSDIR)
+# $(INSTALL_DIR) $(RELSYSDIR)/$(IDLOUTDIR)
+# $(INSTALL_DATA) $(GEN_TARGET_FILES) $(GEN_FILES) \
+# $(RELSYSDIR)/$(IDLOUTDIR)
+
diff --git a/lib/cosTime/test/cosTime.spec b/lib/cosTime/test/cosTime.spec
new file mode 100644
index 0000000000..3f50946043
--- /dev/null
+++ b/lib/cosTime/test/cosTime.spec
@@ -0,0 +1,19 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2000-2010. 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%
+%%
+{topcase, {dir, "../cosTime_test"}}.
diff --git a/lib/cosTime/test/generated_SUITE.erl b/lib/cosTime/test/generated_SUITE.erl
new file mode 100644
index 0000000000..3a2153528f
--- /dev/null
+++ b/lib/cosTime/test/generated_SUITE.erl
@@ -0,0 +1,288 @@
+%%-----------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2004-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%
+%%
+%%
+%%-----------------------------------------------------------------
+%% File : generated_SUITE.erl
+%% Purpose :
+%%-----------------------------------------------------------------
+
+-module(generated_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/include/corba.hrl").
+
+-define(default_timeout, ?t:minutes(3)).
+
+-define(match(ExpectedRes, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+-define(nomatch(Not, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ Not ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS);
+ _ ->
+ AcTuAlReS
+ end
+ end()).
+
+
+-define(checktc(_Op),
+ fun(TC) ->
+ case orber_tc:check_tc(TC) of
+ false ->
+ io:format("###### ERROR ERROR ######~n~p - ~p~n", [Op, TC]),
+ ?line exit(TC);
+ true ->
+ true
+ end
+ end).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-export([]).
+-compile(export_all).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["This suite is for testing IC generated files"];
+all(suite) ->
+ ['TimeBase_IntervalT', 'TimeBase_UtcT', 'CosTime_TimeUnavailable',
+ 'CosTimerEvent_TimerEventT', 'CosTime_TIO', 'CosTime_TimeService',
+ 'CosTime_UTO', 'CosTimerEvent_TimerEventHandler',
+ 'CosTimerEvent_TimerEventService'].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'TimeBase_IntervalT'
+%% Description:
+%%-----------------------------------------------------------------
+'TimeBase_IntervalT'(doc) -> ["TimeBase_IntervalT"];
+'TimeBase_IntervalT'(suite) -> [];
+'TimeBase_IntervalT'(_) ->
+ ?match(true, orber_tc:check_tc('TimeBase_IntervalT':tc())),
+ ?match("IDL:omg.org/TimeBase/IntervalT:1.0",
+ 'TimeBase_IntervalT':id()),
+ ?match("TimeBase_IntervalT",
+ 'TimeBase_IntervalT':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'TimeBase_UtcT'
+%% Description:
+%%-----------------------------------------------------------------
+'TimeBase_UtcT'(doc) -> ["TimeBase_UtcT"];
+'TimeBase_UtcT'(suite) -> [];
+'TimeBase_UtcT'(_) ->
+ ?match(true, orber_tc:check_tc('TimeBase_UtcT':tc())),
+ ?match("IDL:omg.org/TimeBase/UtcT:1.0",
+ 'TimeBase_UtcT':id()),
+ ?match("TimeBase_UtcT",
+ 'TimeBase_UtcT':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTime_TimeUnavailable'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTime_TimeUnavailable'(doc) -> ["CosTime_TimeUnavailable"];
+'CosTime_TimeUnavailable'(suite) -> [];
+'CosTime_TimeUnavailable'(_) ->
+ ?match(true, orber_tc:check_tc('CosTime_TimeUnavailable':tc())),
+ ?match("IDL:omg.org/CosTime/TimeUnavailable:1.0",
+ 'CosTime_TimeUnavailable':id()),
+ ?match("CosTime_TimeUnavailable",
+ 'CosTime_TimeUnavailable':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTimerEvent_TimerEventT'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTimerEvent_TimerEventT'(doc) -> ["CosTimerEvent_TimerEventT"];
+'CosTimerEvent_TimerEventT'(suite) -> [];
+'CosTimerEvent_TimerEventT'(_) ->
+ ?match(true, orber_tc:check_tc('CosTimerEvent_TimerEventT':tc())),
+ ?match("IDL:omg.org/CosTimerEvent/TimerEventT:1.0",
+ 'CosTimerEvent_TimerEventT':id()),
+ ?match("CosTimerEvent_TimerEventT",
+ 'CosTimerEvent_TimerEventT':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTime_TIO'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTime_TIO'(doc) -> ["CosTime_TIO"];
+'CosTime_TIO'(suite) -> [];
+'CosTime_TIO'(_) ->
+ ?nomatch(undefined, 'CosTime_TIO':oe_tc('_get_time_interval')),
+ ?nomatch(undefined, 'CosTime_TIO':oe_tc(spans)),
+ ?nomatch(undefined, 'CosTime_TIO':oe_tc(overlaps)),
+ ?nomatch(undefined, 'CosTime_TIO':oe_tc(time)),
+ ?match(undefined, 'CosTime_TIO':oe_tc(undefined)),
+ ?match([_|_], 'CosTime_TIO':oe_get_interface()),
+ ?match("IDL:omg.org/CosTime/TIO:1.0", 'CosTime_TIO':typeID()),
+ check_tc('CosTime_TIO':oe_get_interface()),
+ ?match(true, 'CosTime_TIO':oe_is_a('CosTime_TIO':typeID())),
+ ?match(false, 'CosTime_TIO':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTime_TimeService'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTime_TimeService'(doc) -> ["CosTime_TimeService"];
+'CosTime_TimeService'(suite) -> [];
+'CosTime_TimeService'(_) ->
+ ?nomatch(undefined, 'CosTime_TimeService':oe_tc(universal_time)),
+ ?nomatch(undefined, 'CosTime_TimeService':oe_tc(secure_universal_time)),
+ ?nomatch(undefined, 'CosTime_TimeService':oe_tc(new_universal_time)),
+ ?nomatch(undefined, 'CosTime_TimeService':oe_tc(uto_from_utc)),
+ ?nomatch(undefined, 'CosTime_TimeService':oe_tc(new_interval)),
+ ?match(undefined, 'CosTime_TimeService':oe_tc(undefined)),
+ ?match([_|_], 'CosTime_TimeService':oe_get_interface()),
+ ?match("IDL:omg.org/CosTime/TimeService:1.0",
+ 'CosTime_TimeService':typeID()),
+ check_tc('CosTime_TimeService':oe_get_interface()),
+ ?match(true, 'CosTime_TimeService':oe_is_a('CosTime_TimeService':typeID())),
+ ?match(false, 'CosTime_TimeService':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTime_UTO'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTime_UTO'(doc) -> ["CosTime_UTO"];
+'CosTime_UTO'(suite) -> [];
+'CosTime_UTO'(_) ->
+ ?nomatch(undefined, 'CosTime_UTO':oe_tc('_get_time')),
+ ?nomatch(undefined, 'CosTime_UTO':oe_tc('_get_inaccuracy')),
+ ?nomatch(undefined, 'CosTime_UTO':oe_tc('_get_tdf')),
+ ?nomatch(undefined, 'CosTime_UTO':oe_tc('_get_utc_time')),
+ ?nomatch(undefined, 'CosTime_UTO':oe_tc(absolute_time)),
+ ?nomatch(undefined, 'CosTime_UTO':oe_tc(compare_time)),
+ ?nomatch(undefined, 'CosTime_UTO':oe_tc(time_to_interval)),
+ ?nomatch(undefined, 'CosTime_UTO':oe_tc(interval)),
+ ?match(undefined, 'CosTime_UTO':oe_tc(undefined)),
+ ?match([_|_], 'CosTime_UTO':oe_get_interface()),
+ ?match("IDL:omg.org/CosTime/UTO:1.0", 'CosTime_UTO':typeID()),
+ check_tc('CosTime_UTO':oe_get_interface()),
+ ?match(true, 'CosTime_UTO':oe_is_a('CosTime_UTO':typeID())),
+ ?match(false, 'CosTime_UTO':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTimerEvent_TimerEventHandler'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTimerEvent_TimerEventHandler'(doc) -> ["CosTimerEvent_TimerEventHandler"];
+'CosTimerEvent_TimerEventHandler'(suite) -> [];
+'CosTimerEvent_TimerEventHandler'(_) ->
+ ?nomatch(undefined, 'CosTimerEvent_TimerEventHandler':oe_tc('_get_status')),
+ ?nomatch(undefined, 'CosTimerEvent_TimerEventHandler':oe_tc(time_set)),
+ ?nomatch(undefined, 'CosTimerEvent_TimerEventHandler':oe_tc(set_timer)),
+ ?nomatch(undefined, 'CosTimerEvent_TimerEventHandler':oe_tc(cancel_timer)),
+ ?nomatch(undefined, 'CosTimerEvent_TimerEventHandler':oe_tc(set_data)),
+ ?match(undefined, 'CosTimerEvent_TimerEventHandler':oe_tc(undefined)),
+ ?match([_|_], 'CosTimerEvent_TimerEventHandler':oe_get_interface()),
+ ?match("IDL:omg.org/CosTimerEvent/TimerEventHandler:1.0",
+ 'CosTimerEvent_TimerEventHandler':typeID()),
+ check_tc('CosTimerEvent_TimerEventHandler':oe_get_interface()),
+ ?match(true, 'CosTimerEvent_TimerEventHandler':oe_is_a('CosTimerEvent_TimerEventHandler':typeID())),
+ ?match(false, 'CosTimerEvent_TimerEventHandler':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTimerEvent_TimerEventService'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTimerEvent_TimerEventService'(doc) -> ["CosTimerEvent_TimerEventService"];
+'CosTimerEvent_TimerEventService'(suite) -> [];
+'CosTimerEvent_TimerEventService'(_) ->
+ ?nomatch(undefined, 'CosTimerEvent_TimerEventService':oe_tc(register)),
+ ?nomatch(undefined, 'CosTimerEvent_TimerEventService':oe_tc(unregister)),
+ ?nomatch(undefined, 'CosTimerEvent_TimerEventService':oe_tc(event_time)),
+ ?match(undefined, 'CosTimerEvent_TimerEventService':oe_tc(undefined)),
+ ?match([_|_], 'CosTimerEvent_TimerEventService':oe_get_interface()),
+ ?match("IDL:omg.org/CosTimerEvent/TimerEventService:1.0",
+ 'CosTimerEvent_TimerEventService':typeID()),
+ check_tc('CosTimerEvent_TimerEventService':oe_get_interface()),
+ ?match(true, 'CosTimerEvent_TimerEventService':oe_is_a('CosTimerEvent_TimerEventService':typeID())),
+ ?match(false, 'CosTimerEvent_TimerEventService':oe_is_a("wrong")),
+ ok.
+
+
+
+
+%%-----------------------------------------------------------------
+%% MISC functions
+%%-----------------------------------------------------------------
+check_tc([]) ->
+ ok;
+check_tc([{Op, {RetType, InParameters, OutParameters}}|T]) ->
+ io:format("checked - ~s~n", [Op]),
+ lists:all(?checktc(Op), [RetType|InParameters]),
+ lists:all(?checktc(Op), OutParameters),
+ check_tc(T).
+
+
diff --git a/lib/cosTime/test/time_SUITE.erl b/lib/cosTime/test/time_SUITE.erl
new file mode 100644
index 0000000000..bb00395885
--- /dev/null
+++ b/lib/cosTime/test/time_SUITE.erl
@@ -0,0 +1,295 @@
+%%--------------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2000-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%
+%%
+%%
+%%----------------------------------------------------------------------
+%% File : time_SUITE.erl
+%% Purpose :
+%%----------------------------------------------------------------------
+
+-module(time_SUITE).
+
+
+%%--------------- INCLUDES -----------------------------------
+-include("../src/cosTimeApp.hrl").
+
+-include("test_server.hrl").
+
+%%--------------- DEFINES ------------------------------------
+-define(default_timeout, ?t:minutes(20)).
+-define(match(ExpectedRes, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ exit(AcTuAlReS)
+ end
+ end()).
+
+-define(match_inverse(NotExpectedRes, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ NotExpectedRes ->
+ io:format("###### ERROR ERROR ######~n ~p~n",
+ [AcTuAlReS]),
+ exit(AcTuAlReS);
+ _ ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS
+ end
+ end()).
+
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1, cases/0, init_all/1, finish_all/1, time_api/1, timerevent_api/1,
+ init_per_testcase/2, fin_per_testcase/2,
+ app_test/1]).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["API tests for the cosTime interfaces", ""];
+all(suite) -> {req,
+ [mnesia, orber],
+ {conf, init_all, cases(), finish_all}}.
+
+cases() ->
+ [time_api, timerevent_api, app_test].
+
+
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+
+init_per_testcase(_Case, Config) ->
+ Path = code:which(?MODULE),
+ code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Path = code:which(?MODULE),
+ code:del_path(filename:join(filename:dirname(Path), "idl_output")),
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+init_all(Config) ->
+ Path = code:which(?MODULE),
+ code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
+ mnesia:delete_schema([node()]),
+ mnesia:create_schema([node()]),
+ orber:install([node()]),
+ application:start(mnesia),
+ application:start(orber),
+ cosNotificationApp:install_event(),
+ cosNotificationApp:install(),
+ cosTime:install_time(),
+ cosTime:install_timerevent(),
+ if
+ is_list(Config) ->
+ Config;
+ true ->
+ exit("Config not a list")
+ end.
+
+finish_all(Config) ->
+ Path = code:which(?MODULE),
+ code:del_path(filename:join(filename:dirname(Path), "idl_output")),
+ cosTime:uninstall_time(),
+ cosTime:uninstall_timerevent(),
+ cosNotificationApp:uninstall(),
+ cosNotificationApp:uninstall_event(),
+ application:stop(orber),
+ application:stop(mnesia),
+ mnesia:delete_schema([node()]),
+ Config.
+
+%%-----------------------------------------------------------------
+%% Tests app file
+%%-----------------------------------------------------------------
+app_test(doc) -> [];
+app_test(suite) -> [];
+app_test(_Config) ->
+ ok=test_server:app_test(cosTime),
+ ok.
+
+%%-----------------------------------------------------------------
+%% CosTime API tests
+%%-----------------------------------------------------------------
+time_api(doc) -> ["CosTime API tests.", ""];
+time_api(suite) -> [];
+time_api(_Config) ->
+ ?line ?match(ok, application:start(cosTime)),
+ TS=cosTime:start_time_service(0, 500),
+ Time=calendar:datetime_to_gregorian_seconds({{1582,1,1},{0,0,0}}),
+ Inaccuracy = 1000,
+ Tdf =1,
+ Utc = #'TimeBase_UtcT'{time=Time, inacclo = ?low_TimeT(Inaccuracy),
+ inacchi = ?high_TimeT(Inaccuracy), tdf = Tdf},
+ ?line UTO1='CosTime_TimeService':new_universal_time(TS, Time, Inaccuracy, Tdf),
+ ?line UTO2='CosTime_TimeService':uto_from_utc(TS, Utc),
+ ?line ?match(Time, 'CosTime_UTO':'_get_time'(UTO1)),
+ ?line ?match(Inaccuracy, 'CosTime_UTO':'_get_inaccuracy'(UTO1)),
+ ?line ?match(Tdf, 'CosTime_UTO':'_get_tdf'(UTO1)),
+ ?line ?match(Utc, 'CosTime_UTO':'_get_utc_time'(UTO1)),
+
+ ?line ?match(Time, 'CosTime_UTO':'_get_time'(UTO2)),
+ ?line ?match(Inaccuracy, 'CosTime_UTO':'_get_inaccuracy'(UTO2)),
+ ?line ?match(Tdf, 'CosTime_UTO':'_get_tdf'(UTO2)),
+ ?line ?match(Utc, 'CosTime_UTO':'_get_utc_time'(UTO2)),
+
+ TIO1='CosTime_TimeService':new_interval(TS, 2, 5),
+ _TIO2='CosTime_TimeService':new_interval(TS, 3, 6),
+ TIO3='CosTime_TimeService':new_interval(TS, 1, 3),
+ TIO4='CosTime_TimeService':new_interval(TS, 3, 4),
+ TIO5='CosTime_TimeService':new_interval(TS, 7, 8),
+ TIO6='CosTime_TimeService':new_interval(TS, 2, 6),
+ TIO7='CosTime_TimeService':new_interval(TS, 3, 7),
+
+ ?line {_,TIO8} = ?match({'OTContained', _}, 'CosTime_TIO':overlaps(TIO1, TIO6)),
+ ?line {_,TIO9} = ?match({'OTContainer', _}, 'CosTime_TIO':overlaps(TIO1, TIO1)),
+ ?line {_,TIO10} = ?match({'OTContainer', _}, 'CosTime_TIO':overlaps(TIO1, TIO4)),
+ ?line {_,TIO11} = ?match({'OTOverlap', _}, 'CosTime_TIO':overlaps(TIO1, TIO3)),
+ ?line {_,TIO12} = ?match({'OTOverlap', _}, 'CosTime_TIO':overlaps(TIO1, TIO7)),
+ ?line {_,TIO13} = ?match({'OTNoOverlap', _}, 'CosTime_TIO':overlaps(TIO1, TIO5)),
+
+ ?line ?match({'TimeBase_IntervalT',2,5},'CosTime_TIO':'_get_time_interval'(TIO8)),
+ ?line ?match({'TimeBase_IntervalT',2,5},'CosTime_TIO':'_get_time_interval'(TIO9)),
+ ?line ?match({'TimeBase_IntervalT',3,4},'CosTime_TIO':'_get_time_interval'(TIO10)),
+ ?line ?match({'TimeBase_IntervalT',2,3},'CosTime_TIO':'_get_time_interval'(TIO11)),
+ ?line ?match({'TimeBase_IntervalT',3,5},'CosTime_TIO':'_get_time_interval'(TIO12)),
+ ?line ?match({'TimeBase_IntervalT',5,7},'CosTime_TIO':'_get_time_interval'(TIO13)),
+
+ ?line UTO3='CosTime_TimeService':new_universal_time(TS, 4, 2, 0), %% 2-6
+ ?line UTO4='CosTime_TimeService':new_universal_time(TS, 2, 1, 0), %% 1-3
+ ?line UTO5='CosTime_TimeService':new_universal_time(TS, 3, 0, 0), %% 3-3
+ ?line UTO6='CosTime_TimeService':new_universal_time(TS, 9, 1, 0), %% 8-10
+ ?line UTO7='CosTime_TimeService':new_universal_time(TS, 4, 3, 0), %% 1-7
+ ?line UTO8='CosTime_TimeService':new_universal_time(TS, 5, 2, 0), %% 3-7
+
+ ?line {_,TIO14} = ?match({'OTContained', _}, 'CosTime_TIO':spans(TIO1, UTO7)),
+ ?line {_,TIO15} = ?match({'OTContainer', _}, 'CosTime_TIO':spans(TIO1, UTO5)),
+ ?line {_,TIO16} = ?match({'OTOverlap', _}, 'CosTime_TIO':spans(TIO1, UTO4)),
+ ?line {_,TIO17} = ?match({'OTOverlap', _}, 'CosTime_TIO':spans(TIO1, UTO8)),
+ ?line {_,TIO18} = ?match({'OTNoOverlap', _}, 'CosTime_TIO':spans(TIO1, UTO6)),
+ ?line {_,TIO19} = ?match({'OTContained', _}, 'CosTime_TIO':spans(TIO1, UTO3)),
+
+ ?line ?match({'TimeBase_IntervalT',2,5},'CosTime_TIO':'_get_time_interval'(TIO14)),
+ ?line ?match({'TimeBase_IntervalT',3,3},'CosTime_TIO':'_get_time_interval'(TIO15)),
+ ?line ?match({'TimeBase_IntervalT',2,3},'CosTime_TIO':'_get_time_interval'(TIO16)),
+ ?line ?match({'TimeBase_IntervalT',3,5},'CosTime_TIO':'_get_time_interval'(TIO17)),
+ ?line ?match({'TimeBase_IntervalT',5,8},'CosTime_TIO':'_get_time_interval'(TIO18)),
+ ?line ?match({'TimeBase_IntervalT',2,5},'CosTime_TIO':'_get_time_interval'(TIO19)),
+
+
+ cosTime:stop_time_service(TS),
+ application:stop(cosTime),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% CosTimerEvent API tests
+%%-----------------------------------------------------------------
+timerevent_api(doc) -> ["CosTimerEvent API tests.", ""];
+timerevent_api(suite) -> [];
+timerevent_api(_Config) ->
+ %% Init cosTime apps.
+ ?line ?match(ok, application:start(cosTime)),
+ ?line TS=cosTime:start_time_service(0, 500),
+ ?line TES=cosTime:start_timerevent_service(TS),
+
+ %%----- Initialize the cosNotification application. -----
+ ?line cosNotificationApp:start(),
+ ?line Fac = (catch cosNotificationApp:start_factory([])),
+ ?line {Ch, _Id1} = (catch 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(Fac, [], [])),
+ %% Create the Admin objects
+ ?line {AdminSupplier, _ASID}= ?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_EventChannel':new_for_suppliers(Ch,'OR_OP')),
+ ?line {AdminConsumer, _ACID}= ?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_EventChannel':new_for_consumers(Ch,'OR_OP')),
+
+ %% Create a push consumer TimerEventService will push events to.
+ ?line {ProxyPushConsumer,_ID10}= ?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_SupplierAdmin':obtain_notification_push_consumer(AdminSupplier, 'ANY_EVENT')),
+
+ %% Create a pull suppliers so we can check we actually got the event.
+ ?line {ProxyPullSupplier,_ID1} = ?match({{_,key,_,_,_,_},_},
+ 'CosNotifyChannelAdmin_ConsumerAdmin':obtain_notification_pull_supplier(AdminConsumer, 'ANY_EVENT')),
+
+ AnyEvent = any:create(orber_tc:long(), 100),
+ ?line UTO=?match({_,pseudo,_,_,_,_}, 'CosTime_TimeService':new_universal_time(TS, 10*10000000,1,1)),
+ ?line EH=?match({_,key,_,_,_,_}, 'CosTimerEvent_TimerEventService':register(TES, ProxyPushConsumer, AnyEvent)),
+
+ ?line ?match('ESTimeCleared','CosTimerEvent_TimerEventHandler':'_get_status'(EH)),
+ ?line ?match({false,_},'CosTimerEvent_TimerEventHandler':time_set(EH)),
+ ?line ?match(ok,'CosTimerEvent_TimerEventHandler':set_timer(EH, 'TTRelative', UTO)),
+ ?line ?match({true,_},'CosTimerEvent_TimerEventHandler':time_set(EH)),
+ ?line ?match('ESTimeSet','CosTimerEvent_TimerEventHandler':'_get_status'(EH)),
+
+ ?line ?match({{any,tk_null,null}, false},
+ 'CosNotifyChannelAdmin_ProxyPullSupplier':try_pull(ProxyPullSupplier)),
+
+ ?line ?match(AnyEvent, 'CosNotifyChannelAdmin_ProxyPullSupplier':pull(ProxyPullSupplier)),
+ ?line ?match('ESTriggered','CosTimerEvent_TimerEventHandler':'_get_status'(EH)),
+
+ %% It's allowed to send an UTO with time eq. to 0 if the server is TTRelative.
+ %% When TTAbsolute BAD_PARAM is raised.
+ ?line UTO2=?match({_,pseudo,_,_,_,_}, 'CosTime_TimeService':new_universal_time(TS, 0,1,1)),
+ ?line ?match({'EXCEPTION',_},'CosTimerEvent_TimerEventHandler':set_timer(EH, 'TTAbsolute', UTO2)),
+ ?line ?match(ok,'CosTimerEvent_TimerEventHandler':set_timer(EH, 'TTRelative', UTO2)),
+ ?line ?match(AnyEvent, 'CosNotifyChannelAdmin_ProxyPullSupplier':pull(ProxyPullSupplier)),
+
+ %% TTPeriodic is defined to be relative, i.e., we can use the tactic as above.
+ ?line ?match(ok,'CosTimerEvent_TimerEventHandler':set_timer(EH, 'TTPeriodic', UTO2)),
+
+ %% Sleep for UTO*2+4 secs. At this point the Timer should have delivered 2 events.
+ timer:sleep(24000),
+ %% Cancel the timer so no more events will be delivered.
+ ?line ?match(true,'CosTimerEvent_TimerEventHandler':cancel_timer(EH)),
+
+ ?line ?match({AnyEvent, true}, 'CosNotifyChannelAdmin_ProxyPullSupplier':try_pull(ProxyPullSupplier)),
+ ?line ?match({AnyEvent, true}, 'CosNotifyChannelAdmin_ProxyPullSupplier':try_pull(ProxyPullSupplier)),
+ ?line ?match({{any,tk_null,null}, false},
+ 'CosNotifyChannelAdmin_ProxyPullSupplier':try_pull(ProxyPullSupplier)),
+
+
+
+ %% Clean up.
+ cosNotificationApp:stop(),
+ cosTime:stop_timerevent_service(TES),
+ cosTime:stop_time_service(TS),
+ application:stop(cosTime),
+ ok.
+
+
diff --git a/lib/cosTime/vsn.mk b/lib/cosTime/vsn.mk
index db51bf39b9..9d8057e8db 100644
--- a/lib/cosTime/vsn.mk
+++ b/lib/cosTime/vsn.mk
@@ -1,6 +1,8 @@
-COSTIME_VSN = 1.1.8
+COSTIME_VSN = 1.1.9
-TICKETS = OTP-8355
+TICKETS = OTP-8543
+
+TICKETS_1.1.8 = OTP-8355
TICKETS_1.1.7 = OTP-8201
diff --git a/lib/cosTransactions/doc/src/notes.xml b/lib/cosTransactions/doc/src/notes.xml
index 77541a9f85..7586e3c13f 100644
--- a/lib/cosTransactions/doc/src/notes.xml
+++ b/lib/cosTransactions/doc/src/notes.xml
@@ -34,7 +34,17 @@
<section>
<title>cosTransactions 1.2.10</title>
-
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>
+ Test suites published.</p>
+ <p>
+ Own Id: OTP-8543 Aux Id:</p>
+ </item>
+ </list>
+ </section>
<section>
<title>Fixed Bugs and Malfunctions</title>
<list type="bulleted">
diff --git a/lib/cosTransactions/test/Makefile b/lib/cosTransactions/test/Makefile
new file mode 100644
index 0000000000..8b1264d404
--- /dev/null
+++ b/lib/cosTransactions/test/Makefile
@@ -0,0 +1,150 @@
+#
+# %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%
+#
+#
+include $(ERL_TOP)/make/target.mk
+include $(ERL_TOP)/make/$(TARGET)/otp.mk
+
+#ifeq ($(TYPE),debug)
+#ERL_COMPILE_FLAGS += -Ddebug -W
+#endif
+
+# ----------------------------------------------------
+# Application version
+# ----------------------------------------------------
+include ../vsn.mk
+VSN=$(COSTRANSACTIONS_VSN)
+# ----------------------------------------------------
+# Release directory specification
+# ----------------------------------------------------
+RELSYSDIR = $(RELEASE_PATH)/cosTransactions_test
+
+# ----------------------------------------------------
+# Target Specs
+# ----------------------------------------------------
+TEST_SPEC_FILE = cosTransactions.spec
+
+
+IDL_FILES = \
+ etrap_test.idl
+
+IDLOUTDIR = idl_output
+
+MODULES = \
+ transactions_SUITE \
+ etrap_test_server_impl \
+ etrap_test_lib \
+ generated_SUITE
+
+GEN_MODULES = \
+ oe_etrap_test \
+ etrap_test_server
+
+GEN_HRL_FILES = \
+ oe_etrap_test.hrl \
+ etrap_test_server.hrl
+
+ERL_FILES = $(MODULES:%=%.erl)
+
+HRL_FILES = \
+ etrap_test_lib.hrl
+
+GEN_FILES = \
+ $(GEN_HRL_FILES:%=$(IDLOUTDIR)/%) \
+ $(GEN_MODULES:%=$(IDLOUTDIR)/%.erl)
+
+GEN_TARGET_FILES = $(GEN_MODULES:%=$(IDLOUTDIR)/%.$(EMULATOR))
+
+SUITE_TARGET_FILES = $(MODULES:%=%.$(EMULATOR))
+
+TARGET_FILES = \
+ $(GEN_TARGET_FILES) \
+ $(SUITE_TARGET_FILES)
+
+
+# ----------------------------------------------------
+# PROGRAMS
+# ----------------------------------------------------
+LOCAL_CLASSPATH = $(ERL_TOP)/lib/cosTransactions/priv:$(ERL_TOP)/lib/cosTransactions/test
+# ----------------------------------------------------
+# FLAGS
+# ----------------------------------------------------
+ERL_IDL_FLAGS += -pa $(ERL_TOP)/lib/cosTransactions/ebin\
+ -pa $(ERL_TOP)/lib/orber/ebin \
+ -pa $(ERL_TOP)/lib/ic/ebin
+
+ERL_COMPILE_FLAGS += \
+ $(ERL_IDL_FLAGS) \
+ -pa $(ERL_TOP)/lib/orber/include \
+ -pa $(ERL_TOP)/lib/test_server/ebin \
+ -pa $(ERL_TOP)/lib/cosTransactions/ebin \
+ -pa $(ERL_TOP)/lib/cosTransactions/test/idl_output \
+ -I$(ERL_TOP)/lib/orber/include \
+ -I$(ERL_TOP)/lib/cosTransactions \
+ -I$(ERL_TOP)/lib/cosTransactions/test/$(IDLOUTDIR) \
+ -I$(ERL_TOP)/lib/test_server/include
+
+# ----------------------------------------------------
+# Targets
+# ----------------------------------------------------
+
+
+tests debug opt: $(TARGET_FILES)
+
+clean:
+ rm -f idl_output/*
+ rm -f $(TARGET_FILES)
+ rm -f errs core *~
+
+#debug:
+# @${MAKE} TYPE=debug
+
+docs:
+
+# ----------------------------------------------------
+# Special Targets
+# ----------------------------------------------------
+
+TGT_TEST = \
+ $(GEN_HRL_FILES:%=$(IDLOUTDIR)/%) \
+ $(GEN_MODULES:%=$(IDLOUTDIR)/%.erl)
+
+$(TGT_TEST): etrap_test.idl
+ erlc $(ERL_IDL_FLAGS) -o$(IDLOUTDIR) \
+ +'{cfgfile,"etrap_test.cfg"}' etrap_test.idl
+
+# ----------------------------------------------------
+# Release Targets
+# ----------------------------------------------------
+# We don't copy generated intermediate erlang and hrl files
+
+include $(ERL_TOP)/make/otp_release_targets.mk
+
+release_spec:
+
+release_docs_spec:
+
+release_tests_spec: tests
+ $(INSTALL_DIR) $(RELSYSDIR)
+ $(INSTALL_DATA) $(IDL_FILES) $(TEST_SPEC_FILE) \
+ $(ERL_FILES) $(HRL_FILES) $(RELSYSDIR)
+ $(INSTALL_DATA) $(SUITE_TARGET_FILES) $(RELSYSDIR)
+ $(INSTALL_DIR) $(RELSYSDIR)/$(IDLOUTDIR)
+ $(INSTALL_DATA) $(GEN_TARGET_FILES) $(GEN_FILES) \
+ $(RELSYSDIR)/$(IDLOUTDIR)
+
diff --git a/lib/cosTransactions/test/cosTransactions.spec b/lib/cosTransactions/test/cosTransactions.spec
new file mode 100644
index 0000000000..8ad9259964
--- /dev/null
+++ b/lib/cosTransactions/test/cosTransactions.spec
@@ -0,0 +1,19 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1999-2010. 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%
+%%
+{topcase, {dir, "../cosTransactions_test"}}.
diff --git a/lib/cosTransactions/test/etrap_test.cfg b/lib/cosTransactions/test/etrap_test.cfg
new file mode 100644
index 0000000000..4f2b9e125d
--- /dev/null
+++ b/lib/cosTransactions/test/etrap_test.cfg
@@ -0,0 +1,20 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1999-2010. 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%
+%%
+{this, "etrap_test::server"}.
+{{handle_info, "etrap_test::server"}, true}.
diff --git a/lib/cosTransactions/test/etrap_test.idl b/lib/cosTransactions/test/etrap_test.idl
new file mode 100644
index 0000000000..7573cc1a36
--- /dev/null
+++ b/lib/cosTransactions/test/etrap_test.idl
@@ -0,0 +1,38 @@
+//
+// %CopyrightBegin%
+//
+// Copyright Ericsson AB 1999-2010. 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%
+//
+
+#ifndef _TEST_IDL
+#define _TEST_IDL
+#include <../src/CosTransactions.idl>
+module etrap_test {
+
+ // interface server
+ interface server :
+ CosTransactions::Coordinator, CosTransactions::SubtransactionAwareResource,
+ CosTransactions::RecoveryCoordinator, CosTransactions::Control {
+ };
+// interface Server :
+// CosTransactions::Coordinator, CosTransactions::SubtransactionAwareResource,
+// CosTransactions::RecoveryCoordinator, CosTransactions::Control,
+// CosTransactions::Synchronization {
+// };
+
+}; // End of test Module
+
+#endif
diff --git a/lib/cosTransactions/test/etrap_test_lib.erl b/lib/cosTransactions/test/etrap_test_lib.erl
new file mode 100644
index 0000000000..913a94510f
--- /dev/null
+++ b/lib/cosTransactions/test/etrap_test_lib.erl
@@ -0,0 +1,125 @@
+%%
+%% %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%
+%%
+%%
+
+-module(etrap_test_lib).
+
+%%--------------- INCLUDES ---------------------------------------------
+-include("etrap_test_lib.hrl").
+-include_lib("cosTransactions/src/ETraP_Common.hrl").
+
+%%--------------- EXPORTS ----------------------------------------------
+-export([scratch_debug_fun/0,
+ activate_debug_fun/5,
+ update_debug_info/1,
+ deactivate_debug_fun/3,
+ eval_debug_fun/4,
+ set_debug_context/4]).
+
+%%--------------- CONSTANTS/DEFINITIONS --------------------------------
+-define(DEBUG_TAB, etrap_debug).
+-record(debug_info, {id, function, type, file, line}).
+
+%%--------------- DEBUG FUNCTIONS --------------------------------------
+%% Managing conditional debug functions
+%%
+%% The main idea with the debug_fun's is to allow test programs
+%% to control the internal behaviour of CosTransactions.
+%%
+%% First should calls to ?eval_debug_fun be inserted at well
+%% defined places in CosTransaction's code. E.g. in critical situations
+%% of startup, transaction commit, backups etc.
+%%
+%% Then compile CosTransactions with the compiler option 'debug'.
+%%
+%% In test programs ?activate_debug_fun should be called
+%% in order to bind a fun to the debug identifier stated
+%% in the call to ?eval_debug_fun.
+
+scratch_debug_fun() ->
+ catch ets:delete(?DEBUG_TAB),
+ ets:new(?DEBUG_TAB,
+ [set, public, named_table, {keypos, 2}]).
+
+activate_debug_fun(FunId, Fun, Type, File, Line) ->
+ io:format("Activiating ~p RETRIES: ~p WAIT: ~p~n",
+ [FunId, ?tr_max_retries, ?tr_comm_failure_wait]),
+ Info = #debug_info{id = FunId,
+ function = Fun,
+ type = Type,
+ file = File,
+ line = Line},
+ update_debug_info(Info).
+
+update_debug_info(Info) ->
+ case catch ets:insert(?DEBUG_TAB, Info) of
+ {'EXIT', _} ->
+ scratch_debug_fun(),
+ ets:insert(?DEBUG_TAB, Info);
+ _ ->
+ ok
+ end,
+ ok.
+
+deactivate_debug_fun(FunId, _File, _Line) ->
+ catch ets:delete(?DEBUG_TAB, FunId),
+ ok.
+
+eval_debug_fun(FunId, Env, File, Line) ->
+ case catch ets:lookup(?DEBUG_TAB, FunId) of
+ [] ->
+ ok;
+ [Info] ->
+ Fun = Info#debug_info.function,
+ case Info#debug_info.type of
+ transient ->
+ deactivate_debug_fun(FunId, File, Line);
+ _->
+ ok
+ end,
+ io:format("Running debug fun ~p:~p (LINE: ~p)~n", [File, FunId, Line]),
+ Fun(Env);
+ {'EXIT', _R} ->
+ ok
+ end.
+
+
+set_debug_context([], [], _, _)-> ok;
+set_debug_context([], _, _, _)->
+ ets:delete(?DEBUG_TAB),
+ exit("failed transactions_SUITE. Bad configuration.");
+set_debug_context(_, [], _, _)->
+ ets:delete(?DEBUG_TAB),
+ exit("failed transactions_SUITE Bad configuration.");
+set_debug_context([RHead|RTail], [CHead|CTail], File, Line)->
+ write_context(RHead, CHead, File, Line),
+ set_debug_context(RTail, CTail, File, Line).
+
+write_context(_Resource, [], _, _)-> ok;
+write_context(Resource, [{Func, Fun, Type}|PTail], File, Line)->
+ etrap_test_lib:activate_debug_fun({Resource, Func},
+ Fun, Type,
+ File, Line),
+ write_context(Resource, PTail, File, Line);
+write_context(_,_, _, _) ->
+ ets:delete(?DEBUG_TAB),
+ exit("failed transactions_SUITE. Bad configuration.").
+
+
+%%--------------- END OF MODULE ----------------------------------------
diff --git a/lib/cosTransactions/test/etrap_test_lib.hrl b/lib/cosTransactions/test/etrap_test_lib.hrl
new file mode 100644
index 0000000000..d488bf9d12
--- /dev/null
+++ b/lib/cosTransactions/test/etrap_test_lib.hrl
@@ -0,0 +1,100 @@
+%%
+%% %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%
+%%
+%%
+
+-ifndef(ETRAP_TEST_LIB_HRL).
+-define(ETRAP_TEST_LIB_HRL, true).
+
+-define(match(ExpectedRes, Expr, Msg),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ io:format("~n------ CORRECT RESULT ------~n~p~n~p~n",
+ [AcTuAlReS, Msg]),
+ ok;
+ _ ->
+ io:format("~n###### ERROR ERROR ######~n~p~n~p~n",
+ [AcTuAlReS, Msg]),
+ exit(AcTuAlReS)
+ end
+ end()).
+
+-define(match_inverse(NotExpectedRes, Expr, Msg),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ NotExpectedRes ->
+ io:format("~n###### ERROR ERROR ######~n ~p~n~p~n",
+ [AcTuAlReS, Msg]),
+ exit(AcTuAlReS);
+ _ ->
+ io:format("~n------ CORRECT RESULT ------~n~p~n~p~n",
+ [AcTuAlReS, Msg]),
+ ok
+ end
+ end()).
+
+
+-define(crash_and_recover, fun(_Env)-> exit(crash_and_burn) end).
+
+-define(crash_no_recovery, fun(Env)-> throw({stop,normal,{Env,state}}) end).
+
+-define(delay(Time), fun(_Id) -> timer:sleep(Time*1000) end).
+
+-define(TIMEOUT, 4).
+-define(SUP_TEST(Env, Name),
+ ['etrap_test_server', Env,
+ [{sup_child, true}, {persistent, true},
+ {regname, {global, Name}}]]).
+
+-define(no_context, [[],[],[], []]).
+-define(nop, []).
+-define(delay_transient(Tag, Ti),
+ [{Tag, ?delay(Ti), transient}]).
+-define(crash_transient(Tag),
+ [{Tag, ?crash_and_recover, transient}]).
+-define(crash_permanent(Tag),
+ [{Tag, ?crash_no_recovery, permanent}]).
+
+%%-----------------------------------------------------------
+%% Definition of 'Resource' action.
+%% function action reply
+%%-----------------------------------------------------------
+%% raise #'CosTransactions_HeuristicMixed' {}
+-define(rollback_mix, [{rollback, exc, ?tr_mixed}]).
+-define(commit_mix, [{commit, exc, ?tr_mixed}]).
+-define(prepare_mix, [{prepare, exc, ?tr_mixed}]).
+%% raise #'CosTransactions_HeuristicRollback' {}
+-define(rollback_rb, [{rollback, exc, ?tr_rollback}]).
+-define(commit_rb, [{commit, exc, ?tr_rollback}]).
+%% raise #'CosTransactions_HeuristicCommit' {}
+-define(rollback_cm, [{rollback, exc, ?tr_commit}]).
+-define(commit_cm, [{commit, exc, ?tr_commit}]).
+%% delay reply
+-define(rollback_delay, [{rollback, delay, ?TIMEOUT*2}]).
+-define(commit_delay, [{commit, delay, ?TIMEOUT*2}]).
+-define(prepare_delay, [{prepare, delay, ?TIMEOUT*2}]).
+%% other reply than default
+-define(prepare_commit, [{prepare, reply, 'VoteCommit'}]).
+-define(prepare_rollback, [{prepare, stop_reply, 'VoteRollback'}]).
+
+-endif.
+
+%%-------------- EOF ---------------------------------------------------
diff --git a/lib/cosTransactions/test/etrap_test_server_impl.erl b/lib/cosTransactions/test/etrap_test_server_impl.erl
new file mode 100644
index 0000000000..69c823f3ca
--- /dev/null
+++ b/lib/cosTransactions/test/etrap_test_server_impl.erl
@@ -0,0 +1,210 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1999-2010. 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(etrap_test_server_impl).
+
+%%--------------- INCLUDES -----------------------------------
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/include/ifr_types.hrl").
+%% Local
+-include_lib("cosTransactions/src/ETraP_Common.hrl").
+-include_lib("cosTransactions/include/CosTransactions.hrl").
+%%--------------- IMPORTS-------------------------------------
+%%--------------- EXPORTS-------------------------------------
+-export([prepare/2,
+ rollback/2,
+ commit/2,
+ commit_one_phase/2,
+ forget/2,
+% before_completion/2,
+% after_completion/3,
+ commit_subtransaction/3,
+ rollback_subtransaction/2]).
+
+
+%%--------------- gen_server specific ------------------------
+-export([init/1, terminate/2]).
+-export([handle_call/3, handle_cast/2, handle_info/2, code_change/3]).
+
+%%------------------------------------------------------------
+%% function : init, terminate
+%%------------------------------------------------------------
+init(State) ->
+ process_flag(trap_exit,true),
+ io:format("etrap_test_server:init ~p~n", [State]),
+ ?debug_print("STARTING etrap_test_server( ~p )~n", [State]),
+ {ok, State}.
+
+terminate(Reason, _State) ->
+ io:format("etrap_test_server:terminate ~p~n", [Reason]),
+ ?debug_print("STOPREASON etrap_test_server( ~p )~n", [Reason]),
+ ok.
+
+code_change(_OldVsn, State, _Extra) ->
+ {ok, State}.
+handle_call(_,_, State) ->
+ {noreply, State}.
+handle_cast(_, State) ->
+ {noreply, State}.
+handle_info(_Info, State) ->
+ {noreply, State}.
+
+%%-- Inherit from CosTransactions::SubtransactionAwareResource --
+prepare(_Self, State) ->
+ case ?is_debug_compiled of
+ true ->
+ io:format("etrap_test_server:prepare ~p~n", [State]);
+ _->
+ ok
+ end,
+% ?debug_print("etrap_test_server:prepare ~p~n", [State]),
+ action(prepare, State, {reply, 'VoteCommit', State}).
+
+rollback(_Self, State) ->
+ case ?is_debug_compiled of
+ true ->
+ io:format("etrap_test_server:rollback ~p~n", [State]);
+ _->
+ ok
+ end,
+% ?debug_print("etrap_test_server:rollback ~p~n", [State]),
+ case sync_test(State) of
+ true ->
+ action(rollback, State, {reply, ok, State});
+ _->
+ action(rollback, State, {stop, normal, ok, State})
+ end.
+
+commit(_Self, State) ->
+ case ?is_debug_compiled of
+ true ->
+ io:format("etrap_test_server:commit ~p~n", [State]);
+ _->
+ ok
+ end,
+% ?debug_print("etrap_test_server:commit ~p~n", [State]),
+ case sync_test(State) of
+ true ->
+ action(commit, State, {reply, ok, State});
+ _->
+ action(commit, State, {stop, normal, ok, State})
+ end.
+
+commit_one_phase(_Self, State) ->
+ case ?is_debug_compiled of
+ true ->
+ io:format("etrap_test_server:commit_one_phase ~p~n", [State]);
+ _->
+ ok
+ end,
+% ?debug_print("etrap_test_server:commit_one_phase ~p~n", [State]),
+ case sync_test(State) of
+ true ->
+ {reply, ok, State};
+ _->
+ {stop, normal, ok, State}
+ end.
+
+forget(_Self, State) ->
+ case ?is_debug_compiled of
+ true ->
+ io:format("etrap_test_server:forget ~p~n", [State]);
+ _->
+ ok
+ end,
+% ?debug_print("etrap_test_server:forget ~p~n", [State]),
+ case sync_test(State) of
+ true ->
+ {reply, ok, State};
+ _->
+ {stop, normal, ok, State}
+ end.
+
+commit_subtransaction(_Self, State, Parent) ->
+ case ?is_debug_compiled of
+ true ->
+ io:format("etrap_test_server:commit_subtransaction( ~p )~n", [Parent]);
+ _->
+ ok
+ end,
+% ?debug_print("etrap_test_server:commit_subtransaction( ~p )~n", [Parent]),
+ {reply, ok, State}.
+rollback_subtransaction(_Self, State) ->
+ case ?is_debug_compiled of
+ true ->
+ io:format("etrap_test_server:rollback_subtransaction()~n", []);
+ _->
+ ok
+ end,
+% ?debug_print("etrap_test_server:rollback_subtransaction()~n", []),
+ {reply, ok, State}.
+
+%before_completion(_Self, State) ->
+% case ?is_debug_compiled of
+% true ->
+% io:format("etrap_test_server:before_completion()~n", []);
+% _->
+% ok
+% end,
+%% ?debug_print("etrap_test_server:before_completion()~n", []),
+% {reply, ok, State}.
+%after_completion(_Self, State, Status) ->
+% case ?is_debug_compiled of
+% true ->
+% io:format("etrap_test_server:after_completion( ~p )~n", [Status]);
+% _->
+% ok
+% end,
+%% ?debug_print("etrap_test_server:after_completion( ~p )~n", [Status]),
+% {stop, normal, ok, State}.
+
+%%--------------- LOCAL FUNCTIONS ----------------------------
+action(Key, State, Default) ->
+ case catch lists:keysearch(Key, 1, State) of
+ {value,{Key, stop_reply, R}} ->
+ case sync_test(State) of
+ true ->
+ {reply, R, State};
+ _->
+ {stop, normal, R, State}
+ end;
+ {value,{Key, reply, R}} ->
+ {reply, R, State};
+ {value,{Key, exc, E}} ->
+ corba:raise(E);
+ {value,{Key, delay, Time}} ->
+ timer:sleep(Time*1000),
+ Default;
+ {value,{Key,Value}} ->
+ Value;
+ _ ->
+ Default
+ end.
+
+sync_test(State) ->
+ case catch lists:keysearch(sync, 1, State) of
+ {value,{sync, true}} ->
+ true;
+ _ ->
+ false
+ end.
+
+
+%%--------------- END OF MODULE ------------------------------
+
diff --git a/lib/cosTransactions/test/generated_SUITE.erl b/lib/cosTransactions/test/generated_SUITE.erl
new file mode 100644
index 0000000000..cc54eb168e
--- /dev/null
+++ b/lib/cosTransactions/test/generated_SUITE.erl
@@ -0,0 +1,564 @@
+%%-----------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2004-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%
+%%
+%%
+%%-----------------------------------------------------------------
+%% File : generated_SUITE.erl
+%% Purpose :
+%% Created : 27 Jan 2004
+%%-----------------------------------------------------------------
+
+-module(generated_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/include/corba.hrl").
+
+-define(default_timeout, ?t:minutes(3)).
+
+-define(match(ExpectedRes, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+-define(nomatch(Not, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ Not ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS);
+ _ ->
+ AcTuAlReS
+ end
+ end()).
+
+
+-define(checktc(_Op),
+ fun(TC) ->
+ case orber_tc:check_tc(TC) of
+ false ->
+ io:format("###### ERROR ERROR ######~n~p - ~p~n", [Op, TC]),
+ ?line exit(TC);
+ true ->
+ true
+ end
+ end).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-export([]).
+-compile(export_all).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["This suite is for testing IC generated files"];
+all(suite) ->
+ ['CosTransactions_Control', 'CosTransactions_Coordinator',
+ 'CosTransactions_HeuristicCommit', 'CosTransactions_HeuristicHazard',
+ 'CosTransactions_HeuristicMixed', 'CosTransactions_HeuristicRollback',
+ 'CosTransactions_Inactive', 'CosTransactions_InvalidControl',
+ 'CosTransactions_NoTransaction', 'CosTransactions_NotPrepared',
+ 'CosTransactions_NotSubtransaction', 'CosTransactions_RecoveryCoordinator',
+ 'CosTransactions_Resource', 'CosTransactions_SubtransactionAwareResource',
+ 'CosTransactions_SubtransactionsUnavailable', 'CosTransactions_Terminator',
+ 'CosTransactions_TransactionFactory', 'CosTransactions_Unavailable',
+ 'CosTransactions_SynchronizationUnavailable', 'CosTransactions_TransIdentity',
+ 'CosTransactions_PropagationContext', 'CosTransactions_otid_t',
+ 'CosTransactions_WrongTransaction', 'ETraP_Server'].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTransactions_HeuristicCommit'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTransactions_HeuristicCommit'(doc) -> ["CosTransactions_HeuristicCommit"];
+'CosTransactions_HeuristicCommit'(suite) -> [];
+'CosTransactions_HeuristicCommit'(_) ->
+ ?match(true, orber_tc:check_tc('CosTransactions_HeuristicCommit':tc())),
+ ?match("IDL:omg.org/CosTransactions/HeuristicCommit:1.0",
+ 'CosTransactions_HeuristicCommit':id()),
+ ?match("CosTransactions_HeuristicCommit",
+ 'CosTransactions_HeuristicCommit':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTransactions_HeuristicHazard'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTransactions_HeuristicHazard'(doc) -> ["CosTransactions_HeuristicHazard"];
+'CosTransactions_HeuristicHazard'(suite) -> [];
+'CosTransactions_HeuristicHazard'(_) ->
+ ?match(true, orber_tc:check_tc('CosTransactions_HeuristicHazard':tc())),
+ ?match("IDL:omg.org/CosTransactions/HeuristicHazard:1.0",
+ 'CosTransactions_HeuristicHazard':id()),
+ ?match("CosTransactions_HeuristicHazard",
+ 'CosTransactions_HeuristicHazard':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTransactions_HeuristicMixed'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTransactions_HeuristicMixed'(doc) -> ["CosTransactions_HeuristicMixed"];
+'CosTransactions_HeuristicMixed'(suite) -> [];
+'CosTransactions_HeuristicMixed'(_) ->
+ ?match(true, orber_tc:check_tc('CosTransactions_HeuristicMixed':tc())),
+ ?match("IDL:omg.org/CosTransactions/HeuristicMixed:1.0",
+ 'CosTransactions_HeuristicMixed':id()),
+ ?match("CosTransactions_HeuristicMixed",
+ 'CosTransactions_HeuristicMixed':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTransactions_HeuristicRollback'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTransactions_HeuristicRollback'(doc) -> ["CosTransactions_HeuristicRollback"];
+'CosTransactions_HeuristicRollback'(suite) -> [];
+'CosTransactions_HeuristicRollback'(_) ->
+ ?match(true, orber_tc:check_tc('CosTransactions_HeuristicRollback':tc())),
+ ?match("IDL:omg.org/CosTransactions/HeuristicRollback:1.0",
+ 'CosTransactions_HeuristicRollback':id()),
+ ?match("CosTransactions_HeuristicRollback",
+ 'CosTransactions_HeuristicRollback':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTransactions_Inactive'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTransactions_Inactive'(doc) -> ["CosTransactions_Inactive"];
+'CosTransactions_Inactive'(suite) -> [];
+'CosTransactions_Inactive'(_) ->
+ ?match(true, orber_tc:check_tc('CosTransactions_Inactive':tc())),
+ ?match("IDL:omg.org/CosTransactions/Inactive:1.0",
+ 'CosTransactions_Inactive':id()),
+ ?match("CosTransactions_Inactive",
+ 'CosTransactions_Inactive':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTransactions_InvalidControl'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTransactions_InvalidControl'(doc) -> ["CosTransactions_InvalidControl"];
+'CosTransactions_InvalidControl'(suite) -> [];
+'CosTransactions_InvalidControl'(_) ->
+ ?match(true, orber_tc:check_tc('CosTransactions_InvalidControl':tc())),
+ ?match("IDL:omg.org/CosTransactions/InvalidControl:1.0",
+ 'CosTransactions_InvalidControl':id()),
+ ?match("CosTransactions_InvalidControl",
+ 'CosTransactions_InvalidControl':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTransactions_NoTransaction'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTransactions_NoTransaction'(doc) -> ["CosTransactions_NoTransaction"];
+'CosTransactions_NoTransaction'(suite) -> [];
+'CosTransactions_NoTransaction'(_) ->
+ ?match(true, orber_tc:check_tc('CosTransactions_NoTransaction':tc())),
+ ?match("IDL:omg.org/CosTransactions/NoTransaction:1.0",
+ 'CosTransactions_NoTransaction':id()),
+ ?match("CosTransactions_NoTransaction",
+ 'CosTransactions_NoTransaction':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTransactions_NotPrepared'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTransactions_NotPrepared'(doc) -> ["CosTransactions_NotPrepared"];
+'CosTransactions_NotPrepared'(suite) -> [];
+'CosTransactions_NotPrepared'(_) ->
+ ?match(true, orber_tc:check_tc('CosTransactions_NotPrepared':tc())),
+ ?match("IDL:omg.org/CosTransactions/NotPrepared:1.0",
+ 'CosTransactions_NotPrepared':id()),
+ ?match("CosTransactions_NotPrepared",
+ 'CosTransactions_NotPrepared':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTransactions_NotSubtransaction'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTransactions_NotSubtransaction'(doc) -> ["CosTransactions_NotSubtransaction"];
+'CosTransactions_NotSubtransaction'(suite) -> [];
+'CosTransactions_NotSubtransaction'(_) ->
+ ?match(true, orber_tc:check_tc('CosTransactions_NotSubtransaction':tc())),
+ ?match("IDL:omg.org/CosTransactions/NotSubtransaction:1.0",
+ 'CosTransactions_NotSubtransaction':id()),
+ ?match("CosTransactions_NotSubtransaction",
+ 'CosTransactions_NotSubtransaction':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTransactions_SubtransactionsUnavailable'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTransactions_SubtransactionsUnavailable'(doc) -> ["CosTransactions_SubtransactionsUnavailable"];
+'CosTransactions_SubtransactionsUnavailable'(suite) -> [];
+'CosTransactions_SubtransactionsUnavailable'(_) ->
+ ?match(true, orber_tc:check_tc('CosTransactions_SubtransactionsUnavailable':tc())),
+ ?match("IDL:omg.org/CosTransactions/SubtransactionsUnavailable:1.0",
+ 'CosTransactions_SubtransactionsUnavailable':id()),
+ ?match("CosTransactions_SubtransactionsUnavailable",
+ 'CosTransactions_SubtransactionsUnavailable':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTransactions_Unavailable'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTransactions_Unavailable'(doc) -> ["CosTransactions_Unavailable"];
+'CosTransactions_Unavailable'(suite) -> [];
+'CosTransactions_Unavailable'(_) ->
+ ?match(true, orber_tc:check_tc('CosTransactions_Unavailable':tc())),
+ ?match("IDL:omg.org/CosTransactions/Unavailable:1.0",
+ 'CosTransactions_Unavailable':id()),
+ ?match("CosTransactions_Unavailable",
+ 'CosTransactions_Unavailable':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTransactions_SynchronizationUnavailable'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTransactions_SynchronizationUnavailable'(doc) -> ["CosTransactions_SynchronizationUnavailable"];
+'CosTransactions_SynchronizationUnavailable'(suite) -> [];
+'CosTransactions_SynchronizationUnavailable'(_) ->
+ ?match(true, orber_tc:check_tc('CosTransactions_SynchronizationUnavailable':tc())),
+ ?match("IDL:omg.org/CosTransactions/SynchronizationUnavailable:1.0",
+ 'CosTransactions_SynchronizationUnavailable':id()),
+ ?match("CosTransactions_SynchronizationUnavailable",
+ 'CosTransactions_SynchronizationUnavailable':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTransactions_TransIdentity'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTransactions_TransIdentity'(doc) -> ["CosTransactions_TransIdentity"];
+'CosTransactions_TransIdentity'(suite) -> [];
+'CosTransactions_TransIdentity'(_) ->
+ ?match(true, orber_tc:check_tc('CosTransactions_TransIdentity':tc())),
+ ?match("IDL:omg.org/CosTransactions/TransIdentity:1.0",
+ 'CosTransactions_TransIdentity':id()),
+ ?match("CosTransactions_TransIdentity",
+ 'CosTransactions_TransIdentity':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTransactions_PropagationContext'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTransactions_PropagationContext'(doc) -> ["CosTransactions_PropagationContext"];
+'CosTransactions_PropagationContext'(suite) -> [];
+'CosTransactions_PropagationContext'(_) ->
+ ?match(true, orber_tc:check_tc('CosTransactions_PropagationContext':tc())),
+ ?match("IDL:omg.org/CosTransactions/PropagationContext:1.0",
+ 'CosTransactions_PropagationContext':id()),
+ ?match("CosTransactions_PropagationContext",
+ 'CosTransactions_PropagationContext':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTransactions_otid_t'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTransactions_otid_t'(doc) -> ["CosTransactions_otid_t"];
+'CosTransactions_otid_t'(suite) -> [];
+'CosTransactions_otid_t'(_) ->
+ ?match(true, orber_tc:check_tc('CosTransactions_otid_t':tc())),
+ ?match("IDL:omg.org/CosTransactions/otid_t:1.0",
+ 'CosTransactions_otid_t':id()),
+ ?match("CosTransactions_otid_t",
+ 'CosTransactions_otid_t':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTransactions_WrongTransaction'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTransactions_WrongTransaction'(doc) -> ["CosTransactions_WrongTransaction"];
+'CosTransactions_WrongTransaction'(suite) -> [];
+'CosTransactions_WrongTransaction'(_) ->
+ ?match(true, orber_tc:check_tc('CosTransactions_WrongTransaction':tc())),
+ ?match("IDL:omg.org/CosTransactions/WrongTransaction:1.0",
+ 'CosTransactions_WrongTransaction':id()),
+ ?match("CosTransactions_WrongTransaction",
+ 'CosTransactions_WrongTransaction':name()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTransactions_Control'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTransactions_Control'(doc) -> ["CosTransactions_Control"];
+'CosTransactions_Control'(suite) -> [];
+'CosTransactions_Control'(_) ->
+ ?nomatch(undefined, 'CosTransactions_Control':oe_tc(get_terminator)),
+ ?nomatch(undefined, 'CosTransactions_Control':oe_tc(get_coordinator)),
+ ?match(undefined, 'CosTransactions_Control':oe_tc(undefined)),
+ ?match([_|_], 'CosTransactions_Control':oe_get_interface()),
+ ?match("IDL:omg.org/CosTransactions/Control:1.0",
+ 'CosTransactions_Control':typeID()),
+ check_tc('CosTransactions_Control':oe_get_interface()),
+ ?match(true, 'CosTransactions_Control':oe_is_a('CosTransactions_Control':typeID())),
+ ?match(false, 'CosTransactions_Control':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTransactions_Coordinator'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTransactions_Coordinator'(doc) -> ["CosTransactions_Coordinator"];
+'CosTransactions_Coordinator'(suite) -> [];
+'CosTransactions_Coordinator'(_) ->
+ ?nomatch(undefined, 'CosTransactions_Coordinator':oe_tc(get_status)),
+ ?nomatch(undefined, 'CosTransactions_Coordinator':oe_tc(get_parent_status)),
+ ?nomatch(undefined, 'CosTransactions_Coordinator':oe_tc(get_top_level_status)),
+ ?nomatch(undefined, 'CosTransactions_Coordinator':oe_tc(is_same_transaction)),
+ ?nomatch(undefined, 'CosTransactions_Coordinator':oe_tc(is_related_transaction)),
+ ?nomatch(undefined, 'CosTransactions_Coordinator':oe_tc(is_ancestor_transaction)),
+ ?nomatch(undefined, 'CosTransactions_Coordinator':oe_tc(is_descendant_transaction)),
+ ?nomatch(undefined, 'CosTransactions_Coordinator':oe_tc(is_top_level_transaction)),
+ ?nomatch(undefined, 'CosTransactions_Coordinator':oe_tc(hash_transaction)),
+ ?nomatch(undefined, 'CosTransactions_Coordinator':oe_tc(hash_top_level_tran)),
+ ?nomatch(undefined, 'CosTransactions_Coordinator':oe_tc(register_resource)),
+ ?nomatch(undefined, 'CosTransactions_Coordinator':oe_tc(register_subtran_aware)),
+ ?nomatch(undefined, 'CosTransactions_Coordinator':oe_tc(rollback_only)),
+ ?nomatch(undefined, 'CosTransactions_Coordinator':oe_tc(get_transaction_name)),
+ ?nomatch(undefined, 'CosTransactions_Coordinator':oe_tc(create_subtransaction)),
+ ?nomatch(undefined, 'CosTransactions_Coordinator':oe_tc(get_txcontext)),
+ ?match(undefined, 'CosTransactions_Coordinator':oe_tc(undefined)),
+ ?match([_|_], 'CosTransactions_Coordinator':oe_get_interface()),
+ ?match("IDL:omg.org/CosTransactions/Coordinator:1.0",
+ 'CosTransactions_Coordinator':typeID()),
+ check_tc('CosTransactions_Coordinator':oe_get_interface()),
+ ?match(true, 'CosTransactions_Coordinator':oe_is_a('CosTransactions_Coordinator':typeID())),
+ ?match(false, 'CosTransactions_Coordinator':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTransactions_RecoveryCoordinator'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTransactions_RecoveryCoordinator'(doc) -> ["CosTransactions_RecoveryCoordinator"];
+'CosTransactions_RecoveryCoordinator'(suite) -> [];
+'CosTransactions_RecoveryCoordinator'(_) ->
+ ?nomatch(undefined, 'CosTransactions_RecoveryCoordinator':oe_tc(replay_completion)),
+ ?match(undefined, 'CosTransactions_RecoveryCoordinator':oe_tc(undefined)),
+ ?match([_|_], 'CosTransactions_RecoveryCoordinator':oe_get_interface()),
+ ?match("IDL:omg.org/CosTransactions/RecoveryCoordinator:1.0",
+ 'CosTransactions_RecoveryCoordinator':typeID()),
+ check_tc('CosTransactions_RecoveryCoordinator':oe_get_interface()),
+ ?match(true, 'CosTransactions_RecoveryCoordinator':oe_is_a('CosTransactions_RecoveryCoordinator':typeID())),
+ ?match(false, 'CosTransactions_RecoveryCoordinator':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTransactions_Resource'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTransactions_Resource'(doc) -> ["CosTransactions_Resource"];
+'CosTransactions_Resource'(suite) -> [];
+'CosTransactions_Resource'(_) ->
+ ?nomatch(undefined, 'CosTransactions_Resource':oe_tc(prepare)),
+ ?nomatch(undefined, 'CosTransactions_Resource':oe_tc(rollback)),
+ ?nomatch(undefined, 'CosTransactions_Resource':oe_tc(commit)),
+ ?nomatch(undefined, 'CosTransactions_Resource':oe_tc(commit_one_phase)),
+ ?nomatch(undefined, 'CosTransactions_Resource':oe_tc(forget)),
+ ?match(undefined, 'CosTransactions_Resource':oe_tc(undefined)),
+ ?match([_|_], 'CosTransactions_Resource':oe_get_interface()),
+ ?match("IDL:omg.org/CosTransactions/Resource:1.0",
+ 'CosTransactions_Resource':typeID()),
+ check_tc('CosTransactions_Resource':oe_get_interface()),
+ ?match(true, 'CosTransactions_Resource':oe_is_a('CosTransactions_Resource':typeID())),
+ ?match(false, 'CosTransactions_Resource':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTransactions_SubtransactionAwareResource'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTransactions_SubtransactionAwareResource'(doc) -> ["CosTransactions_SubtransactionAwareResource"];
+'CosTransactions_SubtransactionAwareResource'(suite) -> [];
+'CosTransactions_SubtransactionAwareResource'(_) ->
+ ?nomatch(undefined, 'CosTransactions_SubtransactionAwareResource':oe_tc(commit_subtransaction)),
+ ?nomatch(undefined, 'CosTransactions_SubtransactionAwareResource':oe_tc(rollback_subtransaction)),
+ ?nomatch(undefined, 'CosTransactions_SubtransactionAwareResource':oe_tc(prepare)),
+ ?nomatch(undefined, 'CosTransactions_SubtransactionAwareResource':oe_tc(rollback)),
+ ?nomatch(undefined, 'CosTransactions_SubtransactionAwareResource':oe_tc(commit)),
+ ?nomatch(undefined, 'CosTransactions_SubtransactionAwareResource':oe_tc(commit_one_phase)),
+ ?nomatch(undefined, 'CosTransactions_SubtransactionAwareResource':oe_tc(forget)),
+ ?match(undefined, 'CosTransactions_SubtransactionAwareResource':oe_tc(undefined)),
+ ?match([_|_], 'CosTransactions_SubtransactionAwareResource':oe_get_interface()),
+ ?match("IDL:omg.org/CosTransactions/SubtransactionAwareResource:1.0",
+ 'CosTransactions_SubtransactionAwareResource':typeID()),
+ check_tc('CosTransactions_SubtransactionAwareResource':oe_get_interface()),
+ ?match(true, 'CosTransactions_SubtransactionAwareResource':oe_is_a('CosTransactions_SubtransactionAwareResource':typeID())),
+ ?match(true, 'CosTransactions_SubtransactionAwareResource':oe_is_a('CosTransactions_Resource':typeID())),
+ ?match(false, 'CosTransactions_SubtransactionAwareResource':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTransactions_Terminator'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTransactions_Terminator'(doc) -> ["CosTransactions_Terminator"];
+'CosTransactions_Terminator'(suite) -> [];
+'CosTransactions_Terminator'(_) ->
+ ?nomatch(undefined, 'CosTransactions_Terminator':oe_tc(commit)),
+ ?nomatch(undefined, 'CosTransactions_Terminator':oe_tc(rollback)),
+ ?match(undefined, 'CosTransactions_Terminator':oe_tc(undefined)),
+ ?match([_|_], 'CosTransactions_Terminator':oe_get_interface()),
+ ?match("IDL:omg.org/CosTransactions/Terminator:1.0",
+ 'CosTransactions_Terminator':typeID()),
+ check_tc('CosTransactions_Terminator':oe_get_interface()),
+ ?match(true, 'CosTransactions_Terminator':oe_is_a('CosTransactions_Terminator':typeID())),
+ ?match(false, 'CosTransactions_Terminator':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosTransactions_TransactionFactory'
+%% Description:
+%%-----------------------------------------------------------------
+'CosTransactions_TransactionFactory'(doc) -> ["CosTransactions_TransactionFactory"];
+'CosTransactions_TransactionFactory'(suite) -> [];
+'CosTransactions_TransactionFactory'(_) ->
+ ?nomatch(undefined, 'CosTransactions_TransactionFactory':oe_tc(create)),
+ ?nomatch(undefined, 'CosTransactions_TransactionFactory':oe_tc(recreate)),
+ ?match(undefined, 'CosTransactions_TransactionFactory':oe_tc(undefined)),
+ ?match([_|_], 'CosTransactions_TransactionFactory':oe_get_interface()),
+ ?match("IDL:omg.org/CosTransactions/TransactionFactory:1.0",
+ 'CosTransactions_TransactionFactory':typeID()),
+ check_tc('CosTransactions_TransactionFactory':oe_get_interface()),
+ ?match(true, 'CosTransactions_TransactionFactory':oe_is_a('CosTransactions_TransactionFactory':typeID())),
+ ?match(false, 'CosTransactions_TransactionFactory':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'ETraP_Server'
+%% Description:
+%%-----------------------------------------------------------------
+'ETraP_Server'(doc) -> ["ETraP_Server"];
+'ETraP_Server'(suite) -> [];
+'ETraP_Server'(_) ->
+ ?nomatch(undefined, 'ETraP_Server':oe_tc(get_status)),
+ ?nomatch(undefined, 'ETraP_Server':oe_tc(get_parent_status)),
+ ?nomatch(undefined, 'ETraP_Server':oe_tc(get_top_level_status)),
+ ?nomatch(undefined, 'ETraP_Server':oe_tc(is_same_transaction)),
+ ?nomatch(undefined, 'ETraP_Server':oe_tc(is_related_transaction)),
+ ?nomatch(undefined, 'ETraP_Server':oe_tc(is_ancestor_transaction)),
+ ?nomatch(undefined, 'ETraP_Server':oe_tc(is_descendant_transaction)),
+ ?nomatch(undefined, 'ETraP_Server':oe_tc(is_top_level_transaction)),
+ ?nomatch(undefined, 'ETraP_Server':oe_tc(hash_transaction)),
+ ?nomatch(undefined, 'ETraP_Server':oe_tc(hash_top_level_tran)),
+ ?nomatch(undefined, 'ETraP_Server':oe_tc(register_resource)),
+ ?nomatch(undefined, 'ETraP_Server':oe_tc(register_subtran_aware)),
+ ?nomatch(undefined, 'ETraP_Server':oe_tc(rollback_only)),
+ ?nomatch(undefined, 'ETraP_Server':oe_tc(get_transaction_name)),
+ ?nomatch(undefined, 'ETraP_Server':oe_tc(create_subtransaction)),
+ ?nomatch(undefined, 'ETraP_Server':oe_tc(get_txcontext)),
+ ?nomatch(undefined, 'ETraP_Server':oe_tc(prepare)),
+ ?nomatch(undefined, 'ETraP_Server':oe_tc(rollback)),
+ ?nomatch(undefined, 'ETraP_Server':oe_tc(commit)),
+ ?nomatch(undefined, 'ETraP_Server':oe_tc(commit_one_phase)),
+ ?nomatch(undefined, 'ETraP_Server':oe_tc(forget)),
+ ?nomatch(undefined, 'ETraP_Server':oe_tc(replay_completion)),
+ ?nomatch(undefined, 'ETraP_Server':oe_tc(get_terminator)),
+ ?nomatch(undefined, 'ETraP_Server':oe_tc(get_coordinator)),
+ ?match(undefined, 'ETraP_Server':oe_tc(undefined)),
+ ?match([_|_], 'ETraP_Server':oe_get_interface()),
+ ?match("IDL:omg.org/ETraP/Server:1.0",
+ 'ETraP_Server':typeID()),
+ check_tc('ETraP_Server':oe_get_interface()),
+ ?match(true, 'ETraP_Server':oe_is_a('ETraP_Server':typeID())),
+ ?match(true, 'ETraP_Server':oe_is_a('CosTransactions_Coordinator':typeID())),
+ ?match(true, 'ETraP_Server':oe_is_a('CosTransactions_Resource':typeID())),
+ ?match(true, 'ETraP_Server':oe_is_a('CosTransactions_RecoveryCoordinator':typeID())),
+ ?match(true, 'ETraP_Server':oe_is_a('CosTransactions_Control':typeID())),
+ ?match(false, 'ETraP_Server':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% MISC functions
+%%-----------------------------------------------------------------
+check_tc([]) ->
+ ok;
+check_tc([{Op, {RetType, InParameters, OutParameters}}|T]) ->
+ io:format("checked - ~s~n", [Op]),
+ lists:all(?checktc(Op), [RetType|InParameters]),
+ lists:all(?checktc(Op), OutParameters),
+ check_tc(T).
+
+
diff --git a/lib/cosTransactions/test/transactions_SUITE.erl b/lib/cosTransactions/test/transactions_SUITE.erl
new file mode 100644
index 0000000000..8385d5a0fb
--- /dev/null
+++ b/lib/cosTransactions/test/transactions_SUITE.erl
@@ -0,0 +1,395 @@
+%%
+%% %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%
+%%
+%%
+-module(transactions_SUITE).
+
+%%--------------- INCLUDES -----------------------------------
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/include/ifr_types.hrl").
+
+%% Local
+-include_lib("cosTransactions/src/ETraP_Common.hrl").
+-include_lib("cosTransactions/include/CosTransactions.hrl").
+-include("etrap_test_lib.hrl").
+
+-include("test_server.hrl").
+
+-define(default_timeout, ?t:minutes(20)).
+
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1, cases/0, init_all/1, finish_all/1, resource_api/1, etrap_api/1,
+ init_per_testcase/2, fin_per_testcase/2, app_test/1]).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["API tests for the cosTransactions interfaces", ""];
+all(suite) -> {req,
+ [mnesia, orber],
+ {conf, init_all, cases(), finish_all}}.
+
+cases() ->
+ [etrap_api, resource_api, app_test].
+
+
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+
+init_per_testcase(_Case, Config) ->
+ Path = code:which(?MODULE),
+ code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
+ 'oe_CosTransactions':'oe_register'(),
+ 'oe_etrap_test':'oe_register'(),
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ 'oe_etrap_test':'oe_unregister'(),
+ 'oe_CosTransactions':'oe_unregister'(),
+ Path = code:which(?MODULE),
+ code:del_path(filename:join(filename:dirname(Path), "idl_output")),
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+init_all(Config) ->
+ mnesia:delete_schema([node()]),
+ mnesia:create_schema([node()]),
+ orber:install([node()]),
+ application:start(mnesia),
+ application:start(orber),
+ if
+ is_list(Config) ->
+ Config;
+ true ->
+ exit("Config not a list")
+ end.
+
+finish_all(Config) ->
+ application:stop(orber),
+ application:stop(mnesia),
+ mnesia:delete_schema([node()]),
+ Config.
+
+%%-----------------------------------------------------------------
+%% Tests app file
+%%-----------------------------------------------------------------
+app_test(doc) -> [];
+app_test(suite) -> [];
+app_test(_Config) ->
+ ok=test_server:app_test(cosTransactions),
+ ok.
+
+%%-----------------------------------------------------------------
+%% API tests
+%%-----------------------------------------------------------------
+etrap_api(doc) -> ["ETraP_Server tests", ""];
+etrap_api(suite) -> [];
+etrap_api(_Config) ->
+ ?line ?match(ok, application:start(cosTransactions),
+ "Starting the cosTransactions application"),
+ ?line TrFac = cosTransactions:start_factory(),
+ %% Start a new transaction:
+ %% RootCoord
+ %% / \
+ %% SubCoord1 SubCoord2
+ Control = 'CosTransactions_TransactionFactory':create(TrFac, 0),
+ Term = 'CosTransactions_Control':get_terminator(Control),
+ Coord = 'CosTransactions_Control':get_coordinator(Control),
+ SubCont1 = 'CosTransactions_Coordinator':create_subtransaction(Coord),
+ SubCont2 = 'CosTransactions_Coordinator':create_subtransaction(Coord),
+ SubCoord1 = 'CosTransactions_Control':get_coordinator(SubCont1),
+ SubCoord2 = 'CosTransactions_Control':get_coordinator(SubCont2),
+
+
+ %%------ Test CosTransactions::Coordinator ------
+ ?line ?match(true,
+ 'CosTransactions_Coordinator':is_same_transaction(Coord, Coord),
+ "'CosTransactions_Coordinator':is_same_transaction"),
+ ?line ?match(false,
+ 'CosTransactions_Coordinator':is_same_transaction(Coord, SubCoord1),
+ "'CosTransactions_Coordinator':is_same_transaction"),
+ ?line ?match(true,
+ 'CosTransactions_Coordinator':is_descendant_transaction(Coord, Coord),
+ "'CosTransactions_Coordinator':is_descendant_transaction"),
+ ?line ?match(false,
+ 'CosTransactions_Coordinator':is_descendant_transaction(Coord, SubCoord1),
+ "'CosTransactions_Coordinator':is_descendant_transaction"),
+ ?line ?match(true,
+ 'CosTransactions_Coordinator':is_descendant_transaction(SubCoord1, Coord),
+ "'CosTransactions_Coordinator':is_descendant_transaction"),
+ ?line ?match(false,
+ 'CosTransactions_Coordinator':is_descendant_transaction(SubCoord1, SubCoord2),
+ "'CosTransactions_Coordinator':is_descendant_transaction"),
+ ?line ?match(true,
+ 'CosTransactions_Coordinator':is_top_level_transaction(Coord),
+ "'CosTransactions_Coordinator':is_top_level_transaction"),
+ ?line ?match(false,
+ 'CosTransactions_Coordinator':is_top_level_transaction(SubCoord2),
+ "'CosTransactions_Coordinator':is_top_level_transaction"),
+
+ RootHash = 'CosTransactions_Coordinator':hash_transaction(Coord),
+ RepeatHash= 'CosTransactions_Coordinator':hash_transaction(Coord),
+ RootHash2 = 'CosTransactions_Coordinator':hash_top_level_tran(SubCoord1),
+ RootHash3 = 'CosTransactions_Coordinator':hash_top_level_tran(Coord),
+ _SubHash = 'CosTransactions_Coordinator':hash_transaction(SubCoord2),
+ ?line ?match(RootHash, RepeatHash,
+ "'CosTransactions_Coordinator':hash_transaction"),
+ ?line ?match(RootHash, RootHash2,
+ "'CosTransactions_Coordinator':hash_top_level_tran"),
+ ?line ?match(RootHash, RootHash3,
+ "'CosTransactions_Coordinator':hash_top_level_tran"),
+% ?line ?match_inverse(RootHash, SubHash,
+% "'CosTransactions_Coordinator':hash_transaction"),
+
+ ?line ?match('StatusActive',
+ 'CosTransactions_Coordinator':get_status(Coord),
+ "'CosTransactions_Coordinator':get_status"),
+ ?line ?match('StatusActive',
+ 'CosTransactions_Coordinator':get_status(SubCoord1),
+ "'CosTransactions_Coordinator':get_status"),
+ ?line ?match('StatusActive',
+ 'CosTransactions_Coordinator':get_parent_status(Coord),
+ "'CosTransactions_Coordinator':get_parent_status"),
+ ?line ?match('StatusActive',
+ 'CosTransactions_Coordinator':get_parent_status(SubCoord1),
+ "'CosTransactions_Coordinator':get_parent_status"),
+ ?line ?match('StatusActive',
+ 'CosTransactions_Coordinator':get_top_level_status(Coord),
+ "'CosTransactions_Coordinator':get_top_level_status"),
+ ?line ?match('StatusActive',
+ 'CosTransactions_Coordinator':get_top_level_status(SubCoord1),
+ "'CosTransactions_Coordinator':get_top_level_status"),
+
+ %% Create a CosTransactions::Resource to experiments with.
+ %% Start a new transaction:
+ %% RootCoord
+ %% / \
+ %% SubCoord1 SubCoord2
+ %% /
+ %% Resource
+ N1 = 'ETraP_Common':create_name("test"),
+ O1 = etrap_test_server:oe_create(?nop, {global, N1}),
+ _RC1 = 'CosTransactions_Coordinator':register_resource(SubCoord1, O1),
+% 'CosTransactions_Coordinator':register_synchronization(SubCoord1, O1),
+
+ ?line ?match('VoteCommit',
+ 'CosTransactions_Resource':prepare(SubCoord1),
+ "'CosTransactions_Coordinator':prepare"),
+ %% The Transaction are no longer in 'StatusActive' state. No new
+ %% "members" allowed.
+ ?line ?match('StatusPrepared',
+ 'CosTransactions_Coordinator':get_status(SubCoord1),
+ "'CosTransactions_Coordinator':get_status"),
+% ?line ?match({'EXCEPTION', ?tr_inactive},
+% 'CosTransactions_Coordinator':register_synchronization(SubCoord1, O1),
+% "'CosTransactions_Coordinator':register_synchronization"),
+ ?line ?match({'EXCEPTION', ?tr_inactive},
+ 'CosTransactions_Coordinator':register_resource(SubCoord1, O1),
+ "'CosTransactions_Coordinator':register_resource"),
+ ?line ?match({'EXCEPTION', ?tr_inactive},
+ 'CosTransactions_Coordinator':create_subtransaction(SubCoord1),
+ "'CosTransactions_Coordinator':create_subtransaction"),
+
+ catch corba:dispose(SubCoord1),
+ catch corba:dispose(SubCoord2),
+ catch corba:dispose(SubCont1),
+ catch corba:dispose(SubCont2),
+ catch corba:dispose(Term),
+ catch corba:dispose(Control),
+ catch corba:dispose(Coord),
+ catch corba:dispose(O1),
+
+ ?line cosTransactions:stop_factory(TrFac),
+ ?line application:stop(cosTransactions),
+ ok.
+
+%%-----------------------------------------------------------------
+%% API tests
+%%-----------------------------------------------------------------
+resource_api(doc) -> ["cosTransactions API tests", ""];
+resource_api(suite) -> [];
+resource_api(_Config) ->
+ ?line ?match(ok, application:start(cosTransactions),
+ "Starting the cosTransactions application"),
+ ?line TrFac = cosTransactions:start_factory([{typecheck, true}]),
+
+ ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
+ run(TrFac, 0, {?nop, ?nop, ?nop, ?prepare_rollback}),
+ "TESTCASE #1: Prepare rollback Resource 4"),
+ ?line ?match({'EXCEPTION', ?tr_mixed},
+ run(TrFac, 0, {?nop, ?nop, ?commit_mix, ?nop}),
+ "TESTCASE #2: Heuristic Mixed exception Resource 3"),
+ ?line ?match(ok,
+ run(TrFac, 0, {?nop, ?nop, ?nop, ?nop}),
+ "TESTCASE #3: Normal completion. No errors."),
+ ?line ?match(ok,
+ run(TrFac, 0, {?nop, ?nop, ?nop, ?commit_cm}),
+ "TESTCASE #4: Heuristic Commit Exception Resource 4"),
+ ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
+ run(TrFac, 0, {?nop, ?rollback_rb, ?nop, ?prepare_rollback}),
+ "TESTCASE #5: Heuristic Rollbac Resource 2, Resource 4 reply 'VoteRollback'"),
+ ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
+ run(TrFac, 0, {?nop, ?nop, ?prepare_rollback, ?rollback_rb}),
+ "TESTCASE #6: Heuristic Rollbac Resource 4, Resource 3 reply 'VoteRollback'"),
+ ?line ?match(ok,
+ run(TrFac, 0, {?nop, ?nop, ?commit_delay, ?nop}),
+ "TESTCASE #7: Resource 3 delay during commit. No timeout."),
+ ?line ?match(ok,
+ run(TrFac, 0, {?nop, ?nop, ?prepare_delay, ?nop}),
+ "TESTCASE #8: Resource 3 delay during prepare. No timeout."),
+ ?line ?match(ok,
+ run(TrFac, ?TIMEOUT, {?nop, ?commit_delay, ?nop, ?nop}),
+ "TESTCASE #9: Resource 3 delay during commit. Timeout."),
+ ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
+ run(TrFac, ?TIMEOUT, {?nop, ?prepare_delay, ?nop, ?nop}),
+ "TESTCASE #10: Resource 3 delay during prepare. Timeout."),
+ case ?is_debug_compiled of
+ true ->
+ %% Testing the Coordinators (root and sub).
+ ?line ?match(ok,
+ run(TrFac, 0, {?nop, ?nop, ?nop, ?nop, [?nop, ?nop,?crash_transient(commit), ?nop]}),
+ "TESTCASE #11: SubCoord 3 crash transient during commit."),
+ ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{}},
+ run(TrFac, 0, {?nop, ?nop, ?nop, ?nop, [?nop, ?nop,?crash_transient(send_prepare), ?nop]}),
+ "TESTCASE #12: SubCoord 3 crash transient during send prepare."),
+ ?line ?match({'EXCEPTION', ?tr_hazard},
+ run(TrFac, 0, {?nop, ?nop, ?nop, ?nop, [?nop, ?nop,?crash_permanent(commit), ?nop]}),
+ "TESTCASE #13: SubCoord 3 crash permanent during commit."),
+ ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{}},
+ run(TrFac, 0, {?nop, ?nop, ?nop, ?nop, [?nop, ?nop,?crash_permanent(send_prepare), ?nop]}),
+ "TESTCASE #14: SubCoord 3 crash permanent during prepare."),
+ ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{}},
+ run(TrFac, 0, {?nop, ?nop, ?nop, ?nop, [?nop, ?crash_transient(send_prepare), ?crash_transient(commit), ?nop]}),
+ "TESTCASE #15: SubCoord 2 crash transient during prepare. SubCoord 3 crash transient during commit"),
+ ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
+ run(TrFac, 0, {?nop, ?nop, ?nop, ?nop, [?crash_transient(send_prepare), ?nop, ?nop, ?nop]}),
+ "TESTCASE #16: RootCoord crash transient during send prepare."),
+ ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{}},
+ run(TrFac, 0, {?nop, ?nop, ?nop, ?nop, [?nop, ?crash_transient(prepare1), ?nop, ?nop]}),
+ "TESTCASE #17: SubCoord 1 crash transient during prepare1."),
+ ?line ?match({'EXCEPTION', ?tr_mixed},
+ run(TrFac, 0, {?nop, ?prepare_mix, ?nop, ?nop, [?nop, ?nop, ?crash_transient(prepare2), ?nop]}),
+ "TESTCASE #18: SubCoord 3 crash transient during prepare2. Resource 2 raise Heuristic Mixed during prepare"),
+ ?line ?match({'EXCEPTION', ?tr_mixed},
+ run(TrFac, 0, {?nop, ?commit_mix, ?nop, ?nop, [?nop, ?nop, ?crash_transient(commit2), ?nop]}),
+ "TESTCASE #19: Resource 2 raise Heurist mixed during commit. SubCoord crash transient commit2"),
+ ?line ?match({'EXCEPTION', ?tr_mixed},
+ run(TrFac, 0, {?nop, ?rollback_cm, ?nop, ?prepare_rollback, [?nop, ?crash_transient(rollback2), ?nop, ?nop]}),
+ "TESTCASE #20: Resource 2 raise Heuristic Commit during rollback. Resource 4 'VoteRollback'. SubCoord 2 crash transient rollback2."),
+ ?line ?match({'EXCEPTION', ?tr_mixed},
+ run(TrFac, 0, {?nop, ?nop, ?nop, ?commit_mix, [?nop, ?nop, ?crash_transient(send_forget1), ?nop]}),
+ "TESTCASE #21: Resource 4 raise Heuristic Mixed during commit. SubCoord 2 crash transient send_forget1."),
+ ?line ?match({'EXCEPTION', ?tr_mixed},
+ run(TrFac, 0, {?nop, ?nop, ?nop, ?commit_mix, [?crash_transient(send_forget1), ?nop, ?nop, ?nop]}),
+ "TESTCASE #22: Resource 4 raise Heuristic Mixed during commit. Root Coord crash transient send_forget1."),
+ ?line ?match({'EXCEPTION', ?tr_mixed},
+ run(TrFac, 0, {?nop, ?nop, ?nop, ?commit_mix, [?crash_transient(send_forget3), ?nop, ?crash_transient(send_forget1), ?nop]}),
+ "TESTCASE #23: Resource 4 raise Heuristic Mixed during commit. Root Coord crash transient send_forget3. SubCoord 3 crash transient send_forget1."),
+ ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
+ run(TrFac, ?TIMEOUT, {?nop, ?nop, ?nop, ?nop, [?delay_transient(root_delay, ?TIMEOUT*2), ?nop, ?nop, ?nop]}),
+ "TESTCASE #24: Delay RootCoord. Timeout."),
+ %% Testing the Terminator.
+ ?line ?match({'EXCEPTION', ?tr_mixed},
+ run(TrFac, ?TIMEOUT, {?nop, ?prepare_mix, ?nop, ?nop, [?nop, ?nop, ?nop, ?crash_transient(commit_heuristic1)]}),
+ "TESTCASE #25: Terminator crash transient after received and logged Heuristic mix."),
+ ?line ?match(ok,
+ run(TrFac, ?TIMEOUT, {?nop, ?nop, ?nop, ?nop, [?nop, ?nop, ?nop, ?crash_transient(commit_ok2)]}),
+ "TESTCASE #26: Terminator crash transient after received and logged 'ok'.");
+ _ ->
+ ok
+ end,
+
+ ?line cosTransactions:stop_factory(TrFac),
+ ?line application:stop(cosTransactions),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Internal functions
+%%-----------------------------------------------------------------
+
+run(TrFac, Time, Spec) ->
+ Control = 'CosTransactions_TransactionFactory':create(TrFac, Time),
+ Term = 'CosTransactions_Control':get_terminator(Control),
+ Coord = 'CosTransactions_Control':get_coordinator(Control),
+ SubCont1 = 'CosTransactions_Coordinator':create_subtransaction(Coord),
+ SubCont2 = 'CosTransactions_Coordinator':create_subtransaction(Coord),
+ SubCoord1 = 'CosTransactions_Control':get_coordinator(SubCont1),
+ SubCoord2 = 'CosTransactions_Control':get_coordinator(SubCont2),
+ %% Start resources/participants.
+ {O1, O2, O3, O4, Ctx} = start_resources(Spec),
+
+ %% Get generated names to use for debugging.
+ CoordN = 'CosTransactions_Coordinator':get_transaction_name(Coord),
+ SubC1N = 'CosTransactions_Coordinator':get_transaction_name(SubCoord1),
+ SubC2N = 'CosTransactions_Coordinator':get_transaction_name(SubCoord2),
+
+ ?set_debug_context([CoordN, SubC1N, SubC2N, Term], Ctx),
+
+ %% Register the resources as participants.
+ _RC1 = 'CosTransactions_Coordinator':register_resource(SubCoord1, O1),
+ _RC2 = 'CosTransactions_Coordinator':register_resource(SubCoord1, O2),
+ _RC3 = 'CosTransactions_Coordinator':register_resource(SubCoord2, O3),
+ _RC4 = 'CosTransactions_Coordinator':register_resource(SubCoord2, O4),
+
+ 'CosTransactions_Coordinator':register_subtran_aware(SubCoord1, O4),
+% 'CosTransactions_Coordinator':register_synchronization(SubCoord1, O2),
+
+% Reply = (catch 'CosTransactions_Terminator':commit(Term, true)),
+ Reply = (catch 'ETraP_Common':send_stubborn('CosTransactions_Terminator',
+ commit, [Term, true],
+ ?tr_max_retries,
+ ?tr_comm_failure_wait)),
+
+ catch corba:dispose(SubCoord1),
+ catch corba:dispose(SubCoord2),
+ catch corba:dispose(SubCont1),
+ catch corba:dispose(SubCont2),
+ catch corba:dispose(Term),
+ catch corba:dispose(Control),
+ catch corba:dispose(Coord),
+ catch corba:dispose(O1),
+ catch corba:dispose(O2),
+ catch corba:dispose(O3),
+ catch corba:dispose(O4),
+ Reply.
+
+
+
+start_resources({A1, A2, A3, A4})->
+ start_resources({A1, A2, A3, A4, ?no_context});
+start_resources({A1, A2, A3, A4, Ctx})->
+ N1 = 'ETraP_Common':create_name("test"),
+ N2 = 'ETraP_Common':create_name("test"),
+ N3 = 'ETraP_Common':create_name("test"),
+ N4 = 'ETraP_Common':create_name("test"),
+ {_,_,O1} = supervisor:start_child(?SUPERVISOR_NAME, ?SUP_TEST(A1, N1)),
+ {_,_,O2} = supervisor:start_child(?SUPERVISOR_NAME, ?SUP_TEST(A2, N2)),
+% {_,_,O2} = supervisor:start_child(?SUPERVISOR_NAME, ?SUP_TEST([{sync,true}|A2], N2)),
+ {_,_,O3} = supervisor:start_child(?SUPERVISOR_NAME, ?SUP_TEST(A3, N3)),
+ {_,_,O4} = supervisor:start_child(?SUPERVISOR_NAME, ?SUP_TEST(A4, N4)),
+ {O1, O2, O3, O4, Ctx}.
diff --git a/lib/cosTransactions/vsn.mk b/lib/cosTransactions/vsn.mk
index b45f192f45..34775be7e4 100644
--- a/lib/cosTransactions/vsn.mk
+++ b/lib/cosTransactions/vsn.mk
@@ -1,6 +1,7 @@
COSTRANSACTIONS_VSN = 1.2.10
-TICKETS = OTP-8489
+TICKETS = OTP-8489 \
+ OTP-8543
TICKETS_1.2.9 = OTP-8355
diff --git a/lib/crypto/c_src/Makefile.in b/lib/crypto/c_src/Makefile.in
index 18040a3b26..e728db18eb 100644
--- a/lib/crypto/c_src/Makefile.in
+++ b/lib/crypto/c_src/Makefile.in
@@ -68,13 +68,13 @@ RELSYSDIR = $(RELEASE_PATH)/lib/crypto-$(VSN)
# ----------------------------------------------------
# Misc Macros
# ----------------------------------------------------
-OBJS = $(OBJDIR)/crypto_drv.o
-DRV_MAKEFILE = $(PRIVDIR)/Makefile
+OBJS = $(OBJDIR)/crypto.o
+NIF_MAKEFILE = $(PRIVDIR)/Makefile
ifeq ($(findstring win32,$(TARGET)), win32)
-DYN_DRIVER = $(LIBDIR)/crypto_drv.dll
+NIF_LIB = $(LIBDIR)/crypto.dll
else
-DYN_DRIVER = $(LIBDIR)/crypto_drv.so
+NIF_LIB = $(LIBDIR)/crypto.so
endif
ifeq ($(HOST_OS),)
@@ -94,7 +94,7 @@ endif
# Targets
# ----------------------------------------------------
-debug opt valgrind: $(OBJDIR) $(LIBDIR) $(DYN_DRIVER)
+debug opt valgrind: $(OBJDIR) $(LIBDIR) $(NIF_LIB)
$(OBJDIR):
-@mkdir -p $(OBJDIR)
@@ -106,16 +106,16 @@ $(OBJDIR)/%.o: %.c
$(INSTALL_DIR) $(OBJDIR)
$(CC) -c -o $@ $(ALL_CFLAGS) $<
-$(LIBDIR)/crypto_drv.so: $(OBJS)
+$(LIBDIR)/crypto.so: $(OBJS)
$(INSTALL_DIR) $(LIBDIR)
$(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS) $(CRYPTO_LINK_LIB)
-$(LIBDIR)/crypto_drv.dll: $(OBJS)
+$(LIBDIR)/crypto.dll: $(OBJS)
$(INSTALL_DIR) $(LIBDIR)
$(LD) $(LDFLAGS) -o $@ $(SSL_DED_LD_RUNTIME_LIBRARY_PATH) -L$(SSL_LIBDIR) $(OBJS) -llibeay32
clean:
- rm -f $(DYN_DRIVER) $(OBJS)
+ rm -f $(NIF_LIB) $(OBJS)
rm -f core *~
docs:
@@ -128,9 +128,9 @@ include $(ERL_TOP)/make/otp_release_targets.mk
release_spec: opt
$(INSTALL_DIR) $(RELSYSDIR)/priv/obj
$(INSTALL_DIR) $(RELSYSDIR)/priv/lib
- $(INSTALL_DATA) $(DRV_MAKEFILE) $(RELSYSDIR)/priv/obj
+ $(INSTALL_DATA) $(NIF_MAKEFILE) $(RELSYSDIR)/priv/obj
$(INSTALL_PROGRAM) $(OBJS) $(RELSYSDIR)/priv/obj
- $(INSTALL_PROGRAM) $(DYN_DRIVER) $(RELSYSDIR)/priv/lib
+ $(INSTALL_PROGRAM) $(NIF_LIB) $(RELSYSDIR)/priv/lib
release_docs_spec:
diff --git a/lib/crypto/c_src/crypto.c b/lib/crypto/c_src/crypto.c
new file mode 100644
index 0000000000..a71df1d7fd
--- /dev/null
+++ b/lib/crypto/c_src/crypto.c
@@ -0,0 +1,1531 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2010. 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%
+ */
+
+/*
+ * Purpose: Dynamically loadable NIF library for cryptography.
+ * Based on OpenSSL.
+ */
+
+#ifdef __WIN32__
+ #include <windows.h>
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "erl_nif.h"
+
+#define OPENSSL_THREAD_DEFINES
+#include <openssl/opensslconf.h>
+
+#include <openssl/crypto.h>
+#include <openssl/des.h>
+/* #include <openssl/idea.h> This is not supported on the openssl OTP requires */
+#include <openssl/dsa.h>
+#include <openssl/rsa.h>
+#include <openssl/aes.h>
+#include <openssl/md5.h>
+#include <openssl/md4.h>
+#include <openssl/sha.h>
+#include <openssl/bn.h>
+#include <openssl/objects.h>
+#include <openssl/rc4.h>
+#include <openssl/rc2.h>
+#include <openssl/blowfish.h>
+#include <openssl/rand.h>
+
+#ifdef VALGRIND
+ # include <valgrind/memcheck.h>
+
+/* libcrypto mixes supplied buffer contents into its entropy pool,
+ which makes valgrind complain about the use of uninitialized data.
+ We use this valgrind "request" to make sure that no such seemingly
+ undefined data is returned.
+*/
+ # define ERL_VALGRIND_MAKE_MEM_DEFINED(ptr,size) \
+ VALGRIND_MAKE_MEM_DEFINED(ptr,size)
+
+ # define ERL_VALGRIND_ASSERT_MEM_DEFINED(ptr,size) \
+ ((void) ((VALGRIND_CHECK_MEM_IS_DEFINED(ptr,size) == 0) ? 1 : \
+ (fprintf(stderr,"\r\n####### VALGRIND_ASSSERT(%p,%d) failed at %s:%d\r\n",\
+ (ptr),(size), __FILE__, __LINE__), abort(), 0)))
+#else
+ # define ERL_VALGRIND_MAKE_MEM_DEFINED(ptr,size)
+ # define ERL_VALGRIND_ASSERT_MEM_DEFINED(ptr,size)
+#endif
+
+#ifdef DEBUG
+ # define ASSERT(e) \
+ ((void) ((e) ? 1 : (fprintf(stderr,"Assert '%s' failed at %s:%d\n",\
+ #e, __FILE__, __LINE__), abort(), 0)))
+#else
+ # define ASSERT(e) ((void) 1)
+#endif
+
+#ifdef __GNUC__
+ # define INLINE __inline__
+#elif defined(__WIN32__)
+ # define INLINE __forceinline
+#else
+ # define INLINE
+#endif
+
+
+#define get_int32(s) ((((unsigned char*) (s))[0] << 24) | \
+ (((unsigned char*) (s))[1] << 16) | \
+ (((unsigned char*) (s))[2] << 8) | \
+ (((unsigned char*) (s))[3]))
+
+#define put_int32(s,i) \
+{ (s)[0] = (char)(((i) >> 24) & 0xff);\
+ (s)[1] = (char)(((i) >> 16) & 0xff);\
+ (s)[2] = (char)(((i) >> 8) & 0xff);\
+ (s)[3] = (char)((i) & 0xff);\
+}
+
+/* NIF interface declarations */
+static int load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info);
+static int reload(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info);
+static int upgrade(ErlNifEnv* env, void** priv_data, void** old_priv_data, ERL_NIF_TERM load_info);
+static void unload(ErlNifEnv* env, void* priv_data);
+
+/* The NIFs: */
+static ERL_NIF_TERM info_lib(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM md5(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM md5_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM md5_update(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM md5_final(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM sha(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM sha_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM sha_update(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM sha_final(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM md4(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM md4_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM md4_update(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM md4_final(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM md5_mac_n(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM sha_mac_n(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM des_cbc_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM des_ecb_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM des_ede3_cbc_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM aes_cfb_128_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM rand_bytes_1(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM rand_bytes_3(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM rand_uniform_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM mod_exp_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM dss_verify(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM rsa_verify(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM aes_cbc_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM exor(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM rc4_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM rc4_set_key(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM rc4_encrypt_with_state(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM rc2_40_cbc_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM rsa_sign_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM dss_sign_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM rsa_public_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM rsa_private_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM dh_generate_parameters_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM dh_check(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM dh_generate_key_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM dh_compute_key_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM bf_cfb64_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM bf_cbc_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM bf_ecb_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM blowfish_ofb64_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+
+
+/* openssl callbacks */
+#ifdef OPENSSL_THREADS
+static void locking_function(int mode, int n, const char *file, int line);
+static unsigned long id_function(void);
+static struct CRYPTO_dynlock_value* dyn_create_function(const char *file,
+ int line);
+static void dyn_lock_function(int mode, struct CRYPTO_dynlock_value* ptr,
+ const char *file, int line);
+static void dyn_destroy_function(struct CRYPTO_dynlock_value *ptr,
+ const char *file, int line);
+#endif /* OPENSSL_THREADS */
+
+/* helpers */
+static void hmac_md5(unsigned char *key, int klen,
+ unsigned char *dbuf, int dlen,
+ unsigned char *hmacbuf);
+static void hmac_sha1(unsigned char *key, int klen,
+ unsigned char *dbuf, int dlen,
+ unsigned char *hmacbuf);
+
+static int library_refc = 0; /* number of users of this dynamic library */
+
+static ErlNifFunc nif_funcs[] = {
+ {"info_lib", 0, info_lib},
+ {"md5", 1, md5},
+ {"md5_init", 0, md5_init},
+ {"md5_update", 2, md5_update},
+ {"md5_final", 1, md5_final},
+ {"sha", 1, sha},
+ {"sha_init", 0, sha_init},
+ {"sha_update", 2, sha_update},
+ {"sha_final", 1, sha_final},
+ {"md4", 1, md4},
+ {"md4_init", 0, md4_init},
+ {"md4_update", 2, md4_update},
+ {"md4_final", 1, md4_final},
+ {"md5_mac_n", 3, md5_mac_n},
+ {"sha_mac_n", 3, sha_mac_n},
+ {"des_cbc_crypt", 4, des_cbc_crypt},
+ {"des_ecb_crypt", 3, des_ecb_crypt},
+ {"des_ede3_cbc_crypt", 6, des_ede3_cbc_crypt},
+ {"aes_cfb_128_crypt", 4, aes_cfb_128_crypt},
+ {"rand_bytes", 1, rand_bytes_1},
+ {"rand_bytes", 3, rand_bytes_3},
+ {"rand_uniform_nif", 2, rand_uniform_nif},
+ {"mod_exp_nif", 3, mod_exp_nif},
+ {"dss_verify", 3, dss_verify},
+ {"rsa_verify", 4, rsa_verify},
+ {"aes_cbc_crypt", 4, aes_cbc_crypt},
+ {"exor", 2, exor},
+ {"rc4_encrypt", 2, rc4_encrypt},
+ {"rc4_set_key", 1, rc4_set_key},
+ {"rc4_encrypt_with_state", 2, rc4_encrypt_with_state},
+ {"rc2_40_cbc_crypt", 4, rc2_40_cbc_crypt},
+ {"rsa_sign_nif", 3, rsa_sign_nif},
+ {"dss_sign_nif", 2, dss_sign_nif},
+ {"rsa_public_crypt", 4, rsa_public_crypt},
+ {"rsa_private_crypt", 4, rsa_private_crypt},
+ {"dh_generate_parameters_nif", 2, dh_generate_parameters_nif},
+ {"dh_check", 1, dh_check},
+ {"dh_generate_key_nif", 2, dh_generate_key_nif},
+ {"dh_compute_key_nif", 3, dh_compute_key_nif},
+ {"bf_cfb64_crypt", 4, bf_cfb64_crypt},
+ {"bf_cbc_crypt", 4, bf_cbc_crypt},
+ {"bf_ecb_crypt", 3, bf_ecb_crypt},
+ {"blowfish_ofb64_encrypt", 3, blowfish_ofb64_encrypt}
+};
+
+ERL_NIF_INIT(crypto,nif_funcs,load,reload,upgrade,unload)
+
+
+#define MD5_CTX_LEN (sizeof(MD5_CTX))
+#define MD5_LEN 16
+#define MD5_LEN_96 12
+#define MD4_CTX_LEN (sizeof(MD4_CTX))
+#define MD4_LEN 16
+#define SHA_CTX_LEN (sizeof(SHA_CTX))
+#define SHA_LEN 20
+#define SHA_LEN_96 12
+#define HMAC_INT_LEN 64
+
+#define HMAC_IPAD 0x36
+#define HMAC_OPAD 0x5c
+
+
+static ErlNifRWLock** lock_vec = NULL; /* Static locks used by openssl */
+static ERL_NIF_TERM atom_true;
+static ERL_NIF_TERM atom_false;
+static ERL_NIF_TERM atom_sha;
+static ERL_NIF_TERM atom_md5;
+static ERL_NIF_TERM atom_error;
+static ERL_NIF_TERM atom_rsa_pkcs1_padding;
+static ERL_NIF_TERM atom_rsa_pkcs1_oaep_padding;
+static ERL_NIF_TERM atom_rsa_no_padding;
+static ERL_NIF_TERM atom_undefined;
+
+static ERL_NIF_TERM atom_ok;
+static ERL_NIF_TERM atom_not_prime;
+static ERL_NIF_TERM atom_not_strong_prime;
+static ERL_NIF_TERM atom_unable_to_check_generator;
+static ERL_NIF_TERM atom_not_suitable_generator;
+static ERL_NIF_TERM atom_check_failed;
+static ERL_NIF_TERM atom_unknown;
+
+
+static int is_ok_load_info(ErlNifEnv* env, ERL_NIF_TERM load_info)
+{
+ int i;
+ return enif_get_int(env,load_info,&i) && i == 101;
+}
+static void* crypto_alloc(size_t size)
+{
+ return enif_alloc(NULL, size);
+}
+static void* crypto_realloc(void* ptr, size_t size)
+{
+ return enif_realloc(NULL, ptr, size);
+}
+static void crypto_free(void* ptr)
+{
+ enif_free(NULL, ptr);
+}
+
+static int load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info)
+{
+ ErlNifSysInfo sys_info;
+ CRYPTO_set_mem_functions(crypto_alloc, crypto_realloc, crypto_free);
+
+ if (!is_ok_load_info(env, load_info)) {
+ return -1;
+ }
+
+#ifdef OPENSSL_THREADS
+ enif_system_info(&sys_info, sizeof(sys_info));
+
+ if (sys_info.scheduler_threads > 1) {
+ int i;
+ lock_vec = enif_alloc(env,CRYPTO_num_locks()*sizeof(*lock_vec));
+ if (lock_vec==NULL) return -1;
+ memset(lock_vec,0,CRYPTO_num_locks()*sizeof(*lock_vec));
+
+ for (i=CRYPTO_num_locks()-1; i>=0; --i) {
+ lock_vec[i] = enif_rwlock_create("crypto_stat");
+ if (lock_vec[i]==NULL) return -1;
+ }
+ CRYPTO_set_locking_callback(locking_function);
+ CRYPTO_set_id_callback(id_function);
+ CRYPTO_set_dynlock_create_callback(dyn_create_function);
+ CRYPTO_set_dynlock_lock_callback(dyn_lock_function);
+ CRYPTO_set_dynlock_destroy_callback(dyn_destroy_function);
+ }
+ /* else no need for locks */
+#endif /* OPENSSL_THREADS */
+
+ atom_true = enif_make_atom(env,"true");
+ atom_false = enif_make_atom(env,"false");
+ atom_sha = enif_make_atom(env,"sha");
+ atom_md5 = enif_make_atom(env,"md5");
+ atom_error = enif_make_atom(env,"error");
+ atom_rsa_pkcs1_padding = enif_make_atom(env,"rsa_pkcs1_padding");
+ atom_rsa_pkcs1_oaep_padding = enif_make_atom(env,"rsa_pkcs1_oaep_padding");
+ atom_rsa_no_padding = enif_make_atom(env,"rsa_no_padding");
+ atom_undefined = enif_make_atom(env,"undefined");
+ atom_ok = enif_make_atom(env,"ok");
+ atom_not_prime = enif_make_atom(env,"not_prime");
+ atom_not_strong_prime = enif_make_atom(env,"not_strong_prime");
+ atom_unable_to_check_generator = enif_make_atom(env,"unable_to_check_generator");
+ atom_not_suitable_generator = enif_make_atom(env,"not_suitable_generator");
+ atom_check_failed = enif_make_atom(env,"check_failed");
+ atom_unknown = enif_make_atom(env,"unknown");
+
+ *priv_data = NULL;
+ library_refc++;
+ return 0;
+}
+
+static int reload(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info)
+{
+ if (*priv_data != NULL) {
+ return -1; /* Don't know how to do that */
+ }
+ if (library_refc == 0) {
+ /* No support for real library upgrade. The tricky thing is to know
+ when to (re)set the callbacks for allocation and locking. */
+ return -2;
+ }
+ if (!is_ok_load_info(env, load_info)) {
+ return -1;
+ }
+ return 0;
+}
+
+static int upgrade(ErlNifEnv* env, void** priv_data, void** old_priv_data,
+ ERL_NIF_TERM load_info)
+{
+ int i;
+ if (*old_priv_data != NULL) {
+ return -1; /* Don't know how to do that */
+ }
+ i = reload(env,priv_data,load_info);
+ if (i != 0) {
+ return i;
+ }
+ library_refc++;
+ return 0;
+}
+
+static void unload(ErlNifEnv* env, void* priv_data)
+{
+ if (--library_refc <= 0) {
+ CRYPTO_cleanup_all_ex_data();
+
+ if (lock_vec != NULL) {
+ int i;
+ for (i=CRYPTO_num_locks()-1; i>=0; --i) {
+ if (lock_vec[i] != NULL) {
+ enif_rwlock_destroy(lock_vec[i]);
+ }
+ }
+ enif_free(env,lock_vec);
+ }
+ }
+ /*else NIF library still used by other (new) module code */
+}
+
+static ERL_NIF_TERM info_lib(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ /* [{<<"OpenSSL">>,9470143,<<"OpenSSL 0.9.8k 25 Mar 2009">>}] */
+
+ static const char libname[] = "OpenSSL";
+ unsigned name_sz = strlen(libname);
+ const char* ver = SSLeay_version(SSLEAY_VERSION);
+ unsigned ver_sz = strlen(ver);
+ ERL_NIF_TERM name_term, ver_term;
+
+ memcpy(enif_make_new_binary(env, name_sz, &name_term), libname, name_sz);
+ memcpy(enif_make_new_binary(env, ver_sz, &ver_term), ver, ver_sz);
+
+ return enif_make_list1(env, enif_make_tuple3(env, name_term,
+ enif_make_int(env, SSLeay()),
+ ver_term));
+}
+
+static ERL_NIF_TERM md5(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Data) */
+ ErlNifBinary ibin;
+ ERL_NIF_TERM ret;
+
+ if (!enif_inspect_iolist_as_binary(env, argv[0], &ibin)) {
+ return enif_make_badarg(env);
+ }
+ MD5((unsigned char *) ibin.data, ibin.size,
+ enif_make_new_binary(env,MD5_LEN, &ret));
+ return ret;
+}
+static ERL_NIF_TERM md5_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* () */
+ ERL_NIF_TERM ret;
+ MD5_Init((MD5_CTX *) enif_make_new_binary(env, MD5_CTX_LEN, &ret));
+ return ret;
+}
+static ERL_NIF_TERM md5_update(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Context, Data) */
+ MD5_CTX* new_ctx;
+ ErlNifBinary ctx_bin, data_bin;
+ ERL_NIF_TERM ret;
+ if (!enif_inspect_binary(env, argv[0], &ctx_bin)
+ || ctx_bin.size != MD5_CTX_LEN
+ || !enif_inspect_iolist_as_binary(env, argv[1], &data_bin)) {
+ return enif_make_badarg(env);
+ }
+ new_ctx = (MD5_CTX*) enif_make_new_binary(env,MD5_CTX_LEN, &ret);
+ memcpy(new_ctx, ctx_bin.data, MD5_CTX_LEN);
+ MD5_Update(new_ctx, data_bin.data, data_bin.size);
+ return ret;
+}
+static ERL_NIF_TERM md5_final(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Context) */
+ ErlNifBinary ctx_bin;
+ MD5_CTX ctx_clone;
+ ERL_NIF_TERM ret;
+ if (!enif_inspect_binary(env, argv[0], &ctx_bin) || ctx_bin.size != MD5_CTX_LEN) {
+ return enif_make_badarg(env);
+ }
+ memcpy(&ctx_clone, ctx_bin.data, MD5_CTX_LEN); /* writable */
+ MD5_Final(enif_make_new_binary(env, MD5_LEN, &ret), &ctx_clone);
+ return ret;
+}
+
+static ERL_NIF_TERM sha(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Data) */
+ ErlNifBinary ibin;
+ ERL_NIF_TERM ret;
+
+ if (!enif_inspect_iolist_as_binary(env, argv[0], &ibin)) {
+ return enif_make_badarg(env);
+ }
+ SHA1((unsigned char *) ibin.data, ibin.size,
+ enif_make_new_binary(env,SHA_LEN, &ret));
+ return ret;
+}
+static ERL_NIF_TERM sha_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* () */
+ ERL_NIF_TERM ret;
+ SHA1_Init((SHA_CTX *) enif_make_new_binary(env, SHA_CTX_LEN, &ret));
+ return ret;
+}
+static ERL_NIF_TERM sha_update(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Context, Data) */
+ SHA_CTX* new_ctx;
+ ErlNifBinary ctx_bin, data_bin;
+ ERL_NIF_TERM ret;
+ if (!enif_inspect_binary(env, argv[0], &ctx_bin) || ctx_bin.size != SHA_CTX_LEN
+ || !enif_inspect_iolist_as_binary(env, argv[1], &data_bin)) {
+ return enif_make_badarg(env);
+ }
+ new_ctx = (SHA_CTX*) enif_make_new_binary(env,SHA_CTX_LEN, &ret);
+ memcpy(new_ctx, ctx_bin.data, SHA_CTX_LEN);
+ SHA1_Update(new_ctx, data_bin.data, data_bin.size);
+ return ret;
+}
+static ERL_NIF_TERM sha_final(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Context) */
+ ErlNifBinary ctx_bin;
+ SHA_CTX ctx_clone;
+ ERL_NIF_TERM ret;
+ if (!enif_inspect_binary(env, argv[0], &ctx_bin) || ctx_bin.size != SHA_CTX_LEN) {
+ return enif_make_badarg(env);
+ }
+ memcpy(&ctx_clone, ctx_bin.data, SHA_CTX_LEN); /* writable */
+ SHA1_Final(enif_make_new_binary(env, SHA_LEN, &ret), &ctx_clone);
+ return ret;
+}
+
+static ERL_NIF_TERM md4(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Data) */
+ ErlNifBinary ibin;
+ ERL_NIF_TERM ret;
+
+ if (!enif_inspect_iolist_as_binary(env, argv[0], &ibin)) {
+ return enif_make_badarg(env);
+ }
+ MD4((unsigned char *) ibin.data, ibin.size,
+ enif_make_new_binary(env,MD4_LEN, &ret));
+ return ret;
+}
+static ERL_NIF_TERM md4_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* () */
+ ERL_NIF_TERM ret;
+ MD4_Init((MD4_CTX *) enif_make_new_binary(env, MD4_CTX_LEN, &ret));
+ return ret;
+}
+static ERL_NIF_TERM md4_update(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Context, Data) */
+ MD4_CTX* new_ctx;
+ ErlNifBinary ctx_bin, data_bin;
+ ERL_NIF_TERM ret;
+ if (!enif_inspect_binary(env, argv[0], &ctx_bin) || ctx_bin.size != MD4_CTX_LEN
+ || !enif_inspect_iolist_as_binary(env, argv[1], &data_bin)) {
+ return enif_make_badarg(env);
+ }
+ new_ctx = (MD4_CTX*) enif_make_new_binary(env,MD4_CTX_LEN, &ret);
+ memcpy(new_ctx, ctx_bin.data, MD4_CTX_LEN);
+ MD4_Update(new_ctx, data_bin.data, data_bin.size);
+ return ret;
+}
+static ERL_NIF_TERM md4_final(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Context) */
+ ErlNifBinary ctx_bin;
+ MD4_CTX ctx_clone;
+ ERL_NIF_TERM ret;
+ if (!enif_inspect_binary(env, argv[0], &ctx_bin) || ctx_bin.size != MD4_CTX_LEN) {
+ return enif_make_badarg(env);
+ }
+ memcpy(&ctx_clone, ctx_bin.data, MD4_CTX_LEN); /* writable */
+ MD4_Final(enif_make_new_binary(env, MD4_LEN, &ret), &ctx_clone);
+ return ret;
+}
+
+static ERL_NIF_TERM md5_mac_n(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Key, Data, MacSize) */
+ unsigned char hmacbuf[SHA_DIGEST_LENGTH];
+ ErlNifBinary key, data;
+ unsigned mac_sz;
+ ERL_NIF_TERM ret;
+
+ if (!enif_inspect_iolist_as_binary(env, argv[0], &key)
+ || !enif_inspect_iolist_as_binary(env, argv[1], &data)
+ || !enif_get_uint(env,argv[2],&mac_sz) || mac_sz > MD5_LEN) {
+ return enif_make_badarg(env);
+ }
+ hmac_md5(key.data, key.size, data.data, data.size, hmacbuf);
+ memcpy(enif_make_new_binary(env, mac_sz, &ret), hmacbuf, mac_sz);
+ return ret;
+}
+
+static ERL_NIF_TERM sha_mac_n(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Key, Data, MacSize) */
+ unsigned char hmacbuf[SHA_DIGEST_LENGTH];
+ ErlNifBinary key, data;
+ unsigned mac_sz;
+ ERL_NIF_TERM ret;
+
+ if (!enif_inspect_iolist_as_binary(env, argv[0], &key)
+ || !enif_inspect_iolist_as_binary(env, argv[1], &data)
+ || !enif_get_uint(env,argv[2],&mac_sz) || mac_sz > SHA_LEN) {
+ return enif_make_badarg(env);
+ }
+ hmac_sha1(key.data, key.size, data.data, data.size, hmacbuf);
+ memcpy(enif_make_new_binary(env, mac_sz, &ret),
+ hmacbuf, mac_sz);
+ return ret;
+}
+
+static ERL_NIF_TERM des_cbc_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Key, Ivec, Text, IsEncrypt) */
+ ErlNifBinary key, ivec, text;
+ DES_key_schedule schedule;
+ DES_cblock ivec_clone; /* writable copy */
+ ERL_NIF_TERM ret;
+
+ if (!enif_inspect_iolist_as_binary(env, argv[0], &key) || key.size != 8
+ || !enif_inspect_binary(env, argv[1], &ivec) || ivec.size != 8
+ || !enif_inspect_iolist_as_binary(env, argv[2], &text)
+ || text.size % 8 != 0) {
+ return enif_make_badarg(env);
+ }
+ memcpy(&ivec_clone, ivec.data, 8);
+ DES_set_key((const_DES_cblock*)key.data, &schedule);
+ DES_ncbc_encrypt(text.data, enif_make_new_binary(env, text.size, &ret),
+ text.size, &schedule, &ivec_clone, (argv[3] == atom_true));
+ return ret;
+}
+
+static ERL_NIF_TERM des_ecb_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Key, Text/Cipher, IsEncrypt) */
+ ErlNifBinary key, text;
+ DES_key_schedule schedule;
+ ERL_NIF_TERM ret;
+ if (!enif_inspect_iolist_as_binary(env, argv[0], &key) || key.size != 8 ||
+ !enif_inspect_iolist_as_binary(env, argv[1], &text) || text.size != 8) {
+ return enif_make_badarg(env);
+ }
+ DES_set_key((const_DES_cblock*)key.data, &schedule);
+ DES_ecb_encrypt((const_DES_cblock*)text.data,
+ (DES_cblock*)enif_make_new_binary(env, 8, &ret),
+ &schedule, (argv[2] == atom_true));
+ return ret;
+}
+
+static ERL_NIF_TERM des_ede3_cbc_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Key1, Key2, Key3, IVec, Text/Cipher, IsEncrypt) */
+ ErlNifBinary key1, key2, key3, ivec, text;
+ DES_key_schedule schedule1, schedule2, schedule3;
+ DES_cblock ivec_clone; /* writable copy */
+ ERL_NIF_TERM ret;
+
+ if (!enif_inspect_iolist_as_binary(env, argv[0], &key1) || key1.size != 8
+ || !enif_inspect_iolist_as_binary(env, argv[1], &key2) || key2.size != 8
+ || !enif_inspect_iolist_as_binary(env, argv[2], &key3) || key3.size != 8
+ || !enif_inspect_binary(env, argv[3], &ivec) || ivec.size != 8
+ || !enif_inspect_iolist_as_binary(env, argv[4], &text)
+ || text.size % 8 != 0) {
+ return enif_make_badarg(env);
+ }
+
+ memcpy(&ivec_clone, ivec.data, 8);
+ DES_set_key((const_DES_cblock*)key1.data, &schedule1);
+ DES_set_key((const_DES_cblock*)key2.data, &schedule2);
+ DES_set_key((const_DES_cblock*)key3.data, &schedule3);
+ DES_ede3_cbc_encrypt(text.data, enif_make_new_binary(env,text.size,&ret),
+ text.size, &schedule1, &schedule2, &schedule3,
+ &ivec_clone, (argv[5] == atom_true));
+ return ret;
+}
+
+static ERL_NIF_TERM aes_cfb_128_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Key, IVec, Data, IsEncrypt) */
+ ErlNifBinary key, ivec, text;
+ AES_KEY aes_key;
+ unsigned char ivec_clone[16]; /* writable copy */
+ int new_ivlen = 0;
+ ERL_NIF_TERM ret;
+
+ if (!enif_inspect_iolist_as_binary(env, argv[0], &key) || key.size != 16
+ || !enif_inspect_binary(env, argv[1], &ivec) || ivec.size != 16
+ || !enif_inspect_iolist_as_binary(env, argv[2], &text)
+ || text.size % 16 != 0) {
+ return enif_make_badarg(env);
+ }
+
+ memcpy(ivec_clone, ivec.data, 16);
+ AES_set_encrypt_key(key.data, 128, &aes_key);
+ AES_cfb128_encrypt((unsigned char *) text.data,
+ enif_make_new_binary(env, text.size, &ret),
+ text.size, &aes_key, ivec_clone, &new_ivlen,
+ (argv[3] == atom_true));
+ return ret;
+}
+
+static ERL_NIF_TERM rand_bytes_1(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Bytes) */
+ unsigned bytes;
+ unsigned char* data;
+ ERL_NIF_TERM ret;
+ if (!enif_get_uint(env, argv[0], &bytes)) {
+ return enif_make_badarg(env);
+ }
+ data = enif_make_new_binary(env, bytes, &ret);
+ RAND_pseudo_bytes(data, bytes);
+ ERL_VALGRIND_MAKE_MEM_DEFINED(data, bytes);
+ return ret;
+}
+static ERL_NIF_TERM rand_bytes_3(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Bytes, TopMask, BottomMask) */
+ unsigned bytes;
+ unsigned char* data;
+ unsigned top_mask, bot_mask;
+ ERL_NIF_TERM ret;
+ if (!enif_get_uint(env, argv[0], &bytes)
+ || !enif_get_uint(env, argv[1], &top_mask)
+ || !enif_get_uint(env, argv[2], &bot_mask)) {
+ return enif_make_badarg(env);
+ }
+ data = enif_make_new_binary(env, bytes, &ret);
+ RAND_pseudo_bytes(data, bytes);
+ ERL_VALGRIND_MAKE_MEM_DEFINED(data, bytes);
+ if (bytes > 0) {
+ data[bytes-1] |= top_mask;
+ data[0] |= bot_mask;
+ }
+ return ret;
+}
+
+static int get_bn_from_mpint(ErlNifEnv* env, ERL_NIF_TERM term, BIGNUM** bnp)
+{
+ ErlNifBinary bin;
+ int sz;
+ if (!enif_inspect_binary(env,term,&bin)) {
+ return 0;
+ }
+ ERL_VALGRIND_ASSERT_MEM_DEFINED(bin.data, bin.size);
+ sz = bin.size - 4;
+ if (sz < 0 || get_int32(bin.data) != sz) {
+ return 0;
+ }
+ *bnp = BN_bin2bn(bin.data+4, sz, NULL);
+ return 1;
+}
+
+static ERL_NIF_TERM rand_uniform_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Lo,Hi) */
+ BIGNUM *bn_from, *bn_to, *bn_rand;
+ unsigned char* data;
+ unsigned dlen;
+ ERL_NIF_TERM ret;
+ if (!get_bn_from_mpint(env, argv[0], &bn_from)
+ || !get_bn_from_mpint(env, argv[1], &bn_rand)) {
+ return enif_make_badarg(env);
+ }
+
+ bn_to = BN_new();
+ BN_sub(bn_to, bn_rand, bn_from);
+ BN_pseudo_rand_range(bn_rand, bn_to);
+ BN_add(bn_rand, bn_rand, bn_from);
+ dlen = BN_num_bytes(bn_rand);
+ data = enif_make_new_binary(env, dlen+4, &ret);
+ put_int32(data, dlen);
+ BN_bn2bin(bn_rand, data+4);
+ ERL_VALGRIND_MAKE_MEM_DEFINED(data+4, dlen);
+ BN_free(bn_rand);
+ BN_free(bn_from);
+ BN_free(bn_to);
+ return ret;
+}
+
+static ERL_NIF_TERM mod_exp_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Base,Exponent,Modulo) */
+ BIGNUM *bn_base=NULL, *bn_exponent=NULL, *bn_modulo, *bn_result;
+ BN_CTX *bn_ctx;
+ unsigned char* ptr;
+ unsigned dlen;
+ ERL_NIF_TERM ret;
+
+ if (!get_bn_from_mpint(env, argv[0], &bn_base)
+ || !get_bn_from_mpint(env, argv[1], &bn_exponent)
+ || !get_bn_from_mpint(env, argv[2], &bn_modulo)) {
+
+ if (bn_base) BN_free(bn_base);
+ if (bn_exponent) BN_free(bn_exponent);
+ return enif_make_badarg(env);
+ }
+ bn_result = BN_new();
+ bn_ctx = BN_CTX_new();
+ BN_mod_exp(bn_result, bn_base, bn_exponent, bn_modulo, bn_ctx);
+ dlen = BN_num_bytes(bn_result);
+ ptr = enif_make_new_binary(env, dlen+4, &ret);
+ put_int32(ptr, dlen);
+ BN_bn2bin(bn_result, ptr+4);
+ BN_free(bn_result);
+ BN_CTX_free(bn_ctx);
+ BN_free(bn_modulo);
+ BN_free(bn_exponent);
+ BN_free(bn_base);
+ return ret;
+}
+
+static int inspect_mpint(ErlNifEnv* env, ERL_NIF_TERM term, ErlNifBinary* bin)
+{
+ return enif_inspect_binary(env, term, bin) &&
+ bin->size >= 4 && get_int32(bin->data) == bin->size-4;
+}
+
+static ERL_NIF_TERM dss_verify(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Data,Signature,Key=[P, Q, G, Y]) */
+ ErlNifBinary data_bin, sign_bin;
+ BIGNUM *dsa_p, *dsa_q, *dsa_g, *dsa_y;
+ unsigned char hmacbuf[SHA_DIGEST_LENGTH];
+ ERL_NIF_TERM head, tail;
+ DSA *dsa;
+ int i;
+
+ if (!inspect_mpint(env,argv[0],&data_bin)
+ || !inspect_mpint(env,argv[1],&sign_bin)
+ || !enif_get_list_cell(env, argv[2], &head, &tail)
+ || !get_bn_from_mpint(env, head, &dsa_p)
+ || !enif_get_list_cell(env, tail, &head, &tail)
+ || !get_bn_from_mpint(env, head, &dsa_q)
+ || !enif_get_list_cell(env, tail, &head, &tail)
+ || !get_bn_from_mpint(env, head, &dsa_g)
+ || !enif_get_list_cell(env, tail, &head, &tail)
+ || !get_bn_from_mpint(env, head, &dsa_y)
+ || !enif_is_empty_list(env,tail)) {
+
+ return enif_make_badarg(env);
+ }
+ SHA1(data_bin.data+4, data_bin.size-4, hmacbuf);
+
+ dsa = DSA_new();
+ dsa->p = dsa_p;
+ dsa->q = dsa_q;
+ dsa->g = dsa_g;
+ dsa->priv_key = NULL;
+ dsa->pub_key = dsa_y;
+ i = DSA_verify(0, hmacbuf, SHA_DIGEST_LENGTH,
+ sign_bin.data+4, sign_bin.size-4, dsa);
+ DSA_free(dsa);
+ return(i > 0) ? atom_true : atom_false;
+}
+
+static ERL_NIF_TERM rsa_verify(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Type, Data, Signature, Key=[E,N]) */
+ ErlNifBinary data_bin, sign_bin;
+ unsigned char hmacbuf[SHA_DIGEST_LENGTH];
+ ERL_NIF_TERM head, tail, ret;
+ int i, is_sha;
+ RSA* rsa = RSA_new();
+
+ if (argv[0] == atom_sha) is_sha = 1;
+ else if (argv[0] == atom_md5) is_sha = 0;
+ else goto badarg;
+
+ if (!inspect_mpint(env, argv[1], &data_bin)
+ || !inspect_mpint(env, argv[2], &sign_bin)
+ || !enif_get_list_cell(env, argv[3], &head, &tail)
+ || !get_bn_from_mpint(env, head, &rsa->e)
+ || !enif_get_list_cell(env, tail, &head, &tail)
+ || !get_bn_from_mpint(env, head, &rsa->n)
+ || !enif_is_empty_list(env, tail)) {
+ badarg:
+ ret = enif_make_badarg(env);
+ }
+ else {
+ if (is_sha) {
+ SHA1(data_bin.data+4, data_bin.size-4, hmacbuf);
+ i = RSA_verify(NID_sha1, hmacbuf, SHA_DIGEST_LENGTH,
+ sign_bin.data+4, sign_bin.size-4, rsa);
+ }
+ else {
+ MD5(data_bin.data+4, data_bin.size-4, hmacbuf);
+ i = RSA_verify(NID_md5, hmacbuf, MD5_DIGEST_LENGTH,
+ sign_bin.data+4, sign_bin.size-4, rsa);
+ }
+ ret = (i==1 ? atom_true : atom_false);
+ }
+ RSA_free(rsa);
+ return ret;
+}
+
+static ERL_NIF_TERM aes_cbc_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Key, IVec, Data, IsEncrypt) */
+ ErlNifBinary key_bin, ivec_bin, data_bin;
+ AES_KEY aes_key;
+ unsigned char ivec[16];
+ int i;
+ unsigned char* ret_ptr;
+ ERL_NIF_TERM ret;
+
+ if (!enif_inspect_iolist_as_binary(env, argv[0], &key_bin)
+ || (key_bin.size != 16 && key_bin.size != 32)
+ || !enif_inspect_binary(env, argv[1], &ivec_bin)
+ || ivec_bin.size != 16
+ || !enif_inspect_iolist_as_binary(env, argv[2], &data_bin)
+ || data_bin.size % 16 != 0) {
+
+ return enif_make_badarg(env);
+ }
+
+ if (argv[3] == atom_true) {
+ i = AES_ENCRYPT;
+ AES_set_encrypt_key(key_bin.data, key_bin.size*8, &aes_key);
+ }
+ else {
+ i = AES_DECRYPT;
+ AES_set_decrypt_key(key_bin.data, key_bin.size*8, &aes_key);
+ }
+
+ ret_ptr = enif_make_new_binary(env, data_bin.size, &ret);
+ memcpy(ivec, ivec_bin.data, 16); /* writable copy */
+ AES_cbc_encrypt(data_bin.data, ret_ptr, data_bin.size, &aes_key, ivec, i);
+ return ret;
+}
+
+static ERL_NIF_TERM exor(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Data1, Data2) */
+ ErlNifBinary d1, d2;
+ unsigned char* ret_ptr;
+ int i;
+ ERL_NIF_TERM ret;
+
+ if (!enif_inspect_iolist_as_binary(env,argv[0], &d1)
+ || !enif_inspect_iolist_as_binary(env,argv[1], &d2)
+ || d1.size != d2.size) {
+ return enif_make_badarg(env);
+ }
+ ret_ptr = enif_make_new_binary(env, d1.size, &ret);
+
+ for (i=0; i<d1.size; i++) {
+ ret_ptr[i] = d1.data[i] ^ d2.data[i];
+ }
+ return ret;
+}
+
+static ERL_NIF_TERM rc4_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Key, Data) */
+ ErlNifBinary key, data;
+ RC4_KEY rc4_key;
+ ERL_NIF_TERM ret;
+
+ if (!enif_inspect_iolist_as_binary(env,argv[0], &key)
+ || !enif_inspect_iolist_as_binary(env,argv[1], &data)) {
+ return enif_make_badarg(env);
+ }
+ RC4_set_key(&rc4_key, key.size, key.data);
+ RC4(&rc4_key, data.size, data.data,
+ enif_make_new_binary(env, data.size, &ret));
+ return ret;
+}
+
+static ERL_NIF_TERM rc4_set_key(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Key) */
+ ErlNifBinary key;
+ ERL_NIF_TERM ret;
+
+ if (!enif_inspect_iolist_as_binary(env,argv[0], &key)) {
+ return enif_make_badarg(env);
+ }
+ RC4_set_key((RC4_KEY*)enif_make_new_binary(env, sizeof(RC4_KEY), &ret),
+ key.size, key.data);
+ return ret;
+}
+
+static ERL_NIF_TERM rc4_encrypt_with_state(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (State, Data) */
+
+ ErlNifBinary state, data;
+ RC4_KEY* rc4_key;
+ ERL_NIF_TERM new_state, new_data;
+
+ if (!enif_inspect_iolist_as_binary(env,argv[0], &state)
+ || state.size != sizeof(RC4_KEY)
+ || !enif_inspect_iolist_as_binary(env,argv[1], &data)) {
+ return enif_make_badarg(env);
+ }
+ rc4_key = (RC4_KEY*)enif_make_new_binary(env, sizeof(RC4_KEY), &new_state);
+ memcpy(rc4_key, state.data, sizeof(RC4_KEY));
+ RC4(rc4_key, data.size, data.data,
+ enif_make_new_binary(env, data.size, &new_data));
+
+ return enif_make_tuple2(env,argv[0],new_data);
+}
+
+static ERL_NIF_TERM rc2_40_cbc_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Key,IVec,Data,IsEncrypt) */
+ ErlNifBinary key_bin, ivec_bin, data_bin;
+ RC2_KEY rc2_key;
+ ERL_NIF_TERM ret;
+
+ if (!enif_inspect_iolist_as_binary(env, argv[0], &key_bin)
+ || key_bin.size != 5
+ || !enif_inspect_binary(env, argv[1], &ivec_bin)
+ || ivec_bin.size != 8
+ || !enif_inspect_iolist_as_binary(env, argv[2], &data_bin)) {
+
+ return enif_make_badarg(env);
+ }
+
+ RC2_set_key(&rc2_key, 5, key_bin.data, 40);
+ RC2_cbc_encrypt(data_bin.data,
+ enif_make_new_binary(env, data_bin.size, &ret),
+ data_bin.size, &rc2_key,
+ ivec_bin.data,
+ (argv[3] == atom_true));
+
+ return ret;
+}
+
+static ERL_NIF_TERM rsa_sign_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Type,Data,Key=[E,N,D]) */
+ ErlNifBinary data_bin, ret_bin;
+ ERL_NIF_TERM head, tail;
+ unsigned char hmacbuf[SHA_DIGEST_LENGTH];
+ unsigned rsa_s_len;
+ RSA *rsa = RSA_new();
+ int i, is_sha;
+
+ if (argv[0] == atom_sha) is_sha = 1;
+ else if (argv[0] == atom_md5) is_sha = 0;
+ else goto badarg;
+
+ if (!inspect_mpint(env,argv[1],&data_bin)
+ || !enif_get_list_cell(env, argv[2], &head, &tail)
+ || !get_bn_from_mpint(env, head, &rsa->e)
+ || !enif_get_list_cell(env, tail, &head, &tail)
+ || !get_bn_from_mpint(env, head, &rsa->n)
+ || !enif_get_list_cell(env, tail, &head, &tail)
+ || !get_bn_from_mpint(env, head, &rsa->d)
+ || !enif_is_empty_list(env,tail)) {
+ badarg:
+ RSA_free(rsa);
+ return enif_make_badarg(env);
+ }
+ enif_alloc_binary(env, RSA_size(rsa), &ret_bin);
+ if (is_sha) {
+ SHA1(data_bin.data+4, data_bin.size-4, hmacbuf);
+ ERL_VALGRIND_ASSERT_MEM_DEFINED(hmacbuf, SHA_DIGEST_LENGTH);
+ i = RSA_sign(NID_sha1, hmacbuf, SHA_DIGEST_LENGTH,
+ ret_bin.data, &rsa_s_len, rsa);
+ }
+ else {
+ MD5(data_bin.data+4, data_bin.size-4, hmacbuf);
+ ERL_VALGRIND_ASSERT_MEM_DEFINED(hmacbuf, MD5_DIGEST_LENGTH);
+ i = RSA_sign(NID_md5, hmacbuf,MD5_DIGEST_LENGTH,
+ ret_bin.data, &rsa_s_len, rsa);
+ }
+ RSA_free(rsa);
+ if (i) {
+ ERL_VALGRIND_MAKE_MEM_DEFINED(ret_bin.data, rsa_s_len);
+ if (rsa_s_len != data_bin.size) {
+ enif_realloc_binary(env, &ret_bin, rsa_s_len);
+ ERL_VALGRIND_ASSERT_MEM_DEFINED(ret_bin.data, rsa_s_len);
+ }
+ return enif_make_binary(env,&ret_bin);
+ }
+ else {
+ enif_release_binary(env, &ret_bin);
+ return atom_error;
+ }
+}
+
+static ERL_NIF_TERM dss_sign_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Data,Key=[P,Q,G,PrivKey]) */
+ ErlNifBinary data_bin, ret_bin;
+ ERL_NIF_TERM head, tail;
+ unsigned char hmacbuf[SHA_DIGEST_LENGTH];
+ unsigned int dsa_s_len;
+ DSA* dsa = DSA_new();
+ int i;
+
+ dsa->pub_key = NULL;
+ if (!inspect_mpint(env, argv[0], &data_bin)
+ || !enif_get_list_cell(env, argv[1], &head, &tail)
+ || !get_bn_from_mpint(env, head, &dsa->p)
+ || !enif_get_list_cell(env, tail, &head, &tail)
+ || !get_bn_from_mpint(env, head, &dsa->q)
+ || !enif_get_list_cell(env, tail, &head, &tail)
+ || !get_bn_from_mpint(env, head, &dsa->g)
+ || !enif_get_list_cell(env, tail, &head, &tail)
+ || !get_bn_from_mpint(env, head, &dsa->priv_key)
+ || !enif_is_empty_list(env,tail)) {
+
+ DSA_free(dsa);
+ return enif_make_badarg(env);
+ }
+
+ SHA1(data_bin.data+4, data_bin.size-4, hmacbuf);
+
+ enif_alloc_binary(env, DSA_size(dsa), &ret_bin);
+ i = DSA_sign(NID_sha1, hmacbuf, SHA_DIGEST_LENGTH,
+ ret_bin.data, &dsa_s_len, dsa);
+ DSA_free(dsa);
+ if (i) {
+ if (dsa_s_len != ret_bin.size) {
+ enif_realloc_binary(env, &ret_bin, dsa_s_len);
+ }
+ return enif_make_binary(env, &ret_bin);
+ }
+ else {
+ return atom_error;
+ }
+}
+
+static int rsa_pad(ERL_NIF_TERM term, int* padding)
+{
+ if (term == atom_rsa_pkcs1_padding) {
+ *padding = RSA_PKCS1_PADDING;
+ }
+ else if (term == atom_rsa_pkcs1_oaep_padding) {
+ *padding = RSA_PKCS1_OAEP_PADDING;
+ }
+ else if (term == atom_rsa_no_padding) {
+ *padding = RSA_NO_PADDING;
+ }
+ else {
+ return 0;
+ }
+ return 1;
+}
+
+static ERL_NIF_TERM rsa_public_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Data, PublKey=[E,N], Padding, IsEncrypt) */
+ ErlNifBinary data_bin, ret_bin;
+ ERL_NIF_TERM head, tail;
+ int padding, i;
+ RSA* rsa = RSA_new();
+
+ if (!enif_inspect_binary(env, argv[0], &data_bin)
+ || !enif_get_list_cell(env, argv[1], &head, &tail)
+ || !get_bn_from_mpint(env, head, &rsa->e)
+ || !enif_get_list_cell(env, tail, &head, &tail)
+ || !get_bn_from_mpint(env, head, &rsa->n)
+ || !enif_is_empty_list(env,tail)
+ || !rsa_pad(argv[2], &padding)) {
+
+ RSA_free(rsa);
+ return enif_make_badarg(env);
+ }
+
+ enif_alloc_binary(env, RSA_size(rsa), &ret_bin);
+
+ if (argv[3] == atom_true) {
+ ERL_VALGRIND_ASSERT_MEM_DEFINED(buf+i,data_len);
+ i = RSA_public_encrypt(data_bin.size, data_bin.data,
+ ret_bin.data, rsa, padding);
+ if (i > 0) {
+ ERL_VALGRIND_MAKE_MEM_DEFINED(ret_bin.data, i);
+ }
+ }
+ else {
+ i = RSA_public_decrypt(data_bin.size, data_bin.data,
+ ret_bin.data, rsa, padding);
+ if (i > 0) {
+ ERL_VALGRIND_MAKE_MEM_DEFINED(ret_bin.data, i);
+ enif_realloc_binary(env, &ret_bin, i);
+ }
+ }
+ RSA_free(rsa);
+ if (i > 0) {
+ return enif_make_binary(env,&ret_bin);
+ }
+ else {
+ return atom_error;
+ }
+}
+
+static ERL_NIF_TERM rsa_private_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Data, PublKey=[E,N,D], Padding, IsEncrypt) */
+ ErlNifBinary data_bin, ret_bin;
+ ERL_NIF_TERM head, tail;
+ int padding, i;
+ RSA* rsa = RSA_new();
+
+ if (!enif_inspect_binary(env, argv[0], &data_bin)
+ || !enif_get_list_cell(env, argv[1], &head, &tail)
+ || !get_bn_from_mpint(env, head, &rsa->e)
+ || !enif_get_list_cell(env, tail, &head, &tail)
+ || !get_bn_from_mpint(env, head, &rsa->n)
+ || !enif_get_list_cell(env, tail, &head, &tail)
+ || !get_bn_from_mpint(env, head, &rsa->d)
+ || !enif_is_empty_list(env,tail)
+ || !rsa_pad(argv[2], &padding)) {
+
+ RSA_free(rsa);
+ return enif_make_badarg(env);
+ }
+
+ enif_alloc_binary(env, RSA_size(rsa), &ret_bin);
+
+ if (argv[3] == atom_true) {
+ ERL_VALGRIND_ASSERT_MEM_DEFINED(buf+i,data_len);
+ i = RSA_private_encrypt(data_bin.size, data_bin.data,
+ ret_bin.data, rsa, padding);
+ if (i > 0) {
+ ERL_VALGRIND_MAKE_MEM_DEFINED(ret_bin.data, i);
+ }
+ }
+ else {
+ i = RSA_private_decrypt(data_bin.size, data_bin.data,
+ ret_bin.data, rsa, padding);
+ if (i > 0) {
+ ERL_VALGRIND_MAKE_MEM_DEFINED(ret_bin.data, i);
+ enif_realloc_binary(env, &ret_bin, i);
+ }
+ }
+ RSA_free(rsa);
+ if (i > 0) {
+ return enif_make_binary(env,&ret_bin);
+ }
+ else {
+ return atom_error;
+ }
+}
+
+static ERL_NIF_TERM dh_generate_parameters_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (PrimeLen, Generator) */
+ int prime_len, generator;
+ DH* dh_params;
+ int p_len, g_len;
+ unsigned char *p_ptr, *g_ptr;
+ ERL_NIF_TERM ret_p, ret_g;
+
+ if (!enif_get_int(env, argv[0], &prime_len)
+ || !enif_get_int(env, argv[1], &generator)) {
+
+ return enif_make_badarg(env);
+ }
+ dh_params = DH_generate_parameters(prime_len, generator, NULL, NULL);
+ if (dh_params == NULL) {
+ return atom_error;
+ }
+ p_len = BN_num_bytes(dh_params->p);
+ g_len = BN_num_bytes(dh_params->g);
+ p_ptr = enif_make_new_binary(env, p_len+4, &ret_p);
+ g_ptr = enif_make_new_binary(env, g_len+4, &ret_g);
+ put_int32(p_ptr, p_len);
+ put_int32(g_ptr, g_len);
+ BN_bn2bin(dh_params->p, p_ptr+4);
+ BN_bn2bin(dh_params->g, g_ptr+4);
+ ERL_VALGRIND_MAKE_MEM_DEFINED(p_ptr+4, p_len);
+ ERL_VALGRIND_MAKE_MEM_DEFINED(g_ptr+4, g_len);
+ DH_free(dh_params);
+ return enif_make_list2(env, ret_p, ret_g);
+}
+
+static ERL_NIF_TERM dh_check(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* ([PrimeLen, Generator]) */
+ DH* dh_params = DH_new();
+ int i;
+ ERL_NIF_TERM ret, head, tail;
+
+ if (!enif_get_list_cell(env, argv[0], &head, &tail)
+ || !get_bn_from_mpint(env, head, &dh_params->p)
+ || !enif_get_list_cell(env, tail, &head, &tail)
+ || !get_bn_from_mpint(env, head, &dh_params->g)
+ || !enif_is_empty_list(env,tail)) {
+
+ DH_free(dh_params);
+ return enif_make_badarg(env);
+ }
+ if (DH_check(dh_params, &i)) {
+ if (i == 0) ret = atom_ok;
+ else if (i & DH_CHECK_P_NOT_PRIME) ret = atom_not_prime;
+ else if (i & DH_CHECK_P_NOT_SAFE_PRIME) ret = atom_not_strong_prime;
+ else if (i & DH_UNABLE_TO_CHECK_GENERATOR) ret = atom_unable_to_check_generator;
+ else if (i & DH_NOT_SUITABLE_GENERATOR) ret = atom_not_suitable_generator;
+ else ret = enif_make_tuple2(env, atom_unknown, enif_make_uint(env, i));
+ }
+ else { /* Check Failed */
+ ret = enif_make_tuple2(env, atom_error, atom_check_failed);
+ }
+ DH_free(dh_params);
+ return ret;
+}
+
+static ERL_NIF_TERM dh_generate_key_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (PrivKey, DHParams=[P,G]) */
+ DH* dh_params = DH_new();
+ int pub_len, prv_len;
+ unsigned char *pub_ptr, *prv_ptr;
+ ERL_NIF_TERM ret, ret_pub, ret_prv, head, tail;
+
+ if (!(get_bn_from_mpint(env, argv[0], &dh_params->priv_key)
+ || argv[0] == atom_undefined)
+ || !enif_get_list_cell(env, argv[1], &head, &tail)
+ || !get_bn_from_mpint(env, head, &dh_params->p)
+ || !enif_get_list_cell(env, tail, &head, &tail)
+ || !get_bn_from_mpint(env, head, &dh_params->g)
+ || !enif_is_empty_list(env, tail)) {
+
+ return enif_make_badarg(env);
+ }
+
+ if (DH_generate_key(dh_params)) {
+ pub_len = BN_num_bytes(dh_params->pub_key);
+ prv_len = BN_num_bytes(dh_params->priv_key);
+ pub_ptr = enif_make_new_binary(env, pub_len+4, &ret_pub);
+ prv_ptr = enif_make_new_binary(env, prv_len+4, &ret_prv);
+ put_int32(pub_ptr, pub_len);
+ put_int32(prv_ptr, prv_len);
+ BN_bn2bin(dh_params->pub_key, pub_ptr+4);
+ BN_bn2bin(dh_params->priv_key, prv_ptr+4);
+ ERL_VALGRIND_MAKE_MEM_DEFINED(pub_ptr+4, pub_len);
+ ERL_VALGRIND_MAKE_MEM_DEFINED(prv_ptr+4, prv_len);
+ ret = enif_make_tuple2(env, ret_pub, ret_prv);
+ }
+ else {
+ ret = atom_error;
+ }
+ DH_free(dh_params);
+ return ret;
+}
+
+static ERL_NIF_TERM dh_compute_key_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (OthersPublicKey, MyPrivateKey, DHParams=[P,G]) */
+ DH* dh_params = DH_new();
+ BIGNUM* pubkey;
+ int i;
+ ErlNifBinary ret_bin;
+ ERL_NIF_TERM ret, head, tail;
+
+ if (!get_bn_from_mpint(env, argv[0], &pubkey)
+ || !get_bn_from_mpint(env, argv[1], &dh_params->priv_key)
+ || !enif_get_list_cell(env, argv[2], &head, &tail)
+ || !get_bn_from_mpint(env, head, &dh_params->p)
+ || !enif_get_list_cell(env, tail, &head, &tail)
+ || !get_bn_from_mpint(env, head, &dh_params->g)
+ || !enif_is_empty_list(env, tail)) {
+
+ ret = enif_make_badarg(env);
+ }
+ else {
+ enif_alloc_binary(env, DH_size(dh_params), &ret_bin);
+ i = DH_compute_key(ret_bin.data, pubkey, dh_params);
+ if (i > 0) {
+ if (i != ret_bin.size) {
+ enif_realloc_binary(env, &ret_bin, i);
+ }
+ ret = enif_make_binary(env, &ret_bin);
+ }
+ else {
+ ret = atom_error;
+ }
+ }
+ DH_free(dh_params);
+ return ret;
+}
+
+static ERL_NIF_TERM bf_cfb64_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Key, Ivec, Data, IsEncrypt) */
+ ErlNifBinary key_bin, ivec_bin, data_bin;
+ BF_KEY bf_key; /* blowfish key 8 */
+ unsigned char bf_tkey[8]; /* blowfish ivec */
+ int bf_n = 0; /* blowfish ivec pos */
+ ERL_NIF_TERM ret;
+
+ if (!enif_inspect_iolist_as_binary(env, argv[0], &key_bin)
+ || !enif_inspect_binary(env, argv[1], &ivec_bin)
+ || ivec_bin.size != 8
+ || !enif_inspect_iolist_as_binary(env, argv[2], &data_bin)) {
+ return enif_make_badarg(env);
+ }
+
+ BF_set_key(&bf_key, key_bin.size, key_bin.data);
+ memcpy(bf_tkey, ivec_bin.data, 8);
+ BF_cfb64_encrypt(data_bin.data, enif_make_new_binary(env,data_bin.size,&ret),
+ data_bin.size, &bf_key, bf_tkey, &bf_n,
+ (argv[3] == atom_true ? BF_ENCRYPT : BF_DECRYPT));
+ return ret;
+}
+
+static ERL_NIF_TERM bf_cbc_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Key, Ivec, Data, IsEncrypt) */
+ ErlNifBinary key_bin, ivec_bin, data_bin;
+ BF_KEY bf_key; /* blowfish key 8 */
+ unsigned char bf_tkey[8]; /* blowfish ivec */
+ ERL_NIF_TERM ret;
+
+ if (!enif_inspect_iolist_as_binary(env, argv[0], &key_bin)
+ || !enif_inspect_binary(env, argv[1], &ivec_bin)
+ || ivec_bin.size != 8
+ || !enif_inspect_iolist_as_binary(env, argv[2], &data_bin)
+ || data_bin.size % 8 != 0) {
+ return enif_make_badarg(env);
+ }
+
+ BF_set_key(&bf_key, key_bin.size, key_bin.data);
+ memcpy(bf_tkey, ivec_bin.data, 8);
+ BF_cbc_encrypt(data_bin.data, enif_make_new_binary(env,data_bin.size,&ret),
+ data_bin.size, &bf_key, bf_tkey,
+ (argv[3] == atom_true ? BF_ENCRYPT : BF_DECRYPT));
+ return ret;
+}
+
+static ERL_NIF_TERM bf_ecb_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Key, Data, IsEncrypt) */
+ ErlNifBinary key_bin, data_bin;
+ BF_KEY bf_key; /* blowfish key 8 */
+ ERL_NIF_TERM ret;
+
+ if (!enif_inspect_iolist_as_binary(env, argv[0], &key_bin)
+ || !enif_inspect_iolist_as_binary(env, argv[1], &data_bin)
+ || data_bin.size < 8) {
+ return enif_make_badarg(env);
+ }
+ BF_set_key(&bf_key, key_bin.size, key_bin.data);
+ BF_ecb_encrypt(data_bin.data, enif_make_new_binary(env,data_bin.size,&ret),
+ &bf_key, (argv[2] == atom_true ? BF_ENCRYPT : BF_DECRYPT));
+ return ret;
+}
+
+static ERL_NIF_TERM blowfish_ofb64_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Key, IVec, Data) */
+ ErlNifBinary key_bin, ivec_bin, data_bin;
+ BF_KEY bf_key; /* blowfish key 8 */
+ unsigned char bf_tkey[8]; /* blowfish ivec */
+ int bf_n = 0; /* blowfish ivec pos */
+ ERL_NIF_TERM ret;
+
+ if (!enif_inspect_iolist_as_binary(env, argv[0], &key_bin)
+ || !enif_inspect_binary(env, argv[1], &ivec_bin)
+ || ivec_bin.size != 8
+ || !enif_inspect_iolist_as_binary(env, argv[2], &data_bin)) {
+ return enif_make_badarg(env);
+ }
+
+ BF_set_key(&bf_key, key_bin.size, key_bin.data);
+ memcpy(bf_tkey, ivec_bin.data, 8);
+ BF_ofb64_encrypt(data_bin.data, enif_make_new_binary(env,data_bin.size,&ret),
+ data_bin.size, &bf_key, bf_tkey, &bf_n);
+ return ret;
+}
+
+
+
+#ifdef OPENSSL_THREADS /* vvvvvvvvvvvvvvv OPENSSL_THREADS vvvvvvvvvvvvvvvv */
+
+static INLINE void locking(int mode, ErlNifRWLock* lock)
+{
+ switch (mode) {
+ case CRYPTO_LOCK|CRYPTO_READ:
+ enif_rwlock_rlock(lock);
+ break;
+ case CRYPTO_LOCK|CRYPTO_WRITE:
+ enif_rwlock_rwlock(lock);
+ break;
+ case CRYPTO_UNLOCK|CRYPTO_READ:
+ enif_rwlock_runlock(lock);
+ break;
+ case CRYPTO_UNLOCK|CRYPTO_WRITE:
+ enif_rwlock_rwunlock(lock);
+ break;
+ default:
+ ASSERT(!"Invalid lock mode");
+ }
+}
+
+/* Callback from openssl for static locking
+ */
+static void locking_function(int mode, int n, const char *file, int line)
+{
+ ASSERT(n>=0 && n<CRYPTO_num_locks());
+
+ locking(mode, lock_vec[n]);
+}
+
+/* Callback from openssl for thread id
+ */
+static unsigned long id_function(void)
+{
+ return(unsigned long) enif_thread_self();
+}
+
+/* Callbacks for dynamic locking, not used by current openssl version (0.9.8)
+ */
+static struct CRYPTO_dynlock_value* dyn_create_function(const char *file, int line) {
+ return(struct CRYPTO_dynlock_value*) enif_rwlock_create("crypto_dyn");
+}
+static void dyn_lock_function(int mode, struct CRYPTO_dynlock_value* ptr,const char *file, int line)
+{
+ locking(mode, (ErlNifRWLock*)ptr);
+}
+static void dyn_destroy_function(struct CRYPTO_dynlock_value *ptr, const char *file, int line)
+{
+ enif_rwlock_destroy((ErlNifRWLock*)ptr);
+}
+
+#endif /* ^^^^^^^^^^^^^^^^^^^^^^ OPENSSL_THREADS ^^^^^^^^^^^^^^^^^^^^^^ */
+
+/* HMAC */
+
+static void hmac_md5(unsigned char *key, int klen, unsigned char *dbuf, int dlen,
+ unsigned char *hmacbuf)
+{
+ MD5_CTX ctx;
+ char ipad[HMAC_INT_LEN];
+ char opad[HMAC_INT_LEN];
+ unsigned char nkey[MD5_LEN];
+ int i;
+
+ /* Change key if longer than 64 bytes */
+ if (klen > HMAC_INT_LEN) {
+ MD5(key, klen, nkey);
+ key = nkey;
+ klen = MD5_LEN;
+ }
+
+ memset(ipad, '\0', sizeof(ipad));
+ memset(opad, '\0', sizeof(opad));
+ memcpy(ipad, key, klen);
+ memcpy(opad, key, klen);
+
+ for (i = 0; i < HMAC_INT_LEN; i++) {
+ ipad[i] ^= HMAC_IPAD;
+ opad[i] ^= HMAC_OPAD;
+ }
+
+ /* inner MD5 */
+ MD5_Init(&ctx);
+ MD5_Update(&ctx, ipad, HMAC_INT_LEN);
+ MD5_Update(&ctx, dbuf, dlen);
+ MD5_Final((unsigned char *) hmacbuf, &ctx);
+ /* outer MD5 */
+ MD5_Init(&ctx);
+ MD5_Update(&ctx, opad, HMAC_INT_LEN);
+ MD5_Update(&ctx, hmacbuf, MD5_LEN);
+ MD5_Final((unsigned char *) hmacbuf, &ctx);
+}
+
+static void hmac_sha1(unsigned char *key, int klen,
+ unsigned char *dbuf, int dlen,
+ unsigned char *hmacbuf)
+{
+ SHA_CTX ctx;
+ char ipad[HMAC_INT_LEN];
+ char opad[HMAC_INT_LEN];
+ unsigned char nkey[SHA_LEN];
+ int i;
+
+ /* Change key if longer than 64 bytes */
+ if (klen > HMAC_INT_LEN) {
+ SHA1(key, klen, nkey);
+ key = nkey;
+ klen = SHA_LEN;
+ }
+
+ memset(ipad, '\0', sizeof(ipad));
+ memset(opad, '\0', sizeof(opad));
+ memcpy(ipad, key, klen);
+ memcpy(opad, key, klen);
+
+ for (i = 0; i < HMAC_INT_LEN; i++) {
+ ipad[i] ^= HMAC_IPAD;
+ opad[i] ^= HMAC_OPAD;
+ }
+
+ /* inner SHA */
+ SHA1_Init(&ctx);
+ SHA1_Update(&ctx, ipad, HMAC_INT_LEN);
+ SHA1_Update(&ctx, dbuf, dlen);
+ SHA1_Final((unsigned char *) hmacbuf, &ctx);
+ /* outer SHA */
+ SHA1_Init(&ctx);
+ SHA1_Update(&ctx, opad, HMAC_INT_LEN);
+ SHA1_Update(&ctx, hmacbuf, SHA_LEN);
+ SHA1_Final((unsigned char *) hmacbuf, &ctx);
+}
+
diff --git a/lib/crypto/c_src/crypto_drv.c b/lib/crypto/c_src/crypto_drv.c
deleted file mode 100644
index 5b6d750dde..0000000000
--- a/lib/crypto/c_src/crypto_drv.c
+++ /dev/null
@@ -1,1799 +0,0 @@
-/*
- * %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%
- */
-
-/*
- * Purpose: Dynamically loadable driver for cryptography libraries.
- * Based on OpenSSL.
- */
-
-#ifdef __WIN32__
-#include <windows.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include "erl_driver.h"
-
-#define OPENSSL_THREAD_DEFINES
-#include <openssl/opensslconf.h>
-#ifndef OPENSSL_THREADS
-# ifdef __GNUC__
-# warning No thread support by openssl. Driver will use coarse grain locking.
-# endif
-#endif
-
-#include <openssl/crypto.h>
-#include <openssl/des.h>
-/* #include <openssl/idea.h> This is not supported on the openssl OTP requires */
-#include <openssl/dsa.h>
-#include <openssl/rsa.h>
-#include <openssl/aes.h>
-#include <openssl/md5.h>
-#include <openssl/md4.h>
-#include <openssl/sha.h>
-#include <openssl/bn.h>
-#include <openssl/objects.h>
-#include <openssl/rc4.h>
-#include <openssl/rc2.h>
-#include <openssl/blowfish.h>
-#include <openssl/rand.h>
-
-#ifdef VALGRIND
-# include <valgrind/memcheck.h>
-
-/* libcrypto mixes supplied buffer contents into its entropy pool,
- which makes valgrind complain about the use of uninitialized data.
- We use this valgrind "request" to make sure that no such seemingly
- undefined data escapes the driver.
-*/
-# define ERL_VALGRIND_MAKE_MEM_DEFINED(ptr,size) \
- VALGRIND_MAKE_MEM_DEFINED(ptr,size)
-
-# define ERL_VALGRIND_ASSERT_MEM_DEFINED(ptr,size) \
- ((void) ((VALGRIND_CHECK_MEM_IS_DEFINED(ptr,size) == 0) ? 1 : \
- (fprintf(stderr,"\r\n####### VALGRIND_ASSSERT(%p,%d) failed at %s:%d\r\n",\
- (ptr),(size), __FILE__, __LINE__), abort(), 0)))
-#else
-# define ERL_VALGRIND_MAKE_MEM_DEFINED(ptr,size)
-# define ERL_VALGRIND_ASSERT_MEM_DEFINED(ptr,size)
-#endif
-
-#ifdef DEBUG
-# define ASSERT(e) \
- ((void) ((e) ? 1 : (fprintf(stderr,"Assert '%s' failed at %s:%d\n",\
- #e, __FILE__, __LINE__), abort(), 0)))
-#else
-# define ASSERT(e) ((void) 1)
-#endif
-
-#ifdef __GNUC__
-# define INLINE __inline__
-#elif defined(__WIN32__)
-# define INLINE __forceinline
-#else
-# define INLINE
-#endif
-
-
-#define get_int32(s) ((((unsigned char*) (s))[0] << 24) | \
- (((unsigned char*) (s))[1] << 16) | \
- (((unsigned char*) (s))[2] << 8) | \
- (((unsigned char*) (s))[3]))
-
-#define put_int32(s,i) \
-{ (s)[0] = (char)(((i) >> 24) & 0xff);\
- (s)[1] = (char)(((i) >> 16) & 0xff);\
- (s)[2] = (char)(((i) >> 8) & 0xff);\
- (s)[3] = (char)((i) & 0xff);\
-}
-
-/* Driver interface declarations */
-static int init(void);
-static void finish(void);
-static ErlDrvData start(ErlDrvPort port, char *command);
-static void stop(ErlDrvData drv_data);
-static int crypto_control(ErlDrvData drv_data, unsigned int command, char *buf,
- int len, char **rbuf, int rlen);
-
-/* openssl callbacks */
-#ifdef OPENSSL_THREADS
-static void locking_function(int mode, int n, const char *file, int line);
-static unsigned long id_function(void);
-static struct CRYPTO_dynlock_value* dyn_create_function(const char *file,
- int line);
-static void dyn_lock_function(int mode, struct CRYPTO_dynlock_value* ptr,
- const char *file, int line);
-static void dyn_destroy_function(struct CRYPTO_dynlock_value *ptr,
- const char *file, int line);
-#endif /* OPENSSL_THREADS */
-
-/* helpers */
-static void hmac_md5(char *key, int klen, char *dbuf, int dlen,
- char *hmacbuf);
-static void hmac_sha1(char *key, int klen, char *dbuf, int dlen,
- char *hmacbuf);
-
-static ErlDrvEntry crypto_driver_entry = {
- init,
- start,
- stop,
- NULL, /* output */
- NULL, /* ready_input */
- NULL, /* ready_output */
- "crypto_drv",
- finish,
- NULL, /* handle */
- crypto_control,
- NULL, /* timeout */
- NULL, /* outputv */
-
- NULL, /* ready_async */
- NULL, /* flush */
- NULL, /* call */
- NULL, /* event */
- ERL_DRV_EXTENDED_MARKER,
- ERL_DRV_EXTENDED_MAJOR_VERSION,
- ERL_DRV_EXTENDED_MINOR_VERSION,
-#ifdef OPENSSL_THREADS
- ERL_DRV_FLAG_USE_PORT_LOCKING,
-#else
- 0,
-#endif
- NULL, /* handle2 */
- NULL /* process_exit */
-};
-
-
-/* Keep the following definitions in alignment with the FUNC_LIST
- * in crypto.erl.
- */
-
-#define DRV_INFO 0
-#define DRV_MD5 1
-#define DRV_MD5_INIT 2
-#define DRV_MD5_UPDATE 3
-#define DRV_MD5_FINAL 4
-#define DRV_SHA 5
-#define DRV_SHA_INIT 6
-#define DRV_SHA_UPDATE 7
-#define DRV_SHA_FINAL 8
-#define DRV_MD5_MAC 9
-#define DRV_MD5_MAC_96 10
-#define DRV_SHA_MAC 11
-#define DRV_SHA_MAC_96 12
-#define DRV_CBC_DES_ENCRYPT 13
-#define DRV_CBC_DES_DECRYPT 14
-#define DRV_EDE3_CBC_DES_ENCRYPT 15
-#define DRV_EDE3_CBC_DES_DECRYPT 16
-#define DRV_AES_CFB_128_ENCRYPT 17
-#define DRV_AES_CFB_128_DECRYPT 18
-#define DRV_RAND_BYTES 19
-#define DRV_RAND_UNIFORM 20
-#define DRV_MOD_EXP 21
-#define DRV_DSS_VERIFY 22
-#define DRV_RSA_VERIFY_SHA 23
-/* #define DRV_RSA_VERIFY_MD5 35 */
-#define DRV_CBC_AES128_ENCRYPT 24
-#define DRV_CBC_AES128_DECRYPT 25
-#define DRV_XOR 26
-#define DRV_RC4_ENCRYPT 27 /* no decrypt needed; symmetric */
-#define DRV_RC4_SETKEY 28
-#define DRV_RC4_ENCRYPT_WITH_STATE 29
-#define DRV_CBC_RC2_40_ENCRYPT 30
-#define DRV_CBC_RC2_40_DECRYPT 31
-#define DRV_CBC_AES256_ENCRYPT 32
-#define DRV_CBC_AES256_DECRYPT 33
-#define DRV_INFO_LIB 34
-/* #define DRV_RSA_VERIFY_SHA 23 */
-#define DRV_RSA_VERIFY_MD5 35
-#define DRV_RSA_SIGN_SHA 36
-#define DRV_RSA_SIGN_MD5 37
-#define DRV_DSS_SIGN 38
-#define DRV_RSA_PUBLIC_ENCRYPT 39
-#define DRV_RSA_PRIVATE_DECRYPT 40
-#define DRV_RSA_PRIVATE_ENCRYPT 41
-#define DRV_RSA_PUBLIC_DECRYPT 42
-#define DRV_DH_GENERATE_PARAMS 43
-#define DRV_DH_CHECK 44
-#define DRV_DH_GENERATE_KEY 45
-#define DRV_DH_COMPUTE_KEY 46
-#define DRV_MD4 47
-#define DRV_MD4_INIT 48
-#define DRV_MD4_UPDATE 49
-#define DRV_MD4_FINAL 50
-
-#define SSL_VERSION_0_9_8 0
-#if SSL_VERSION_0_9_8
-#define DRV_SHA256 51
-#define DRV_SHA256_INIT 52
-#define DRV_SHA256_UPDATE 53
-#define DRV_SHA256_FINAL 54
-#define DRV_SHA512 55
-#define DRV_SHA512_INIT 56
-#define DRV_SHA512_UPDATE 57
-#define DRV_SHA512_FINAL 58
-#endif
-
-#define DRV_BF_CFB64_ENCRYPT 59
-#define DRV_BF_CFB64_DECRYPT 60
-#define DRV_BF_ECB_ENCRYPT 61
-#define DRV_BF_ECB_DECRYPT 62
-#define DRV_BF_OFB64_ENCRYPT 63
-#define DRV_BF_CBC_ENCRYPT 64
-#define DRV_BF_CBC_DECRYPT 65
-
-/* #define DRV_CBC_IDEA_ENCRYPT 34 */
-/* #define DRV_CBC_IDEA_DECRYPT 35 */
-
-/* Not DRV_DH_GENERATE_PARAMS DRV_DH_CHECK
- * Calc RSA_VERIFY_* and RSA_SIGN once */
-#define NUM_CRYPTO_FUNCS 46
-
-#define MD5_CTX_LEN (sizeof(MD5_CTX))
-#define MD5_LEN 16
-#define MD5_LEN_96 12
-#define MD4_CTX_LEN (sizeof(MD4_CTX))
-#define MD4_LEN 16
-#define SHA_CTX_LEN (sizeof(SHA_CTX))
-#define SHA_LEN 20
-#define SHA_LEN_96 12
-#define HMAC_INT_LEN 64
-
-#define HMAC_IPAD 0x36
-#define HMAC_OPAD 0x5c
-
-#if SSL_VERSION_0_9_8
-#define SHA256_CTX_LEN (sizeof(SHA256_CTX))
-#define SHA256_LEN 32
-
-#define SHA512_CTX_LEN (sizeof(SHA512_CTX))
-#define SHA512_LEN 64
-#endif
-
-/* INITIALIZATION AFTER LOADING */
-
-/*
- * This is the init function called after this driver has been loaded.
- * It must *not* be declared static. Must return the address to
- * the driver entry.
- */
-
-#if !defined(__WIN32__)
-DRIVER_INIT(crypto_drv);
-#endif
-
-DRIVER_INIT(crypto_drv)
-{
- return &crypto_driver_entry;
-}
-
-static ErlDrvRWLock** lock_vec = NULL; /* Static locks used by openssl */
-
-/* DRIVER INTERFACE */
-
-static int init(void)
-{
- ErlDrvSysInfo sys_info;
- int i;
-
- CRYPTO_set_mem_functions(driver_alloc, driver_realloc, driver_free);
-
-#ifdef OPENSSL_THREADS
- driver_system_info(&sys_info, sizeof(sys_info));
-
- if(sys_info.scheduler_threads > 1) {
- lock_vec = driver_alloc(CRYPTO_num_locks()*sizeof(*lock_vec));
- if (lock_vec==NULL) return -1;
- memset(lock_vec,0,CRYPTO_num_locks()*sizeof(*lock_vec));
-
- for(i=CRYPTO_num_locks()-1; i>=0; --i) {
- lock_vec[i] = erl_drv_rwlock_create("crypto_drv_stat");
- if (lock_vec[i]==NULL) return -1;
- }
- CRYPTO_set_locking_callback(locking_function);
- CRYPTO_set_id_callback(id_function);
- CRYPTO_set_dynlock_create_callback(dyn_create_function);
- CRYPTO_set_dynlock_lock_callback(dyn_lock_function);
- CRYPTO_set_dynlock_destroy_callback(dyn_destroy_function);
- }
- /* else no need for locks */
-#endif /* OPENSSL_THREADS */
-
- return 0;
-}
-
-static void finish(void)
-{
- /* Moved here from crypto_control() as it's not thread safe */
- CRYPTO_cleanup_all_ex_data();
-
- if(lock_vec != NULL) {
- int i;
- for(i=CRYPTO_num_locks()-1; i>=0; --i) {
- if (lock_vec[i] != NULL) {
- erl_drv_rwlock_destroy(lock_vec[i]);
- }
- }
- driver_free(lock_vec);
- }
-}
-
-static ErlDrvData start(ErlDrvPort port, char *command)
-{
- set_port_control_flags(port, PORT_CONTROL_FLAG_BINARY);
- return 0; /* not used */
-}
-
-static void stop(ErlDrvData drv_data)
-{
- return;
-}
-
-/* Helper functions for 'crypto_control'
-*/
-static INLINE unsigned char* return_binary(char **rbuf, int rlen, int len)
-{
- if (len <= rlen) {
- return (unsigned char *) *rbuf;
- }
- else {
- ErlDrvBinary* bin;
- *rbuf = (char*) (bin = driver_alloc_binary(len));
- return (bin==NULL) ? NULL : (unsigned char *) bin->orig_bytes;
- }
-}
-
-static INLINE unsigned char* return_binary_shrink(char **rbuf, int rlen, unsigned char* data, int len)
-{
- if ((char *) data == *rbuf) { /* default buffer */
- ASSERT(len <= rlen);
- return (unsigned char *) data;
- }
- else {
- ErlDrvBinary* bin = (ErlDrvBinary*) *rbuf;
- *rbuf = (char*) (bin=driver_realloc_binary(bin, len));
- return (bin==NULL) ? NULL : (unsigned char *) bin->orig_bytes;
- }
-}
-
-/* Nowadays (R13) it does matter what value control returns
- * as it may return data in default buffer.
- */
-static int crypto_control(ErlDrvData drv_data, unsigned int command, char *buf,
- int len, char **rbuf, int rlen)
-{
- int klen, dlen, macsize, from_len, to_len, i;
- int base_len, exponent_len, modulo_len;
- int data_len, dsa_p_len, dsa_q_len;
- int dsa_s_len, dsa_g_len, dsa_y_len;
- int rsa_e_len, rsa_n_len, rsa_d_len, padding;
- int or_mask;
- int prime_len, generator;
- int privkey_len, pubkey_len, dh_p_len, dh_g_len;
- unsigned int rsa_s_len, j;
- char *key, *key2, *dbuf;
- unsigned char *p;
- const_DES_cblock *des_key, *des_key2, *des_key3;
- const unsigned char *des_dbuf;
- BIGNUM *bn_from, *bn_to, *bn_rand, *bn_result;
- BIGNUM *bn_base, *bn_exponent, *bn_modulo;
- BIGNUM *dsa_p, *dsa_q, *dsa_g, *dsa_y;
- BIGNUM *rsa_n, *rsa_e, *rsa_d;
- BIGNUM *dh_p, *dh_g, *privkey, *pubkey;
- DES_cblock *des_ivec;
- unsigned char* bin;
- DES_key_schedule schedule, schedule2, schedule3;
- DH *dh_params;
-/* IDEA_KEY_SCHEDULE idea, idea2; */
- char hmacbuf[SHA_DIGEST_LENGTH];
- unsigned char *rsa_s, *dsa_s;
- /* char hmacbuf[SHA_LEN]; */
-#if SSL_VERSION_0_9_8
- SHA256_CTX sha256_ctx;
- SHA512_CTX sha512_ctx;
-#endif
- MD5_CTX md5_ctx;
- MD4_CTX md4_ctx;
- SHA_CTX sha_ctx;
- int new_ivlen = 0;
- BN_CTX *bn_ctx;
- DSA *dsa;
- RSA *rsa;
- AES_KEY aes_key;
- RC4_KEY rc4_key;
- RC2_KEY rc2_key;
-
- switch(command) {
-
- case DRV_INFO:
- bin = return_binary(rbuf,rlen,NUM_CRYPTO_FUNCS);
- if (bin==NULL) return -1;
-
- for (i = 0; i < NUM_CRYPTO_FUNCS; i++) {
- bin[i] = i + 1;
- }
- return NUM_CRYPTO_FUNCS;
-
- case DRV_MD5:
- bin = return_binary(rbuf,rlen,MD5_LEN);
- if (bin==NULL) return -1;
- MD5((unsigned char *) buf, len, bin);
- return MD5_LEN;
-
- case DRV_MD5_INIT:
- bin = return_binary(rbuf,rlen,MD5_CTX_LEN);
- if (bin==NULL) return -1;
- MD5_Init((MD5_CTX *)bin);
- return MD5_CTX_LEN;
-
- case DRV_MD5_UPDATE:
- if (len < MD5_CTX_LEN)
- return -1;
- bin = return_binary(rbuf,rlen,MD5_CTX_LEN);
- if (bin==NULL) return -1;
- memcpy(bin, buf, MD5_CTX_LEN);
- MD5_Update((MD5_CTX *)bin, buf + MD5_CTX_LEN,
- len - MD5_CTX_LEN);
- return MD5_CTX_LEN;
-
- case DRV_MD5_FINAL:
- if (len != MD5_CTX_LEN)
- return -1;
- memcpy(&md5_ctx, buf, MD5_CTX_LEN); /* XXX Use buf only? */
- bin = return_binary(rbuf,rlen,MD5_LEN);
- if (bin==NULL) return -1;
- MD5_Final(bin, &md5_ctx);
- return MD5_LEN;
-
- case DRV_SHA:
- bin = return_binary(rbuf,rlen,SHA_LEN);
- if (bin==NULL) return -1;
- SHA1((unsigned char *) buf, len, bin);
- return SHA_LEN;
-
- case DRV_SHA_INIT:
- bin = return_binary(rbuf,rlen,SHA_CTX_LEN);
- if (bin==NULL) return -1;
- SHA1_Init((SHA_CTX*)bin);
- return SHA_CTX_LEN;
-
- case DRV_SHA_UPDATE:
- if (len < SHA_CTX_LEN)
- return -1;
- bin = return_binary(rbuf,rlen,SHA_CTX_LEN);
- if (bin==NULL) return -1;
- memcpy(bin, buf, SHA_CTX_LEN);
- SHA1_Update((SHA_CTX*)bin, buf + SHA_CTX_LEN, len - SHA_CTX_LEN);
- return SHA_CTX_LEN;
-
- case DRV_SHA_FINAL:
- if (len != SHA_CTX_LEN)
- return -1;
- memcpy(&sha_ctx, buf, SHA_CTX_LEN); /* XXX Use buf only? */
- bin = return_binary(rbuf,rlen,SHA_LEN);
- if (bin==NULL) return -1;
- SHA1_Final(bin, &sha_ctx);
- return SHA_LEN;
-
- case DRV_MD5_MAC:
- case DRV_MD5_MAC_96:
- /* buf = klen[4] key data */
- klen = get_int32(buf);
- key = buf + 4;
- dlen = len - klen - 4;
- dbuf = key + klen;
- hmac_md5(key, klen, dbuf, dlen, hmacbuf);
- macsize = (command == DRV_MD5_MAC) ? MD5_LEN : MD5_LEN_96;
- bin = return_binary(rbuf,rlen,macsize);
- if (bin==NULL) return -1;
- memcpy(bin, hmacbuf, macsize);
- return macsize;
-
- case DRV_SHA_MAC:
- case DRV_SHA_MAC_96:
- /* buf = klen[4] key data */
- klen = get_int32(buf);
- key = buf + 4;
- dlen = len - klen - 4;
- dbuf = key + klen;
- hmac_sha1(key, klen, dbuf, dlen, hmacbuf);
- macsize = (command == DRV_SHA_MAC) ? SHA_LEN : SHA_LEN_96;
- bin = return_binary(rbuf,rlen,macsize);
- if (bin==NULL) return -1;
- memcpy(bin, (unsigned char *) hmacbuf, macsize);
- return macsize;
-
- case DRV_CBC_DES_ENCRYPT:
- case DRV_CBC_DES_DECRYPT:
- /* buf = key[8] ivec[8] data */
- dlen = len - 16;
- if (dlen < 0)
- return -1;
- if (dlen % 8 != 0)
- return -1;
- des_key = (const_DES_cblock*) buf;
- des_ivec = (DES_cblock*)(buf + 8);
- des_dbuf = (unsigned char *) (buf + 16);
- bin = return_binary(rbuf,rlen,dlen);
- if (bin==NULL) return -1;
- DES_set_key(des_key, &schedule);
- DES_ncbc_encrypt(des_dbuf, bin, dlen, &schedule, des_ivec,
- (command == DRV_CBC_DES_ENCRYPT));
- return dlen;
-
- case DRV_BF_ECB_ENCRYPT:
- case DRV_BF_ECB_DECRYPT:
- {
- /* buf = klen[4] key data */
- int bf_direction;
- const unsigned char *ukey;
- const unsigned char *bf_dbuf; /* blowfish input data */
- BF_KEY bf_key; /* blowfish key 8 */
-
- klen = get_int32(buf);
- ukey = (unsigned char *) buf + 4;
- bf_dbuf = ukey + klen;
- dlen = len - 4 - klen;
- if (dlen < 0) return -1;
- BF_set_key(&bf_key, klen, ukey);
- bin = return_binary(rbuf,rlen,dlen);
- if (bin==NULL) return -1;
- bf_direction = command == DRV_BF_ECB_ENCRYPT ? BF_ENCRYPT : BF_DECRYPT;
- BF_ecb_encrypt(bf_dbuf, bin, &bf_key, bf_direction);
- return dlen;
- }
-
- case DRV_BF_CBC_ENCRYPT:
- case DRV_BF_CBC_DECRYPT:
- {
- /* buf = klen[4] key ivec[8] data */
- unsigned char *ukey;
- unsigned char* ivec;
- unsigned char bf_tkey[8]; /* blowfish ivec */
- int bf_direction;
- const unsigned char *bf_dbuf; /* blowfish input data */
- BF_KEY bf_key; /* blowfish key 8 */
-
- klen = get_int32(buf);
- ukey = (unsigned char *)buf + 4;
- ivec = ukey + klen;
- bf_dbuf = ivec + 8;
- dlen = len - 4 - klen - 8;
- if (dlen < 0) return -1;
- BF_set_key(&bf_key, klen, ukey);
- memcpy(bf_tkey, ivec, 8);
- bin = return_binary(rbuf,rlen,dlen);
- if (bin==NULL) return -1;
- bf_direction = command == DRV_BF_CBC_ENCRYPT ? BF_ENCRYPT : BF_DECRYPT;
- BF_cbc_encrypt(bf_dbuf, bin, dlen, &bf_key, bf_tkey, bf_direction);
- return dlen;
- }
-
- case DRV_BF_OFB64_ENCRYPT:
- {
- /* buf = klen[4] key ivec[8] data */
- unsigned char *ukey;
- unsigned char* ivec;
- unsigned char bf_tkey[8]; /* blowfish ivec */
- int bf_n; /* blowfish ivec pos */
- const unsigned char *bf_dbuf; /* blowfish input data */
- BF_KEY bf_key; /* blowfish key 8 */
-
- klen = get_int32(buf);
- ukey = (unsigned char *)buf + 4;
- ivec = ukey + klen;
- bf_dbuf = ivec + 8;
- dlen = len - 4 - klen - 8;
- if (dlen < 0) return -1;
- BF_set_key(&bf_key, klen, ukey);
- memcpy(bf_tkey, ivec, 8);
- bin = return_binary(rbuf,rlen,dlen);
- if (bin==NULL) return -1;
- bf_n = 0;
- BF_ofb64_encrypt(bf_dbuf, bin, dlen, &bf_key, bf_tkey, &bf_n);
- return dlen;
- }
-
- case DRV_BF_CFB64_ENCRYPT:
- case DRV_BF_CFB64_DECRYPT:
- {
- /* buf = klen[4] key ivec[8] data */
- unsigned char* ivec;
- unsigned char bf_tkey[8]; /* blowfish ivec */
- int bf_n; /* blowfish ivec pos */
- int bf_direction;
- const unsigned char *bf_dbuf; /* blowfish input data */
- BF_KEY bf_key; /* blowfish key 8 */
-
- klen = get_int32(buf);
- key = buf + 4;
- ivec = (unsigned char *) (key + klen);
- bf_dbuf = ivec + 8;
- dlen = len - 4 - klen - 8;
- if (dlen < 0) return -1;
- BF_set_key(&bf_key, klen, (unsigned char *) key);
- memcpy(bf_tkey, ivec, 8);
- bin = return_binary(rbuf,rlen,dlen);
- if (bin==NULL) return -1;
- bf_direction = command == DRV_BF_CFB64_ENCRYPT ? BF_ENCRYPT : BF_DECRYPT;
- bf_n = 0;
- BF_cfb64_encrypt(bf_dbuf, bin, dlen, &bf_key, bf_tkey, &bf_n, bf_direction);
- return dlen;
- }
-
-/* case DRV_CBC_IDEA_ENCRYPT: */
-/* case DRV_CBC_IDEA_DECRYPT: */
- /* buf = key[16] ivec[8] data */
-/* dlen = len - 24; */
-/* if (dlen < 0) */
-/* return -1; */
-/* if (dlen % 8 != 0) */
-/* return -1; */
-/* bin = return_binary(rbuf,rlen,dlen); */
-/* idea_set_encrypt_key(buf, &idea); */
-/* if (command == DRV_CBC_IDEA_DECRYPT) { */
-/* idea_set_decrypt_key(&idea, &idea2); */
-/* memcpy(&idea, &idea2, sizeof(idea)); */
-/* } */
-/* idea_cbc_encrypt(buf + 24, bin, dlen, &idea, buf + 8, */
-/* (command == DRV_CBC_IDEA_ENCRYPT)); */
-/* return dlen; */
-
- case DRV_CBC_RC2_40_ENCRYPT:
- case DRV_CBC_RC2_40_DECRYPT:
- /* buf = key[5] ivec[8] data */
- dlen = len - 13;
- if (dlen < 0)
- return -1;
- bin = return_binary(rbuf,rlen,dlen);
- if (bin==NULL) return -1;
- RC2_set_key(&rc2_key, 5, (unsigned char *) buf, 40);
- RC2_cbc_encrypt((unsigned char *) (buf + 13), bin, dlen, &rc2_key,
- (unsigned char *) (buf + 5),
- (command == DRV_CBC_RC2_40_ENCRYPT));
- return dlen;
-
- case DRV_EDE3_CBC_DES_ENCRYPT:
- case DRV_EDE3_CBC_DES_DECRYPT:
- dlen = len - 32;
- if (dlen < 0)
- return -1;
- des_key = (const_DES_cblock*) buf;
- des_key2 = (const_DES_cblock*) (buf + 8);
- des_key3 = (const_DES_cblock*) (buf + 16);
- des_ivec = (DES_cblock*) (buf + 24);
- des_dbuf = (unsigned char *) (buf + 32);
- bin = return_binary(rbuf,rlen,dlen);
- if (bin==NULL) return -1;
- DES_set_key(des_key, &schedule);
- DES_set_key(des_key2, &schedule2);
- DES_set_key(des_key3, &schedule3);
- DES_ede3_cbc_encrypt(des_dbuf, bin, dlen, &schedule,
- &schedule2, &schedule3, des_ivec,
- (command == DRV_EDE3_CBC_DES_ENCRYPT));
- return dlen;
-
- case DRV_AES_CFB_128_ENCRYPT:
- case DRV_AES_CFB_128_DECRYPT:
- /* buf = key[16] ivec[16] data */
- dlen = len - 32;
- if (dlen < 0)
- return -1;
- bin = return_binary(rbuf,rlen,dlen);
- if (bin==NULL) return -1;
- AES_set_encrypt_key((unsigned char *) buf, 128, &aes_key);
- AES_cfb128_encrypt((unsigned char *) (buf+32), bin, dlen, &aes_key,
- (unsigned char *) (buf+16), &new_ivlen,
- (command == DRV_AES_CFB_128_ENCRYPT));
- return dlen;
-
- case DRV_RC4_ENCRYPT:
- /* buf = klen[4] key data */
- klen = get_int32(buf);
- key = buf + 4;
- dlen = len - klen - 4;
- dbuf = key + klen;
- bin = return_binary(rbuf,rlen,dlen);
- if (bin==NULL) return -1;
- RC4_set_key(&rc4_key, klen, (unsigned char *) key);
- RC4(&rc4_key, dlen, (unsigned char *) dbuf, bin);
- return dlen;
-
- case DRV_RC4_SETKEY:
- /* buf = key */
- dlen = sizeof(rc4_key);
- bin = return_binary(rbuf,rlen,dlen);
- if (bin==NULL) return -1;
- RC4_set_key(&rc4_key, len, (unsigned char *) buf);
- memcpy(bin, &rc4_key, dlen);
- return dlen;
-
- case DRV_RC4_ENCRYPT_WITH_STATE:
- /* buf = statelength[4] state data, return statelength[4] state data */
- klen = get_int32(buf);
- key = buf + 4;
- dlen = len - klen - 4;
- dbuf = key + klen;
- bin = return_binary(rbuf,rlen,len);
- if (bin==NULL) return -1;
- memcpy(&rc4_key, key, klen);
- RC4(&rc4_key, dlen, (unsigned char *) dbuf, bin + klen + 4);
- memcpy(bin, buf, 4);
- memcpy(bin + 4, &rc4_key, klen);
- return len;
-
- case DRV_RAND_BYTES:
- /* buf = <<rlen:32/integer,topmask:8/integer,bottommask:8/integer>> */
-
- if (len != 6)
- return -1;
- dlen = get_int32(buf);
- bin = return_binary(rbuf,rlen,dlen);
- if (bin==NULL) return -1;
- RAND_pseudo_bytes(bin,dlen);
- ERL_VALGRIND_MAKE_MEM_DEFINED(bin, dlen);
- or_mask = ((unsigned char*)buf)[4];
- bin[dlen-1] |= or_mask; /* topmask */
- or_mask = ((unsigned char*)buf)[5];
- bin[0] |= or_mask; /* bottommask */
- return dlen;
-
- case DRV_RAND_UNIFORM:
- /* buf = <<from_len:32/integer,bn_from:from_len/binary, *
- * to_len:32/integer,bn_to:to_len/binary>> */
- if (len < 8)
- return -1;
- from_len = get_int32(buf);
- if (len < (8 + from_len))
- return -1;
- to_len = get_int32(buf + 4 + from_len);
- if (len != (8 + from_len + to_len))
- return -1;
- ERL_VALGRIND_ASSERT_MEM_DEFINED(buf, 4 + from_len + 4 + to_len);
- bn_from = BN_new();
- BN_bin2bn((unsigned char *)(buf + 4), from_len, bn_from);
- bn_rand = BN_new();
- BN_bin2bn((unsigned char *)(buf + 8 + from_len), to_len, bn_rand);
- bn_to = BN_new();
- BN_sub(bn_to, bn_rand, bn_from);
- BN_pseudo_rand_range(bn_rand, bn_to);
- BN_add(bn_rand, bn_rand, bn_from);
- dlen = BN_num_bytes(bn_rand);
- bin = return_binary(rbuf,rlen,dlen + 4);
- if (bin==NULL) return -1;
- put_int32(bin, dlen);
- BN_bn2bin(bn_rand,(unsigned char*)(bin + 4));
- ERL_VALGRIND_MAKE_MEM_DEFINED(bin+4, dlen);
- BN_free(bn_rand);
- BN_free(bn_from);
- BN_free(bn_to);
- return dlen + 4;
-
- case DRV_MOD_EXP:
- /* buf = <<base_len:32/integer,base/binary, *
- * exponent_len:32/integer,exponent/binary, *
- * modulo_len:32/integer, modulo/binary>> */
- if (len < 12)
- return -1;
- base_len = get_int32(buf);
- if (len < (12 + base_len))
- return -1;
- exponent_len = get_int32(buf + 4 + base_len);
- if (len < (12 + base_len + exponent_len))
- return -1;
- modulo_len = get_int32(buf + 8 + base_len + exponent_len);
- if (len != (12 + base_len + exponent_len + modulo_len))
- return -1;
- bn_base = BN_new();
- BN_bin2bn((unsigned char *)(buf + 4),
- base_len, bn_base);
- bn_exponent = BN_new();
- BN_bin2bn((unsigned char *)(buf + 8 + base_len),
- exponent_len, bn_exponent);
- bn_modulo = BN_new();
- BN_bin2bn((unsigned char *)(buf + 12 + base_len + exponent_len),
- modulo_len, bn_modulo);
- bn_result = BN_new();
- bn_ctx = BN_CTX_new();
- BN_mod_exp(bn_result, bn_base, bn_exponent,
- bn_modulo, bn_ctx);
- dlen = BN_num_bytes(bn_result);
- bin = return_binary(rbuf,rlen,dlen + 4);
- if (bin==NULL) return -1;
- put_int32(bin, dlen);
- BN_bn2bin(bn_result,(unsigned char*)(bin + 4));
- BN_free(bn_result);
- BN_free(bn_modulo);
- BN_free(bn_exponent);
- BN_free(bn_base);
- BN_CTX_free(bn_ctx);
- return dlen + 4;
-
- case DRV_DSS_VERIFY:
- /* buf = <<data_len:32/integer, data:data_len/binary,
- * dsa_s_len:32/integer, dsa_s:dsa_s_len/binary,
- * dsa_p_len:32/integer, dsa_p:dsa_p_len/binary,
- * dsa_q_len:32/integer, dsa_q:dsa_q_len/binary,
- * dsa_g_len:32/integer, dsa_g:dsa_g_len/binary,
- * dsa_y_len:32/integer, dsa_y:dsa_y_len/binary>> */
- i = 0;
- j = 0;
- if (len < 24)
- return -1;
- data_len = get_int32(buf + i + j);
- j += data_len; i += 4;
- if (len < (24 + j))
- return -1;
- dsa_s_len = get_int32(buf + i + j);
- j += dsa_s_len; i += 4;
- if (len < (24 + j))
- return -1;
- dsa_p_len = get_int32(buf + i + j);
- j += dsa_p_len; i += 4;
- if (len < (24 + j))
- return -1;
- dsa_q_len = get_int32(buf + i + j);
- j += dsa_q_len; i += 4;
- if (len < (24 + j))
- return -1;
- dsa_g_len = get_int32(buf + i + j);
- j += dsa_g_len; i += 4;
- if (len < (24 + j))
- return -1;
- dsa_y_len = get_int32(buf + i + j);
- j += dsa_y_len;
- if (len != (24 + j))
- return -1;
- i = 4;
- SHA1((unsigned char *) (buf + i), data_len, (unsigned char *) hmacbuf);
- i += data_len + 4;
- dsa_s = (unsigned char *)(buf + i);
- i += (dsa_s_len + 4);
- dsa_p = BN_new();
- BN_bin2bn((unsigned char *)(buf + i), dsa_p_len, dsa_p);
- i += (dsa_p_len + 4);
- dsa_q = BN_new();
- BN_bin2bn((unsigned char *)(buf + i), dsa_q_len, dsa_q);
- i += (dsa_q_len + 4);
- dsa_g = BN_new();
- BN_bin2bn((unsigned char *)(buf + i), dsa_g_len, dsa_g);
- i += (dsa_g_len + 4);
- dsa_y = BN_new();
- BN_bin2bn((unsigned char *)(buf + i), dsa_y_len, dsa_y);
- dsa = DSA_new();
- dsa->p = dsa_p;
- dsa->q = dsa_q;
- dsa->g = dsa_g;
- dsa->priv_key = NULL;
- dsa->pub_key = dsa_y;
- i = DSA_verify(0, (unsigned char *) hmacbuf, SHA_DIGEST_LENGTH,
- dsa_s, dsa_s_len, dsa);
- bin = return_binary(rbuf,rlen,1);
- if (bin==NULL) return -1;
-
- DSA_free(dsa);
- bin[0] = (i > 0) ? 1 : 0;
- return 1;
-
- case DRV_DSS_SIGN:
- /* buf = <<data_len:32/integer, data:data_len/binary,
- * dsa_p_len:32/integer, dsa_p:dsa_p_len/binary,
- * dsa_q_len:32/integer, dsa_q:dsa_q_len/binary,
- * dsa_g_len:32/integer, dsa_g:dsa_g_len/binary,
- * dsa_y_len:32/integer, dsa_y:dsa_y_len/binary,
- * dsa_x_len:32/integer, dsa_s:dsa_x_len/binary>> */
- i = 0;
- j = 0;
- if (len < 20)
- return -1;
- data_len = get_int32(buf + i + j);
- j += data_len; i += 4;
- if (len < (20 + j))
- return -1;
- dsa_p_len = get_int32(buf + i + j);
- j += dsa_p_len; i += 4;
- if (len < (20 + j))
- return -1;
- dsa_q_len = get_int32(buf + i + j);
- j += dsa_q_len; i += 4;
- if (len < (20 + j))
- return -1;
- dsa_g_len = get_int32(buf + i + j);
- j += dsa_g_len; i += 4;
- if (len < (20 + j))
- return -1;
- dsa_y_len = get_int32(buf + i + j);
- j += dsa_y_len;
- if (len < (20 + j))
- return -1;
- if (len != (20 + j))
- return -1;
-
- i = 4;
- SHA1((unsigned char *) (buf + i), data_len, (unsigned char *) hmacbuf);
- i += data_len + 4;
- dsa_p = BN_new();
- BN_bin2bn((unsigned char *)(buf + i), dsa_p_len, dsa_p);
- i += (dsa_p_len + 4);
- dsa_q = BN_new();
- BN_bin2bn((unsigned char *)(buf + i), dsa_q_len, dsa_q);
- i += (dsa_q_len + 4);
- dsa_g = BN_new();
- BN_bin2bn((unsigned char *)(buf + i), dsa_g_len, dsa_g);
- i += (dsa_g_len + 4);
- dsa_y = BN_new();
- BN_bin2bn((unsigned char *)(buf + i), dsa_y_len, dsa_y);
- /* i += (dsa_y_len + 4); */
-
- dsa = DSA_new();
- dsa->p = dsa_p;
- dsa->q = dsa_q;
- dsa->g = dsa_g;
- dsa->priv_key = dsa_y;
- dsa->pub_key = NULL;
- dlen = DSA_size(dsa);
- bin = return_binary(rbuf,rlen, dlen+1);
- if (bin==NULL) return -1;
- i = DSA_sign(NID_sha1,
- (unsigned char *) hmacbuf,SHA_DIGEST_LENGTH,
- (unsigned char *) &bin[1],
- (unsigned int *) &dsa_s_len, dsa);
- DSA_free(dsa);
- if (i) {
- if (dsa_s_len != dlen) {
- bin = return_binary_shrink(rbuf,rlen,bin,dsa_s_len+1);
- }
- bin[0] = 1;
- return dsa_s_len + 1;
- }
- else {
- bin[0] = 0;
- return 1;
- }
-
- case DRV_RSA_VERIFY_MD5:
- case DRV_RSA_VERIFY_SHA:
- /* buf = <<data_len:32/integer, data:data_len/binary,
- * rsa_s_len:32/integer, rsa_s:rsa_s_len/binary,
- * rsa_e_len:32/integer, rsa_e:rsa_e_len/binary,
- * rsa_n_len:32/integer, rsa_n:rsa_n_len/binary>> */
- i = 0;
- j = 0;
- if (len < 16)
- return -1;
- data_len = get_int32(buf + i + j);
- j += data_len; i += 4;
- if (len < (16 + j))
- return -1;
- rsa_s_len = get_int32(buf + i + j);
- j += rsa_s_len; i += 4;
- if (len < (16 + j))
- return -1;
- rsa_e_len = get_int32(buf + i + j);
- j += rsa_e_len; i += 4;
- if (len < (16 + j))
- return -1;
- rsa_n_len = get_int32(buf + i + j);
- j += rsa_n_len; i += 4;
- if (len != (16 + j))
- return -1;
- i = 4;
- i += (data_len + 4);
- rsa_s = (unsigned char *)(buf + i);
- i += (rsa_s_len + 4);
- rsa_e = BN_new();
- BN_bin2bn((unsigned char *)(buf + i), rsa_e_len, rsa_e);
- i += (rsa_e_len + 4);
- rsa_n = BN_new();
- BN_bin2bn((unsigned char *)(buf + i), rsa_n_len, rsa_n);
- rsa = RSA_new();
- rsa->n = rsa_n;
- rsa->e = rsa_e;
- i = 4;
- if(command == DRV_RSA_VERIFY_SHA) {
- SHA1((unsigned char *) (buf + i), data_len,
- (unsigned char *) hmacbuf);
- i = RSA_verify(NID_sha1, (unsigned char *) hmacbuf, SHA_DIGEST_LENGTH,
- rsa_s, rsa_s_len, rsa);
- } else {
- MD5((unsigned char *) (buf + i), data_len, (unsigned char *) hmacbuf);
- i = RSA_verify(NID_md5, (unsigned char *) hmacbuf, MD5_DIGEST_LENGTH,
- rsa_s, rsa_s_len, rsa);
- }
-
- bin = return_binary(rbuf,rlen,1);
- if (bin==NULL) return -1;
- bin[0] = (char)(i & 0xff);
- RSA_free(rsa);
- return 1;
-
- case DRV_RSA_SIGN_MD5:
- case DRV_RSA_SIGN_SHA:
- /* buf = <<data_len:32/integer, data:data_len/binary,
- * rsa_e_len:32/integer, rsa_e:rsa_e_len/binary,
- * rsa_n_len:32/integer, rsa_n:rsa_n_len/binary,
- * rsa_d_len:32/integer, rsa_d:rsa_d_len/binary>> */
-
- ERL_VALGRIND_ASSERT_MEM_DEFINED(buf,len);
-
- i = 0;
- j = 0;
-
- if (len < 16)
- return -1;
- data_len = get_int32(buf + i + j);
- j += data_len; i += 4;
- if (len < (16 + j))
- return -1;
- rsa_e_len = get_int32(buf + i + j);
- j += rsa_e_len; i += 4;
- if (len < (16 + j))
- return -1;
- rsa_n_len = get_int32(buf + i + j);
- j += rsa_n_len; i += 4;
- if (len < (16 + j))
- return -1;
- rsa_d_len = get_int32(buf + i + j);
- j += rsa_d_len; i += 4;
- if (len != (16 + j))
- return -1;
-
- i = 4;
- i += (data_len + 4);
- rsa_e = BN_new();
- BN_bin2bn((unsigned char *)(buf + i), rsa_e_len, rsa_e);
- i += (rsa_e_len + 4);
- rsa_n = BN_new();
- BN_bin2bn((unsigned char *)(buf + i), rsa_n_len, rsa_n);
- i += (rsa_n_len + 4);
- rsa_d = BN_new();
- BN_bin2bn((unsigned char *)(buf + i), rsa_d_len, rsa_d);
- i += (rsa_d_len + 4);
-
- rsa = RSA_new();
- rsa->e = rsa_e;
- rsa->n = rsa_n;
- rsa->d = rsa_d;
-
- dlen = RSA_size(rsa);
- bin = return_binary(rbuf,rlen,dlen+1);
- if (bin==NULL) return -1;
- i = 4;
- if (command == DRV_RSA_SIGN_MD5) {
- MD5((unsigned char *) (buf + i), data_len, (unsigned char *) hmacbuf);
- ERL_VALGRIND_ASSERT_MEM_DEFINED(hmacbuf, MD5_DIGEST_LENGTH);
- i = RSA_sign(NID_md5,
- (unsigned char *) hmacbuf,MD5_DIGEST_LENGTH,
- (unsigned char *) &bin[1],
- &rsa_s_len, rsa);
- } else {
- SHA1((unsigned char *) (buf + i), data_len,
- (unsigned char *) hmacbuf);
- ERL_VALGRIND_ASSERT_MEM_DEFINED(hmacbuf, SHA_DIGEST_LENGTH);
- i = RSA_sign(NID_sha1,
- (unsigned char *) hmacbuf,SHA_DIGEST_LENGTH,
- (unsigned char *) &bin[1],
- &rsa_s_len, rsa);
- }
- RSA_free(rsa);
- if (i) {
- ERL_VALGRIND_MAKE_MEM_DEFINED(bin+1, rsa_s_len);
- if (rsa_s_len != dlen) {
- bin = return_binary_shrink(rbuf,rlen,bin,rsa_s_len+1);
- ERL_VALGRIND_ASSERT_MEM_DEFINED(bin+1, rsa_s_len);
- }
- bin[0] = 1;
- return rsa_s_len + 1;
- }
- else {
- bin[0] = 0;
- return 1;
- }
-
- case DRV_RSA_PRIVATE_DECRYPT:
- case DRV_RSA_PRIVATE_ENCRYPT:
- /* buf = <<data_len:32/integer, data:data_len/binary,
- * rsa_e_len:32/integer, rsa_e:rsa_e_len/binary,
- * rsa_n_len:32/integer, rsa_n:rsa_n_len/binary,
- * rsa_d_len:32/integer, rsa_d:rsa_d_len/binary,
- * pad:8/integer >> */
-
- ERL_VALGRIND_ASSERT_MEM_DEFINED(buf,len);
- i = 0;
- j = 0;
-
- if (len < 17)
- return -1;
- data_len = get_int32(buf + i + j);
- j += data_len; i += 4;
- if (len < (17 + j))
- return -1;
- rsa_e_len = get_int32(buf + i + j);
- j += rsa_e_len; i += 4;
- if (len < (17 + j))
- return -1;
- rsa_n_len = get_int32(buf + i + j);
- j += rsa_n_len; i += 4;
- if (len < (17 + j))
- return -1;
- rsa_d_len = get_int32(buf + i + j);
- j += rsa_d_len; i += 4;
- padding = *(unsigned char *) (buf+i+j);
- if (len != (17 + j))
- return -1;
-
- i = 4;
- i += (data_len + 4);
- rsa_e = BN_new();
- ERL_VALGRIND_ASSERT_MEM_DEFINED(buf+i,rsa_e_len);
- BN_bin2bn((unsigned char *)(buf + i), rsa_e_len, rsa_e);
- i += (rsa_e_len + 4);
- rsa_n = BN_new();
- ERL_VALGRIND_ASSERT_MEM_DEFINED(buf+i,rsa_n_len);
- BN_bin2bn((unsigned char *)(buf + i), rsa_n_len, rsa_n);
- i += (rsa_n_len + 4);
- rsa_d = BN_new();
- ERL_VALGRIND_ASSERT_MEM_DEFINED(buf+i,rsa_d_len);
- BN_bin2bn((unsigned char *)(buf + i), rsa_d_len, rsa_d);
- i += (rsa_d_len + 4);
-
- switch(padding) {
- case 0:
- padding = RSA_NO_PADDING;
- break;
- case 1:
- padding = RSA_PKCS1_PADDING;
- break;
- case 2:
- padding = RSA_PKCS1_OAEP_PADDING;
- break;
- case 3:
- padding = RSA_SSLV23_PADDING;
- break;
- default:
- return -1;
- }
-
- rsa = RSA_new();
- rsa->e = rsa_e;
- rsa->n = rsa_n;
- rsa->d = rsa_d;
-
- dlen = RSA_size(rsa) + 1;
- bin = return_binary(rbuf,rlen,dlen);
- if (bin==NULL) return -1;
- i = 4;
- ERL_VALGRIND_ASSERT_MEM_DEFINED(buf+i,data_len);
- if(command == DRV_RSA_PRIVATE_DECRYPT) {
- i = RSA_private_decrypt(data_len, (unsigned char *) (buf+i),
- (unsigned char *) &bin[1],
- rsa, padding);
- if(i > 0) {
- ERL_VALGRIND_MAKE_MEM_DEFINED(&bin[1],i);
- bin = return_binary_shrink(rbuf,rlen, bin, i+1);
- if (bin==NULL) return -1;
- }
- } else {
- i = RSA_private_encrypt(data_len, (unsigned char *) (buf+i),
- (unsigned char *) &bin[1],
- rsa, padding);
- if(i > 0) {
- ERL_VALGRIND_MAKE_MEM_DEFINED(&bin[1],i);
- }
- }
- RSA_free(rsa);
- if(i > 0) {
- bin[0] = 1;
- return i + 1;
- } else {
- bin[0] = 0;
- return 1;
- }
- break;
-
- case DRV_RSA_PUBLIC_ENCRYPT:
- case DRV_RSA_PUBLIC_DECRYPT:
- /* buf = <<data_len:32/integer, data:data_len/binary,
- * rsa_e_len:32/integer, rsa_e:rsa_e_len/binary,
- * rsa_n_len:32/integer, rsa_n:rsa_n_len/binary,
- * pad:8/integer >> */
-
- ERL_VALGRIND_ASSERT_MEM_DEFINED(buf,len);
- i = 0;
- j = 0;
-
- if (len < 13)
- return -1;
- data_len = get_int32(buf + i + j);
- j += data_len; i += 4;
- if (len < (13 + j))
- return -1;
- rsa_e_len = get_int32(buf + i + j);
- j += rsa_e_len; i += 4;
- if (len < (13 + j))
- return -1;
- rsa_n_len = get_int32(buf + i + j);
- j += rsa_n_len; i += 4;
- if (len < (13 + j))
- return -1;
- padding = *(unsigned char *) (buf + i + j);
- if (len != (13 + j))
- return -1;
-
- i = 4;
- i += (data_len + 4);
- rsa_e = BN_new();
- ERL_VALGRIND_ASSERT_MEM_DEFINED(buf+i,rsa_e_len);
- BN_bin2bn((unsigned char *)(buf + i), rsa_e_len, rsa_e);
- i += (rsa_e_len + 4);
- rsa_n = BN_new();
- ERL_VALGRIND_ASSERT_MEM_DEFINED(buf+i,rsa_n_len);
- BN_bin2bn((unsigned char *)(buf + i), rsa_n_len, rsa_n);
- i += (rsa_n_len + 4);
-
- switch(padding) {
- case 0:
- padding = RSA_NO_PADDING;
- break;
- case 1:
- padding = RSA_PKCS1_PADDING;
- break;
- case 2:
- padding = RSA_PKCS1_OAEP_PADDING;
- break;
- case 3:
- padding = RSA_SSLV23_PADDING;
- break;
- default:
- return -1;
- }
-
- rsa = RSA_new();
- rsa->e = rsa_e;
- rsa->n = rsa_n;
-
- dlen = RSA_size(rsa) + 1;
- bin = return_binary(rbuf,rlen,dlen);
- if (bin==NULL) return -1;
- i = 4;
- if(command == DRV_RSA_PUBLIC_ENCRYPT) {
- ERL_VALGRIND_ASSERT_MEM_DEFINED(buf+i,data_len);
- i = RSA_public_encrypt(data_len, (unsigned char *) (buf+i),
- (unsigned char *) &bin[1],
- rsa, padding);
- if (i > 0) {
- ERL_VALGRIND_MAKE_MEM_DEFINED(bin+1, i);
- }
- } else {
- i = RSA_public_decrypt(data_len, (unsigned char *) (buf+i),
- (unsigned char *) &bin[1],
- rsa, padding);
- if(i > 0) {
- ERL_VALGRIND_MAKE_MEM_DEFINED(bin+1, i);
- bin = return_binary_shrink(rbuf,rlen,bin, i+1);
- if (bin==NULL) return -1;
- }
- }
-
- RSA_free(rsa);
- if(i > 0) {
- bin[0] = 1;
- return i + 1;
- } else {
-/* ERR_load_crypto_strings(); */
-/* fprintf(stderr, "%d: %s \r\n", __LINE__, ERR_reason_error_string(ERR_get_error())); */
- bin[0] = 0;
- return 1;
- }
- break;
-
- case DRV_CBC_AES128_ENCRYPT:
- case DRV_CBC_AES256_ENCRYPT:
- case DRV_CBC_AES128_DECRYPT:
- case DRV_CBC_AES256_DECRYPT:
- /* buf = key[klen] ivec[klen] data */
- if (command == DRV_CBC_AES256_ENCRYPT || command == DRV_CBC_AES256_DECRYPT)
- klen = 32;
- else
- klen = 16;
- dlen = len - klen - 16;
- if (dlen < 0)
- return -1;
- if (dlen % 16 != 0)
- return -1;
- if (command == DRV_CBC_AES128_ENCRYPT || command == DRV_CBC_AES256_ENCRYPT) {
- i = AES_ENCRYPT;
- AES_set_encrypt_key((unsigned char *) buf, klen*8, &aes_key);
- } else {
- i = AES_DECRYPT;
- AES_set_decrypt_key((unsigned char *) buf, klen*8, &aes_key);
- }
- bin = return_binary(rbuf,rlen,dlen);
- if (bin==NULL) return -1;
- AES_cbc_encrypt((unsigned char *) (buf + klen+16),
- (unsigned char *) bin,
- dlen,
- &aes_key,
- (unsigned char *) (buf + klen),
- i);
- return dlen;
-
-/* case DRV_CBC_AES128_DECRYPT: */
-/* case DRV_CBC_AES256_DECRYPT: */
-/* /\* buf = key[klen] ivec[16] data *\/ */
-/* if (command == DRV_CBC_AES256_DECRYPT) */
-/* klen = 32; */
-/* else */
-/* klen = 16; */
-/* dlen = len - klen - 16; */
-/* if (dlen < 0) */
-/* return -1; */
-/* *rbuf = (char *)(bin = driver_alloc_binary(dlen)); */
-/* AES_set_decrypt_key((unsigned char *) buf, klen*8, &aes_key); */
-/* AES_cbc_encrypt((unsigned char *) (buf + klen+16), */
-/* (unsigned char *) bin->orig_bytes, */
-/* dlen, */
-/* &aes_key, */
-/* (unsigned char *) (buf + klen), */
-/* AES_DECRYPT); */
-/* return dlen; */
-/* break; */
-
- case DRV_XOR:
- /* buf = data1, data2 with same size */
- dlen = len / 2;
- if (len != dlen * 2)
- return -1;
- bin = return_binary(rbuf,rlen,dlen);
- if (bin==NULL) return -1;
- p = bin,
- dbuf = buf + dlen;
- for (key = buf, key2 = dbuf; key != dbuf; ++key, ++key2, ++p)
- *p = *key ^ *key2;
- return dlen;
-
- case DRV_DH_GENERATE_PARAMS:
- /* buf = <<PrimeLen:32 Generator:32>> */
- if (len != 8)
- return -1;
- ERL_VALGRIND_ASSERT_MEM_DEFINED(buf,len);
- prime_len = get_int32(buf);
- generator = get_int32(buf+4);
- dh_params = DH_generate_parameters(prime_len, generator, NULL, NULL);
-
- if(dh_params) {
- dh_p_len = BN_num_bytes(dh_params->p);
- dh_g_len = BN_num_bytes(dh_params->g);
- dlen = 1 + 4 + 4 + dh_g_len + dh_p_len;
- bin = return_binary(rbuf,rlen,dlen);
- if (bin==NULL) return -1;
- bin[0] = 1;
- put_int32(bin+1, dh_p_len);
- BN_bn2bin(dh_params->p, bin+5);
- ERL_VALGRIND_MAKE_MEM_DEFINED(bin+5,dh_p_len);
- put_int32(bin+5+dh_p_len, dh_g_len);
- BN_bn2bin(dh_params->g, bin+5+dh_p_len+4);
- ERL_VALGRIND_MAKE_MEM_DEFINED(bin+5+dh_p_len+4,dh_g_len);
- } else {
- dlen = 1;
- bin = return_binary(rbuf,rlen,dlen);
- if (bin==NULL) return -1;
- bin[0] = 0;
- }
- DH_free(dh_params);
- return dlen;
-
- case DRV_DH_CHECK:
- /* buf = <<dh_p_len:32/integer, dh_p:dh_p_len/binary,
- * dh_g_len:32/integer, dh_g:dh_g_len/binary>> */
- i = 0;
- j = 0;
- if(len < 8) return -1;
- dh_p_len = get_int32(buf + i + j);
- j += dh_p_len; i += 4;
- if (len < (8 + j)) return -1;
- dh_g_len = get_int32(buf + i + j);
- j += dh_g_len; i += 4;
- if(len != (8+j)) return -1;
- i=4;
- dh_p = BN_new();
- BN_bin2bn((unsigned char *)(buf + i), dh_p_len, dh_p);
- i += (dh_p_len + 4);
- dh_g = BN_new();
- BN_bin2bn((unsigned char *)(buf + i), dh_g_len, dh_g);
- /* i += (dsa_g_len + 4); */
-
- dh_params = DH_new();
- dh_params->p = dh_p;
- dh_params->g = dh_g;
-
- i=0;
- bin = return_binary(rbuf,rlen,4);
- if (bin==NULL) return -1;
- if(DH_check(dh_params, &i)) {
- put_int32(bin, i);
- } else {
- /* Check Failed */
- put_int32(bin, -1);
- }
- DH_free(dh_params);
- return 4;
-
- case DRV_DH_GENERATE_KEY:
- /* buf = <<key_len:32, key:key_len/binary, *
- * dh_p_len:32/integer, dh_p:dh_p_len/binary, *
- * dh_g_len:32/integer, dh_g:dh_g_len/binary>> */
- ERL_VALGRIND_ASSERT_MEM_DEFINED(buf,len);
- i = 0;
- j = 0;
- if(len < 12) return -1;
- base_len = get_int32(buf + i + j);
- j += base_len; i += 4;
- if (len < (12 + j)) return -1;
- dh_p_len = get_int32(buf + i + j);
- j += dh_p_len; i += 4;
- if (len < (12 + j)) return -1;
- dh_g_len = get_int32(buf + i + j);
- j += dh_g_len; i += 4;
- if(len != (12 + j)) return -1;
- i=4;
- i += (base_len + 4);
- dh_p = BN_new();
- BN_bin2bn((unsigned char *)(buf + i), dh_p_len, dh_p);
- i += (dh_p_len + 4);
- dh_g = BN_new();
- BN_bin2bn((unsigned char *)(buf + i), dh_g_len, dh_g);
- /* i += (dsa_g_len + 4); */
-
- dh_params = DH_new();
- dh_params->p = dh_p;
- dh_params->g = dh_g;
- if(base_len > 0) {
- dh_params->priv_key = BN_new();
- BN_bin2bn((unsigned char *)(buf + i), base_len,
- dh_params->priv_key);
- }
- i=0;
- if(DH_generate_key(dh_params)) {
- privkey_len = BN_num_bytes(dh_params->priv_key);
- pubkey_len = BN_num_bytes(dh_params->pub_key);
- dlen = 1 + 4 + 4 + pubkey_len + privkey_len;
- bin = return_binary(rbuf,rlen, dlen);
- if (bin==NULL) return -1;
- bin[0] = 1;
- put_int32(bin+1, pubkey_len);
- BN_bn2bin(dh_params->pub_key, bin+5);
- ERL_VALGRIND_MAKE_MEM_DEFINED(bin+5, pubkey_len);
- put_int32(bin+5+pubkey_len, privkey_len);
- BN_bn2bin(dh_params->priv_key, bin+5+pubkey_len+4);
- ERL_VALGRIND_MAKE_MEM_DEFINED(bin+5+pubkey_len+4, privkey_len);
- } else {
- dlen = 1;
- bin = return_binary(rbuf,rlen,dlen);
- if (bin==NULL) return -1;
- bin[0] = 0;
- }
- DH_free(dh_params);
- return dlen;
-
- case DRV_DH_COMPUTE_KEY:
- /* buf = <<pubkey_len:32, pubkey:pubkey_len/binary, *
- * privkey_len:32, privkey:privkey_len/binary, *
- * dh_p_len:32/integer, dh_p:dh_p_len/binary, *
- * dh_g_len:32/integer, dh_g:dh_g_len/binary>> */
- i = 0;
- j = 0;
- if(len < 16) return -1;
- pubkey_len = get_int32(buf + i + j);
- j += pubkey_len; i += 4;
- if (len < (16 + j)) return -1;
- privkey_len = get_int32(buf + i + j);
- j += privkey_len; i += 4;
- if (len < (16 + j)) return -1;
- dh_p_len = get_int32(buf + i + j);
- j += dh_p_len; i += 4;
- if (len < (16 + j)) return -1;
- dh_g_len = get_int32(buf + i + j);
- j += dh_g_len; i += 4;
- if(len != (16 + j)) return -1;
- i=4;
- pubkey = BN_new();
- BN_bin2bn((unsigned char *)(buf + i), pubkey_len, pubkey);
- i += (pubkey_len + 4);
- privkey = BN_new();
- BN_bin2bn((unsigned char *)(buf + i), privkey_len, privkey);
- i += (privkey_len + 4);
- dh_p = BN_new();
- BN_bin2bn((unsigned char *)(buf + i), dh_p_len, dh_p);
- i += (dh_p_len + 4);
- dh_g = BN_new();
- BN_bin2bn((unsigned char *)(buf + i), dh_g_len, dh_g);
- /* i += (dsa_g_len + 4); */
-
- dh_params = DH_new();
- dh_params->p = dh_p;
- dh_params->g = dh_g;
- dh_params->priv_key = privkey;
-
- klen = DH_size(dh_params);
- bin = return_binary(rbuf,rlen,1+klen);
- if (bin==NULL) return -1;
- i = DH_compute_key(&bin[1], pubkey, dh_params);
- DH_free(dh_params);
- if (i > 0) {
- if (i != klen) {
- bin = return_binary_shrink(rbuf,rlen,bin,1+i);
- }
- bin[0] = 1;
- return i + 1;
- }
- else {
- bin[0] = 0;
- return 1;
- }
-
- case DRV_MD4:
- bin = return_binary(rbuf,rlen,MD4_LEN);
- MD4((unsigned char *)buf, len, (unsigned char *)bin);
- return MD4_LEN;
-
- case DRV_MD4_INIT:
- bin = return_binary(rbuf,rlen,MD4_CTX_LEN);
- MD4_Init((MD4_CTX *) bin);
- return MD4_CTX_LEN;
-
- case DRV_MD4_UPDATE:
- if (len < MD4_CTX_LEN)
- return -1;
- bin = return_binary(rbuf,rlen,MD4_CTX_LEN);
- memcpy(bin, buf, MD4_CTX_LEN);
- MD4_Update((MD4_CTX *) bin, buf + MD4_CTX_LEN, len - MD4_CTX_LEN);
- return MD4_CTX_LEN;
-
- case DRV_MD4_FINAL:
- if (len != MD4_CTX_LEN)
- return -1;
- memcpy(&md4_ctx, buf, MD4_CTX_LEN); /* XXX Use buf only? */
- bin = return_binary(rbuf,rlen,MD4_LEN);
- MD4_Final((unsigned char *)bin, &md4_ctx);
- return MD4_LEN;
-
-#if SSL_VERSION_0_9_8
- case DRV_SHA256:
- bin = return_binary(rbuf,rlen,SHA256_LEN);
- SHA256(buf, len, bin);
- return SHA256_LEN;
-
- case DRV_SHA256_INIT:
- bin = return_binary(rbuf,rlen,SHA256_CTX_LEN);
- SHA256_Init((SHA256_CTX *)bin);
- return SHA256_CTX_LEN;
-
- case DRV_SHA256_UPDATE:
- if (len < SHA256_CTX_LEN)
- return -1;
- bin = return_binary(rbuf,rlen,SHA256_CTX_LEN);
- memcpy(bin, buf, SHA256_CTX_LEN);
- SHA256_Update((SHA256_CTX *)bin, buf + SHA256_CTX_LEN,
- len - SHA256_CTX_LEN);
- return SHA256_CTX_LEN;
-
- case DRV_SHA256_FINAL:
- if (len != SHA256_CTX_LEN)
- return -1;
- memcpy(&sha256_ctx, buf, SHA256_CTX_LEN); /* XXX Use buf only? */
- bin = return_binary(rbuf,rlen,SHA256_LEN);
- SHA256_Final(bin, &sha256_ctx);
- return SHA256_LEN;
-
- case DRV_SHA512:
- bin = return_binary(rbuf,rlen,SHA512_LEN);
- SHA512(buf, len, bin);
- return SHA512_LEN;
-
- case DRV_SHA512_INIT:
- bin = return_binary(rbuf,rlen,SHA512_CTX_LEN);
- SHA512_Init((SHA512_CTX *)bin);
- return SHA512_CTX_LEN;
-
- case DRV_SHA512_UPDATE:
- if (len < SHA512_CTX_LEN)
- return -1;
- bin = return_binary(rbuf,rlen,SHA512_CTX_LEN);
- memcpy(bin, buf, SHA512_CTX_LEN);
- SHA512_Update((SHA512_CTX *)bin, buf + SHA512_CTX_LEN,
- len - SHA512_CTX_LEN);
- return SHA512_CTX_LEN;
-
- case DRV_SHA512_FINAL:
- if (len != SHA512_CTX_LEN)
- return -1;
- memcpy(&sha512_ctx, buf, SHA512_CTX_LEN); /* XXX Use buf only? */
- bin = return_binary(rbuf,rlen,SHA512_LEN));
- SHA512_Final(bin, &sha512_ctx);
- return SHA512_LEN;
-#endif
-
- case DRV_INFO_LIB:
- {/* <<DrvVer:8, NameSize:8, Name:NameSize/binary, VerNum:32, VerStr/binary>> */
- static const char libname[] = "OpenSSL";
- unsigned name_sz = strlen(libname);
- const char* ver = SSLeay_version(SSLEAY_VERSION);
- unsigned ver_sz = strlen(ver);
- dlen = 1+1+name_sz+4+ver_sz;
- bin = return_binary(rbuf, rlen, dlen);
- if (bin==NULL) return -1;
- p = bin;
- *p++ = 0; /* "driver version" for future use */
- *p++ = name_sz;
- memcpy(p, libname, name_sz);
- p += name_sz;
- put_int32(p,SSLeay()); /* OPENSSL_VERSION_NUMBER */
- p += 4;
- memcpy(p, ver, ver_sz);
- }
- return dlen;
-
- default:
- break;
- }
- return -1;
-}
-
-
-#ifdef OPENSSL_THREADS /* vvvvvvvvvvvvvvv OPENSSL_THREADS vvvvvvvvvvvvvvvv */
-
-static INLINE void locking(int mode, ErlDrvRWLock* lock)
-{
- switch(mode) {
- case CRYPTO_LOCK|CRYPTO_READ:
- erl_drv_rwlock_rlock(lock);
- break;
- case CRYPTO_LOCK|CRYPTO_WRITE:
- erl_drv_rwlock_rwlock(lock);
- break;
- case CRYPTO_UNLOCK|CRYPTO_READ:
- erl_drv_rwlock_runlock(lock);
- break;
- case CRYPTO_UNLOCK|CRYPTO_WRITE:
- erl_drv_rwlock_rwunlock(lock);
- break;
- default:
- ASSERT(!"Invalid lock mode");
- }
-}
-
-/* Callback from openssl for static locking
- */
-static void locking_function(int mode, int n, const char *file, int line)
-{
- ASSERT(n>=0 && n<CRYPTO_num_locks());
-
- locking(mode, lock_vec[n]);
-}
-
-/* Callback from openssl for thread id
- */
-static unsigned long id_function(void)
-{
- return (unsigned long) erl_drv_thread_self();
-}
-
-/* Callbacks for dynamic locking, not used by current openssl version (0.9.8)
- */
-static struct CRYPTO_dynlock_value* dyn_create_function(const char *file, int line)
-{
- return (struct CRYPTO_dynlock_value*) erl_drv_rwlock_create("crypto_drv_dyn");
-}
-static void dyn_lock_function(int mode, struct CRYPTO_dynlock_value* ptr,const char *file, int line)
-{
- locking(mode, (ErlDrvRWLock*)ptr);
-}
-static void dyn_destroy_function(struct CRYPTO_dynlock_value *ptr, const char *file, int line)
-{
- erl_drv_rwlock_destroy((ErlDrvRWLock*)ptr);
-}
-
-#endif /* ^^^^^^^^^^^^^^^^^^^^^^ OPENSSL_THREADS ^^^^^^^^^^^^^^^^^^^^^^ */
-
-/* HMAC */
-
-static void hmac_md5(char *key, int klen, char *dbuf, int dlen, char *hmacbuf)
-{
- MD5_CTX ctx;
- char ipad[HMAC_INT_LEN];
- char opad[HMAC_INT_LEN];
- unsigned char nkey[MD5_LEN];
- int i;
-
- /* Change key if longer than 64 bytes */
- if (klen > HMAC_INT_LEN) {
- MD5_CTX kctx;
-
- MD5_Init(&kctx);
- MD5_Update(&kctx, key, klen);
- MD5_Final(nkey, &kctx);
- key = (char *) nkey;
- klen = MD5_LEN;
- }
-
- memset(ipad, '\0', sizeof(ipad));
- memset(opad, '\0', sizeof(opad));
- memcpy(ipad, key, klen);
- memcpy(opad, key, klen);
-
- for (i = 0; i < HMAC_INT_LEN; i++) {
- ipad[i] ^= HMAC_IPAD;
- opad[i] ^= HMAC_OPAD;
- }
-
- /* inner MD5 */
- MD5_Init(&ctx);
- MD5_Update(&ctx, ipad, HMAC_INT_LEN);
- MD5_Update(&ctx, dbuf, dlen);
- MD5_Final((unsigned char *) hmacbuf, &ctx);
- /* outer MD5 */
- MD5_Init(&ctx);
- MD5_Update(&ctx, opad, HMAC_INT_LEN);
- MD5_Update(&ctx, hmacbuf, MD5_LEN);
- MD5_Final((unsigned char *) hmacbuf, &ctx);
-}
-
-static void hmac_sha1(char *key, int klen, char *dbuf, int dlen,
- char *hmacbuf)
-{
- SHA_CTX ctx;
- char ipad[HMAC_INT_LEN];
- char opad[HMAC_INT_LEN];
- unsigned char nkey[SHA_LEN];
- int i;
-
- /* Change key if longer than 64 bytes */
- if (klen > HMAC_INT_LEN) {
- SHA_CTX kctx;
-
- SHA1_Init(&kctx);
- SHA1_Update(&kctx, key, klen);
- SHA1_Final(nkey, &kctx);
- key = (char *) nkey;
- klen = SHA_LEN;
- }
-
- memset(ipad, '\0', sizeof(ipad));
- memset(opad, '\0', sizeof(opad));
- memcpy(ipad, key, klen);
- memcpy(opad, key, klen);
-
- for (i = 0; i < HMAC_INT_LEN; i++) {
- ipad[i] ^= HMAC_IPAD;
- opad[i] ^= HMAC_OPAD;
- }
-
- /* inner SHA */
- SHA1_Init(&ctx);
- SHA1_Update(&ctx, ipad, HMAC_INT_LEN);
- SHA1_Update(&ctx, dbuf, dlen);
- SHA1_Final((unsigned char *) hmacbuf, &ctx);
- /* outer SHA */
- SHA1_Init(&ctx);
- SHA1_Update(&ctx, opad, HMAC_INT_LEN);
- SHA1_Update(&ctx, hmacbuf, SHA_LEN);
- SHA1_Final((unsigned char *) hmacbuf, &ctx);
-}
diff --git a/lib/crypto/doc/src/crypto.xml b/lib/crypto/doc/src/crypto.xml
index cfc6996332..256eab3e3c 100644
--- a/lib/crypto/doc/src/crypto.xml
+++ b/lib/crypto/doc/src/crypto.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1999</year><year>2009</year>
+ <year>1999</year><year>2010</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -13,12 +13,12 @@
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.
-
+
</legalnotice>
<title>crypto</title>
@@ -35,6 +35,9 @@
<p>References:</p>
<list type="bulleted">
<item>
+ <p>md4: The MD4 Message Digest Algorithm (RFC 1320)</p>
+ </item>
+ <item>
<p>md5: The MD5 Message Digest Algorithm (RFC 1321)</p>
</item>
<item>
@@ -115,6 +118,52 @@ Mpint() = <![CDATA[<<ByteLen:32/integer-big, Bytes:ByteLen/binary>>]]>
</desc>
</func>
<func>
+ <name>md4(Data) -> Digest</name>
+ <fsummary>Compute an <c>MD4</c>message digest from <c>Data</c></fsummary>
+ <type>
+ <v>Data = iolist() | binary()</v>
+ <v>Digest = binary()</v>
+ </type>
+ <desc>
+ <p>Computes an <c>MD4</c> message digest from <c>Data</c>, where
+ the length of the digest is 128 bits (16 bytes).</p>
+ </desc>
+ </func>
+ <func>
+ <name>md4_init() -> Context</name>
+ <fsummary>Creates an MD4 context</fsummary>
+ <type>
+ <v>Context = binary()</v>
+ </type>
+ <desc>
+ <p>Creates an MD4 context, to be used in subsequent calls to
+ <c>md4_update/2</c>.</p>
+ </desc>
+ </func>
+ <func>
+ <name>md4_update(Context, Data) -> NewContext</name>
+ <fsummary>Update an MD4 <c>Context</c>with <c>Data</c>, and return a <c>NewContext</c></fsummary>
+ <type>
+ <v>Data = iolist() | binary()</v>
+ <v>Context = NewContext = binary()</v>
+ </type>
+ <desc>
+ <p>Updates an MD4 <c>Context</c> with <c>Data</c>, and returns
+ a <c>NewContext</c>.</p>
+ </desc>
+ </func>
+ <func>
+ <name>md4_final(Context) -> Digest</name>
+ <fsummary>Finish the update of an MD4 <c>Context</c>and return the computed <c>MD4</c>message digest</fsummary>
+ <type>
+ <v>Context = Digest = binary()</v>
+ </type>
+ <desc>
+ <p>Finishes the update of an MD4 <c>Context</c> and returns
+ the computed <c>MD4</c> message digest.</p>
+ </desc>
+ </func>
+ <func>
<name>md5(Data) -> Digest</name>
<fsummary>Compute an <c>MD5</c>message digest from <c>Data</c></fsummary>
<type>
@@ -339,6 +388,33 @@ Mpint() = <![CDATA[<<ByteLen:32/integer-big, Bytes:ByteLen/binary>>]]>
</func>
<func>
+ <name>des_ecb_encrypt(Key, Text) -> Cipher</name>
+ <fsummary>Encrypt <c>Text</c>according to DES in ECB mode</fsummary>
+ <type>
+ <v>Key = Text = iolist() | binary()</v>
+ <v>Cipher = binary()</v>
+ </type>
+ <desc>
+ <p>Encrypts <c>Text</c> according to DES in ECB mode.
+ <c>Key</c> is the DES key. The lengths of <c>Key</c> and
+ <c>Text</c> must be 64 bits (8 bytes).</p>
+ </desc>
+ </func>
+ <func>
+ <name>des_ecb_decrypt(Key, Cipher) -> Text</name>
+ <fsummary>Decrypt <c>Cipher</c>according to DES in ECB mode</fsummary>
+ <type>
+ <v>Key = Cipher = iolist() | binary()</v>
+ <v>Text = binary()</v>
+ </type>
+ <desc>
+ <p>Decrypts <c>Cipher</c> according to DES in ECB mode.
+ <c>Key</c> is the DES key. The lengths of <c>Key</c> and
+ <c>Cipher</c> must be 64 bits (8 bytes).</p>
+ </desc>
+ </func>
+
+ <func>
<name>blowfish_ecb_encrypt(Key, Text) -> Cipher</name>
<fsummary>Encrypt the first 64 bits of <c>Text</c> using Blowfish in ECB mode</fsummary>
<type>
diff --git a/lib/crypto/priv/Makefile b/lib/crypto/priv/Makefile
index b8acdacc00..0989f14c94 100644
--- a/lib/crypto/priv/Makefile
+++ b/lib/crypto/priv/Makefile
@@ -18,21 +18,21 @@
# ----------------------------------------------------
# THIS MAKEFILE SERVES AS AN EXAMPLE OF
-# HOW TO RELINK THE CRYPTO DRIVER
+# HOW TO RELINK THE CRYPTO NIF LIBRARY
# ----------------------------------------------------
# ----------------------------------------------------
-# Variables for linking a .so driver on unix.
+# Variables for linking a .so library on unix.
# Note: These may differ between systems.
# ----------------------------------------------------
SO_LD = gcc
SO_LDFLAGS = -G
SO_SSL_LIBDIR = /usr/local/lib
-SO_DRIVER = $(LIBDIR)/$(DRIVER_NAME).so
+SO_NIFLIB = $(LIBDIR)/$(LIB_NAME).so
# ----------------------------------------------------
-# Variables for linking a win32 .dll driver.
+# Variables for linking a win32 .dll library.
# Note: These may differ between systems.
# ----------------------------------------------------
@@ -42,9 +42,9 @@ DLL_LIBDIR = "c:\\OpenSSL\\lib\\VC"
DLL_LIBS = libeay32.lib MSVCRT.LIB kernel32.lib \
advapi32.lib gdi32.lib user32.lib \
comctl32.lib comdlg32.lib shell32.lib
-DLL_DRIVER = $(LIBDIR)/$(DRIVER_NAME).dll
-DLL_EXP = $(LIBDIR)/$(DRIVER_NAME).exp
-DLL_LIB = $(LIBDIR)/$(DRIVER_NAME).lib
+DLL_NIFLIB = $(LIBDIR)/$(LIB_NAME).dll
+DLL_EXP = $(LIBDIR)/$(LIB_NAME).exp
+DLL_LIB = $(LIBDIR)/$(LIB_NAME).lib
# ----------------------------------------------------
# Common variables
@@ -52,27 +52,27 @@ DLL_LIB = $(LIBDIR)/$(DRIVER_NAME).lib
OBJDIR = ./
LIBDIR = ../lib
-DRIVER_NAME = crypto_drv
-OBJS = $(OBJDIR)/crypto_drv.o
+LIB_NAME = crypto
+OBJS = $(OBJDIR)/crypto.o
# ----------------------------------------------------
# Targets
# ----------------------------------------------------
-$(SO_DRIVER): $(OBJS)
+$(SO_NIFLIB): $(OBJS)
$(SO_LD) $(SO_LDFLAGS) -L$(SO_SSL_LIBDIR) -Wl,-R$(SO_SSL_LIBDIR) \
-o $@ $^ -lcrypto
-$(DLL_DRIVER): $(OBJS)
+$(DLL_NIFLIB): $(OBJS)
$(DLL_LD) $(DLL_LDFLAGS) -out:$@ -libpath:$(DLL_LIBDIR) $(OBJS) \
$(DLL_LIBS)
-so: $(SO_DRIVER)
+so: $(SO_NIFLIB)
-dll: $(DLL_DRIVER)
+dll: $(DLL_NIFLIB)
clean:
- rm -f $(SO_DRIVER) $(DLL_DRIVER)
+ rm -f $(SO_NIFLIB) $(DLL_NIFLIB)
rm -f $(DLL_EXP) $(DLL_LIB)
rm -f core *~
diff --git a/lib/crypto/src/Makefile b/lib/crypto/src/Makefile
index 51092d16a5..0e886ce8bf 100644
--- a/lib/crypto/src/Makefile
+++ b/lib/crypto/src/Makefile
@@ -1,19 +1,19 @@
#
# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1999-2009. All Rights Reserved.
-#
+#
+# Copyright Ericsson AB 1999-2010. 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/target.mk
@@ -57,7 +57,7 @@ APPUP_TARGET= $(EBIN)/$(APPUP_FILE)
# ----------------------------------------------------
# FLAGS
# ----------------------------------------------------
-ERL_COMPILE_FLAGS += +warn_obsolete_guard
+ERL_COMPILE_FLAGS += +warn_obsolete_guard -DCRYPTO_VSN=\"$(VSN)\"
# ----------------------------------------------------
# Targets
diff --git a/lib/crypto/src/crypto.erl b/lib/crypto/src/crypto.erl
index fa33bad2e0..5b1ce96caf 100644
--- a/lib/crypto/src/crypto.erl
+++ b/lib/crypto/src/crypto.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1999-2010. 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%
%%
@@ -21,7 +21,7 @@
-module(crypto).
--export([start/0, stop/0, info/0, info_lib/0]).
+-export([start/0, stop/0, info/0, info_lib/0, version/0]).
-export([md4/1, md4_init/0, md4_update/2, md4_final/1]).
-export([md5/1, md5_init/0, md5_update/2, md5_final/1]).
-export([sha/1, sha_init/0, sha_update/2, sha_final/1]).
@@ -29,6 +29,7 @@
%-export([sha512/1, sha512_init/0, sha512_update/2, sha512_final/1]).
-export([md5_mac/2, md5_mac_96/2, sha_mac/2, sha_mac_96/2]).
-export([des_cbc_encrypt/3, des_cbc_decrypt/3, des_cbc_ivec/1]).
+-export([des_ecb_encrypt/2, des_ecb_decrypt/2]).
-export([des3_cbc_encrypt/5, des3_cbc_decrypt/5]).
-export([blowfish_ecb_encrypt/2, blowfish_ecb_decrypt/2]).
-export([blowfish_cbc_encrypt/3, blowfish_cbc_decrypt/3]).
@@ -53,79 +54,6 @@
-export([dh_generate_parameters/2, dh_check/1]). %% Testing see below
--define(INFO, 0).
--define(MD5, 1).
--define(MD5_INIT, 2).
--define(MD5_UPDATE, 3).
--define(MD5_FINAL, 4).
--define(SHA, 5).
--define(SHA_INIT, 6).
--define(SHA_UPDATE, 7).
--define(SHA_FINAL, 8).
--define(MD5_MAC, 9).
--define(MD5_MAC_96, 10).
--define(SHA_MAC, 11).
--define(SHA_MAC_96, 12).
--define(DES_CBC_ENCRYPT, 13).
--define(DES_CBC_DECRYPT, 14).
--define(DES_EDE3_CBC_ENCRYPT, 15).
--define(DES_EDE3_CBC_DECRYPT, 16).
--define(AES_CFB_128_ENCRYPT, 17).
--define(AES_CFB_128_DECRYPT, 18).
--define(RAND_BYTES, 19).
--define(RAND_UNIFORM, 20).
--define(MOD_EXP, 21).
--define(DSS_VERIFY, 22).
--define(RSA_VERIFY_SHA, 23).
-%-define(RSA_VERIFY_MD5, 35).
--define(AES_CBC_128_ENCRYPT, 24).
--define(AES_CBC_128_DECRYPT, 25).
--define(XOR, 26).
--define(RC4_ENCRYPT, 27).
--define(RC4_SET_KEY, 28).
--define(RC4_ENCRYPT_WITH_STATE, 29).
--define(RC2_40_CBC_ENCRYPT, 30).
--define(RC2_40_CBC_DECRYPT, 31).
--define(AES_CBC_256_ENCRYPT, 32).
--define(AES_CBC_256_DECRYPT, 33).
--define(INFO_LIB,34).
-%-define(RSA_VERIFY_SHA, 23).
--define(RSA_VERIFY_MD5, 35).
--define(RSA_SIGN_SHA, 36).
--define(RSA_SIGN_MD5, 37).
--define(DSS_SIGN, 38).
--define(RSA_PUBLIC_ENCRYPT, 39).
--define(RSA_PRIVATE_DECRYPT, 40).
--define(RSA_PRIVATE_ENCRYPT, 41).
--define(RSA_PUBLIC_DECRYPT, 42).
--define(DH_GENERATE_PARAMS, 43).
--define(DH_CHECK, 44).
--define(DH_GENERATE_KEY, 45).
--define(DH_COMPUTE_KEY, 46).
--define(MD4, 47).
--define(MD4_INIT, 48).
--define(MD4_UPDATE, 49).
--define(MD4_FINAL, 50).
-
-%% -define(SHA256, 51).
-%% -define(SHA256_INIT, 52).
-%% -define(SHA256_UPDATE, 53).
-%% -define(SHA256_FINAL, 54).
-%% -define(SHA512, 55).
-%% -define(SHA512_INIT, 56).
-%% -define(SHA512_UPDATE, 57).
-%% -define(SHA512_FINAL, 58).
-
--define(BF_CFB64_ENCRYPT, 59).
--define(BF_CFB64_DECRYPT, 60).
--define(BF_ECB_ENCRYPT, 61).
--define(BF_ECB_DECRYPT, 62).
--define(BF_OFB64_ENCRYPT, 63).
--define(BF_CBC_ENCRYPT, 64).
--define(BF_CBC_DECRYPT, 65).
-
-%% -define(IDEA_CBC_ENCRYPT, 34).
-%% -define(IDEA_CBC_DECRYPT, 35).
-define(FUNC_LIST, [md4, md4_init, md4_update, md4_final,
md5, md5_init, md5_update, md5_final,
@@ -135,6 +63,7 @@
md5_mac, md5_mac_96,
sha_mac, sha_mac_96,
des_cbc_encrypt, des_cbc_decrypt,
+ des_ecb_encrypt, des_ecb_decrypt,
des_ede3_cbc_encrypt, des_ede3_cbc_decrypt,
aes_cfb_128_encrypt, aes_cfb_128_decrypt,
rand_bytes,
@@ -153,6 +82,44 @@
aes_cbc_256_encrypt, aes_cbc_256_decrypt,
info_lib]).
+-define(nif_stub,nif_stub_error(?LINE)).
+
+-on_load(on_load/0).
+
+-define(CRYPTO_NIF_VSN,101).
+
+on_load() ->
+ LibName = "crypto",
+ PrivDir = code:priv_dir(crypto),
+ Lib1 = filename:join([PrivDir, "lib", LibName]),
+ Status = case erlang:load_nif(Lib1, ?CRYPTO_NIF_VSN) of
+ ok -> ok;
+ {error, {load_failed, _}}=Error1 ->
+ LibDir2 =
+ filename:join([PrivDir, "lib",
+ erlang:system_info(system_architecture)]),
+ Candidate =
+ filelib:wildcard(filename:join([LibDir2,LibName ++ "*" ])),
+ case Candidate of
+ [] -> Error1;
+ _ ->
+ Lib2 = filename:join([LibDir2, LibName]),
+ erlang:load_nif(Lib2, ?CRYPTO_NIF_VSN)
+ end;
+ Error1 -> Error1
+ end,
+ case Status of
+ ok -> ok;
+ {error, {E, Str}} ->
+ error_logger:error_msg("Unable to load crypto library. Failed with error:~n\"~p, ~s\"~n"
+ "OpenSSL might not be installed on this system.~n",[E,Str]),
+ Status
+ end.
+
+
+nif_stub_error(Line) ->
+ erlang:error({nif_not_loaded,module,?MODULE,line,Line}).
+
start() ->
application:start(crypto).
@@ -160,15 +127,15 @@ stop() ->
application:stop(crypto).
info() ->
- lists:map(fun(I) ->
- lists:nth(I, ?FUNC_LIST)
- end, binary_to_list(control(?INFO, []))).
+ ?FUNC_LIST.
-info_lib() ->
- <<_DrvVer:8, NameSize:8, Name:NameSize/binary,
- VerNum:32, VerStr/binary>> = control(?INFO_LIB,[]),
- [{Name,VerNum,VerStr}].
+info_lib() -> ?nif_stub.
+%% Crypto app version history:
+%% (no version): Driver implementation
+%% 2.0 : NIF implementation, requires OTP R14
+version() -> ?CRYPTO_VSN.
+
%% Below Key and Data are binaries or IO-lists. IVec is a binary.
%% Output is always a binary. Context is a binary.
@@ -179,73 +146,27 @@ info_lib() ->
%%
%% MD5
%%
-md5(Data) ->
- control(?MD5, Data).
-
-md5_init() ->
- control(?MD5_INIT, []).
-
-md5_update(Context, Data) ->
- control(?MD5_UPDATE, [Context, Data]).
-
-md5_final(Context) ->
- control(?MD5_FINAL, Context).
+md5(_Data) -> ?nif_stub.
+md5_init() -> ?nif_stub.
+md5_update(_Context, _Data) -> ?nif_stub.
+md5_final(_Context) -> ?nif_stub.
%%
%% MD4
%%
-md4(Data) ->
- control(?MD4, Data).
-
-md4_init() ->
- control(?MD4_INIT, []).
-
-md4_update(Context, Data) ->
- control(?MD4_UPDATE, [Context, Data]).
-
-md4_final(Context) ->
- control(?MD4_FINAL, Context).
+md4(_Data) -> ?nif_stub.
+md4_init() -> ?nif_stub.
+md4_update(_Context, _Data) -> ?nif_stub.
+md4_final(_Context) -> ?nif_stub.
%%
%% SHA
%%
-sha(Data) ->
- control(?SHA, Data).
-
-sha_init() ->
- control(?SHA_INIT, []).
-
-sha_update(Context, Data) ->
- control(?SHA_UPDATE, [Context, Data]).
-
-sha_final(Context) ->
- control(?SHA_FINAL, Context).
-
-%% sha256 and sha512 requires openssl-0.9.8 removed for now
-
-%% sha256(Data) ->
-%% control(?SHA256, Data).
-
-%% sha256_init() ->
-%% control(?SHA256_INIT, []).
+sha(_Data) -> ?nif_stub.
+sha_init() -> ?nif_stub.
+sha_update(_Context, _Data) -> ?nif_stub.
+sha_final(_Context) -> ?nif_stub.
-%% sha256_update(Context, Data) ->
-%% control(?SHA256_UPDATE, [Context, Data]).
-
-%% sha256_final(Context) ->
-%% control(?SHA256_FINAL, Context).
-
-%% sha512(Data) ->
-%% control(?SHA512, Data).
-
-%% sha512_init() ->
-%% control(?SHA512_INIT, []).
-
-%% sha512_update(Context, Data) ->
-%% control(?SHA512_UPDATE, [Context, Data]).
-
-%% sha512_final(Context) ->
-%% control(?SHA512_FINAL, Context).
%%
%% MESSAGE AUTHENTICATION CODES
@@ -255,20 +176,24 @@ sha_final(Context) ->
%% MD5_MAC
%%
md5_mac(Key, Data) ->
- control_bin(?MD5_MAC, Key, Data).
+ md5_mac_n(Key,Data,16).
md5_mac_96(Key, Data) ->
- control_bin(?MD5_MAC_96, Key, Data).
+ md5_mac_n(Key,Data,12).
+md5_mac_n(_Key,_Data,_MacSz) -> ?nif_stub.
+
%%
%% SHA_MAC
%%
sha_mac(Key, Data) ->
- control_bin(?SHA_MAC, Key, Data).
+ sha_mac_n(Key,Data,20).
sha_mac_96(Key, Data) ->
- control_bin(?SHA_MAC_96, Key, Data).
+ sha_mac_n(Key,Data,12).
+sha_mac_n(_Key,_Data,_MacSz) -> ?nif_stub.
+
%%
%% CRYPTO FUNCTIONS
%%
@@ -277,10 +202,12 @@ sha_mac_96(Key, Data) ->
%% DES - in cipher block chaining mode (CBC)
%%
des_cbc_encrypt(Key, IVec, Data) ->
- control(?DES_CBC_ENCRYPT, [Key, IVec, Data]).
+ des_cbc_crypt(Key, IVec, Data, true).
des_cbc_decrypt(Key, IVec, Data) ->
- control(?DES_CBC_DECRYPT, [Key, IVec, Data]).
+ des_cbc_crypt(Key, IVec, Data, false).
+
+des_cbc_crypt(_Key, _IVec, _Data, _IsEncrypt) -> ?nif_stub.
%%
%% dec_cbc_ivec(Data) -> binary()
@@ -295,76 +222,78 @@ des_cbc_ivec(Data) when is_list(Data) ->
des_cbc_ivec(list_to_binary(Data)).
%%
+%% DES - in electronic codebook mode (ECB)
+%%
+des_ecb_encrypt(Key, Data) ->
+ des_ecb_crypt(Key, Data, true).
+des_ecb_decrypt(Key, Data) ->
+ des_ecb_crypt(Key, Data, false).
+des_ecb_crypt(_Key, _Data, _IsEncrypt) -> ?nif_stub.
+
+%%
%% DES3 - in cipher block chaining mode (CBC)
%%
des3_cbc_encrypt(Key1, Key2, Key3, IVec, Data) ->
des_ede3_cbc_encrypt(Key1, Key2, Key3, IVec, Data).
des_ede3_cbc_encrypt(Key1, Key2, Key3, IVec, Data) ->
- %%io:format("des_ede3_cbc_encrypt: size(Data)=~p\n", [size(list_to_binary([Data]))]),
- control(?DES_EDE3_CBC_ENCRYPT, [Key1, Key2, Key3, IVec, Data]).
+ des_ede3_cbc_crypt(Key1, Key2, Key3, IVec, Data, true).
des3_cbc_decrypt(Key1, Key2, Key3, IVec, Data) ->
des_ede3_cbc_decrypt(Key1, Key2, Key3, IVec, Data).
des_ede3_cbc_decrypt(Key1, Key2, Key3, IVec, Data) ->
- control(?DES_EDE3_CBC_DECRYPT, [Key1, Key2, Key3, IVec, Data]).
+ des_ede3_cbc_crypt(Key1, Key2, Key3, IVec, Data, false).
+
+des_ede3_cbc_crypt(_Key1, _Key2, _Key3, _IVec, _Data, _IsEncrypt) -> ?nif_stub.
%%
%% Blowfish
%%
-blowfish_ecb_encrypt(Key, Data) when byte_size(Data) >= 8 ->
- control_bin(?BF_ECB_ENCRYPT, Key, list_to_binary([Data])).
+blowfish_ecb_encrypt(Key, Data) ->
+ bf_ecb_crypt(Key,Data, true).
+
+blowfish_ecb_decrypt(Key, Data) ->
+ bf_ecb_crypt(Key,Data, false).
+
+bf_ecb_crypt(_Key,_Data,_IsEncrypt) -> ?nif_stub.
+
+blowfish_cbc_encrypt(Key, IVec, Data) ->
+ bf_cbc_crypt(Key,IVec,Data,true).
-blowfish_ecb_decrypt(Key, Data) when byte_size(Data) >= 8 ->
- control_bin(?BF_ECB_DECRYPT, Key, list_to_binary([Data])).
+blowfish_cbc_decrypt(Key, IVec, Data) ->
+ bf_cbc_crypt(Key,IVec,Data,false).
-blowfish_cbc_encrypt(Key, IVec, Data) when byte_size(Data) rem 8 =:= 0 ->
- control_bin(?BF_CBC_ENCRYPT, Key, list_to_binary([IVec, Data])).
+bf_cbc_crypt(_Key,_IVec,_Data,_IsEncrypt) -> ?nif_stub.
-blowfish_cbc_decrypt(Key, IVec, Data) when byte_size(Data) rem 8 =:= 0 ->
- control_bin(?BF_CBC_DECRYPT, Key, list_to_binary([IVec, Data])).
+blowfish_cfb64_encrypt(Key, IVec, Data) ->
+ bf_cfb64_crypt(Key, IVec, Data, true).
-blowfish_cfb64_encrypt(Key, IVec, Data) when byte_size(IVec) =:= 8 ->
- control_bin(?BF_CFB64_ENCRYPT, Key, list_to_binary([IVec, Data])).
+blowfish_cfb64_decrypt(Key, IVec, Data) ->
+ bf_cfb64_crypt(Key, IVec, Data, false).
-blowfish_cfb64_decrypt(Key, IVec, Data) when byte_size(IVec) =:= 8 ->
- control_bin(?BF_CFB64_DECRYPT, Key, list_to_binary([IVec, Data])).
+bf_cfb64_crypt(_Key, _IVec, _Data, _IsEncrypt) -> ?nif_stub.
-blowfish_ofb64_encrypt(Key, IVec, Data) when byte_size(IVec) =:= 8 ->
- control_bin(?BF_OFB64_ENCRYPT, Key, list_to_binary([IVec, Data])).
+blowfish_ofb64_encrypt(_Key, _IVec, _Data) -> ?nif_stub.
%%
%% AES in cipher feedback mode (CFB)
%%
aes_cfb_128_encrypt(Key, IVec, Data) ->
- control(?AES_CFB_128_ENCRYPT, [Key, IVec, Data]).
+ aes_cfb_128_crypt(Key, IVec, Data, true).
aes_cfb_128_decrypt(Key, IVec, Data) ->
- control(?AES_CFB_128_DECRYPT, [Key, IVec, Data]).
+ aes_cfb_128_crypt(Key, IVec, Data, false).
-
-%% %%
-%% %% IDEA - in cipher block chaining mode (CBC)
-%% %%
-%% idea_cbc_encrypt(Key, IVec, Data) ->
-%% control(?IDEA_CBC_ENCRYPT, [Key, IVec, Data]).
-
-%% idea_cbc_decrypt(Key, IVec, Data) ->
-%% control(?IDEA_CBC_DECRYPT, [Key, IVec, Data]).
+aes_cfb_128_crypt(_Key, _IVec, _Data, _IsEncrypt) -> ?nif_stub.
%%
%% RAND - pseudo random numbers using RN_ functions in crypto lib
%%
-
-rand_bytes(Bytes) ->
- rand_bytes(Bytes, 0, 0).
-rand_bytes(Bytes, Topmask, Bottommask) ->
- control(?RAND_BYTES,[<<Bytes:32/integer,
- Topmask:8/integer,
- Bottommask:8/integer>>]).
+rand_bytes(_Bytes) -> ?nif_stub.
+rand_bytes(_Bytes, _Topmask, _Bottommask) -> ?nif_stub.
rand_uniform(From,To) when is_binary(From), is_binary(To) ->
- case control(?RAND_UNIFORM,[From,To]) of
+ case rand_uniform_nif(From,To) of
<<Len:32/integer, MSB, Rest/binary>> when MSB > 127 ->
<<(Len + 1):32/integer, 0, MSB, Rest/binary>>;
Whatever ->
@@ -380,6 +309,8 @@ rand_uniform(From,To) when is_integer(From),is_integer(To) ->
Other
end.
+rand_uniform_nif(_From,_To) -> ?nif_stub.
+
%%
%% mod_exp - utility for rsa generation
%%
@@ -388,55 +319,51 @@ mod_exp(Base, Exponent, Modulo)
erlint(mod_exp(mpint(Base), mpint(Exponent), mpint(Modulo)));
mod_exp(Base, Exponent, Modulo) ->
- case control(?MOD_EXP,[Base,Exponent,Modulo]) of
+ case mod_exp_nif(Base,Exponent,Modulo) of
<<Len:32/integer, MSB, Rest/binary>> when MSB > 127 ->
<<(Len + 1):32/integer, 0, MSB, Rest/binary>>;
Whatever ->
Whatever
end.
+mod_exp_nif(_Base,_Exp,_Mod) -> ?nif_stub.
+
%%
%% DSS, RSA - verify
%%
%% Key = [P,Q,G,Y] P,Q,G=DSSParams Y=PublicKey
-dss_verify(Data,Signature,Key) ->
- control(?DSS_VERIFY, [Data,Signature,Key]) == <<1>>.
+dss_verify(_Data,_Signature,_Key) -> ?nif_stub.
% Key = [E,N] E=PublicExponent N=PublicModulus
rsa_verify(Data,Signature,Key) ->
rsa_verify(sha, Data,Signature,Key).
-rsa_verify(Type,Data,Signature,Key) ->
- control(rsa_verify_digest_type(Type), [Data,Signature,Key]) == <<1>>.
+rsa_verify(_Type,_Data,_Signature,_Key) -> ?nif_stub.
-rsa_verify_digest_type(md5) -> ?RSA_VERIFY_MD5;
-rsa_verify_digest_type(sha) -> ?RSA_VERIFY_SHA;
-rsa_verify_digest_type(Bad) -> erlang:error(badarg, [Bad]).
%%
%% DSS, RSA - sign
%%
%% Key = [P,Q,G,X] P,Q,G=DSSParams X=PrivateKey
dss_sign(Data, Key) ->
- <<Ret:8, Signature/binary>> = control(?DSS_SIGN, [Data,Key]),
- case Ret of
- 1 -> Signature;
- 0 -> erlang:error(badkey, [Data, Key])
+ case dss_sign_nif(Data,Key) of
+ error -> erlang:error(badkey, [Data, Key]);
+ Sign -> Sign
end.
+dss_sign_nif(_Data,_Key) -> ?nif_stub.
+
%% Key = [E,N,D] E=PublicExponent N=PublicModulus D=PrivateExponent
rsa_sign(Data,Key) ->
rsa_sign(sha, Data, Key).
rsa_sign(Type, Data, Key) ->
- <<Ret:8, Signature/binary>> = control(rsa_sign_digest_type(Type), [Data,Key]),
- case Ret of
- 1 -> Signature;
- 0 -> erlang:error(badkey, [Type,Data,Key])
+ case rsa_sign_nif(Type,Data,Key) of
+ error -> erlang:error(badkey, [Type,Data,Key]);
+ Sign -> Sign
end.
-rsa_sign_digest_type(md5) -> ?RSA_SIGN_MD5;
-rsa_sign_digest_type(sha) -> ?RSA_SIGN_SHA;
-rsa_sign_digest_type(Bad) -> erlang:error(badarg, [Bad]).
+rsa_sign_nif(_Type,_Data,_Key) -> ?nif_stub.
+
%%
%% rsa_public_encrypt
@@ -444,48 +371,39 @@ rsa_sign_digest_type(Bad) -> erlang:error(badarg, [Bad]).
%% Binary, Key = [E,N]
rsa_public_encrypt(BinMesg, Key, Padding) ->
- Size = iolist_size(BinMesg),
- <<Ret:8, Signature/binary>> =
- control(?RSA_PUBLIC_ENCRYPT, [<<Size:32>>,BinMesg,Key,rsa_pad(Padding)]),
- case Ret of
- 1 -> Signature;
- 0 -> erlang:error(encrypt_failed, [BinMesg,Key, Padding])
- end.
+ case rsa_public_crypt(BinMesg, Key, Padding, true) of
+ error ->
+ erlang:error(encrypt_failed, [BinMesg,Key, Padding]);
+ Sign -> Sign
+ end.
+
+rsa_public_crypt(_BinMsg, _Key, _Padding, _IsEncrypt) -> ?nif_stub.
%% Binary, Key = [E,N,D]
rsa_private_decrypt(BinMesg, Key, Padding) ->
- Size = iolist_size(BinMesg),
- <<Ret:8, Signature/binary>> =
- control(?RSA_PRIVATE_DECRYPT, [<<Size:32>>,BinMesg,Key,rsa_pad(Padding)]),
- case Ret of
- 1 -> Signature;
- 0 -> erlang:error(decrypt_failed, [BinMesg,Key, Padding])
- end.
-
-rsa_pad(rsa_pkcs1_padding) -> 1;
-rsa_pad(rsa_pkcs1_oaep_padding) -> 2;
-%% rsa_pad(rsa_sslv23_padding) -> 3;
-rsa_pad(rsa_no_padding) -> 0;
-rsa_pad(Bad) -> erlang:error(badarg, [Bad]).
+ case rsa_private_crypt(BinMesg, Key, Padding, false) of
+ error ->
+ erlang:error(decrypt_failed, [BinMesg,Key, Padding]);
+ Sign -> Sign
+ end.
+
+rsa_private_crypt(_BinMsg, _Key, _Padding, _IsEncrypt) -> ?nif_stub.
+
%% Binary, Key = [E,N,D]
rsa_private_encrypt(BinMesg, Key, Padding) ->
- Size = iolist_size(BinMesg),
- <<Ret:8, Signature/binary>> =
- control(?RSA_PRIVATE_ENCRYPT, [<<Size:32>>,BinMesg,Key,rsa_pad(Padding)]),
- case Ret of
- 1 -> Signature;
- 0 -> erlang:error(encrypt_failed, [BinMesg,Key, Padding])
- end.
+ case rsa_private_crypt(BinMesg, Key, Padding, true) of
+ error ->
+ erlang:error(encrypt_failed, [BinMesg,Key, Padding]);
+ Sign -> Sign
+ end.
%% Binary, Key = [E,N]
rsa_public_decrypt(BinMesg, Key, Padding) ->
- Size = iolist_size(BinMesg),
- <<Ret:8, Signature/binary>> =
- control(?RSA_PUBLIC_DECRYPT, [<<Size:32>>,BinMesg,Key,rsa_pad(Padding)]),
- case Ret of
- 1 -> Signature;
- 0 -> erlang:error(decrypt_failed, [BinMesg,Key, Padding])
+ case rsa_public_crypt(BinMesg, Key, Padding, false) of
+ error ->
+ erlang:error(decrypt_failed, [BinMesg,Key, Padding]);
+ Sign -> Sign
end.
%%
@@ -493,16 +411,18 @@ rsa_public_decrypt(BinMesg, Key, Padding) ->
%%
aes_cbc_128_encrypt(Key, IVec, Data) ->
- control(?AES_CBC_128_ENCRYPT, [Key, IVec, Data]).
+ aes_cbc_crypt(Key, IVec, Data, true).
aes_cbc_128_decrypt(Key, IVec, Data) ->
- control(?AES_CBC_128_DECRYPT, [Key, IVec, Data]).
+ aes_cbc_crypt(Key, IVec, Data, false).
aes_cbc_256_encrypt(Key, IVec, Data) ->
- control(?AES_CBC_256_ENCRYPT, [Key, IVec, Data]).
+ aes_cbc_crypt(Key, IVec, Data, true).
aes_cbc_256_decrypt(Key, IVec, Data) ->
- control(?AES_CBC_256_DECRYPT, [Key, IVec, Data]).
+ aes_cbc_crypt(Key, IVec, Data, false).
+
+aes_cbc_crypt(_Key, _IVec, _Data, _IsEncrypt) -> ?nif_stub.
%%
%% aes_cbc_ivec(Data) -> binary()
@@ -523,31 +443,25 @@ aes_cbc_ivec(Data) when is_list(Data) ->
%% NB doesn't check that they are the same size, just concatenates
%% them and sends them to the driver
%%
-exor(A, B) ->
- control(?XOR, [A, B]).
+exor(_A, _B) -> ?nif_stub.
%%
%% RC4 - symmetric stream cipher
%%
-rc4_encrypt(Key, Data) ->
- control_bin(?RC4_ENCRYPT, Key, Data).
-
-rc4_set_key(Key) ->
- control(?RC4_SET_KEY, Key).
-
-rc4_encrypt_with_state(State, Data) ->
- <<Sz:32/integer-big-unsigned, S:Sz/binary, D/binary>> =
- control_bin(?RC4_ENCRYPT_WITH_STATE, State, Data),
- {S, D}.
+rc4_encrypt(_Key, _Data) -> ?nif_stub.
+rc4_set_key(_Key) -> ?nif_stub.
+rc4_encrypt_with_state(_State, _Data) -> ?nif_stub.
%%
%% RC2 - 40 bits block cipher
%%
rc2_40_cbc_encrypt(Key, IVec, Data) ->
- control(?RC2_40_CBC_ENCRYPT, [Key, IVec, Data]).
+ rc2_40_cbc_crypt(Key,IVec,Data,true).
rc2_40_cbc_decrypt(Key, IVec, Data) ->
- control(?RC2_40_CBC_DECRYPT, [Key, IVec, Data]).
+ rc2_40_cbc_crypt(Key,IVec,Data,false).
+
+rc2_40_cbc_crypt(_Key, _IVec, _Data, _IsEncrypt) -> ?nif_stub.
%%
%% DH Diffie-Hellman functions
@@ -562,87 +476,44 @@ rc2_40_cbc_decrypt(Key, IVec, Data) ->
%%
%% usage: dh_generate_parameters(1024, 2 or 5) ->
%% [Prime=mpint(), SharedGenerator=mpint()]
-dh_generate_parameters(PrimeLen, Generator)
- when is_integer(PrimeLen), is_integer(Generator) ->
- case control(?DH_GENERATE_PARAMS, <<PrimeLen:32, Generator:32>>) of
- <<0:8, _/binary>> ->
- erlang:error(generation_failed, [PrimeLen,Generator]);
- <<1:8, PLen0:32, _:PLen0/binary, GLen0:32,_:GLen0/binary>> = Bin ->
- PLen = PLen0+4,
- GLen = GLen0+4,
- <<_:8, PBin:PLen/binary,GBin:GLen/binary>> = Bin,
- [PBin, GBin]
- end.
+dh_generate_parameters(PrimeLen, Generator) ->
+ case dh_generate_parameters_nif(PrimeLen, Generator) of
+ error -> erlang:error(generation_failed, [PrimeLen,Generator]);
+ Ret -> Ret
+ end.
+
+dh_generate_parameters_nif(_PrimeLen, _Generator) -> ?nif_stub.
%% Checks that the DHParameters are ok.
%% DHParameters = [P (Prime)= mpint(), G(Generator) = mpint()]
-dh_check(DHParameters) ->
- case control(?DH_CHECK, DHParameters) of
- <<0:32>> -> ok;
- <<_:24,_:1,_:1,_:1,1:1>> -> not_prime;
- <<_:24,_:1,_:1,1:1,0:1>> -> not_strong_prime;
- <<_:24,_:1,1:1,0:1,0:1>> -> unable_to_check_generator;
- <<_:24,1:1,0:1,0:1,0:1>> -> not_suitable_generator;
- <<16#FFFF:32>> -> {error, check_failed};
- <<X:32>> -> {unknown, X}
- end.
+dh_check([_Prime,_Gen]) -> ?nif_stub.
%% DHParameters = [P (Prime)= mpint(), G(Generator) = mpint()]
%% PrivKey = mpint()
dh_generate_key(DHParameters) ->
- dh_generate_key(<<0:32>>, DHParameters).
+ dh_generate_key(undefined, DHParameters).
dh_generate_key(PrivateKey, DHParameters) ->
- case control(?DH_GENERATE_KEY, [PrivateKey, DHParameters]) of
- <<0:8, _/binary>> ->
- erlang:error(generation_failed, [PrivateKey,DHParameters]);
- Bin = <<1:8, PubLen0:32, _:PubLen0/binary, PrivLen0:32, _:PrivLen0/binary>> ->
- PubLen = PubLen0+4,
- PrivLen = PrivLen0+4,
- <<_:8, PubBin:PubLen/binary,PrivBin:PrivLen/binary>> = Bin,
- {PubBin, PrivBin}
+ case dh_generate_key_nif(PrivateKey, DHParameters) of
+ error -> erlang:error(generation_failed, [PrivateKey,DHParameters]);
+ Res -> Res
end.
+dh_generate_key_nif(_PrivateKey, _DHParameters) -> ?nif_stub.
+
%% DHParameters = [P (Prime)= mpint(), G(Generator) = mpint()]
%% MyPrivKey, OthersPublicKey = mpint()
dh_compute_key(OthersPublicKey, MyPrivateKey, DHParameters) ->
- case control(?DH_COMPUTE_KEY, [OthersPublicKey, MyPrivateKey, DHParameters]) of
- <<0:8, _/binary>> ->
- erlang:error(computation_failed, [OthersPublicKey,MyPrivateKey,DHParameters]);
- <<1:8, Binary/binary>> -> Binary
+ case dh_compute_key_nif(OthersPublicKey,MyPrivateKey,DHParameters) of
+ error -> erlang:error(computation_failed, [OthersPublicKey,MyPrivateKey,DHParameters]);
+ Ret -> Ret
end.
+dh_compute_key_nif(_OthersPublicKey, _MyPrivateKey, _DHParameters) -> ?nif_stub.
+
%%
%% LOCAL FUNCTIONS
%%
-control_bin(Cmd, Key, Data) ->
- Sz = iolist_size(Key),
- control(Cmd, [<<Sz:32/integer-unsigned>>, Key, Data]).
-
-control(Cmd, Data) ->
- Port = crypto_server:client_port(),
- erlang:port_control(Port, Cmd, Data).
-
-
-%% sizehdr(N) ->
-%% [(N bsr 24) band 255,
-%% (N bsr 16) band 255,
-%% (N bsr 8) band 255,
-%% N band 255].
-
-%% Flat length of IOlist (or binary)
-%% flen(L) when binary(L) ->
-%% size(L);
-%% flen(L) ->
-%% flen(L, 0).
-
-%% flen([H| T], N) when list(H) ->
-%% flen(H, flen(T, N));
-%% flen([H| T], N) when binary(H) ->
-%% flen(T, N + size(H));
-%% flen([H| T], N) when integer(H), 0 =< H, H =< 255 ->
-%% flen(T, N + 1);
-%% flen([], N) ->
-%% N.
+
%% large integer in a binary with 32bit length
%% MP representaion (SSH2)
diff --git a/lib/crypto/src/crypto_server.erl b/lib/crypto/src/crypto_server.erl
index 0b1e5c9b02..89650a9f06 100644
--- a/lib/crypto/src/crypto_server.erl
+++ b/lib/crypto/src/crypto_server.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1999-2010. 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%
%%
@@ -23,14 +23,12 @@
-behaviour(gen_server).
--export([start_link/0,client_port/0]).
+-export([start_link/0]).
%% Internal exports, call-back functions.
-export([init/1,handle_call/3,handle_cast/2,handle_info/2,code_change/3,
terminate/2]).
-%% Measurements shows that inlining port_names/0 is worth doing.
--compile({inline,[{port_names,0}]}).
%%% --------------------------------------------------------
%%% Interface Functions.
@@ -40,66 +38,8 @@ start_link() ->
gen_server:start_link({local, crypto_server}, crypto_server, [], []).
init([]) ->
- process_flag(trap_exit, true),
- erl_ddll:start(),
- PrivDir = code:priv_dir(crypto),
- LibDir1 = filename:join([PrivDir, "lib"]),
- {Status, LibDir} =
- case erl_ddll:load_driver(LibDir1, crypto_drv) of
- ok -> {ok,LibDir1};
- {error,Error1} ->
- LibDir2 =
- filename:join(LibDir1,
- erlang:system_info(system_architecture)),
- Candidate =
- filelib:wildcard(filename:join([LibDir2,"crypto_drv*"])),
- case Candidate of
- [] ->
- {{error,Error1},LibDir1};
- _ ->
- case erl_ddll:load_driver(LibDir2, crypto_drv) of
- ok ->
- {ok,LibDir2};
- {error, Error2} ->
- {{error,Error2},LibDir2}
- end
- end
- end,
- case Status of
- ok ->
- Cmd = "crypto_drv elibcrypto " ++
- filename:join([LibDir, "elibcrypto"]),
- open_ports(Cmd,size(port_names()));
- {error, E} ->
- Str = erl_ddll:format_error(E),
- error_logger:error_msg("Unable to load crypto_drv. Failed with error:~n\"~s\"~nOpenSSL might not be installed on this system.~n",[Str]),
- {stop,nodriver}
- end.
-
-open_ports(_,0) ->
- {ok, []};
-open_ports(Cmd,N) ->
- Port = open_port({spawn, Cmd}, []),
- %% check that driver is loaded, linked and working
- %% since crypto_drv links towards libcrypto, this is a good thing
- %% since libcrypto is known to be bad with backwards compatibility
- case catch port_control(Port, 0, []) of
- {'EXIT', _} ->
- {stop, nodriver};
- _ ->
- register(element(N,port_names()), Port),
- open_ports(Cmd,N-1)
- end.
-
-port_names() ->
- { crypto_drv01, crypto_drv02, crypto_drv03, crypto_drv04,
- crypto_drv05, crypto_drv06, crypto_drv07, crypto_drv08,
- crypto_drv09, crypto_drv10, crypto_drv11, crypto_drv12,
- crypto_drv13, crypto_drv14, crypto_drv15, crypto_drv16 }.
-
-client_port() ->
- element(erlang:system_info(scheduler_id) rem size(port_names()) + 1,
- port_names()).
+ {ok,[]}.
+
%%% --------------------------------------------------------
@@ -112,11 +52,6 @@ handle_call(_, _, State) ->
handle_cast(_, State) ->
{noreply, State}.
-handle_info({'EXIT', Pid, _Reason}, State) when is_pid(Pid) ->
- {noreply, State};
-
-handle_info({'EXIT', Port, Reason}, State) when is_port(Port) ->
- {stop, {port_died, Reason}, State};
handle_info(_, State) ->
{noreply, State}.
@@ -124,13 +59,8 @@ code_change(_OldVsn, State, _Extra) ->
{ok, State}.
terminate(_Reason, _State) ->
- close_ports(size(port_names())).
+ [].
-close_ports(0) ->
- ok;
-close_ports(N) ->
- element(N,port_names()) ! {self(), close},
- close_ports(N-1).
diff --git a/lib/crypto/test/blowfish_SUITE.erl b/lib/crypto/test/blowfish_SUITE.erl
index d4cc167ea9..d117e7cc3d 100644
--- a/lib/crypto/test/blowfish_SUITE.erl
+++ b/lib/crypto/test/blowfish_SUITE.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2009-2010. 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%
%%
@@ -116,7 +116,8 @@ all(suite) ->
ecb_test(KeyBytes, ClearBytes, CipherBytes) ->
{Key, Clear, Cipher} =
{to_bin(KeyBytes), to_bin(ClearBytes), to_bin(CipherBytes)},
- crypto:blowfish_ecb_encrypt(Key, Clear) =:= Cipher.
+ ?line m(crypto:blowfish_ecb_encrypt(Key, Clear), Cipher),
+ true.
ecb(doc) ->
"Test that ECB mode is OK";
@@ -208,3 +209,5 @@ to_bin([], Acc) ->
iolist_to_binary(lists:reverse(Acc));
to_bin([C1, C2 | Rest], Acc) ->
to_bin(Rest, [(dehex(C1) bsl 4) bor dehex(C2) | Acc]).
+
+m(X,X) -> ok.
diff --git a/lib/crypto/test/crypto_SUITE.erl b/lib/crypto/test/crypto_SUITE.erl
index 290ef19160..08d7a0ce99 100644
--- a/lib/crypto/test/crypto_SUITE.erl
+++ b/lib/crypto/test/crypto_SUITE.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1999-2010. 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(crypto_SUITE).
@@ -40,6 +40,7 @@
md5_mac_io/1,
des_cbc/1,
des_cbc_iter/1,
+ des_ecb/1,
aes_cfb/1,
aes_cbc/1,
aes_cbc_iter/1,
@@ -78,6 +79,7 @@ all(suite) ->
aes_cbc,
aes_cbc_iter,
des_cbc_iter,
+ des_ecb,
rand_uniform_test,
rsa_verify_test,
dsa_verify_test,
@@ -117,7 +119,7 @@ link_test(Config) when is_list(Config) ->
link_test_1() ->
?line CryptoPriv = code:priv_dir(crypto),
- ?line Wc = filename:join([CryptoPriv,"lib","crypto_drv.*"]),
+ ?line Wc = filename:join([CryptoPriv,"lib","crypto.*"]),
?line case filelib:wildcard(Wc) of
[] -> {skip,"Didn't find the crypto driver"};
[Drv] -> link_test_2(Drv)
@@ -439,12 +441,34 @@ des_cbc_iter(Config) when is_list(Config) ->
?line Cipher1 = crypto:des_cbc_encrypt(Key, IVec, Plain1),
?line IVec2 = crypto:des_cbc_ivec(Cipher1),
?line Cipher2 = crypto:des_cbc_encrypt(Key, IVec2, Plain2),
- ?line Cipher = concat_binary([Cipher1, Cipher2]),
+ ?line Cipher = list_to_binary([Cipher1, Cipher2]),
?line m(Cipher, hexstr2bin("e5c7cdde872bf27c43e934008c389c"
"0f683788499a7c05f6")).
%%
%%
+des_ecb(doc) ->
+ "Encrypt and decrypt according to ECB DES and check the result. "
+ "Example are from FIPS-81.";
+des_ecb(suite) ->
+ [];
+des_ecb(Config) when is_list(Config) ->
+ ?line Key = hexstr2bin("0123456789abcdef"),
+ ?line Cipher1 = crypto:des_ecb_encrypt(Key, "Now is t"),
+ ?line m(Cipher1, hexstr2bin("3fa40e8a984d4815")),
+ ?line Cipher2 = crypto:des_ecb_encrypt(Key, "he time "),
+ ?line m(Cipher2, hexstr2bin("6a271787ab8883f9")),
+ ?line Cipher3 = crypto:des_ecb_encrypt(Key, "for all "),
+ ?line m(Cipher3, hexstr2bin("893d51ec4b563b53")),
+ ?line Cipher4 = crypto:des_ecb_decrypt(Key, hexstr2bin("3fa40e8a984d4815")),
+ ?line m(Cipher4, <<"Now is t">>),
+ ?line Cipher5 = crypto:des_ecb_decrypt(Key, hexstr2bin("6a271787ab8883f9")),
+ ?line m(Cipher5, <<"he time ">>),
+ ?line Cipher6 = crypto:des_ecb_decrypt(Key, hexstr2bin("893d51ec4b563b53")),
+ ?line m(Cipher6, <<"for all ">>).
+
+%%
+%%
aes_cfb(doc) ->
"Encrypt and decrypt according to AES CFB 128 bit and check "
"the result. Example are from NIST SP 800-38A.";
@@ -819,16 +843,16 @@ dsa_sign_test(Config) when is_list(Config) ->
ParamG = 18320614775012672475365915366944922415598782131828709277168615511695849821411624805195787607930033958243224786899641459701930253094446221381818858674389863050420226114787005820357372837321561754462061849169568607689530279303056075793886577588606958623645901271866346406773590024901668622321064384483571751669,
Params = [crypto:mpint(ParamP), crypto:mpint(ParamQ), crypto:mpint(ParamG)],
- ?line Sig1 = crypto:dss_sign(sized_binary(Msg), [Params, crypto:mpint(PrivKey)]),
+ ?line Sig1 = crypto:dss_sign(sized_binary(Msg), Params ++ [crypto:mpint(PrivKey)]),
?line m(crypto:dss_verify(sized_binary(Msg), sized_binary(Sig1),
- [Params, crypto:mpint(PubKey)]), true),
+ Params ++ [crypto:mpint(PubKey)]), true),
?line m(crypto:dss_verify(sized_binary(one_bit_wrong(Msg)), sized_binary(Sig1),
- [Params, crypto:mpint(PubKey)]), false),
+ Params ++ [crypto:mpint(PubKey)]), false),
?line m(crypto:dss_verify(sized_binary(Msg), sized_binary(one_bit_wrong(Sig1)),
- [Params, crypto:mpint(PubKey)]), false),
+ Params ++ [crypto:mpint(PubKey)]), false),
%%?line Bad = crypto:dss_sign(sized_binary(Msg), [Params, crypto:mpint(PubKey)]),
diff --git a/lib/crypto/vsn.mk b/lib/crypto/vsn.mk
index 68eecfe759..d04736fc2b 100644
--- a/lib/crypto/vsn.mk
+++ b/lib/crypto/vsn.mk
@@ -1 +1 @@
-CRYPTO_VSN = 1.6.4
+CRYPTO_VSN = 2.0
diff --git a/lib/dialyzer/doc/manual.txt b/lib/dialyzer/doc/manual.txt
index dac61b74b1..470ddd6c73 100644
--- a/lib/dialyzer/doc/manual.txt
+++ b/lib/dialyzer/doc/manual.txt
@@ -297,7 +297,7 @@ Option :: {files, [Filename :: string()]}
| {include_dirs, [DirName :: string()]}
| {output_file, FileName :: string()}
| {output_plt, FileName :: string()}
- | {analysis_type, 'success_typings' | 'plt_add' |
+ | {analysis_type, 'succ_typings' | 'plt_add' |
'plt_build' | 'plt_check' | 'plt_remove'}
| {warnings, [WarnOpts]}
diff --git a/lib/dialyzer/doc/src/dialyzer.xml b/lib/dialyzer/doc/src/dialyzer.xml
index 7f983a2c0d..1ec2ce830a 100644
--- a/lib/dialyzer/doc/src/dialyzer.xml
+++ b/lib/dialyzer/doc/src/dialyzer.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2006</year><year>2009</year>
+ <year>2006</year><year>2010</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -13,12 +13,12 @@
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.
-
+
</legalnotice>
<title>dialyzer</title>
@@ -206,7 +206,7 @@ Option : {files, [Filename : string()]}
| {include_dirs, [DirName : string()]}
| {output_file, FileName : string()}
| {output_plt, FileName :: string()}
- | {analysis_type, 'success_typings' | 'plt_add' | 'plt_build' | 'plt_check' | 'plt_remove'}
+ | {analysis_type, 'succ_typings' | 'plt_add' | 'plt_build' | 'plt_check' | 'plt_remove'}
| {warnings, [WarnOpts]}
| {get_warnings, bool()}
diff --git a/lib/erl_interface/test/ei_tmo_SUITE_data/ei_tmo_test.c b/lib/erl_interface/test/ei_tmo_SUITE_data/ei_tmo_test.c
index 2cc9af975d..db90b1810e 100644
--- a/lib/erl_interface/test/ei_tmo_SUITE_data/ei_tmo_test.c
+++ b/lib/erl_interface/test/ei_tmo_SUITE_data/ei_tmo_test.c
@@ -1,19 +1,19 @@
/*
* %CopyrightBegin%
- *
- * Copyright Ericsson AB 2003-2009. All Rights Reserved.
- *
+ *
+ * Copyright Ericsson AB 2003-2010. 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%
*/
@@ -65,7 +65,7 @@ static void debugf_open(int number)
{
char filename[1024];
sprintf(filename,"ei_tmo_test%d.debug",number);
-#if !defined(VXWORKS) && !defined(__WIN32__) && !defined(_OSE_)
+#if !defined(VXWORKS) && !defined(__WIN32__)
close(2);
#endif
debugfile = fopen(filename,"a");
diff --git a/lib/hipe/arm/hipe_arm_pp.erl b/lib/hipe/arm/hipe_arm_pp.erl
index 7ce8421994..c4dde31188 100644
--- a/lib/hipe/arm/hipe_arm_pp.erl
+++ b/lib/hipe/arm/hipe_arm_pp.erl
@@ -1,20 +1,20 @@
%% -*- erlang-indent-level: 2 -*-
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2005-2010. 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%
%%
@@ -246,6 +246,11 @@ stop_suffix(StOp) ->
'strb' -> "b"
end.
+imm8m_decode(Value, 0) ->
+ Value;
+imm8m_decode(Value, Rot) ->
+ (Value bsr (2 * Rot)) bor (Value bsl (2 * (16 - Rot))).
+
pp_temp(Dev, Temp=#arm_temp{reg=Reg, type=Type}) ->
case hipe_arm:temp_is_precoloured(Temp) of
true ->
@@ -292,7 +297,7 @@ pp_am1(Dev, Am1) ->
io:format(Dev, "#~w", [Imm5])
end;
{Imm8,Imm4} ->
- io:format(Dev, "#~w, 2*~w", [Imm8,Imm4])
+ io:format(Dev, "#~s", [to_hex(imm8m_decode(Imm8, Imm4))])
end.
pp_am2(Dev, #am2{src=Src,sign=Sign,offset=Am2Offset}) ->
diff --git a/lib/hipe/cerl/erl_bif_types.erl b/lib/hipe/cerl/erl_bif_types.erl
index 81ca837e45..be3073c0e6 100644
--- a/lib/hipe/cerl/erl_bif_types.erl
+++ b/lib/hipe/cerl/erl_bif_types.erl
@@ -851,6 +851,9 @@ type(erlang, hd, 1, Xs) ->
type(erlang, integer_to_list, 1, Xs) ->
strict(arg_types(erlang, integer_to_list, 1), Xs,
fun (_) -> t_string() end);
+type(erlang, integer_to_list, 2, Xs) ->
+ strict(arg_types(erlang, integer_to_list, 2), Xs,
+ fun (_) -> t_string() end);
type(erlang, info, 1, Xs) -> type(erlang, system_info, 1, Xs); % alias
type(erlang, iolist_size, 1, Xs) ->
strict(arg_types(erlang, iolist_size, 1), Xs,
@@ -1056,15 +1059,26 @@ type(erlang, list_to_float, 1, Xs) ->
type(erlang, list_to_integer, 1, Xs) ->
strict(arg_types(erlang, list_to_integer, 1), Xs,
fun (_) -> t_integer() end);
+type(erlang, list_to_integer, 2, Xs) ->
+ strict(arg_types(erlang, list_to_integer, 2), Xs,
+ fun (_) -> t_integer() end);
type(erlang, list_to_pid, 1, Xs) ->
strict(arg_types(erlang, list_to_pid, 1), Xs, fun (_) -> t_pid() end);
type(erlang, list_to_tuple, 1, Xs) ->
strict(arg_types(erlang, list_to_tuple, 1), Xs, fun (_) -> t_tuple() end);
-type(erlang, loaded, 0, _) ->
- t_list(t_atom());
type(erlang, load_module, 2, Xs) ->
strict(arg_types(erlang, load_module, 2), Xs,
fun ([Mod,_Bin]) -> t_code_load_return(Mod) end);
+type(erlang, load_nif, 2, Xs) ->
+ strict(arg_types(erlang, load_nif, 2), Xs,
+ fun (_) ->
+ Reason = t_atoms(['load_failed', 'bad_lib', 'load',
+ 'reload', 'upgrade', 'old_code']),
+ RsnPair = t_tuple([Reason, t_string()]),
+ t_sup(t_atom('ok'), t_tuple([t_atom('error'), RsnPair]))
+ end);
+type(erlang, loaded, 0, _) ->
+ t_list(t_atom());
type(erlang, localtime, 0, Xs) ->
type(erlang, universaltime, 0, Xs); % same
type(erlang, localtime_to_universaltime, 1, Xs) ->
@@ -3498,6 +3512,8 @@ arg_types(erlang, iolist_size, 1) ->
[t_sup(t_iolist(), t_binary())];
arg_types(erlang, integer_to_list, 1) ->
[t_integer()];
+arg_types(erlang, integer_to_list, 2) ->
+ [t_integer(), t_from_range(2, 36)];
arg_types(erlang, is_alive, 0) ->
[];
arg_types(erlang, is_atom, 1) ->
@@ -3558,14 +3574,18 @@ arg_types(erlang, list_to_float, 1) ->
[t_list(t_byte())];
arg_types(erlang, list_to_integer, 1) ->
[t_list(t_byte())];
+arg_types(erlang, list_to_integer, 2) ->
+ [t_list(t_byte()), t_from_range(2, 36)];
arg_types(erlang, list_to_pid, 1) ->
[t_string()];
arg_types(erlang, list_to_tuple, 1) ->
[t_list()];
-arg_types(erlang, loaded, 0) ->
- [];
arg_types(erlang, load_module, 2) ->
[t_atom(), t_binary()];
+arg_types(erlang, load_nif, 2) ->
+ [t_string(), t_any()];
+arg_types(erlang, loaded, 0) ->
+ [];
arg_types(erlang, localtime, 0) ->
[];
arg_types(erlang, localtime_to_universaltime, 1) ->
diff --git a/lib/hipe/cerl/erl_types.erl b/lib/hipe/cerl/erl_types.erl
index b4d80d359a..f3b91b3953 100644
--- a/lib/hipe/cerl/erl_types.erl
+++ b/lib/hipe/cerl/erl_types.erl
@@ -322,7 +322,7 @@
-define(nil, #c{tag=?nil_tag}).
-define(nonempty_list(Types, Term),?list(Types, Term, ?nonempty_qual)).
-define(number(Set, Qualifier), #c{tag=?number_tag, elements=Set,
- qualifier=Qualifier}.
+ qualifier=Qualifier}).
-define(opaque(Optypes), #c{tag=?opaque_tag, elements=Optypes}).
-define(product(Types), #c{tag=?product_tag, elements=Types}).
-define(remote(RemTypes), #c{tag=?remote_tag, elements=RemTypes}).
diff --git a/lib/inets/doc/src/notes.xml b/lib/inets/doc/src/notes.xml
index 762c2c84c5..3216b0c2cd 100644
--- a/lib/inets/doc/src/notes.xml
+++ b/lib/inets/doc/src/notes.xml
@@ -32,6 +32,58 @@
<file>notes.xml</file>
</header>
+ <section><title>Inets 5.3.2</title>
+
+ <section><title>Improvements and New Features</title>
+ <p>-</p>
+
+<!--
+ <list>
+ <item>
+ <p>[httpc] - Allow users to pass socket options to the transport
+ module when making requests. </p>
+ <p>See the <c>socket_opts</c> option in the
+ <seealso marker="httpc#request2">request/4</seealso> or
+ <seealso marker="httpc#set_options">set_options/1,2</seealso>
+ for more info, </p>
+ <p>Own Id: OTP-8352</p>
+ </item>
+
+ </list>
+-->
+ </section>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+
+<!--
+ <p>-</p>
+-->
+
+ <list>
+ <item>
+ <p>[httpc] - Memory leak plugged.
+ The profile manager never cleaned up in its handler database.
+ This meant that with each new request handler, another entry
+ was created that was never deleted. Eventually the request
+ id counter (used as a key) would wrap, but the machine would
+ most likely run out of memory before that happened.</p>
+ <p>Own Id: OTP-8542</p>
+ <p>Lev Walkin</p>
+ </item>
+
+ <item>
+ <p>[httpc] - https requests with default port (443) not handled
+ properly. </p>
+ <p>Own Id: OTP-8607</p>
+ <p>jebu ittiachen</p>
+ </item>
+
+ </list>
+ </section>
+
+ </section> <!-- 5.3.2 -->
+
+
<section><title>Inets 5.3.1</title>
<section><title>Improvements and New Features</title>
diff --git a/lib/inets/src/http_client/httpc.erl b/lib/inets/src/http_client/httpc.erl
index 5205605e0a..6deeab6948 100644
--- a/lib/inets/src/http_client/httpc.erl
+++ b/lib/inets/src/http_client/httpc.erl
@@ -432,7 +432,7 @@ handle_request(Method, Url,
Options = request_options(Options0),
Sync = proplists:get_value(sync, Options),
Stream = proplists:get_value(stream, Options),
- Host2 = header_host(Host, Port),
+ Host2 = header_host(Scheme, Host, Port),
HeadersRecord = header_record(NewHeaders, Host2, HTTPOptions),
Receiver = proplists:get_value(receiver, Options),
SocketOpts = proplists:get_value(socket_opts, Options),
@@ -895,9 +895,11 @@ bad_option(Option, BadValue) ->
throw({error, {bad_option, Option, BadValue}}).
-header_host(Host, 80 = _Port) ->
+header_host(https, Host, 443 = _Port) ->
Host;
-header_host(Host, Port) ->
+header_host(http, Host, 80 = _Port) ->
+ Host;
+header_host(_Scheme, Host, Port) ->
Host ++ ":" ++ integer_to_list(Port).
diff --git a/lib/inets/src/http_client/httpc_handler.erl b/lib/inets/src/http_client/httpc_handler.erl
index 695ff9cf82..5e79d874fb 100644
--- a/lib/inets/src/http_client/httpc_handler.erl
+++ b/lib/inets/src/http_client/httpc_handler.erl
@@ -1424,14 +1424,16 @@ try_to_enable_pipeline_or_keep_alive(
State#state{status = close}
end.
-answer_request(Request, Msg, #state{timers = Timers} = State) ->
+answer_request(#request{id = RequestId, from = From} = Request, Msg,
+ #state{timers = Timers, profile_name = ProfileName} = State) ->
?hcrt("answer request", [{request, Request}]),
- httpc_response:send(Request#request.from, Msg),
+ httpc_response:send(From, Msg),
RequestTimers = Timers#timers.request_timers,
TimerRef =
- proplists:get_value(Request#request.id, RequestTimers, undefined),
- Timer = {Request#request.id, TimerRef},
+ proplists:get_value(RequestId, RequestTimers, undefined),
+ Timer = {RequestId, TimerRef},
cancel_timer(TimerRef, {timeout, Request#request.id}),
+ httpc_manager:request_done(RequestId, ProfileName),
State#state{request = Request#request{from = answer_sent},
timers =
Timers#timers{request_timers =
diff --git a/lib/inets/src/http_client/httpc_manager.erl b/lib/inets/src/http_client/httpc_manager.erl
index f3cd81f4a7..b278077a66 100644
--- a/lib/inets/src/http_client/httpc_manager.erl
+++ b/lib/inets/src/http_client/httpc_manager.erl
@@ -30,6 +30,7 @@
request/2,
cancel_request/2,
request_canceled/2,
+ request_done/2,
retry_request/2,
redirect_request/2,
insert_session/2,
@@ -171,6 +172,18 @@ request_canceled(RequestId, ProfileName) ->
%%--------------------------------------------------------------------
+%% Function: request_done(RequestId, ProfileName) -> ok
+%% RequestId - ref()
+%% ProfileName = atom()
+%%
+%% Description: Inform tha manager that a request has been completed.
+%%--------------------------------------------------------------------
+
+request_done(RequestId, ProfileName) ->
+ cast(ProfileName, {request_done, RequestId}).
+
+
+%%--------------------------------------------------------------------
%% Function: insert_session(Session, ProfileName) -> _
%% Session - #tcp_session{}
%% ProfileName - atom()
@@ -486,6 +499,11 @@ handle_cast({request_canceled, RequestId}, State) ->
{noreply, State}
end;
+handle_cast({request_done, RequestId}, State) ->
+ ?hcrv("request done", [{request_id, RequestId}]),
+ ets:delete(State#state.handler_db, RequestId),
+ {noreply, State};
+
handle_cast({set_options, Options}, State = #state{options = OldOptions}) ->
?hcrv("set options", [{options, Options}, {old_options, OldOptions}]),
NewOptions =
diff --git a/lib/inets/src/inets_app/inets.appup.src b/lib/inets/src/inets_app/inets.appup.src
index ba1dc8ccdb..dfdfb41373 100644
--- a/lib/inets/src/inets_app/inets.appup.src
+++ b/lib/inets/src/inets_app/inets.appup.src
@@ -18,9 +18,18 @@
{"%VSN%",
[
+ {"5.3.1",
+ [
+ {load_module, httpc, soft_purge, soft_purge, []},
+ {update, httpc_handler, soft, soft_purge, soft_purge, [httpc_manager]},
+ {update, httpc_manager, soft, soft_purge, soft_purge, []}
+ ]
+ },
{"5.3",
[
- {update, httpc_handler, soft, soft_purge, soft_purge, [mod_esi]},
+ {load_module, httpc, soft_purge, soft_purge, []},
+ {update, httpc_handler, soft, soft_purge, soft_purge, [httpc_manager]},
+ {update, httpc_manager, soft, soft_purge, soft_purge, []},
{load_module, mod_esi, soft_purge, soft_purge, []}
]
},
@@ -41,9 +50,18 @@
}
],
[
+ {"5.3.1",
+ [
+ {load_module, httpc, soft_purge, soft_purge, []},
+ {update, httpc_handler, soft, soft_purge, soft_purge, [httpc_manager]},
+ {update, httpc_manager, soft, soft_purge, soft_purge, []}
+ ]
+ },
{"5.3",
[
- {update, httpc_handler, soft, soft_purge, soft_purge, [mod_esi]},
+ {load_module, httpc, soft_purge, soft_purge, []},
+ {update, httpc_handler, soft, soft_purge, soft_purge, [httpc_manager]},
+ {update, httpc_manager, soft, soft_purge, soft_purge, []},
{load_module, mod_esi, soft_purge, soft_purge, []}
]
},
diff --git a/lib/inets/vsn.mk b/lib/inets/vsn.mk
index 401bf4d37d..7776bef0a5 100644
--- a/lib/inets/vsn.mk
+++ b/lib/inets/vsn.mk
@@ -18,11 +18,15 @@
# %CopyrightEnd%
APPLICATION = inets
-INETS_VSN = 5.3.1
+INETS_VSN = 5.3.2
PRE_VSN =
APP_VSN = "$(APPLICATION)-$(INETS_VSN)$(PRE_VSN)"
-TICKETS = OTP-8508 OTP-8509
+TICKETS = OTP-8542 OTP-8607
+
+TICKETS_5_3_1 = \
+ OTP-8508 \
+ OTP-8509
TICKETS_5_3 = \
OTP-8016 \
diff --git a/lib/kernel/doc/src/inet.xml b/lib/kernel/doc/src/inet.xml
index f502b30c8d..2ae230152c 100644
--- a/lib/kernel/doc/src/inet.xml
+++ b/lib/kernel/doc/src/inet.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2009</year>
+ <year>1997</year><year>2010</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -13,12 +13,12 @@
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.
-
+
</legalnotice>
<title>inet</title>
@@ -221,7 +221,7 @@ fe80::204:acff:fe17:bf38
</desc>
</func>
<func>
- <name>getopts(Socket, Options) -> OptionValues | {error, posix()}</name>
+ <name>getopts(Socket, Options) -> {ok, OptionValues} | {error, posix()}</name>
<fsummary>Get one or more options for a socket</fsummary>
<type>
<v>Socket = term()</v>
diff --git a/lib/kernel/src/application_controller.erl b/lib/kernel/src/application_controller.erl
index 5277472ea6..42f527f400 100644
--- a/lib/kernel/src/application_controller.erl
+++ b/lib/kernel/src/application_controller.erl
@@ -40,7 +40,7 @@
-export([test_change_apps/2]).
-import(lists, [zf/2, map/2, foreach/2, foldl/3,
- keysearch/3, keydelete/3, keyreplace/4]).
+ keyfind/3, keydelete/3, keyreplace/4]).
-include("application_master.hrl").
@@ -524,7 +524,9 @@ init(Init, Kernel) ->
end.
-%% Check the syntax of the .config file [{ApplicationName, [{Parameter, Value}]}].
+%% Check the syntax of the .config file
+%% [{ApplicationName, [{Parameter, Value}]}].
+
check_conf_data([]) ->
ok;
check_conf_data(ConfData) when is_list(ConfData) ->
@@ -568,8 +570,8 @@ check_para_kernel([]) ->
ok;
check_para_kernel([{distributed, Apps} | ParaList]) when is_list(Apps) ->
case check_distributed(Apps) of
- {error, ErrorMsg} ->
- {error, ErrorMsg};
+ {error, _ErrorMsg} = Error ->
+ Error;
_ ->
check_para_kernel(ParaList)
end;
@@ -633,9 +635,9 @@ handle_call({load_application, Application}, From, S) ->
false ->
{reply, ok, NewS}
end;
- {error, Error} ->
- {reply, {error, Error}, S};
- {'EXIT',R} ->
+ {error, _} = Error ->
+ {reply, Error, S};
+ {'EXIT', R} ->
{reply, {error, R}, S}
end;
@@ -660,7 +662,7 @@ handle_call({start_application, AppName, RestartType}, From, S) ->
%% Incase of erroneous variables do not start the application,
%% if the application is permanent crash the node.
%% Check if the application is already starting.
- case lists:keysearch(AppName, 1, Start_req) of
+ case lists:keyfind(AppName, 1, Start_req) of
false ->
case catch check_start_cond(AppName, RestartType, Started, Running) of
{ok, Appl} ->
@@ -689,13 +691,12 @@ handle_call({start_application, AppName, RestartType}, From, S) ->
{reply, ok, SS}
end
end;
- {error, R} ->
- {reply, {error, R}, S}
+ {error, _R} = Error ->
+ {reply, Error, S}
end;
- {value, {AppName, _FromX}} ->
+ {AppName, _FromX} ->
SS = S#state{start_req = [{AppName, From} | Start_req]},
{noreply, SS}
-
end;
handle_call({permit_application, AppName, Bool}, From, S) ->
@@ -769,11 +770,11 @@ handle_call({permit_application, AppName, Bool}, From, S) ->
{noreply, SS};
%%==========================
- %% unpermit the applicaition
+ %% unpermit the application
%%==========================
%% running
{false, _, _, _, _, {value, {_AppName, Id}}} ->
- {value, {_AppName2, Type}} = keysearch(AppName, 1, Started),
+ {_AppName2, Type} = lists:keyfind(AppName, 1, Started),
stop_appl(AppName, Id, Type),
NRunning = keydelete(AppName, 1, Running),
{reply, ok, S#state{running = NRunning}};
@@ -803,9 +804,9 @@ handle_call({permit_application, AppName, Bool}, From, S) ->
handle_call({stop_application, AppName}, _From, S) ->
#state{running = Running, started = Started} = S,
- case keysearch(AppName, 1, Running) of
- {value, {_AppName, Id}} ->
- {value, {_AppName2, Type}} = keysearch(AppName, 1, Started),
+ case lists:keyfind(AppName, 1, Running) of
+ {_AppName, Id} ->
+ {_AppName2, Type} = lists:keyfind(AppName, 1, Started),
stop_appl(AppName, Id, Type),
NRunning = keydelete(AppName, 1, Running),
NStarted = keydelete(AppName, 1, Started),
@@ -831,8 +832,8 @@ handle_call({change_application_data, Applications, Config}, _From, S) ->
end,
[]),
case catch do_change_apps(Applications, Config, OldAppls) of
- {error, R} ->
- {reply, {error, R}, S};
+ {error, _} = Error ->
+ {reply, Error, S};
{'EXIT', R} ->
{reply, {error, R}, S};
NewAppls ->
@@ -886,10 +887,10 @@ handle_call({control_application, AppName}, {Pid, _Tag}, S) ->
handle_call({start_type, AppName}, _From, S) ->
Starting = S#state.starting,
- StartType = case keysearch(AppName, 1, Starting) of
+ StartType = case lists:keyfind(AppName, 1, Starting) of
false ->
local;
- {value, {_AppName, _RestartType, Type, _F}} ->
+ {_AppName, _RestartType, Type, _F} ->
Type
end,
{reply, StartType, S};
@@ -913,7 +914,7 @@ handle_application_started(AppName, Res, S) ->
#state{starting = Starting, running = Running, started = Started,
start_req = Start_req} = S,
Start_reqN = reply_to_requester(AppName, Start_req, Res),
- {value, {_AppName, RestartType, _Type, _From}} = keysearch(AppName, 1, Starting),
+ {_AppName, RestartType, _Type, _From} = lists:keyfind(AppName, 1, Starting),
case Res of
{ok, Id} ->
case AppName of
@@ -928,7 +929,6 @@ handle_application_started(AppName, Res, S) ->
running = NRunning,
started = NStarted,
start_req = Start_reqN},
-
%% The permission may have been changed during start
Perm = application:get_env(kernel, permissions),
case {Perm, Id} of
@@ -939,10 +939,10 @@ handle_application_started(AppName, Res, S) ->
case lists:member({AppName, false}, Perms) of
true ->
#state{running = StopRunning, started = StopStarted} = NewS,
- case keysearch(AppName, 1, StopRunning) of
- {value, {_AppName, Id}} ->
- {value, {_AppName2, Type}} =
- keysearch(AppName, 1, StopStarted),
+ case lists:keyfind(AppName, 1, StopRunning) of
+ {_AppName, Id} ->
+ {_AppName2, Type} =
+ lists:keyfind(AppName, 1, StopStarted),
stop_appl(AppName, Id, Type),
NStopRunning = keydelete(AppName, 1, StopRunning),
cntrl(AppName, NewS, {ac_application_stopped, AppName}),
@@ -957,12 +957,8 @@ handle_application_started(AppName, Res, S) ->
_ ->
{noreply, NewS}
end;
-
-
-
-
- {error, R} when RestartType =:= temporary ->
- notify_cntrl_started(AppName, undefined, S, {error, R}),
+ {error, R} = Error when RestartType =:= temporary ->
+ notify_cntrl_started(AppName, undefined, S, Error),
info_exited(AppName, R, RestartType),
{noreply, S#state{starting = keydelete(AppName, 1, Starting),
start_req = Start_reqN}};
@@ -987,8 +983,8 @@ handle_application_started(AppName, Res, S) ->
Reason = {application_start_failure, AppName, R},
{stop, to_string(Reason), S}
end;
- {error, R} -> %% permanent
- notify_cntrl_started(AppName, undefined, S, {error, R}),
+ {error, R} = Error -> %% permanent
+ notify_cntrl_started(AppName, undefined, S, Error),
info_exited(AppName, R, RestartType),
Reason = {application_start_failure, AppName, R},
{stop, to_string(Reason), S};
@@ -1018,12 +1014,12 @@ handle_info({ac_load_application_reply, AppName, Res}, S) ->
handle_info({ac_start_application_reply, AppName, Res}, S) ->
Start_req = S#state.start_req,
- case keysearch(AppName, 1, Starting = S#state.starting) of
- {value, {_AppName, RestartType, Type, From}} ->
+ case lists:keyfind(AppName, 1, Starting = S#state.starting) of
+ {_AppName, RestartType, Type, From} ->
case Res of
start_it ->
{true, Appl} = get_loaded(AppName),
- spawn_starter(From, Appl, S, Type),
+ spawn_starter(From, Appl, S, Type),
{noreply, S};
{started, Node} ->
handle_application_started(AppName,
@@ -1037,23 +1033,19 @@ handle_info({ac_start_application_reply, AppName, Res}, S) ->
S#state{starting = keydelete(AppName, 1, Starting),
started = [{AppName, RestartType} | Started],
start_req = Start_reqN}};
- {takeover, Node} ->
+ {takeover, _Node} = Takeover ->
{true, Appl} = get_loaded(AppName),
- spawn_starter(From, Appl, S, {takeover, Node}),
+ spawn_starter(From, Appl, S, Takeover),
NewStarting1 = keydelete(AppName, 1, Starting),
- NewStarting = [{AppName, RestartType, {takeover, Node}, From} | NewStarting1],
+ NewStarting = [{AppName, RestartType, Takeover, From} | NewStarting1],
{noreply, S#state{starting = NewStarting}};
- {error, Reason} when RestartType =:= permanent ->
- Start_reqN =
- reply_to_requester(AppName, Start_req,
- {error, Reason}),
+ {error, Reason} = Error when RestartType =:= permanent ->
+ Start_reqN = reply_to_requester(AppName, Start_req, Error),
{stop, to_string(Reason), S#state{start_req = Start_reqN}};
- {error, Reason} ->
- Start_reqN =
- reply_to_requester(AppName, Start_req,
- {error, Reason}),
+ {error, _Reason} = Error ->
+ Start_reqN = reply_to_requester(AppName, Start_req, Error),
{noreply, S#state{starting =
- keydelete(AppName, 1, Starting),
+ keydelete(AppName, 1, Starting),
start_req = Start_reqN}}
end;
false ->
@@ -1064,8 +1056,8 @@ handle_info({ac_change_application_req, AppName, Msg}, S) ->
Running = S#state.running,
Started = S#state.started,
Starting = S#state.starting,
- case {keysearch(AppName, 1, Running), keysearch(AppName, 1, Started)} of
- {{value, {AppName, Id}}, {value, {_AppName2, Type}}} ->
+ case {keyfind(AppName, 1, Running), keyfind(AppName, 1, Started)} of
+ {{AppName, Id}, {_AppName2, Type}} ->
case Msg of
{started, Node} ->
stop_appl(AppName, Id, Type),
@@ -1158,17 +1150,17 @@ handle_info({'EXIT', Pid, Reason}, S) ->
ets:match_delete(ac_tab, {{application_master, '_'}, Pid}),
NRunning = keydelete(Pid, 2, S#state.running),
NewS = S#state{running = NRunning},
- case keysearch(Pid, 2, S#state.running) of
- {value, {AppName, _AmPid}} ->
+ case lists:keyfind(Pid, 2, S#state.running) of
+ {AppName, _AmPid} ->
cntrl(AppName, S, {ac_application_stopped, AppName}),
- case keysearch(AppName, 1, S#state.started) of
- {value, {_AppName, temporary}} ->
+ case lists:keyfind(AppName, 1, S#state.started) of
+ {_AppName, temporary} ->
info_exited(AppName, Reason, temporary),
{noreply, NewS};
- {value, {_AppName, transient}} when Reason =:= normal ->
+ {_AppName, transient} when Reason =:= normal ->
info_exited(AppName, Reason, transient),
{noreply, NewS};
- {value, {_AppName, Type}} ->
+ {_AppName, Type} ->
info_exited(AppName, Reason, Type),
{stop, to_string({application_terminated, AppName, Reason}), NewS}
end;
@@ -1209,8 +1201,8 @@ code_change(_OldVsn, State, _Extra) ->
%%% Internal functions
%%%-----------------------------------------------------------------
cntrl(AppName, #state{control = Control}, Msg) ->
- case keysearch(AppName, 1, Control) of
- {value, {_AppName, Pid}} ->
+ case lists:keyfind(AppName, 1, Control) of
+ {_AppName, Pid} ->
Pid ! Msg,
true;
false ->
@@ -1310,8 +1302,8 @@ check_start_cond(AppName, RestartType, Started, Running) ->
end.
do_start(AppName, RT, Type, From, S) ->
- RestartType = case keysearch(AppName, 1, S#state.started) of
- {value, {_AppName2, OldRT}} ->
+ RestartType = case lists:keyfind(AppName, 1, S#state.started) of
+ {_AppName2, OldRT} ->
get_restart_type(RT, OldRT);
false ->
RT
@@ -1323,12 +1315,12 @@ do_start(AppName, RT, Type, From, S) ->
{true, Appl} = get_loaded(AppName),
Start_req = S#state.start_req,
spawn_starter(undefined, Appl, S, Type),
- Starting = case keysearch(AppName, 1, S#state.starting) of
+ Starting = case lists:keymember(AppName, 1, S#state.starting) of
false ->
%% UW: don't know if this is necessary
[{AppName, RestartType, Type, From} |
S#state.starting];
- _ ->
+ true ->
S#state.starting
end,
S#state{starting = Starting,
@@ -1368,10 +1360,10 @@ start_appl(Appl, S, Type) ->
end
end, Appl#appl.apps),
case application_master:start_link(ApplData, Type) of
- {ok, Pid} ->
- {ok, Pid};
- {error, Reason} ->
- throw({error, Reason})
+ {ok, _Pid} = Ok ->
+ Ok;
+ {error, _Reason} = Error ->
+ throw(Error)
end
end.
@@ -1463,15 +1455,15 @@ prim_parse(Tokens, Acc) ->
case erl_parse:parse_term(Tokens2 ++ [Dot]) of
{ok, Term} ->
prim_parse(Rest, [Term | Acc]);
- {error, Reason} ->
- {error, Reason}
+ {error, _R} = Error ->
+ Error
end;
{Tokens2, []} ->
case erl_parse:parse_term(Tokens2) of
{ok, Term} ->
{ok, lists:reverse([Term | Acc])};
- {error, Reason} ->
- {error, Reason}
+ {error, _R} = Error ->
+ Error
end
end.
@@ -1484,7 +1476,7 @@ make_appl_i({application, Name, Opts}) when is_atom(Name), is_list(Opts) ->
Apps = get_opt(applications, Opts, []),
Mod =
case get_opt(mod, Opts, []) of
- {M,A} when is_atom(M) -> {M,A};
+ {M,_A}=MA when is_atom(M) -> MA;
[] -> [];
Other -> throw({error, {badstartspec, Other}})
end,
@@ -1493,8 +1485,8 @@ make_appl_i({application, Name, Opts}) when is_atom(Name), is_list(Opts) ->
MaxP = get_opt(maxP, Opts, infinity),
MaxT = get_opt(maxT, Opts, infinity),
IncApps = get_opt(included_applications, Opts, []),
- {#appl_data{name = Name, regs = Regs, mod = Mod, phases = Phases, mods = Mods,
- inc_apps = IncApps, maxP = MaxP, maxT = MaxT},
+ {#appl_data{name = Name, regs = Regs, mod = Mod, phases = Phases,
+ mods = Mods, inc_apps = IncApps, maxP = MaxP, maxT = MaxT},
Env, IncApps, Descr, Id, Vsn, Apps};
make_appl_i({application, Name, Opts}) when is_list(Opts) ->
throw({error,{invalid_name,Name}});
@@ -1573,12 +1565,12 @@ do_change_appl({ok, {ApplData, Env, IncApps, Descr, Id, Vsn, Apps}},
vsn=Vsn,
inc_apps=IncApps,
apps=Apps};
-do_change_appl({error, R}, _Appl, _ConfData) ->
- throw({error, R}).
+do_change_appl({error, _R} = Error, _Appl, _ConfData) ->
+ throw(Error).
get_opt(Key, List, Default) ->
- case keysearch(Key, 1, List) of
- {value, {_Key, Val}} -> Val;
+ case lists:keyfind(Key, 1, List) of
+ {_Key, Val} -> Val;
_ -> Default
end.
@@ -1612,8 +1604,8 @@ make_term(Str) ->
end.
get_env_i(Name, #state{conf_data = ConfData}) when is_list(ConfData) ->
- case keysearch(Name, 1, ConfData) of
- {value, {_Name, Env}} -> Env;
+ case lists:keyfind(Name, 1, ConfData) of
+ {_Name, Env} -> Env;
_ -> []
end;
get_env_i(_Name, _) -> [].
@@ -1633,9 +1625,6 @@ merge_env([{App, AppEnv1} | T], Env2, Res) ->
merge_env([], Env2, Res) ->
Env2 ++ Res.
-
-
-
%% Merges envs for an application. Env2 overrides Env1
merge_app_env(Env1, Env2) ->
merge_app_env(Env1, Env2, []).
@@ -1699,13 +1688,12 @@ do_config_change([], _EnvBefore, Errors) ->
{error, Errors};
do_config_change([{App, _Id} | Apps], EnvBefore, Errors) ->
AppEnvNow = lists:sort(application:get_all_env(App)),
- AppEnvBefore = case lists:keysearch(App, 1, EnvBefore) of
+ AppEnvBefore = case lists:keyfind(App, 1, EnvBefore) of
false ->
[];
- {value, {App, AppEnvBeforeT}} ->
+ {App, AppEnvBeforeT} ->
lists:sort(AppEnvBeforeT)
end,
-
Res =
case AppEnvNow of
AppEnvBefore ->
@@ -1725,12 +1713,12 @@ do_config_change([{App, _Id} | Apps], EnvBefore, Errors) ->
%% if the cb-function is not defined
{'EXIT', {undef, _}} ->
ok;
- {error, Error} ->
- {error, Error};
+ {error, _} = Error ->
+ Error;
Else ->
{error, Else}
end;
- {ok,[]} ->
+ {ok, []} ->
{error, {module_not_defined, App}};
undefined ->
{error, {application_not_found, App}}
@@ -1744,9 +1732,7 @@ do_config_change([{App, _Id} | Apps], EnvBefore, Errors) ->
{error, NewError} ->
do_config_change(Apps, EnvBefore,[NewError | Errors])
end.
-
-
-
+
%%-----------------------------------------------------------------
%% Check if the configuration is changed in anyway.
@@ -1760,21 +1746,17 @@ do_config_diff([], AppEnvBefore, {Changed, New}) ->
do_config_diff(AppEnvNow, [], {Changed, New}) ->
{Changed, AppEnvNow++New, []};
do_config_diff([{Env, Value} | AppEnvNow], AppEnvBefore, {Changed, New}) ->
- case lists:keysearch(Env, 1, AppEnvBefore) of
- {value, {Env, Value}} ->
+ case lists:keyfind(Env, 1, AppEnvBefore) of
+ {Env, Value} ->
do_config_diff(AppEnvNow, lists:keydelete(Env,1,AppEnvBefore), {Changed, New});
- {value, {Env, _OtherValue}} ->
+ {Env, _OtherValue} ->
do_config_diff(AppEnvNow, lists:keydelete(Env,1,AppEnvBefore),
{[{Env, Value} | Changed], New});
false ->
do_config_diff(AppEnvNow, AppEnvBefore, {Changed, [{Env, Value}|New]})
end.
-
-
-
-
%%-----------------------------------------------------------------
%% Read the .config files.
%%-----------------------------------------------------------------
@@ -1929,14 +1911,13 @@ reply_to_requester(AppName, Start_req, Res) ->
%% Update the environment variable permission for an application.
%%-----------------------------------------------------------------
update_permissions(AppName, Bool) ->
- case ets:lookup(ac_tab, {env, kernel, permissions}) of
+ T = {env, kernel, permissions},
+ case ets:lookup(ac_tab, T) of
[] ->
- ets:insert(ac_tab, {{env, kernel, permissions},
- [{AppName, Bool}]});
+ ets:insert(ac_tab, {T, [{AppName, Bool}]});
[{_, Perm}] ->
Perm2 = lists:keydelete(AppName, 1, Perm),
- ets:insert(ac_tab, {{env, kernel, permissions},
- [{AppName, Bool}| Perm2]})
+ ets:insert(ac_tab, {T, [{AppName, Bool}|Perm2]})
end.
%%-----------------------------------------------------------------
diff --git a/lib/kernel/src/application_starter.erl b/lib/kernel/src/application_starter.erl
index 8d839e4662..564366f304 100644
--- a/lib/kernel/src/application_starter.erl
+++ b/lib/kernel/src/application_starter.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1998-2010. 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%
%%
%% ----------------------------------------------------------------------
@@ -42,8 +42,8 @@ start([], _Type, _Apps) ->
ok;
start([{Phase,_PhaseArgs}|Phases], Type, Apps) ->
case start_apps(Phase, Type, Apps) of
- {error, Error} ->
- {error, Error};
+ {error, _} = Error ->
+ Error;
_ ->
start(Phases, Type, Apps)
end.
@@ -56,8 +56,8 @@ start_apps(_Phase, _Type, []) ->
ok;
start_apps(Phase, Type, [App | Apps]) ->
case catch run_start_phase(Phase, Type, App) of
- {error, Error} ->
- {error, Error};
+ {error, _} = Error ->
+ Error;
_ ->
start_apps(Phase, Type, Apps)
end.
@@ -91,10 +91,10 @@ run_the_phase(Phase, Type, App, Mod) ->
{ok, Sp} ->
Sp
end,
- case lists:keysearch(Phase, 1, Start_phases) of
+ case lists:keyfind(Phase, 1, Start_phases) of
false ->
ok;
- {value, {Phase, PhaseArgs}} ->
+ {Phase, PhaseArgs} ->
case catch Mod:start_phase(Phase, Type, PhaseArgs) of
ok ->
ok;
diff --git a/lib/kernel/src/auth.erl b/lib/kernel/src/auth.erl
index 31ee1d1ef4..7fe30ae828 100644
--- a/lib/kernel/src/auth.erl
+++ b/lib/kernel/src/auth.erl
@@ -119,8 +119,8 @@ sync_cookie() ->
-spec print(Node :: node(), Format :: string(), Args :: [_]) -> 'ok'.
-print(Node,Format,Args) ->
- (catch gen_server:cast({auth,Node},{print,Format,Args})).
+print(Node, Format, Args) ->
+ (catch gen_server:cast({auth, Node}, {print, Format, Args})).
%%--gen_server callbacks------------------------------------------------
@@ -154,7 +154,7 @@ handle_call({set_cookie, Node, Cookie}, {_From,_Tag}, State)
%%
%% Happens when the distribution is brought up and
-%% Someone wight have set up the cookie for our new nodename.
+%% someone might have set up the cookie for our new node name.
%%
handle_call({set_cookie, Node, Cookie}, {_From,_Tag}, State) ->
@@ -162,9 +162,9 @@ handle_call({set_cookie, Node, Cookie}, {_From,_Tag}, State) ->
{reply, true, State};
handle_call(sync_cookie, _From, State) ->
- case ets:lookup(State#state.other_cookies,node()) of
+ case ets:lookup(State#state.other_cookies, node()) of
[{_N,C}] ->
- ets:delete(State#state.other_cookies,node()),
+ ets:delete(State#state.other_cookies, node()),
{reply, true, State#state{our_cookie = C}};
[] ->
{reply, true, State}
@@ -182,7 +182,7 @@ handle_call(echo, _From, O) ->
handle_cast({print,What,Args}, O) ->
%% always allow print outs
- error_logger:error_msg(What,Args),
+ error_logger:error_msg(What, Args),
{noreply, O}.
%% A series of bad messages that may come (from older distribution versions).
@@ -206,10 +206,10 @@ handle_info({_From,badcookie,ddd_server,_Mess}, O) ->
{noreply, O};
handle_info({From,badcookie,rex,_Msg}, O) ->
auth:print(getnode(From),
- "~n** Unauthorized rpc attempt to ~w **~n",[node()]),
+ "~n** Unauthorized rpc attempt to ~w **~n", [node()]),
disconnect_node(node(From)),
{noreply, O};
-%% These two messages has to do with the old auth:is_auth() call (net_adm:ping)
+%% These two messages have to do with the old auth:is_auth() call (net_adm:ping)
handle_info({From,badcookie,net_kernel,{'$gen_call',{From,Tag},{is_auth,_Node}}}, O) -> %% ho ho
From ! {Tag, no},
{noreply, O};
@@ -233,7 +233,7 @@ handle_info({From,badcookie,Name,Mess}, Opened) ->
end
end,
{noreply, Opened};
-handle_info(_, O)-> % Ignore anything else especially EXIT signals
+handle_info(_, O) -> % Ignore anything else especially EXIT signals
{noreply, O}.
-spec code_change(term(), state(), term()) -> {'ok', state()}.
@@ -282,7 +282,7 @@ init_cookie() ->
end;
_Other ->
#state{our_cookie = nocookie,
- other_cookies = ets:new(cookies,[?COOKIE_ETS_PROTECTION])}
+ other_cookies = ets:new(cookies, [?COOKIE_ETS_PROTECTION])}
end.
read_cookie() ->
diff --git a/lib/kernel/src/code.erl b/lib/kernel/src/code.erl
index ffe58ae7a9..affa5fc0fd 100644
--- a/lib/kernel/src/code.erl
+++ b/lib/kernel/src/code.erl
@@ -425,8 +425,8 @@ where_is_file(Path, File) when is_list(Path), is_list(File) ->
FileInfo :: #file_info{})
-> 'ok' | {'error', atom()}.
-set_primary_archive(ArchiveFile0, ArchiveBin, FileInfo)
- when is_list(ArchiveFile0), is_binary(ArchiveBin), is_record(FileInfo, file_info) ->
+set_primary_archive(ArchiveFile0, ArchiveBin, #file_info{} = FileInfo)
+ when is_list(ArchiveFile0), is_binary(ArchiveBin) ->
ArchiveFile = filename:absname(ArchiveFile0),
case call({set_primary_archive, ArchiveFile, ArchiveBin, FileInfo}) of
{ok, []} ->
@@ -473,7 +473,7 @@ decorate([], _) -> [];
decorate([File|Tail], Dir) ->
[{Dir, File} | decorate(Tail, Dir)].
-filter(_Ext, Dir, {error,_}) ->
+filter(_Ext, Dir, error) ->
io:format("** Bad path can't read ~s~n", [Dir]), [];
filter(Ext, _, {ok,Files}) ->
filter2(Ext, length(Ext), Files).
diff --git a/lib/kernel/src/code_server.erl b/lib/kernel/src/code_server.erl
index 2bc93b8238..4a1fc7df34 100644
--- a/lib/kernel/src/code_server.erl
+++ b/lib/kernel/src/code_server.erl
@@ -66,8 +66,8 @@ init(Ref, Parent, [Root,Mode0]) ->
Mode =
case Mode0 of
- minimal -> interactive;
- _ -> Mode0
+ minimal -> interactive;
+ _ -> Mode0
end,
IPath =
@@ -75,7 +75,7 @@ init(Ref, Parent, [Root,Mode0]) ->
interactive ->
LibDir = filename:append(Root, "lib"),
{ok,Dirs} = erl_prim_loader:list_dir(LibDir),
- {Paths,_Libs} = make_path(LibDir,Dirs),
+ {Paths,_Libs} = make_path(LibDir, Dirs),
UserLibPaths = get_user_lib_dirs(),
["."] ++ UserLibPaths ++ Paths;
_ ->
@@ -98,7 +98,7 @@ init(Ref, Parent, [Root,Mode0]) ->
end,
Parent ! {Ref,{ok,self()}},
- loop(State#state{supervisor=Parent}).
+ loop(State#state{supervisor = Parent}).
get_user_lib_dirs() ->
case os:getenv("ERL_LIBS") of
@@ -170,8 +170,8 @@ loop(#state{supervisor=Supervisor}=State0) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% System upgrade
-handle_system_msg(SysState,Msg,From,Parent,Misc) ->
- case do_sys_cmd(SysState,Msg,Parent, Misc) of
+handle_system_msg(SysState, Msg, From, Parent, Misc) ->
+ case do_sys_cmd(SysState, Msg, Parent, Misc) of
{suspended, Reply, NMisc} ->
gen_reply(From, Reply),
suspend_loop(suspended, Parent, NMisc);
@@ -208,7 +208,7 @@ do_sys_cmd(SysState, {debug, _What}, _Parent, Misc) ->
do_sys_cmd(suspended, {change_code, Module, Vsn, Extra}, _Parent, Misc0) ->
{Res, Misc} =
case catch ?MODULE:system_code_change(Misc0, Module, Vsn, Extra) of
- {ok, Misc1} -> {ok, Misc1};
+ {ok, _} = Ok -> Ok;
Else -> {{error, Else}, Misc0}
end,
{suspended, Res, Misc};
@@ -219,7 +219,7 @@ system_continue(_Parent, _Debug, State) ->
loop(State).
system_terminate(_Reason, _Parent, _Debug, _State) ->
-% error_msg("~p terminating: ~p~n ",[?MODULE,Reason]),
+ %% error_msg("~p terminating: ~p~n ", [?MODULE, Reason]),
exit(shutdown).
-spec system_code_change(state(), module(), term(), term()) -> {'ok', state()}.
@@ -242,7 +242,7 @@ handle_call({stick_mod,Mod}, {_From,_Tag}, S) ->
handle_call({unstick_mod,Mod}, {_From,_Tag}, S) ->
{reply,stick_mod(Mod, false, S),S};
-handle_call({dir,Dir},{_From,_Tag}, S) ->
+handle_call({dir,Dir}, {_From,_Tag}, S) ->
Root = S#state.root,
Resp = do_dir(Root,Dir,S#state.namedb),
{reply,Resp,S};
@@ -255,43 +255,47 @@ handle_call({load_file,Mod}, Caller, St) ->
load_file(Mod, Caller, St)
end;
-handle_call({add_path,Where,Dir0}, {_From,_Tag}, S=#state{cache=Cache0}) ->
+handle_call({add_path,Where,Dir0}, {_From,_Tag},
+ #state{cache=Cache0,namedb=Namedb,path=Path0}=S) ->
case Cache0 of
no_cache ->
- {Resp,Path} = add_path(Where, Dir0, S#state.path, S#state.namedb),
+ {Resp,Path} = add_path(Where, Dir0, Path0, Namedb),
{reply,Resp,S#state{path=Path}};
_ ->
Dir = absname(Dir0), %% Cache always expands the path
- {Resp,Path} = add_path(Where, Dir, S#state.path, S#state.namedb),
- Cache=update_cache([Dir],Where,Cache0),
+ {Resp,Path} = add_path(Where, Dir, Path0, Namedb),
+ Cache = update_cache([Dir], Where, Cache0),
{reply,Resp,S#state{path=Path,cache=Cache}}
end;
-handle_call({add_paths,Where,Dirs0}, {_From,_Tag}, S=#state{cache=Cache0}) ->
+handle_call({add_paths,Where,Dirs0}, {_From,_Tag},
+ #state{cache=Cache0,namedb=Namedb,path=Path0}=S) ->
case Cache0 of
no_cache ->
- {Resp,Path} = add_paths(Where,Dirs0,S#state.path,S#state.namedb),
- {reply,Resp, S#state{path=Path}};
+ {Resp,Path} = add_paths(Where, Dirs0, Path0, Namedb),
+ {reply,Resp,S#state{path=Path}};
_ ->
%% Cache always expands the path
Dirs = [absname(Dir) || Dir <- Dirs0],
- {Resp,Path} = add_paths(Where, Dirs, S#state.path, S#state.namedb),
+ {Resp,Path} = add_paths(Where, Dirs, Path0, Namedb),
Cache=update_cache(Dirs,Where,Cache0),
{reply,Resp,S#state{cache=Cache,path=Path}}
end;
-handle_call({set_path,PathList}, {_From,_Tag}, S) ->
- Path = S#state.path,
- {Resp, NewPath,NewDb} = set_path(PathList, Path, S#state.namedb),
- {reply,Resp,rehash_cache(S#state{path = NewPath, namedb=NewDb})};
+handle_call({set_path,PathList}, {_From,_Tag},
+ #state{path=Path0,namedb=Namedb}=S) ->
+ {Resp,Path,NewDb} = set_path(PathList, Path0, Namedb),
+ {reply,Resp,rehash_cache(S#state{path=Path,namedb=NewDb})};
-handle_call({del_path,Name}, {_From,_Tag}, S) ->
- {Resp,Path} = del_path(Name,S#state.path,S#state.namedb),
- {reply,Resp,rehash_cache(S#state{path = Path})};
+handle_call({del_path,Name}, {_From,_Tag},
+ #state{path=Path0,namedb=Namedb}=S) ->
+ {Resp,Path} = del_path(Name, Path0, Namedb),
+ {reply,Resp,rehash_cache(S#state{path=Path})};
-handle_call({replace_path,Name,Dir}, {_From,_Tag}, S) ->
- {Resp,Path} = replace_path(Name,Dir,S#state.path,S#state.namedb),
- {reply,Resp,rehash_cache(S#state{path = Path})};
+handle_call({replace_path,Name,Dir}, {_From,_Tag},
+ #state{path=Path0,namedb=Namedb}=S) ->
+ {Resp,Path} = replace_path(Name, Dir, Path0, Namedb),
+ {reply,Resp,rehash_cache(S#state{path=Path})};
handle_call(rehash, {_From,_Tag}, S0) ->
S = create_cache(S0),
@@ -313,12 +317,12 @@ handle_call({load_binary,Mod,File,Bin}, Caller, S) ->
do_load_binary(Mod, File, Bin, Caller, S);
handle_call({load_native_partial,Mod,Bin}, {_From,_Tag}, S) ->
- Result = (catch hipe_unified_loader:load(Mod,Bin)),
+ Result = (catch hipe_unified_loader:load(Mod, Bin)),
Status = hipe_result_to_status(Result),
{reply,Status,S};
handle_call({load_native_sticky,Mod,Bin,WholeModule}, {_From,_Tag}, S) ->
- Result = (catch hipe_unified_loader:load_module(Mod,Bin,WholeModule)),
+ Result = (catch hipe_unified_loader:load_module(Mod, Bin, WholeModule)),
Status = hipe_result_to_status(Result),
{reply,Status,S};
@@ -390,8 +394,8 @@ handle_call({set_primary_archive, File, ArchiveBin, FileInfo}, {_From,_Tag}, S=#
case erl_prim_loader:set_primary_archive(File, ArchiveBin, FileInfo) of
{ok, Files} ->
{reply, {ok, Mode, Files}, S};
- {error, Reason} ->
- {reply, {error, Reason}, S}
+ {error, _Reason} = Error ->
+ {reply, Error, S}
end;
handle_call({is_cached,File}, {_From,_Tag}, S=#state{cache=Cache}) ->
@@ -471,8 +475,8 @@ locate_mods([], _, _, Cache, Path) ->
filter_mods([File|Rest], Where, Exts, Dir, Cache) ->
Ext = filename:extension(File),
Root = list_to_atom(filename:rootname(File, Ext)),
- case lists:keysearch(Ext, 2, Exts) of
- {value,{Type,_}} ->
+ case lists:keyfind(Ext, 2, Exts) of
+ {Type, _} ->
Key = {Type,Root},
case Where of
first ->
@@ -489,7 +493,6 @@ filter_mods([File|Rest], Where, Exts, Dir, Cache) ->
ok
end,
filter_mods(Rest, Where, Exts, Dir, Cache);
-
filter_mods([], _, _, _, Cache) ->
Cache.
@@ -500,27 +503,27 @@ filter_mods([], _, _, _, Cache) ->
%%
%% Create the initial path.
%%
-make_path(BundleDir,Bundles0) ->
+make_path(BundleDir, Bundles0) ->
Bundles = choose_bundles(Bundles0),
- make_path(BundleDir,Bundles,[],[]).
+ make_path(BundleDir, Bundles, [], []).
choose_bundles(Bundles) ->
ArchiveExt = archive_extension(),
- Bs = lists:sort([create_bundle(B,ArchiveExt) || B <- Bundles]),
+ Bs = lists:sort([create_bundle(B, ArchiveExt) || B <- Bundles]),
[FullName || {_Name,_NumVsn,FullName} <-
choose(lists:reverse(Bs), [], ArchiveExt)].
-create_bundle(FullName,ArchiveExt) ->
- BaseName = filename:basename(FullName,ArchiveExt),
+create_bundle(FullName, ArchiveExt) ->
+ BaseName = filename:basename(FullName, ArchiveExt),
case split(BaseName, "-") of
- Toks when length(Toks) > 1 ->
+ [_, _|_] = Toks ->
VsnStr = lists:last(Toks),
case vsn_to_num(VsnStr) of
{ok, VsnNum} ->
- Name = join(lists:sublist(Toks,length(Toks)-1),"-"),
+ Name = join(lists:sublist(Toks, length(Toks)-1),"-"),
{Name,VsnNum,FullName};
false ->
- {FullName, [0], FullName}
+ {FullName,[0],FullName}
end;
_ ->
{FullName,[0],FullName}
@@ -571,8 +574,8 @@ join([], _) ->
[].
choose([{Name,NumVsn,NewFullName}=New|Bs], Acc, ArchiveExt) ->
- case lists:keysearch(Name,1,Acc) of
- {value, {_, NV, OldFullName}} when NV =:= NumVsn ->
+ case lists:keyfind(Name, 1, Acc) of
+ {_, NV, OldFullName} when NV =:= NumVsn ->
case filename:extension(OldFullName) =:= ArchiveExt of
false ->
choose(Bs,Acc, ArchiveExt);
@@ -580,7 +583,7 @@ choose([{Name,NumVsn,NewFullName}=New|Bs], Acc, ArchiveExt) ->
Acc2 = lists:keystore(Name, 1, Acc, New),
choose(Bs,Acc2, ArchiveExt)
end;
- {value, {_, _, _}} ->
+ {_, _, _} ->
choose(Bs,Acc, ArchiveExt);
false ->
choose(Bs,[{Name,NumVsn,NewFullName}|Acc], ArchiveExt)
@@ -604,8 +607,8 @@ make_path(BundleDir,[Bundle|Tail],Res,Bs) ->
Ebin2 = filename:join([filename:dirname(Dir), Base ++ Ext, Base, "ebin"]),
Ebins =
case split(Base, "-") of
- Toks when length(Toks) > 1 ->
- AppName = join(lists:sublist(Toks,length(Toks)-1),"-"),
+ [_, _|_] = Toks ->
+ AppName = join(lists:sublist(Toks, length(Toks)-1),"-"),
Ebin3 = filename:join([filename:dirname(Dir), Base ++ Ext, AppName, "ebin"]),
[Ebin3, Ebin2, Dir];
_ ->
@@ -837,30 +840,25 @@ add_path(_,_,Path,_) ->
%% then the table is created :-)
%%
do_add(first,Dir,Path,NameDb) ->
- update(Dir,NameDb),
+ update(Dir, NameDb),
[Dir|lists:delete(Dir,Path)];
do_add(last,Dir,Path,NameDb) ->
case lists:member(Dir,Path) of
true ->
Path;
false ->
- maybe_update(Dir,NameDb),
+ maybe_update(Dir, NameDb),
Path ++ [Dir]
end.
%% Do not update if the same name already exists !
-maybe_update(Dir,NameDb) ->
- case lookup_name(get_name(Dir),NameDb) of
- false -> update(Dir,NameDb);
- _ -> false
- end.
+maybe_update(Dir, NameDb) ->
+ (lookup_name(get_name(Dir), NameDb) =:= false) andalso update(Dir, NameDb).
update(_Dir, false) ->
- ok;
-update(Dir,NameDb) ->
- replace_name(Dir,NameDb).
-
-
+ true;
+update(Dir, NameDb) ->
+ replace_name(Dir, NameDb).
%%
%% Set a completely new path.
@@ -948,8 +946,8 @@ all_archive_subdirs(AppDir) ->
Base = filename:basename(AppDir),
Dirs =
case split(Base, "-") of
- Toks when length(Toks) > 1 ->
- Base2 = join(lists:sublist(Toks,length(Toks)-1),"-"),
+ [_, _|_] = Toks ->
+ Base2 = join(lists:sublist(Toks, length(Toks)-1), "-"),
[Base2, Base];
_ ->
[Base]
@@ -1062,7 +1060,6 @@ check_pars(Name,Dir) ->
{error,bad_name}
end.
-
del_ebin(Dir) ->
case filename:basename(Dir) of
"ebin" ->
@@ -1081,8 +1078,6 @@ del_ebin(Dir) ->
Dir
end.
-
-
replace_name(Dir, Db) ->
case get_name(Dir) of
Dir ->
@@ -1189,15 +1184,7 @@ get_mods([File|Tail], Extension) ->
get_mods([], _) -> [].
is_sticky(Mod, Db) ->
- case erlang:module_loaded(Mod) of
- true ->
- case ets:lookup(Db, {sticky,Mod}) of
- [] -> false;
- _ -> true
- end;
- false ->
- false
- end.
+ erlang:module_loaded(Mod) andalso (ets:lookup(Db, {sticky, Mod}) =/= []).
add_paths(Where,[Dir|Tail],Path,NameDb) ->
{_,NPath} = add_path(Where,Dir,Path,NameDb),
@@ -1205,7 +1192,6 @@ add_paths(Where,[Dir|Tail],Path,NameDb) ->
add_paths(_,_,Path,_) ->
{ok,Path}.
-
do_load_binary(Module, File, Binary, Caller, St) ->
case modp(Module) andalso modp(File) andalso is_binary(Binary) of
true ->
@@ -1222,7 +1208,6 @@ modp(Atom) when is_atom(Atom) -> true;
modp(List) when is_list(List) -> int_list(List);
modp(_) -> false.
-
load_abs(File, Mod0, Caller, St) ->
Ext = objfile_extension(),
FileName0 = lists:concat([File, Ext]),
@@ -1265,20 +1250,20 @@ try_load_module_1(File, Mod, Bin, Caller, #state{moddb=Db}=St) ->
{reply,{error,sticky_directory},St};
false ->
case catch load_native_code(Mod, Bin) of
- {module,Mod} ->
+ {module,Mod} = Module ->
ets:insert(Db, {Mod,File}),
- {reply,{module,Mod},St};
+ {reply,Module,St};
no_native ->
case erlang:load_module(Mod, Bin) of
- {module,Mod} ->
+ {module,Mod} = Module ->
ets:insert(Db, {Mod,File}),
post_beam_load(Mod),
- {reply,{module,Mod},St};
+ {reply,Module,St};
{error,on_load} ->
handle_on_load(Mod, File, Caller, St);
- {error,What} ->
+ {error,What} = Error ->
error_msg("Loading of ~s failed: ~p\n", [File, What]),
- {reply,{error,What},St}
+ {reply,Error,St}
end;
Error ->
error_msg("Native loading of ~s failed: ~p\n",
diff --git a/lib/kernel/src/erl_boot_server.erl b/lib/kernel/src/erl_boot_server.erl
index c5a4305731..b4c5f5e27c 100644
--- a/lib/kernel/src/erl_boot_server.erl
+++ b/lib/kernel/src/erl_boot_server.erl
@@ -179,15 +179,15 @@ init(Slaves) ->
Pid ! {Ref, L},
%% We trap exit inorder to restart boot_init and udp_port
process_flag(trap_exit, true),
- {ok, #state {priority = 0,
- version = erlang:system_info(version),
- udp_sock = U,
- udp_port = UPort,
- listen_sock = L,
- listen_port = Port,
- slaves = ordsets:from_list(Slaves),
- bootp = Pid
- }}.
+ {ok, #state{priority = 0,
+ version = erlang:system_info(version),
+ udp_sock = U,
+ udp_port = UPort,
+ listen_sock = L,
+ listen_port = Port,
+ slaves = ordsets:from_list(Slaves),
+ bootp = Pid
+ }}.
-spec handle_call('which' | {'add',atom()} | {'delete',atom()}, _, state()) ->
{'reply', 'ok' | [atom()], state()}.
diff --git a/lib/kernel/src/erl_epmd.erl b/lib/kernel/src/erl_epmd.erl
index c4ff4c7281..4a22637304 100644
--- a/lib/kernel/src/erl_epmd.erl
+++ b/lib/kernel/src/erl_epmd.erl
@@ -141,8 +141,8 @@ handle_call({register, Name, PortNo}, _From, State) ->
end;
handle_call(client_info_req, _From, State) ->
- Reply = {ok,{r4,State#state.name,State#state.port_no}},
- {reply,Reply,State};
+ Reply = {ok,{r4,State#state.name,State#state.port_no}},
+ {reply, Reply, State};
handle_call(stop, _From, State) ->
{stop, shutdown, ok, State}.
diff --git a/lib/kernel/src/error_handler.erl b/lib/kernel/src/error_handler.erl
index 5f2507fc08..17dd02acd4 100644
--- a/lib/kernel/src/error_handler.erl
+++ b/lib/kernel/src/error_handler.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1996-2010. 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(error_handler).
@@ -117,13 +117,13 @@ stub_function(Mod, Func, Args) ->
check_inheritance(Module, Args) ->
Attrs = erlang:get_module_info(Module, attributes),
- case lists:keysearch(extends, 1, Attrs) of
- {value,{extends,[Base]}} when is_atom(Base), Base =/= Module ->
+ case lists:keyfind(extends, 1, Attrs) of
+ {extends, [Base]} when is_atom(Base), Base =/= Module ->
%% This is just a heuristic for detecting abstract modules
%% with inheritance so they can be handled; it would be
%% much better to do it in the emulator runtime
- case lists:keysearch(abstract, 1, Attrs) of
- {value,{abstract,[true]}} ->
+ case lists:keyfind(abstract, 1, Attrs) of
+ {abstract, [true]} ->
case lists:reverse(Args) of
[M|Rs] when tuple_size(M) > 1,
element(1,M) =:= Module,
diff --git a/lib/kernel/src/file_io_server.erl b/lib/kernel/src/file_io_server.erl
index 37e803c493..3ac35a209d 100644
--- a/lib/kernel/src/file_io_server.erl
+++ b/lib/kernel/src/file_io_server.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2000-2010. 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(file_io_server).
@@ -106,21 +106,21 @@ do_start(Spawn, Owner, FileName, ModeList) ->
parse_options(List) ->
parse_options(expand_encoding(List), list, latin1, []).
-parse_options([],list,Uni,Acc) ->
+parse_options([], list, Uni, Acc) ->
{list,Uni,[binary|lists:reverse(Acc)]};
-parse_options([],binary,Uni,Acc) ->
+parse_options([], binary, Uni, Acc) ->
{binary,Uni,lists:reverse(Acc)};
-parse_options([{encoding, Encoding}|T],RMode,_,Acc) ->
+parse_options([{encoding, Encoding}|T], RMode, _, Acc) ->
case valid_enc(Encoding) of
{ok, ExpandedEnc} ->
- parse_options(T,RMode,ExpandedEnc,Acc);
- {error,Reason} ->
- {error,Reason}
+ parse_options(T, RMode, ExpandedEnc, Acc);
+ {error,_Reason} = Error ->
+ Error
end;
-parse_options([binary|T],_,Uni,Acc) ->
- parse_options(T,binary,Uni,[binary|Acc]);
-parse_options([H|T],R,U,Acc) ->
- parse_options(T,R,U,[H|Acc]).
+parse_options([binary|T], _, Uni, Acc) ->
+ parse_options(T, binary, Uni, [binary|Acc]);
+parse_options([H|T], R, U, Acc) ->
+ parse_options(T, R, U, [H|Acc]).
expand_encoding([]) ->
[];
@@ -153,7 +153,6 @@ valid_enc(_Other) ->
{error,badarg}.
-
server_loop(#state{mref = Mref} = State) ->
receive
{file_request, From, ReplyAs, Request} when is_pid(From) ->
@@ -326,7 +325,6 @@ io_request(Unknown,
{error,{error,Reason},State}.
-
%% Process a list of requests as long as the results are ok.
io_request_loop([], Result) ->
@@ -342,7 +340,6 @@ io_request_loop([Request|Tail],
io_request_loop(Tail, io_request(Request, State)).
-
%% I/O request put_chars
%%
put_chars(Chars, latin1, #state{handle=Handle, unic=latin1}=State) ->
@@ -653,20 +650,14 @@ do_setopts(Opts, State) ->
end.
getopts(#state{read_mode=RM, unic=Unic} = State) ->
- Bin = {binary, case RM of
- binary ->
- true;
- _ ->
- false
- end},
+ Bin = {binary, RM =:= binary},
Uni = {encoding, Unic},
{reply,[Bin,Uni],State}.
-
%% Concatenate two binaries and convert the result to list or binary
-cat(B1, B2, binary,latin1,latin1) ->
+cat(B1, B2, binary, latin1, latin1) ->
list_to_binary([B1,B2]);
-cat(B1, B2, binary,InEncoding,OutEncoding) ->
+cat(B1, B2, binary, InEncoding, OutEncoding) ->
case unicode:characters_to_binary([B1,B2],InEncoding,OutEncoding) of
Good when is_binary(Good) ->
Good;
diff --git a/lib/kernel/src/heart.erl b/lib/kernel/src/heart.erl
index bad0950fca..e78acfc7a6 100644
--- a/lib/kernel/src/heart.erl
+++ b/lib/kernel/src/heart.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1996-2010. 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(heart).
@@ -61,8 +61,8 @@ start() ->
wait_for_init_ack(From) ->
receive
- {ok, From} ->
- {ok, From};
+ {ok, From} = Ok ->
+ Ok;
{no_heart, From} ->
ignore;
{Error, From} ->
@@ -119,8 +119,7 @@ wait() ->
start_portprogram() ->
check_start_heart(),
- HeartCmd = "heart -pid " ++ os:getpid() ++ " " ++
- get_heart_timeouts(),
+ HeartCmd = "heart -pid " ++ os:getpid() ++ " " ++ get_heart_timeouts(),
try open_port({spawn, HeartCmd}, [{packet, 2}]) of
Port when is_port(Port) ->
case wait_ack(Port) of
@@ -175,7 +174,7 @@ wait_ack(Port) ->
loop(Parent, Port, Cmd) ->
send_heart_beat(Port),
receive
- {From, set_cmd, NewCmd} when is_list(NewCmd), length(NewCmd) < 2047 ->
+ {From, set_cmd, NewCmd} when length(NewCmd) < 2047 ->
send_heart_cmd(Port, NewCmd),
wait_ack(Port),
From ! {heart, ok},
diff --git a/lib/kernel/src/inet6_tcp_dist.erl b/lib/kernel/src/inet6_tcp_dist.erl
index 34cf582af7..fab00bbb9f 100644
--- a/lib/kernel/src/inet6_tcp_dist.erl
+++ b/lib/kernel/src/inet6_tcp_dist.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1997-2010. 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(inet6_tcp_dist).
@@ -87,7 +87,7 @@ accept(Listen) ->
accept_loop(Kernel, Listen) ->
case inet6_tcp:accept(Listen) of
{ok, Socket} ->
- Kernel ! {accept,self(),Socket,inet,tcp},
+ Kernel ! {accept,self(),Socket,inet6,tcp},
controller(Kernel, Socket),
accept_loop(Kernel, Listen);
Error ->
@@ -236,8 +236,8 @@ do_setup(Kernel, Node, Type, MyNode, LongOrShortNames,SetupTime) ->
timer = Timer,
this_flags = 0,
other_version = Version,
- f_send = fun inet_tcp:send/2,
- f_recv = fun inet_tcp:recv/3,
+ f_send = fun inet6_tcp:send/2,
+ f_recv = fun inet6_tcp:recv/3,
f_setopts_pre_nodeup =
fun(S) ->
inet:setopts
@@ -262,7 +262,7 @@ do_setup(Kernel, Node, Type, MyNode, LongOrShortNames,SetupTime) ->
address = {Ip,TcpPort},
host = Address,
protocol = tcp,
- family = inet}
+ family = inet6}
end,
mf_tick = fun ?MODULE:tick/1,
mf_getstat = fun ?MODULE:getstat/1,
@@ -302,12 +302,17 @@ splitnode(Node, LongOrShortNames) ->
Host = lists:append(Tail),
case split_node(Host, $., []) of
[_] when LongOrShortNames =:= longnames ->
- error_msg("** System running to use "
- "fully qualified "
- "hostnames **~n"
- "** Hostname ~s is illegal **~n",
- [Host]),
- ?shutdown(Node);
+ case inet_parse:ipv6strict_address(Host) of
+ {ok, _} ->
+ [Name, Host];
+ _ ->
+ error_msg("** System running to use "
+ "fully qualified "
+ "hostnames **~n"
+ "** Hostname ~s is illegal **~n",
+ [Host]),
+ ?shutdown(Node)
+ end;
L when length(L) > 1, LongOrShortNames =:= shortnames ->
error_msg("** System NOT running to use fully qualified "
"hostnames **~n"
diff --git a/lib/kernel/src/inet_db.erl b/lib/kernel/src/inet_db.erl
index ec95620cc0..d4749b9756 100644
--- a/lib/kernel/src/inet_db.erl
+++ b/lib/kernel/src/inet_db.erl
@@ -102,14 +102,14 @@
start() ->
case gen_server:start({local, inet_db}, inet_db, [], []) of
- {ok,Pid} -> inet_config:init(), {ok,Pid};
+ {ok, _Pid}=Ok -> inet_config:init(), Ok;
Error -> Error
end.
start_link() ->
case gen_server:start_link({local, inet_db}, inet_db, [], []) of
- {ok,Pid} -> inet_config:init(), {ok,Pid};
+ {ok, _Pid}=Ok -> inet_config:init(), Ok;
Error -> Error
end.
@@ -140,7 +140,6 @@ add_hosts(File) ->
Error -> Error
end.
-
add_host(IP, Names) -> call({add_host, IP, Names}).
del_host(IP) -> call({del_host, IP}).
@@ -482,10 +481,7 @@ res_check_option_absfile(F) ->
res_check_list([], _Fun) -> true;
res_check_list([H|T], Fun) ->
- case Fun(H) of
- true -> res_check_list(T, Fun);
- false -> false
- end;
+ Fun(H) andalso res_check_list(T, Fun);
res_check_list(_, _Fun) -> false.
res_check_ns({{A,B,C,D,E,F,G,H}, Port})
@@ -497,12 +493,12 @@ res_check_ns(_) -> false.
res_check_search("") -> true;
res_check_search(Dom) -> inet_parse:visible_string(Dom).
-socks_option(server) -> db_get(socks5_server);
-socks_option(port) -> db_get(socks5_port);
-socks_option(methods) -> db_get(socks5_methods);
-socks_option(noproxy) -> db_get(socks5_noproxy).
+socks_option(server) -> db_get(socks5_server);
+socks_option(port) -> db_get(socks5_port);
+socks_option(methods) -> db_get(socks5_methods);
+socks_option(noproxy) -> db_get(socks5_noproxy).
-gethostname() -> db_get(hostname).
+gethostname() -> db_get(hostname).
res_update_conf() ->
res_update(res_resolv_conf, res_resolv_conf_tm, res_resolv_conf_info,
@@ -591,15 +587,13 @@ getbyname(Name, Type) ->
getbysearch(Name, Dot, [Dom | Ds], Type, _) ->
case hostent_by_domain(Name ++ Dot ++ Dom, Type) of
- {ok, HEnt} -> {ok, HEnt};
- Error ->
- getbysearch(Name, Dot, Ds, Type, Error)
+ {ok, _HEnt}=Ok -> Ok;
+ Error -> getbysearch(Name, Dot, Ds, Type, Error)
end;
getbysearch(_Name, _Dot, [], _Type, Error) ->
Error.
-
%%
%% get_searchlist
%%
@@ -610,7 +604,6 @@ get_searchlist() ->
end.
-
make_hostent(Name, Addrs, Aliases, ?S_A) ->
#hostent {
h_name = Name,
@@ -1146,7 +1139,6 @@ handle_call(Request, From, #state{db=Db}=State) ->
{reply, error, State}
end.
-
%%----------------------------------------------------------------------
%% Func: handle_cast/2
%% Returns: {noreply, State} |
@@ -1359,16 +1351,15 @@ do_add_rr(RR, Db, State) ->
TM = times(),
case alloc_entry(Db, CacheDb, TM) of
true ->
- cache_rr(Db, CacheDb, RR#dns_rr { tm = TM,
- cnt = TM });
+ cache_rr(Db, CacheDb, RR#dns_rr{tm = TM, cnt = TM});
_ ->
false
end.
cache_rr(_Db, Cache, RR) ->
%% delete possible old entry
- ets:match_delete(Cache, RR#dns_rr { cnt = '_', tm = '_', ttl = '_',
- bm = '_', func = '_'}),
+ ets:match_delete(Cache, RR#dns_rr{cnt = '_', tm = '_', ttl = '_',
+ bm = '_', func = '_'}),
ets:insert(Cache, RR).
times() ->
@@ -1378,9 +1369,9 @@ times() ->
%% lookup and remove old entries
do_lookup_rr(Domain, Class, Type) ->
- match_rr(#dns_rr { domain = tolower(Domain), class = Class,type = Type,
- cnt = '_', tm = '_', ttl = '_',
- bm = '_', func = '_', data = '_'}).
+ match_rr(#dns_rr{domain = tolower(Domain), class = Class,type = Type,
+ cnt = '_', tm = '_', ttl = '_',
+ bm = '_', func = '_', data = '_'}).
match_rr(RR) ->
filter_rr(ets:match_object(inet_cache, RR), times()).
@@ -1431,7 +1422,7 @@ dn_in_addr_arpa(A,B,C,D) ->
integer_to_list(A) ++ ".in-addr.arpa".
dnib(X) ->
- [ hex(X), $., hex(X bsr 4), $., hex(X bsr 8), $., hex(X bsr 12), $.].
+ [hex(X), $., hex(X bsr 4), $., hex(X bsr 8), $., hex(X bsr 12), $.].
hex(X) ->
X4 = (X band 16#f),
@@ -1526,12 +1517,7 @@ alloc_entry(CacheDb, OldSize, TM, N) ->
delete_n_oldest(CacheDb, TM, OldestTM, N) ->
DelTM = trunc((TM - OldestTM) * 0.3) + OldestTM,
- case delete_older(CacheDb, DelTM, N) of
- 0 ->
- false;
- _ ->
- true
- end.
+ delete_older(CacheDb, DelTM, N) =/= 0.
%% Delete entries with latest access time older than TM.
%% Delete max N number of entries.
diff --git a/lib/kernel/src/inet_gethost_native.erl b/lib/kernel/src/inet_gethost_native.erl
index b7b3007b99..db3e44ce6f 100644
--- a/lib/kernel/src/inet_gethost_native.erl
+++ b/lib/kernel/src/inet_gethost_native.erl
@@ -154,7 +154,7 @@ run_once() ->
{Port, {data, <<1:32, BinReply/binary>>}} ->
Pid ! {R, {ok, BinReply}}
after Timeout ->
- Pid ! {R,{error,timeout}}
+ Pid ! {R, {error, timeout}}
end.
-spec terminate(term(), pid()) -> 'ok'.
@@ -342,14 +342,14 @@ pick_client(State,RID,Clid) ->
{last, SoleClient}; % Note, not removed, the caller
% should cleanup request data
CList ->
- case lists:keysearch(Clid,1,CList) of
- {value, Client} ->
+ case lists:keyfind(Clid,1,CList) of
+ false ->
+ false;
+ Client ->
NCList = lists:keydelete(Clid,1,CList),
ets:insert(State#state.requests,
R#request{clients = NCList}),
- {more, Client};
- false ->
- false
+ {more, Client}
end
end
end.
@@ -387,8 +387,7 @@ restart_port(#state{port = Port, requests = Requests}) ->
end,
Requests),
NewPort.
-
-
+
do_open_port(Poolsize, ExtraArgs) ->
try
diff --git a/lib/kernel/src/kernel_config.erl b/lib/kernel/src/kernel_config.erl
index cdad354876..b1daf655c9 100644
--- a/lib/kernel/src/kernel_config.erl
+++ b/lib/kernel/src/kernel_config.erl
@@ -92,9 +92,9 @@ code_change(_OldVsn, State, _Extra) ->
%%-----------------------------------------------------------------
sync_nodes() ->
case catch get_sync_data() of
- {error, Reason} ->
+ {error, Reason} = Error ->
error_logger:format("~p", [Reason]),
- {error, Reason};
+ Error;
{infinity, MandatoryNodes, OptionalNodes} ->
case wait_nodes(MandatoryNodes, OptionalNodes) of
ok ->
diff --git a/lib/kernel/src/rpc.erl b/lib/kernel/src/rpc.erl
index 43a987f313..e09acb5024 100644
--- a/lib/kernel/src/rpc.erl
+++ b/lib/kernel/src/rpc.erl
@@ -56,7 +56,7 @@
-export([safe_multi_server_call/2,safe_multi_server_call/3]).
%% gen_server exports
--export([init/1,handle_call/3,handle_cast/2,handle_info/2,
+-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
terminate/2, code_change/3]).
%% Internals
@@ -73,12 +73,12 @@
-spec start() -> {'ok', pid()} | 'ignore' | {'error', term()}.
start() ->
- gen_server:start({local,?NAME},?MODULE,[],[]).
+ gen_server:start({local,?NAME}, ?MODULE, [], []).
-spec start_link() -> {'ok', pid()} | 'ignore' | {'error', term()}.
start_link() ->
- gen_server:start_link({local,?NAME},?MODULE,[],[]).
+ gen_server:start_link({local,?NAME}, ?MODULE, [], []).
-spec stop() -> term().
@@ -121,12 +121,11 @@ handle_call(_, _To, S) ->
-spec handle_cast(term(), state()) -> {'noreply', state()}.
handle_cast({cast, Mod, Fun, Args, Gleader}, S) ->
- spawn(
- fun() ->
- set_group_leader(Gleader),
- apply(Mod, Fun, Args)
- end),
- {noreply, S};
+ spawn(fun() ->
+ set_group_leader(Gleader),
+ apply(Mod, Fun, Args)
+ end),
+ {noreply, S};
handle_cast(_, S) ->
{noreply, S}. % Ignore !
@@ -163,7 +162,7 @@ handle_info({From, {sbcast, Name, Msg}}, S) ->
_ ->
From ! {?NAME, node(), node()}
end,
- {noreply,S};
+ {noreply, S};
handle_info({From, {send, Name, Msg}}, S) ->
case catch Name ! {From, Msg} of %% use catch to get the printout
{'EXIT', _} ->
@@ -171,12 +170,12 @@ handle_info({From, {send, Name, Msg}}, S) ->
_ ->
ok %% It's up to Name to respond !!!!!
end,
- {noreply,S};
+ {noreply, S};
handle_info({From, {call,Mod,Fun,Args,Gleader}}, S) ->
%% Special for hidden C node's, uugh ...
handle_call_call(Mod, Fun, Args, Gleader, {From,?NAME}, S);
handle_info(_, S) ->
- {noreply,S}.
+ {noreply, S}.
-spec terminate(term(), state()) -> 'ok'.
@@ -231,7 +230,7 @@ proxy_user() ->
case whereis(rex_proxy_user) of
Pid when is_pid(Pid) -> Pid;
undefined ->
- Pid = spawn(fun()-> proxy_user_loop() end),
+ Pid = spawn(fun() -> proxy_user_loop() end),
try register(rex_proxy_user,Pid) of
true -> Pid
catch error:_ -> % spawn race, kill and try again
diff --git a/lib/kernel/src/standard_error.erl b/lib/kernel/src/standard_error.erl
index 98a44d1ee9..e41dcd01fc 100644
--- a/lib/kernel/src/standard_error.erl
+++ b/lib/kernel/src/standard_error.erl
@@ -24,8 +24,6 @@
-define(NAME, standard_error).
-define(PROCNAME_SUP, standard_error_sup).
-%% Internal exports
--export([server/1, server/2]).
%% Defines for control ops
-define(CTRL_OP_GET_WINSIZE,100).
@@ -54,18 +52,11 @@ init([]) ->
{error,no_stderror}
end.
-
start_port(PortSettings) ->
- Id = spawn(?MODULE,server,[{fd,2,2},PortSettings]),
- register(?NAME,Id),
+ Id = spawn(fun () -> server({fd,2,2}, PortSettings) end),
+ register(?NAME, Id),
Id.
-
-server(Pid) when is_pid(Pid) ->
- process_flag(trap_exit, true),
- link(Pid),
- run(Pid).
-
server(PortName,PortSettings) ->
process_flag(trap_exit, true),
Port = open_port(PortName,PortSettings),
@@ -88,17 +79,15 @@ server_loop(Port) ->
server_loop(Port)
end.
-
get_fd_geometry(Port) ->
case (catch port_control(Port,?CTRL_OP_GET_WINSIZE,[])) of
- List when is_list(List), length(List) =:= 8 ->
+ List when length(List) =:= 8 ->
<<W:32/native,H:32/native>> = list_to_binary(List),
{W,H};
_ ->
error
end.
-
%% NewSaveBuffer = io_request(Request, FromPid, ReplyAs, Port, SaveBuffer)
do_io_request(Req, From, ReplyAs, Port) ->
@@ -227,12 +216,7 @@ do_setopts(Opts, _Port) ->
{ok,ok}.
getopts(_Port) ->
- Uni = {unicode, case get(unicode) of
- true ->
- true;
- _ ->
- false
- end},
+ Uni = {unicode, get(unicode) =:= true},
{ok,[Uni]}.
wrap_characters_to_binary(Chars,From,To) ->
diff --git a/lib/kernel/src/user.erl b/lib/kernel/src/user.erl
index 17dc5a56a2..88f32df20b 100644
--- a/lib/kernel/src/user.erl
+++ b/lib/kernel/src/user.erl
@@ -26,9 +26,6 @@
-define(NAME, user).
-%% Internal exports
--export([server/1, server/2]).
-
%% Defines for control ops
-define(CTRL_OP_GET_WINSIZE,100).
@@ -43,7 +40,7 @@ start([Mod,Fun|Args]) ->
%% Mod,Fun,Args should return a pid. That process is supposed to act
%% as the io port.
Pid = apply(Mod, Fun, Args), % This better work!
- Id = spawn(?MODULE, server, [Pid]),
+ Id = spawn(fun() -> server(Pid) end),
register(?NAME, Id),
Id.
@@ -52,8 +49,8 @@ start_out() ->
start_port([out,binary]).
start_port(PortSettings) ->
- Id = spawn(?MODULE,server,[{fd,0,1},PortSettings]),
- register(?NAME,Id),
+ Id = spawn(fun() -> server({fd,0,1}, PortSettings) end),
+ register(?NAME, Id),
Id.
%% Return the pid of the shell process.
@@ -72,7 +69,6 @@ interfaces(User) ->
[]
end.
-
server(Pid) when is_pid(Pid) ->
process_flag(trap_exit, true),
link(Pid),
@@ -104,7 +100,7 @@ catch_loop(Port, Shell, Q) ->
new_shell ->
exit(Shell, kill),
catch_loop(Port, start_new_shell());
- {unknown_exit,{Shell,Reason},_} -> % shell has exited
+ {unknown_exit,{Shell,Reason},_} -> % shell has exited
case Reason of
normal ->
put_chars("*** ", Port, []);
@@ -172,7 +168,7 @@ server_loop(Port, Q) ->
get_fd_geometry(Port) ->
case (catch port_control(Port,?CTRL_OP_GET_WINSIZE,[])) of
- List when is_list(List), length(List) =:= 8 ->
+ List when length(List) =:= 8 ->
<<W:32/native,H:32/native>> = list_to_binary(List),
{W,H};
_ ->
@@ -373,12 +369,7 @@ do_setopts(Opts, _Port, Q) ->
end.
getopts(_Port,Q) ->
- Bin = {binary, case get(read_mode) of
- binary ->
- true;
- _ ->
- false
- end},
+ Bin = {binary, get(read_mode) =:= binary},
Uni = {encoding, case get(unicode) of
true ->
unicode;
diff --git a/lib/kernel/test/code_SUITE.erl b/lib/kernel/test/code_SUITE.erl
index 37b9200942..08b6477c9d 100644
--- a/lib/kernel/test/code_SUITE.erl
+++ b/lib/kernel/test/code_SUITE.erl
@@ -543,8 +543,8 @@ add_del_path(Config) when is_list(Config) ->
?line code:del_path(Dir2),
?line PrivDir1 = code:priv_dir(dummy_app),
ok.
-
-
+
+
clash(Config) when is_list(Config) ->
DDir = ?config(data_dir,Config)++"clash/",
P = code:get_path(),
@@ -555,11 +555,11 @@ clash(Config) when is_list(Config) ->
?line true = code:del_path("."),
?line true = code:add_path(DDir++"foobar-0.1/ebin"),
?line true = code:add_path(DDir++"zork-0.8/ebin"),
- ?line test_server:capture_start(),
- ?line code:clash(),
- ?line test_server:capture_stop(),
- ?line OKMsg = test_server:capture_get(),
- ?line lists:prefix("** Found 0 name clashes in code paths", OKMsg),
+ test_server:capture_start(),
+ ?line 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),
%% test clashing entries
@@ -568,13 +568,29 @@ clash(Config) when is_list(Config) ->
?line true = code:del_path("."),
?line true = code:add_path(DDir++"foobar-0.1/ebin"),
?line true = code:add_path(DDir++"foobar-0.1.ez/foobar-0.1/ebin"),
- ?line test_server:capture_start(),
- ?line code:clash(),
- ?line test_server:capture_stop(),
- ?line [ErrMsg1|_] = test_server:capture_get(),
- ?line {match, [" hides "]} = re:run(ErrMsg1, "\\*\\* .*( hides ).*",
+ test_server:capture_start(),
+ ?line ok = code:clash(),
+ test_server:capture_stop(),
+ ?line [ClashMsg|_] = test_server:capture_get(),
+ ?line {match, [" hides "]} = re:run(ClashMsg, "\\*\\* .*( hides ).*",
[{capture,all_but_first,list}]),
?line true = code:set_path(P),
+
+ %% test "Bad path can't read"
+
+ %% remove "." to prevent clash with test-server path
+ Priv = ?config(priv_dir, Config),
+ ?line true = code:del_path("."),
+ 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"),
+ ?line ok = file:delete(TmpEzFile),
+ test_server:capture_start(),
+ ?line 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),
ok.
ext_mod_dep(suite) ->
diff --git a/lib/kernel/test/inet_sockopt_SUITE_data/sockopt_helper.c b/lib/kernel/test/inet_sockopt_SUITE_data/sockopt_helper.c
index fb3c622909..f24c93edf5 100644
--- a/lib/kernel/test/inet_sockopt_SUITE_data/sockopt_helper.c
+++ b/lib/kernel/test/inet_sockopt_SUITE_data/sockopt_helper.c
@@ -1,4 +1,4 @@
-#if defined(VXWORKS) || defined(__OSE__)
+#if defined(VXWORKS)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
diff --git a/lib/megaco/doc/src/megaco_user.xml b/lib/megaco/doc/src/megaco_user.xml
index 6a0de29385..7332fa684d 100644
--- a/lib/megaco/doc/src/megaco_user.xml
+++ b/lib/megaco/doc/src/megaco_user.xml
@@ -471,7 +471,7 @@ protocol_version() = integer() ]]></code>
<v>transaction_result() = action_reps()</v>
<v>segment_result() = {segment_no(), last_segment(), action_reps()}</v>
<v>action_reps() = [action_reply()]</v>
- <v>failure() = {error, reason()}</v>
+ <v>failure() = {error, reason()} | {error, ReplyNo, reason()}</v>
<v>reason() = transaction_reason() | segment_reason() | user_cancel_reason() | send_reason() | other_reason()</v>
<v>transaction_reason() = error_desc()</v>
<v>segment_reason() = {segment_no(), last_segment(), error_desc()}</v>
@@ -486,6 +486,7 @@ protocol_version() = integer() ]]></code>
<v>send_failed_reason() = {send_message_failed, reason_for_send_failure()}</v>
<v>reason_for_send_failure() = term()</v>
<v>ReplyData = reply_data()</v>
+ <v>ReplyNo = integer() > 0</v>
<v>reply_data() = term()</v>
<v>Extra = term()</v>
</type>
diff --git a/lib/megaco/doc/src/notes.xml b/lib/megaco/doc/src/notes.xml
index 65bf0345f5..6e1356b55d 100644
--- a/lib/megaco/doc/src/notes.xml
+++ b/lib/megaco/doc/src/notes.xml
@@ -36,6 +36,59 @@
section is the version number of Megaco.</p>
<section>
+ <title>Megaco 3.14.1</title>
+
+ <p>Version 3.14.1 supports code replacement in runtime from/to
+ version 3.14, 3.13, 3.12 and 3.11.3.</p>
+
+ <section>
+ <title>Improvements and new features</title>
+
+<!--
+ <p>-</p>
+-->
+
+ <list type="bulleted">
+ <item>
+ <p>A minor compiler related performance improvement. </p>
+ <p>Own Id: OTP-8561</p>
+ </item>
+
+ </list>
+
+ </section>
+
+ <section>
+ <title>Fixed bugs and malfunctions</title>
+ <p>-</p>
+
+<!--
+ <list type="bulleted">
+ <item>
+ <p>Callbacks, when the callback module is unknown (undefined),
+ results in warning messages. </p>
+ <p>A raise condition scenario. As part of a cancelation operation,
+ replies with waiting acknowledgements is cancelled. This includes
+ informing the user (via a call to the handle_trans_ack callback
+ function). It is possible that at this point the connection data
+ has been removed, which makes it impossible for megaco to
+ perform this operation, resulting in the warning message. The
+ solution is to also store the callback module with the other
+ reply information, to be used when cleaning up after a
+ cancelation. </p>
+ <p>Own Id: OTP-8328</p>
+ <p>Aux Id: Seq 11384</p>
+ </item>
+
+ </list>
+-->
+
+ </section>
+
+ </section> <!-- 3.14.1 -->
+
+
+ <section>
<title>Megaco 3.14</title>
<p>Version 3.14 supports code replacement in runtime from/to
diff --git a/lib/megaco/src/app/megaco.appup.src b/lib/megaco/src/app/megaco.appup.src
index 4f781478ef..5df31f2923 100644
--- a/lib/megaco/src/app/megaco.appup.src
+++ b/lib/megaco/src/app/megaco.appup.src
@@ -124,10 +124,18 @@
%% |
%% v
%% 3.14
+%% |
+%% v
+%% 3.14.1
%%
%%
{"%VSN%",
[
+ {"3.14",
+ [
+ {update, megaco_config, soft, soft_purge, soft_purge, []}
+ ]
+ },
{"3.13",
[
{load_module, megaco_messenger, soft_purge, soft_purge, []},
@@ -163,6 +171,11 @@
}
],
[
+ {"3.14",
+ [
+ {update, megaco_config, soft, soft_purge, soft_purge, []}
+ ]
+ },
{"3.13",
[
{load_module, megaco_messenger, soft_purge, soft_purge, []},
diff --git a/lib/megaco/src/engine/megaco_config.erl b/lib/megaco/src/engine/megaco_config.erl
index 1c7a141be7..0445f10838 100644
--- a/lib/megaco/src/engine/megaco_config.erl
+++ b/lib/megaco/src/engine/megaco_config.erl
@@ -224,149 +224,278 @@ update_user_info(UserMid, orig_pending_limit, Val) ->
update_user_info(UserMid, Item, Val) ->
call({update_user_info, UserMid, Item, Val}).
-conn_info(CH, Item)
- when is_record(CH, megaco_conn_handle) andalso (Item /= cancel) ->
- case Item of
- conn_handle ->
- CH;
- mid ->
- CH#megaco_conn_handle.local_mid;
- local_mid ->
- CH#megaco_conn_handle.local_mid;
- remote_mid ->
- CH#megaco_conn_handle.remote_mid;
- conn_data ->
- case lookup_local_conn(CH) of
- [] ->
- exit({no_such_connection, CH});
- [ConnData] ->
- ConnData
- end;
- _ ->
- case lookup_local_conn(CH) of
- [] ->
- exit({no_such_connection, CH});
- [ConnData] ->
- conn_info(ConnData, Item)
- end
+
+conn_info(Data, Item) ->
+ %% The purpose of this is a compiler optimization...
+ %% Args are processed from left to right.
+ do_conn_info(Item, Data).
+
+do_conn_info(mid = _Item, #megaco_conn_handle{local_mid = Mid}) ->
+ Mid;
+do_conn_info(local_mid = _Item, #megaco_conn_handle{local_mid = LMid}) ->
+ LMid;
+do_conn_info(remote_mid = _Item, #megaco_conn_handle{remote_mid = RMid}) ->
+ RMid;
+do_conn_info(conn_handle = _Item, CH) when is_record(CH, megaco_conn_handle) ->
+ CH;
+do_conn_info(conn_data = _Item, CH) when is_record(CH, megaco_conn_handle) ->
+ case lookup_local_conn(CH) of
+ [] ->
+ exit({no_such_connection, CH});
+ [ConnData] ->
+ ConnData
+ end;
+do_conn_info(Item, CH) when is_record(CH, megaco_conn_handle) ->
+ case lookup_local_conn(CH) of
+ [] ->
+ exit({no_such_connection, CH});
+ [ConnData] ->
+ do_conn_info(Item, ConnData)
end;
-conn_info(#conn_data{conn_handle = CH}, cancel) ->
+
+do_conn_info(cancel = _Item, #conn_data{conn_handle = CH}) ->
+ %% To minimise raise-condition propabillity,
+ %% we always look in the table instead of
+ %% in the record for this one
+ ets:lookup_element(megaco_local_conn, CH, #conn_data.cancel);
+do_conn_info(cancel = _Item, CH) when is_record(CH, megaco_conn_handle) ->
%% To minimise raise-condition propabillity,
%% we always look in the table instead of
%% in the record for this one
ets:lookup_element(megaco_local_conn, CH, #conn_data.cancel);
-conn_info(CD, Item) when is_record(CD, conn_data) ->
- case Item of
- all ->
- Tags0 = record_info(fields, conn_data),
- Tags1 = replace(serial, trans_id, Tags0),
- Tags = [mid, local_mid, remote_mid] ++
- replace(max_serial, max_trans_id, Tags1),
- [{Tag, conn_info(CD,Tag)} || Tag <- Tags,
- Tag /= conn_data,
- Tag /= trans_sender,
- Tag /= cancel];
- conn_data -> CD;
- conn_handle -> CD#conn_data.conn_handle;
- mid -> (CD#conn_data.conn_handle)#megaco_conn_handle.local_mid;
- local_mid -> (CD#conn_data.conn_handle)#megaco_conn_handle.local_mid;
- remote_mid -> (CD#conn_data.conn_handle)#megaco_conn_handle.remote_mid;
- trans_id -> CH = CD#conn_data.conn_handle,
- LocalMid = CH#megaco_conn_handle.local_mid,
- Item2 = {LocalMid, trans_id_counter},
- case (catch ets:lookup(megaco_config, Item2)) of
- {'EXIT', _} ->
- undefined_serial;
- [] ->
- user_info(LocalMid, min_trans_id);
- [{_, Serial}] ->
- Max = CD#conn_data.max_serial,
- if
- ((Max =:= infinity) andalso
- is_integer(Serial) andalso
- (Serial < 4294967295)) ->
- Serial + 1;
- (Max =:= infinity) andalso
- is_integer(Serial) andalso
- (Serial =:= 4294967295) ->
- user_info(LocalMid,
- min_trans_id);
- Serial < Max ->
- Serial + 1;
- Serial =:= Max ->
- user_info(LocalMid,
- min_trans_id);
- Serial =:= 4294967295 ->
- user_info(LocalMid,
- min_trans_id);
- true ->
- undefined_serial
- end
- end;
- max_trans_id -> CD#conn_data.max_serial;
- request_timer -> CD#conn_data.request_timer;
- long_request_timer -> CD#conn_data.long_request_timer;
-
- auto_ack -> CD#conn_data.auto_ack;
-
- trans_ack -> CD#conn_data.trans_ack;
- trans_ack_maxcount -> CD#conn_data.trans_ack_maxcount;
-
- trans_req -> CD#conn_data.trans_req;
- trans_req_maxcount -> CD#conn_data.trans_req_maxcount;
- trans_req_maxsize -> CD#conn_data.trans_req_maxsize;
-
- trans_timer -> CD#conn_data.trans_timer;
-
- pending_timer -> CD#conn_data.pending_timer;
- orig_pending_limit -> CD#conn_data.sent_pending_limit;
- sent_pending_limit -> CD#conn_data.sent_pending_limit;
- recv_pending_limit -> CD#conn_data.recv_pending_limit;
- reply_timer -> CD#conn_data.reply_timer;
- control_pid -> CD#conn_data.control_pid;
- monitor_ref -> CD#conn_data.monitor_ref;
- send_mod -> CD#conn_data.send_mod;
- send_handle -> CD#conn_data.send_handle;
- encoding_mod -> CD#conn_data.encoding_mod;
- encoding_config -> CD#conn_data.encoding_config;
- protocol_version -> CD#conn_data.protocol_version;
- auth_data -> CD#conn_data.auth_data;
- user_mod -> CD#conn_data.user_mod;
- user_args -> CD#conn_data.user_args;
- reply_action -> CD#conn_data.reply_action;
- reply_data -> CD#conn_data.reply_data;
- threaded -> CD#conn_data.threaded;
- strict_version -> CD#conn_data.strict_version;
- long_request_resend -> CD#conn_data.long_request_resend;
- call_proxy_gc_timeout -> CD#conn_data.call_proxy_gc_timeout;
- cancel -> CD#conn_data.cancel;
- resend_indication -> CD#conn_data.resend_indication;
- segment_reply_ind -> CD#conn_data.segment_reply_ind;
- segment_recv_acc -> CD#conn_data.segment_recv_acc;
- segment_recv_timer -> CD#conn_data.segment_recv_timer;
- segment_send -> CD#conn_data.segment_send;
- segment_send_timer -> CD#conn_data.segment_send_timer;
- max_pdu_size -> CD#conn_data.max_pdu_size;
- request_keep_alive_timeout -> CD#conn_data.request_keep_alive_timeout;
- receive_handle ->
- LocalMid = (CD#conn_data.conn_handle)#megaco_conn_handle.local_mid,
- #megaco_receive_handle{local_mid = LocalMid,
- encoding_mod = CD#conn_data.encoding_mod,
- encoding_config = CD#conn_data.encoding_config,
- send_mod = CD#conn_data.send_mod};
- _ ->
- exit({no_such_item, Item})
+do_conn_info(all = _Item,
+ #conn_data{conn_handle = CH,
+ serial = TransId,
+ max_serial = MaxTransId,
+ request_timer = ReqTmr,
+ long_request_timer = LongReqTmr,
+ auto_ack = AutoAck,
+ trans_ack = TransAck,
+ trans_ack_maxcount = TransAckMaxCount,
+ trans_req = TransReq,
+ trans_req_maxcount = TransReqMaxCount,
+ trans_req_maxsize = TransReqMaxSz,
+ trans_timer = TransTmr,
+ %% trans_sender,
+ pending_timer = PendingTmr,
+ sent_pending_limit = SentPendingLimit,
+ recv_pending_limit = RecvPendingLimit,
+ reply_timer = ReplyTmr,
+ control_pid = CtrlPid,
+ monitor_ref = MonRef,
+ send_mod = SendMod,
+ send_handle = SendHandle,
+ encoding_mod = EncodingMod,
+ encoding_config = EncodingConf,
+ protocol_version = ProtoVersion,
+ auth_data = AuthData,
+ user_mod = UserMod,
+ user_args = UserArgs,
+ reply_action = ReplyAction,
+ reply_data = ReplyData,
+ threaded = Threaded,
+ strict_version = StrictVersion,
+ long_request_resend = LongReqResend,
+ call_proxy_gc_timeout = CallProxyGCTimeout,
+ %% cancel,
+ resend_indication = ResendInd,
+ segment_reply_ind = SegReplyInd,
+ segment_recv_acc = SegRecvAcc,
+ segment_recv_timer = SegRecvTmr,
+ segment_send = SegSend,
+ segment_send_timer = SegSendTmr,
+ max_pdu_size = MaxPduSz,
+ request_keep_alive_timeout = RequestKeepAliveTmr}) ->
+ [{conn_handle, CH},
+ {trans_id, TransId},
+ {max_trans_id, MaxTransId},
+ {request_timer, ReqTmr},
+ {long_request_timer, LongReqTmr},
+ {mid, CH#megaco_conn_handle.local_mid},
+ {local_mid, CH#megaco_conn_handle.local_mid},
+ {remote_mid, CH#megaco_conn_handle.remote_mid},
+ {auto_ack, AutoAck},
+ {trans_ack, TransAck},
+ {trans_ack_maxcount, TransAckMaxCount},
+ {trans_req, TransReq},
+ {trans_req_maxcount, TransReqMaxCount},
+ {trans_req_maxsize, TransReqMaxSz},
+ {trans_timer, TransTmr},
+ {pending_timer, PendingTmr},
+ {sent_pending_limit, SentPendingLimit},
+ {recv_pending_limit, RecvPendingLimit},
+ {reply_timer, ReplyTmr},
+ {control_pid, CtrlPid},
+ {monitor_ref, MonRef},
+ {send_mod, SendMod},
+ {send_handle, SendHandle},
+ {encoding_mod, EncodingMod},
+ {encoding_config, EncodingConf},
+ {protocol_version, ProtoVersion},
+ {auth_data, AuthData},
+ {user_mod, UserMod},
+ {user_args, UserArgs},
+ {reply_action, ReplyAction},
+ {reply_data, ReplyData},
+ {threaded, Threaded},
+ {strict_version, StrictVersion},
+ {long_request_resend, LongReqResend},
+ {call_proxy_gc_timeout, CallProxyGCTimeout},
+ {resend_indication, ResendInd},
+ {segment_reply_ind, SegReplyInd},
+ {segment_recv_acc, SegRecvAcc},
+ {segment_recv_timer, SegRecvTmr},
+ {segment_send, SegSend},
+ {segment_send_timer, SegSendTmr},
+ {max_pdu_size, MaxPduSz},
+ {request_keep_alive_timeout, RequestKeepAliveTmr}];
+
+do_conn_info(conn_data = _Item, CD) ->
+ CD;
+do_conn_info(conn_handle = _Item, #conn_data{conn_handle = Val}) ->
+ Val;
+do_conn_info(mid = _Item,
+ #conn_data{conn_handle = #megaco_conn_handle{local_mid = Val}}) ->
+ Val;
+do_conn_info(local_mid = _Item,
+ #conn_data{conn_handle = #megaco_conn_handle{local_mid = Val}}) ->
+ Val;
+do_conn_info(remote_mid = _Item,
+ #conn_data{conn_handle = #megaco_conn_handle{remote_mid = Val}}) ->
+ Val;
+do_conn_info(trans_id = _Item,
+ #conn_data{conn_handle = #megaco_conn_handle{local_mid = LMid},
+ max_serial = Max}) ->
+ Item2 = {LMid, trans_id_counter},
+ case (catch ets:lookup(megaco_config, Item2)) of
+ {'EXIT', _} ->
+ undefined_serial;
+ [] ->
+ user_info(LMid, min_trans_id);
+ [{_, Serial}] ->
+ if
+ ((Max =:= infinity) andalso
+ is_integer(Serial) andalso
+ (Serial < 4294967295)) ->
+ Serial + 1;
+ ((Max =:= infinity) andalso
+ is_integer(Serial) andalso
+ (Serial =:= 4294967295)) ->
+ user_info(LMid, min_trans_id);
+ Serial < Max ->
+ Serial + 1;
+ Serial =:= Max ->
+ user_info(LMid, min_trans_id);
+ Serial =:= 4294967295 ->
+ user_info(LMid, min_trans_id);
+ true ->
+ undefined_serial
+ end
end;
-conn_info(BadHandle, _Item) ->
- {error, {no_such_connection, BadHandle}}.
-
-replace(_, _, []) ->
- [];
-replace(Item, WithItem, [Item|List]) ->
- [WithItem|List];
-replace(Item, WithItem, [OtherItem|List]) ->
- [OtherItem | replace(Item, WithItem, List)].
+do_conn_info(max_trans_id = _Item, #conn_data{max_serial = Val}) ->
+ Val;
+do_conn_info(request_timer = _Item, #conn_data{request_timer = Val}) ->
+ Val;
+do_conn_info(long_request_timer = _Item, #conn_data{long_request_timer = Val}) ->
+ Val;
+do_conn_info(auto_ack = _Item, #conn_data{auto_ack = Val}) ->
+ Val;
+do_conn_info(trans_ack = _Item, #conn_data{trans_ack = Val}) ->
+ Val;
+do_conn_info(trans_ack_maxcount = _Item, #conn_data{trans_ack_maxcount = Val}) ->
+ Val;
+do_conn_info(trans_req = _Item, #conn_data{trans_req = Val}) ->
+ Val;
+do_conn_info(trans_req_maxcount = _Item, #conn_data{trans_req_maxcount = Val}) ->
+ Val;
+do_conn_info(trans_req_maxsize = _Item, #conn_data{trans_req_maxsize = Val}) ->
+ Val;
+do_conn_info(trans_timer = _Item, #conn_data{trans_timer = Val}) ->
+ Val;
+do_conn_info(pending_timer = _Item, #conn_data{pending_timer = Val}) ->
+ Val;
+do_conn_info(orig_pending_limit = _Item, #conn_data{sent_pending_limit = Val}) ->
+ Val;
+do_conn_info(sent_pending_limit = _Item, #conn_data{sent_pending_limit = Val}) ->
+ Val;
+do_conn_info(recv_pending_limit = _Item, #conn_data{recv_pending_limit = Val}) ->
+ Val;
+do_conn_info(reply_timer = _Item, #conn_data{reply_timer = Val}) ->
+ Val;
+do_conn_info(control_pid = _Item, #conn_data{control_pid = Val}) ->
+ Val;
+do_conn_info(send_mod = _Item, #conn_data{send_mod = Val}) ->
+ Val;
+do_conn_info(send_handle = _Item, #conn_data{send_handle = Val}) ->
+ Val;
+do_conn_info(encoding_mod = _Item, #conn_data{encoding_mod = Val}) ->
+ Val;
+do_conn_info(encoding_config = _Item, #conn_data{encoding_config = Val}) ->
+ Val;
+do_conn_info(protocol_version = _Item, #conn_data{protocol_version = Val}) ->
+ Val;
+do_conn_info(auth_data = _Item, #conn_data{auth_data = Val}) ->
+ Val;
+do_conn_info(user_mod = _Item, #conn_data{user_mod = Val}) ->
+ Val;
+do_conn_info(user_args = _Item, #conn_data{user_args = Val}) ->
+ Val;
+do_conn_info(reply_action = _Item, #conn_data{reply_action = Val}) ->
+ Val;
+do_conn_info(reply_data = _Item, #conn_data{reply_data = Val}) ->
+ Val;
+do_conn_info(threaded = _Item, #conn_data{threaded = Val}) ->
+ Val;
+do_conn_info(strict_version = _Item, #conn_data{strict_version = Val}) ->
+ Val;
+do_conn_info(long_request_resend = _Item,
+ #conn_data{long_request_resend = Val}) ->
+ Val;
+do_conn_info(call_proxy_gc_timeout = _Item,
+ #conn_data{call_proxy_gc_timeout = Val}) ->
+ Val;
+do_conn_info(resend_indication = _Item, #conn_data{resend_indication = Val}) ->
+ Val;
+do_conn_info(segment_reply_ind = _Item, #conn_data{segment_reply_ind = Val}) ->
+ Val;
+do_conn_info(segment_recv_acc = _Item, #conn_data{segment_recv_acc = Val}) ->
+ Val;
+do_conn_info(segment_recv_timer = _Item,
+ #conn_data{segment_recv_timer = Val}) ->
+ Val;
+do_conn_info(segment_send = _Item, #conn_data{segment_send = Val}) ->
+ Val;
+do_conn_info(segment_send_timer = _Item,
+ #conn_data{segment_send_timer = Val}) ->
+ Val;
+do_conn_info(max_pdu_size = _Item, #conn_data{max_pdu_size = Val}) ->
+ Val;
+do_conn_info(request_keep_alive_timeout = _Item,
+ #conn_data{request_keep_alive_timeout = Val}) ->
+ Val;
+do_conn_info(receive_handle = _Item,
+ #conn_data{conn_handle = #megaco_conn_handle{local_mid = LMid},
+ encoding_mod = EM,
+ encoding_config = EC,
+ send_mod = SM}) ->
+ #megaco_receive_handle{local_mid = LMid,
+ encoding_mod = EM,
+ encoding_config = EC,
+ send_mod = SM};
+do_conn_info(Item, Data)
+ when is_record(Data, conn_data) orelse is_record(Data, megaco_conn_handle) ->
+ exit({no_such_item, Item});
+do_conn_info(_Item, BadData) ->
+ {error, {no_such_connection, BadData}}.
+
+
+%% replace(_, _, []) ->
+%% [];
+%% replace(Item, WithItem, [Item|List]) ->
+%% [WithItem|List];
+%% replace(Item, WithItem, [OtherItem|List]) ->
+%% [OtherItem | replace(Item, WithItem, List)].
update_conn_info(#conn_data{conn_handle = CH}, Item, Val) ->
diff --git a/lib/megaco/test/megaco_config_test.erl b/lib/megaco/test/megaco_config_test.erl
index 453c1b8964..9ab1a7d90d 100644
--- a/lib/megaco/test/megaco_config_test.erl
+++ b/lib/megaco/test/megaco_config_test.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2000-2010. 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%
%%
@@ -106,166 +106,197 @@ config(Config) when is_list(Config) ->
Evil = 400,
End = 500,
+ InitialCmd =
+ fun(No, Desc, Cmd, VerifyVal) ->
+ initial_command(Initial + No, Desc, Cmd, VerifyVal)
+ end,
+
+ VerifyCmd =
+ fun(M, No, Key, V) ->
+ verify_user_default_command(M, Verify + No, Key, V)
+ end,
+
+ NiceCmd =
+ fun(M, No, Key, Val) ->
+ nice_user_update_command(M, Nice + No, Key, Val)
+ end,
+
+ EvilCmd =
+ fun(M, No, Key, Val) ->
+ evil_user_update_command(M, Evil + No, Key, Val)
+ end,
+
+ %% End commands
+ ExitCmd =
+ fun(No, Desc, Cmd) ->
+ exit_command(End + No, Desc, Cmd)
+ end,
+ ErrorCmd =
+ fun(No, Desc, Cmd, MainReason, TS) ->
+ error_command(End + No, Desc, Cmd, MainReason, TS)
+ end,
+ PlainCmd =
+ fun(No, Desc, Cmd, V) ->
+ command(End + No, Desc, Cmd, V)
+ end,
+
Commands =
[
%% Initial commands
- initial_command( Initial + 0,
- "enable trace",
- fun() -> megaco:enable_trace(100, io) end, ok),
- initial_command( Initial + 1,
- "start",
- fun() -> megaco:start() end, ok),
- initial_command( Initial + 2,
- "Verify no active requests",
- fun() -> megaco:system_info(n_active_requests) end,
- 0),
- initial_command( Initial + 3,
- "Verify no active replies",
- fun() -> megaco:system_info(n_active_replies) end,
- 0),
- initial_command( Initial + 4,
- "Verify no active connections",
- fun() ->
- megaco:system_info(n_active_connections)
- end,
- 0),
- initial_command( Initial + 5,
- "Verify no connections",
- fun() -> megaco:system_info(connections) end, []),
- initial_command( Initial + 6,
- "Verify no users",
- fun() -> megaco:system_info(users) end, []),
- initial_command( Initial + 7,
- "Start user",
- fun() -> megaco:start_user(Mid, []) end, ok),
-
+ InitialCmd(0,
+ "enable trace",
+ fun() -> megaco:enable_trace(100, io) end,
+ ok),
+ InitialCmd(1,
+ "start",
+ fun() -> megaco:start() end,
+ ok),
+ InitialCmd(2,
+ "Verify no active requests",
+ fun() -> megaco:system_info(n_active_requests) end,
+ 0),
+ InitialCmd(3,
+ "Verify no active replies",
+ fun() -> megaco:system_info(n_active_replies) end,
+ 0),
+ InitialCmd(4,
+ "Verify no active connections",
+ fun() -> megaco:system_info(n_active_connections) end,
+ 0),
+ InitialCmd(5,
+ "Verify no connections",
+ fun() -> megaco:system_info(connections) end,
+ []),
+ InitialCmd(6,
+ "Verify no users",
+ fun() -> megaco:system_info(users) end,
+ []),
+ InitialCmd(7,
+ "Start user",
+ fun() -> megaco:start_user(Mid, []) end,
+ ok),
+
%% Verify user defaults
- verify_user_default_command(Mid, Verify + 1, connections, []),
- verify_user_default_command(Mid, Verify + 2, min_trans_id, 1),
- verify_user_default_command(Mid, Verify + 3, max_trans_id, infinity),
- verify_user_default_command(Mid, Verify + 4, request_timer,
- #megaco_incr_timer{}),
- verify_user_default_command(Mid, Verify + 5, long_request_timer, timer:seconds(60)),
- verify_user_default_command(Mid, Verify + 6, auto_ack, false),
- verify_user_default_command(Mid, Verify + 7, pending_timer, 30000),
- verify_user_default_command(Mid, Verify + 8, reply_timer, 30000),
- verify_user_default_command(Mid, Verify + 9, send_mod, megaco_tcp),
- verify_user_default_command(Mid, Verify + 10, encoding_mod,
- megaco_pretty_text_encoder),
- verify_user_default_command(Mid, Verify + 11, encoding_config, []),
- verify_user_default_command(Mid, Verify + 12, protocol_version, 1),
- verify_user_default_command(Mid, Verify + 13, reply_data, undefined),
- verify_user_default_command(Mid, Verify + 14, receive_handle,
- fun(H) when is_record(H, megaco_receive_handle) -> {ok, H};
- (R) -> {error, R}
- end),
+ VerifyCmd(Mid, 1, connections, []),
+ VerifyCmd(Mid, 2, min_trans_id, 1),
+ VerifyCmd(Mid, 3, max_trans_id, infinity),
+ VerifyCmd(Mid, 4, request_timer, #megaco_incr_timer{}),
+ VerifyCmd(Mid, 5, long_request_timer, timer:seconds(60)),
+ VerifyCmd(Mid, 6, auto_ack, false),
+ VerifyCmd(Mid, 7, pending_timer, 30000),
+ VerifyCmd(Mid, 8, reply_timer, 30000),
+ VerifyCmd(Mid, 9, send_mod, megaco_tcp),
+ VerifyCmd(Mid, 10, encoding_mod, megaco_pretty_text_encoder),
+ VerifyCmd(Mid, 11, encoding_config, []),
+ VerifyCmd(Mid, 12, protocol_version, 1),
+ VerifyCmd(Mid, 13, reply_data, undefined),
+ VerifyCmd(Mid, 14, receive_handle,
+ fun(H) when is_record(H, megaco_receive_handle) ->
+ {ok, H};
+ (R) ->
+ {error, R}
+ end),
%% Nice update
- nice_user_update_command(Mid, Nice + 1, min_trans_id, Int),
- nice_user_update_command(Mid, Nice + 2, max_trans_id, Int),
- nice_user_update_command(Mid, Nice + 3, max_trans_id, infinity),
- nice_user_update_command(Mid, Nice + 4, request_timer, Int),
- nice_user_update_command(Mid, Nice + 5, request_timer, infinity),
- nice_user_update_command(Mid, Nice + 6, request_timer, IT),
- nice_user_update_command(Mid, Nice + 7, long_request_timer, Int),
- nice_user_update_command(Mid, Nice + 8, long_request_timer, infinity),
- nice_user_update_command(Mid, Nice + 9, long_request_timer, IT),
- nice_user_update_command(Mid, Nice + 10, auto_ack, true),
- nice_user_update_command(Mid, Nice + 11, auto_ack, false),
- nice_user_update_command(Mid, Nice + 12, pending_timer, Int),
- nice_user_update_command(Mid, Nice + 13, pending_timer, infinity),
- nice_user_update_command(Mid, Nice + 14, pending_timer, IT),
- nice_user_update_command(Mid, Nice + 15, reply_timer, Int),
- nice_user_update_command(Mid, Nice + 16, reply_timer, infinity),
- nice_user_update_command(Mid, Nice + 17, reply_timer, IT),
- nice_user_update_command(Mid, Nice + 18, send_mod, an_atom),
- nice_user_update_command(Mid, Nice + 19, encoding_mod, an_atom),
- nice_user_update_command(Mid, Nice + 20, encoding_config, []),
- nice_user_update_command(Mid, Nice + 21, protocol_version, Int),
- nice_user_update_command(Mid, Nice + 23, reply_data, IT),
- nice_user_update_command(Mid, Nice + 23, resend_indication, true),
- nice_user_update_command(Mid, Nice + 24, resend_indication, false),
- nice_user_update_command(Mid, Nice + 25, resend_indication, flag),
+ NiceCmd(Mid, 1, min_trans_id, Int),
+ NiceCmd(Mid, 2, max_trans_id, Int),
+ NiceCmd(Mid, 3, max_trans_id, infinity),
+ NiceCmd(Mid, 4, request_timer, Int),
+ NiceCmd(Mid, 5, request_timer, infinity),
+ NiceCmd(Mid, 6, request_timer, IT),
+ NiceCmd(Mid, 7, long_request_timer, Int),
+ NiceCmd(Mid, 8, long_request_timer, infinity),
+ NiceCmd(Mid, 9, long_request_timer, IT),
+ NiceCmd(Mid, 10, auto_ack, true),
+ NiceCmd(Mid, 11, auto_ack, false),
+ NiceCmd(Mid, 12, pending_timer, Int),
+ NiceCmd(Mid, 13, pending_timer, infinity),
+ NiceCmd(Mid, 14, pending_timer, IT),
+ NiceCmd(Mid, 15, reply_timer, Int),
+ NiceCmd(Mid, 16, reply_timer, infinity),
+ NiceCmd(Mid, 17, reply_timer, IT),
+ NiceCmd(Mid, 18, send_mod, an_atom),
+ NiceCmd(Mid, 19, encoding_mod, an_atom),
+ NiceCmd(Mid, 20, encoding_config, []),
+ NiceCmd(Mid, 21, protocol_version, Int),
+ NiceCmd(Mid, 23, reply_data, IT),
+ NiceCmd(Mid, 23, resend_indication, true),
+ NiceCmd(Mid, 24, resend_indication, false),
+ NiceCmd(Mid, 25, resend_indication, flag),
%% Evil update
- evil_user_update_command(Mid, Evil + 1, min_trans_id, NonInt),
- evil_user_update_command(Mid, Evil + 2, max_trans_id, NonInt),
- evil_user_update_command(Mid, Evil + 3, max_trans_id, non_infinity),
- evil_user_update_command(Mid, Evil + 4, request_timer, NonInt),
- evil_user_update_command(Mid, Evil + 5, request_timer, non_infinity),
- evil_user_update_command(Mid, Evil + 6, request_timer, IT2),
- evil_user_update_command(Mid, Evil + 7, request_timer, IT3),
- evil_user_update_command(Mid, Evil + 8, request_timer, IT4),
- evil_user_update_command(Mid, Evil + 9, request_timer, IT5),
- evil_user_update_command(Mid, Evil + 10, long_request_timer, NonInt),
- evil_user_update_command(Mid, Evil + 11, long_request_timer, non_infinity),
- evil_user_update_command(Mid, Evil + 12, long_request_timer, IT2),
- evil_user_update_command(Mid, Evil + 13, long_request_timer, IT3),
- evil_user_update_command(Mid, Evil + 14, long_request_timer, IT4),
- evil_user_update_command(Mid, Evil + 15, long_request_timer, IT5),
- evil_user_update_command(Mid, Evil + 16, auto_ack, non_bool),
- evil_user_update_command(Mid, Evil + 17, pending_timer, NonInt),
- evil_user_update_command(Mid, Evil + 18, pending_timer, non_infinity),
- evil_user_update_command(Mid, Evil + 19, pending_timer, IT2),
- evil_user_update_command(Mid, Evil + 20, pending_timer, IT3),
- evil_user_update_command(Mid, Evil + 21, pending_timer, IT4),
- evil_user_update_command(Mid, Evil + 22, pending_timer, IT5),
- evil_user_update_command(Mid, Evil + 23, reply_timer, NonInt),
- evil_user_update_command(Mid, Evil + 24, reply_timer, non_infinity),
- evil_user_update_command(Mid, Evil + 25, reply_timer, IT2),
- evil_user_update_command(Mid, Evil + 26, reply_timer, IT3),
- evil_user_update_command(Mid, Evil + 27, reply_timer, IT4),
- evil_user_update_command(Mid, Evil + 28, reply_timer, IT5),
- evil_user_update_command(Mid, Evil + 29, send_mod, {non_atom}),
- evil_user_update_command(Mid, Evil + 30, encoding_mod, {non_atom}),
- evil_user_update_command(Mid, Evil + 31, encoding_config, non_list),
- evil_user_update_command(Mid, Evil + 32, protocol_version, NonInt),
- evil_user_update_command(Mid, Evil + 33, resend_indication, flagg),
-
-
- exit_command(End + 1,
- "Verify non-existing system info",
- fun() -> megaco:system_info(non_exist) end),
- exit_command(End + 2,
- "Verify non-existing user user info",
- fun() -> megaco:user_info(non_exist, trans_id) end),
- exit_command(End + 3, "Verify non-existing user info",
- fun() -> megaco:user_info(Mid, non_exist) end),
-
- error_command(End + 4,
- "Try updating user info for non-existing user",
- fun() ->
- megaco:update_user_info(non_exist, trans_id, 1)
- end,
- no_such_user, 2),
- error_command(End + 11,
- "Try updating non-existing user info",
- fun() ->
- megaco:update_user_info(Mid, trans_id, 4711)
- end,
- bad_user_val, 4),
- error_command(End + 12,
- "Try start already started user",
- fun() ->
- megaco:start_user(Mid, [])
- end,
- user_already_exists, 2),
-
- command(End + 13, "Verify started users",
- fun() -> megaco:system_info(users) end, [Mid]),
- command(End + 14, "Stop user", fun() -> megaco:stop_user(Mid) end, ok),
- command(End + 15, "Verify started users",
- fun() -> megaco:system_info(users) end, []),
- error_command(End + 16, "Try stop not started user",
- fun() -> megaco:stop_user(Mid) end, no_such_user, 2),
- error_command(End + 17, "Try start megaco (it's already started)",
- fun() -> megaco:start() end, already_started, 2),
- command(End + 18, "Stop megaco", fun() -> megaco:stop() end, ok),
- error_command(End + 19, "Try stop megaco (it's not running)",
- fun() -> megaco:stop() end, not_started, 2)
+ EvilCmd(Mid, 1, min_trans_id, NonInt),
+ EvilCmd(Mid, 2, max_trans_id, NonInt),
+ EvilCmd(Mid, 3, max_trans_id, non_infinity),
+ EvilCmd(Mid, 4, request_timer, NonInt),
+ EvilCmd(Mid, 5, request_timer, non_infinity),
+ EvilCmd(Mid, 6, request_timer, IT2),
+ EvilCmd(Mid, 7, request_timer, IT3),
+ EvilCmd(Mid, 8, request_timer, IT4),
+ EvilCmd(Mid, 9, request_timer, IT5),
+ EvilCmd(Mid, 10, long_request_timer, NonInt),
+ EvilCmd(Mid, 11, long_request_timer, non_infinity),
+ EvilCmd(Mid, 12, long_request_timer, IT2),
+ EvilCmd(Mid, 13, long_request_timer, IT3),
+ EvilCmd(Mid, 14, long_request_timer, IT4),
+ EvilCmd(Mid, 15, long_request_timer, IT5),
+ EvilCmd(Mid, 16, auto_ack, non_bool),
+ EvilCmd(Mid, 17, pending_timer, NonInt),
+ EvilCmd(Mid, 18, pending_timer, non_infinity),
+ EvilCmd(Mid, 19, pending_timer, IT2),
+ EvilCmd(Mid, 20, pending_timer, IT3),
+ EvilCmd(Mid, 21, pending_timer, IT4),
+ EvilCmd(Mid, 22, pending_timer, IT5),
+ EvilCmd(Mid, 23, reply_timer, NonInt),
+ EvilCmd(Mid, 24, reply_timer, non_infinity),
+ EvilCmd(Mid, 25, reply_timer, IT2),
+ EvilCmd(Mid, 26, reply_timer, IT3),
+ EvilCmd(Mid, 27, reply_timer, IT4),
+ EvilCmd(Mid, 28, reply_timer, IT5),
+ EvilCmd(Mid, 29, send_mod, {non_atom}),
+ EvilCmd(Mid, 30, encoding_mod, {non_atom}),
+ EvilCmd(Mid, 31, encoding_config, non_list),
+ EvilCmd(Mid, 32, protocol_version, NonInt),
+ EvilCmd(Mid, 33, resend_indication, flagg),
+
+
+ %% End
+ ExitCmd(1, "Verify non-existing system info",
+ fun() -> megaco:system_info(non_exist) end),
+ ExitCmd(2, "Verify non-existing user user info",
+ fun() -> megaco:user_info(non_exist, trans_id) end),
+ ExitCmd(3, "Verify non-existing user info",
+ fun() -> megaco:user_info(Mid, non_exist) end),
+
+ ErrorCmd(4, "Try updating user info for non-existing user",
+ fun() ->
+ megaco:update_user_info(non_exist, trans_id, 1)
+ end,
+ no_such_user, 2),
+ ErrorCmd(11, "Try updating non-existing user info",
+ fun() ->
+ megaco:update_user_info(Mid, trans_id, 4711)
+ end,
+ bad_user_val, 4),
+ ErrorCmd(12, "Try start already started user",
+ fun() -> megaco:start_user(Mid, []) end,
+ user_already_exists, 2),
+
+ PlainCmd(13, "Verify started users",
+ fun() -> megaco:system_info(users) end, [Mid]),
+ PlainCmd(14, "Stop user", fun() -> megaco:stop_user(Mid) end, ok),
+ PlainCmd(15, "Verify started users",
+ fun() -> megaco:system_info(users) end, []),
+ ErrorCmd(16, "Try stop not started user",
+ fun() -> megaco:stop_user(Mid) end, no_such_user, 2),
+ ErrorCmd(17, "Try start megaco (it's already started)",
+ fun() -> megaco:start() end, already_started, 2),
+ PlainCmd(18, "Stop megaco", fun() -> megaco:stop() end, ok),
+ ErrorCmd(19, "Try stop megaco (it's not running)",
+ fun() -> megaco:stop() end, not_started, 2)
],
@@ -279,7 +310,7 @@ exec([#command{id = No,
desc = Desc,
cmd = Cmd,
verify = Verify}|Commands]) ->
- io:format("Executing command ~2w: ~s: ", [No, Desc]),
+ io:format("Executing command ~3w: ~s: ", [No, Desc]),
case (catch Verify((catch Cmd()))) of
{ok, OK} ->
io:format("ok => ~p~n", [OK]),
@@ -320,7 +351,7 @@ nice_user_update_command(Mid, No, Key, Val) ->
evil_user_update_command(Mid, No, Key, Val) ->
- Desc = lists:flatten(io_lib:format("Evil: Update ~w", [Key])),
+ Desc = lists:flatten(io_lib:format("Evil - Update ~w", [Key])),
Cmd = fun() ->
case (catch megaco:user_info(Mid, Key)) of
{'EXIT', R} ->
@@ -371,14 +402,19 @@ error_command(No, Desc, Cmd, MainReason, TS) when is_function(Cmd) ->
end,
command(No, Desc, Cmd, Verify).
-command(No, Desc, Cmd, Verify) when is_integer(No) and is_list(Desc) and
- is_function(Cmd) and is_function(Verify) ->
+command(No, Desc, Cmd, Verify)
+ when (is_integer(No) andalso
+ is_list(Desc) andalso
+ is_function(Cmd) andalso
+ is_function(Verify)) ->
#command{id = No,
desc = Desc,
cmd = Cmd,
verify = Verify};
-command(No, Desc, Cmd, VerifyVal) when is_integer(No) and is_list(Desc) and
- is_function(Cmd) ->
+command(No, Desc, Cmd, VerifyVal)
+ when (is_integer(No) andalso
+ is_list(Desc) andalso
+ is_function(Cmd)) ->
Verify = fun(Val) ->
case Val of
VerifyVal ->
@@ -881,6 +917,12 @@ otp_8167(Config) when is_list(Config) ->
p("connect ok: CD = ~n~p", [CD]),
CH = CD#conn_data.conn_handle,
+ p("get value for item cancel from connection: ~p", [CH]),
+ false = megaco_config:conn_info(CH, cancel),
+
+ p("get value for item cancel from connection data", []),
+ false = megaco_config:conn_info(CD, cancel),
+
p("get value for item call_proxy_gc_timeout for connection: ~p", [CH]),
10101 = megaco_config:conn_info(CH, call_proxy_gc_timeout),
diff --git a/lib/megaco/vsn.mk b/lib/megaco/vsn.mk
index 19eca6d309..34a5ac1ed2 100644
--- a/lib/megaco/vsn.mk
+++ b/lib/megaco/vsn.mk
@@ -18,11 +18,13 @@
# %CopyrightEnd%
APPLICATION = megaco
-MEGACO_VSN = 3.14
+MEGACO_VSN = 3.14.1
PRE_VSN =
APP_VSN = "$(APPLICATION)-$(MEGACO_VSN)$(PRE_VSN)"
-TICKETS = OTP-8317 OTP-8323 OTP-8328 OTP-8362 OTP-8403
+TICKETS = OTP-8561
+
+TICKETS_3_14 = OTP-8317 OTP-8323 OTP-8328 OTP-8362 OTP-8403
TICKETS_3_13 = OTP-8205 OTP-8239 OTP-8249
diff --git a/lib/mnesia/doc/src/Mnesia_chap5.xmlsrc b/lib/mnesia/doc/src/Mnesia_chap5.xmlsrc
index 3ec0aa37f5..1c7e3662e1 100644
--- a/lib/mnesia/doc/src/Mnesia_chap5.xmlsrc
+++ b/lib/mnesia/doc/src/Mnesia_chap5.xmlsrc
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2009</year>
+ <year>1997</year><year>2010</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -13,12 +13,12 @@
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.
-
+
</legalnotice>
<title>Miscellaneous Mnesia Features</title>
@@ -885,16 +885,16 @@ ok
<item>Removes the subscription on events of type
<c>Event-Category</c></item>
</taglist>
- <p><c>Event-Category</c> may either be the atom <c>system</c>, or
+ <p><c>Event-Category</c> may either be the atom <c>system</c>, the atom <c>activity</c>, or
one of the tuples <c>{table, Tab, simple}</c>, <c>{table, Tab, detailed}</c>. The old event-category <c>{table, Tab}</c> is the same
event-category as <c>{table, Tab, simple}</c>.
The subscribe functions activate a subscription
of events. The events are delivered as messages to the process
evaluating the <c>mnesia:subscribe/1</c> function. The syntax of
- system events is <c>{mnesia_system_event, Event}</c> and
- <c>{mnesia_table_event, Event}</c> for table events. What system
- events and table events means is described below.
- </p>
+ system events is <c>{mnesia_system_event, Event}</c>,
+ <c>{mnesia_activity_event, Event}</c> for activity events, and
+ <c>{mnesia_table_event, Event}</c> for table events. What the various
+ event types mean is described below.</p>
<p>All system events are subscribed by Mnesia's
gen_event handler. The default gen_event handler is
<c>mnesia_event</c>. But it may be changed by using the application
@@ -1039,8 +1039,26 @@ ok
</section>
<section>
+ <title>Activity Events</title>
+ <p>Currently, there is only one type of activity event:</p>
+ <taglist>
+ <tag><c>{complete, ActivityID}</c></tag>
+ <item>
+ <p>This event occurs when a transaction that caused a modification to the database
+ has completed. It is useful for determining when a set of table events
+ (see below) caused by a given activity have all been sent. Once the this event
+ has been received, it is guaranteed that no further table events with the same
+ ActivityID will be received. Note that this event may still be received even
+ if no table events with a corresponding ActivityID were received, depending on
+ the tables to which the receiving process is subscribed.</p>
+ <p>Dirty operations always only contain one update and thus no activity event is sent.</p>
+ </item>
+ </taglist>
+ </section>
+
+ <section>
<title>Table Events</title>
- <p>Another category of events are table events, which are
+ <p>The final category of events are table events, which are
events related to table updates. There are two types of table
events simple and detailed.
</p>
diff --git a/lib/mnesia/doc/src/mnesia.xml b/lib/mnesia/doc/src/mnesia.xml
index d76471d922..5d3bcf830e 100644
--- a/lib/mnesia/doc/src/mnesia.xml
+++ b/lib/mnesia/doc/src/mnesia.xml
@@ -1135,7 +1135,7 @@ mnesia:create_table(person,
</list>
<p>If two processes perform <c>mnesia:dirty_update_counter/3</c>
simultaneously, both updates will take effect without the
- risk of loosing one of the updates. The new value
+ risk of losing one of the updates. The new value
<c>NewVal</c> of the counter is returned.</p>
<p>If <c>Key</c> don't exits, a new record is created with the value
<c>Incr</c> if it is larger than 0, otherwise it is set to 0.</p>
diff --git a/lib/mnesia/src/mnesia_monitor.erl b/lib/mnesia/src/mnesia_monitor.erl
index 5df5df4969..5bd93d6b9b 100644
--- a/lib/mnesia/src/mnesia_monitor.erl
+++ b/lib/mnesia/src/mnesia_monitor.erl
@@ -256,6 +256,7 @@ init([Parent]) ->
?ets_new_table(mnesia_gvar, [set, public, named_table]),
?ets_new_table(mnesia_stats, [set, public, named_table]),
set(subscribers, []),
+ set(activity_subscribers, []),
mnesia_lib:verbose("~p starting: ~p~n", [?MODULE, self()]),
Version = mnesia:system_info(version),
set(version, Version),
diff --git a/lib/mnesia/src/mnesia_subscr.erl b/lib/mnesia/src/mnesia_subscr.erl
index afd1704dec..93d4a86f7f 100644
--- a/lib/mnesia/src/mnesia_subscr.erl
+++ b/lib/mnesia/src/mnesia_subscr.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1997-2010. 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%
%%
@@ -30,7 +30,8 @@
subscribers/0,
report_table_event/4,
report_table_event/5,
- report_table_event/6
+ report_table_event/6,
+ report_activity/1
]).
%% gen_server callbacks
@@ -91,6 +92,8 @@ set_debug_level(Level, OldEnv) ->
subscribe(ClientPid, system) ->
change_subscr(activate, ClientPid, system);
+subscribe(ClientPid, activity) ->
+ change_subscr(activate, ClientPid, activity);
subscribe(ClientPid, {table, Tab}) ->
change_subscr(activate, ClientPid, {table, Tab, simple});
subscribe(ClientPid, {table, Tab, simple}) ->
@@ -102,6 +105,8 @@ subscribe(_ClientPid, What) ->
unsubscribe(ClientPid, system) ->
change_subscr(deactivate, ClientPid, system);
+unsubscribe(ClientPid, activity) ->
+ change_subscr(deactivate, ClientPid, activity);
unsubscribe(ClientPid, {table, Tab}) ->
change_subscr(deactivate, ClientPid, {table, Tab, simple});
unsubscribe(ClientPid, {table, Tab, simple}) ->
@@ -120,6 +125,15 @@ change_subscr(Kind, ClientPid, What) ->
subscribers() ->
[whereis(mnesia_event) | mnesia_lib:val(subscribers)].
+report_activity({dirty, _pid}) ->
+ ok;
+report_activity(Tid) ->
+ case ?catch_val(activity_subscribers) of
+ {'EXIT', _} -> ok;
+ Subscribers ->
+ deliver(Subscribers, {mnesia_activity_event, {complete, Tid}})
+ end.
+
report_table_event(Tab, Tid, Obj, Op) ->
case ?catch_val({Tab, commit_work}) of
{'EXIT', _} -> ok;
@@ -300,6 +314,9 @@ code_change(_OldVsn, State, _Extra) ->
do_change({activate, ClientPid, system}, SubscrTab) when is_pid(ClientPid) ->
Var = subscribers,
activate(ClientPid, system, Var, subscribers(), SubscrTab);
+do_change({activate, ClientPid, activity}, SubscrTab) when is_pid(ClientPid) ->
+ Var = activity_subscribers,
+ activate(ClientPid, activity, Var, mnesia_lib:val(Var), SubscrTab);
do_change({activate, ClientPid, {table, Tab, How}}, SubscrTab) when is_pid(ClientPid) ->
case ?catch_val({Tab, where_to_read}) of
Node when Node == node() ->
@@ -313,6 +330,9 @@ do_change({activate, ClientPid, {table, Tab, How}}, SubscrTab) when is_pid(Clien
do_change({deactivate, ClientPid, system}, SubscrTab) ->
Var = subscribers,
deactivate(ClientPid, system, Var, SubscrTab);
+do_change({deactivate, ClientPid, activity}, SubscrTab) ->
+ Var = activity_subscribers,
+ deactivate(ClientPid, activity, Var, SubscrTab);
do_change({deactivate, ClientPid, {table, Tab, How}}, SubscrTab) ->
Var = {Tab, commit_work},
deactivate(ClientPid, {table, Tab, How}, Var, SubscrTab);
@@ -345,7 +365,7 @@ do_change(_, _) ->
activate(ClientPid, What, Var, OldSubscribers, SubscrTab) ->
Old =
- if Var == subscribers ->
+ if Var == subscribers orelse Var == activity_subscribers ->
OldSubscribers;
true ->
case lists:keysearch(subscribers, 1, OldSubscribers) of
@@ -379,6 +399,9 @@ activate(ClientPid, What, Var, OldSubscribers, SubscrTab) ->
add_subscr(subscribers, _What, Pid) ->
mnesia_lib:add(subscribers, Pid),
{ok, node()};
+add_subscr(activity_subscribers, _What, Pid) ->
+ mnesia_lib:add(activity_subscribers, Pid),
+ {ok, node()};
add_subscr({Tab, commit_work}, What, Pid) ->
Commit = mnesia_lib:val({Tab, commit_work}),
case lists:keysearch(subscribers, 1, Commit) of
@@ -427,6 +450,8 @@ deactivate(ClientPid, What, Var, SubscrTab) ->
del_subscr(subscribers, _What, Pid) ->
mnesia_lib:del(subscribers, Pid);
+del_subscr(activity_subscribers, _What, Pid) ->
+ mnesia_lib:del(activity_subscribers, Pid);
del_subscr({Tab, commit_work}, What, Pid) ->
Commit = mnesia_lib:val({Tab, commit_work}),
case lists:keysearch(subscribers, 1, Commit) of
@@ -473,6 +498,8 @@ do_handle_exit([{ClientPid, What} | Tail]) ->
case What of
system ->
del_subscr(subscribers, What, ClientPid);
+ activity ->
+ del_subscr(activity_subscribers, What, ClientPid);
{_, Tab, _Level} ->
del_subscr({Tab, commit_work}, What, ClientPid)
end,
diff --git a/lib/mnesia/src/mnesia_tm.erl b/lib/mnesia/src/mnesia_tm.erl
index d42109c3da..f3ffac5493 100644
--- a/lib/mnesia/src/mnesia_tm.erl
+++ b/lib/mnesia/src/mnesia_tm.erl
@@ -1733,7 +1733,9 @@ do_commit(Tid, C, DumperMode) ->
R = do_snmp(Tid, C#commit.snmp),
R2 = do_update(Tid, ram_copies, C#commit.ram_copies, R),
R3 = do_update(Tid, disc_copies, C#commit.disc_copies, R2),
- do_update(Tid, disc_only_copies, C#commit.disc_only_copies, R3).
+ R4 = do_update(Tid, disc_only_copies, C#commit.disc_only_copies, R3),
+ mnesia_subscr:report_activity(Tid),
+ R4.
%% Update the items
do_update(Tid, Storage, [Op | Ops], OldRes) ->
diff --git a/lib/observer/test/Makefile b/lib/observer/test/Makefile
new file mode 100644
index 0000000000..6f1430b00a
--- /dev/null
+++ b/lib/observer/test/Makefile
@@ -0,0 +1,90 @@
+# ``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 via the world wide web 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.
+#
+# The Initial Developer of the Original Code is Ericsson Utvecklings AB.
+# Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
+# AB. All Rights Reserved.''
+#
+# $Id$
+#
+include $(ERL_TOP)/make/target.mk
+include $(ERL_TOP)/make/$(TARGET)/otp.mk
+
+MODULES = \
+ observer_SUITE \
+ crashdump_viewer_SUITE \
+ etop_SUITE \
+ ttb_SUITE \
+ crashdump_helper
+
+ERL_FILES= $(MODULES:%=%.erl)
+
+TARGET_FILES= $(MODULES:%=$(EBIN)/%.$(EMULATOR))
+INSTALL_PROGS= $(TARGET_FILES)
+
+EMAKEFILE=Emakefile
+COVERFILE=observer.cover
+
+# ----------------------------------------------------
+# Release directory specification
+# ----------------------------------------------------
+RELSYSDIR = $(RELEASE_PATH)/observer_test
+
+# ----------------------------------------------------
+# FLAGS
+# ----------------------------------------------------
+ERL_MAKE_FLAGS += -pa $(ERL_TOP)/lib/test_server/ebin
+ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include
+
+EBIN = .
+
+# ----------------------------------------------------
+# Targets
+# ----------------------------------------------------
+.PHONY: make_emakefile
+
+make_emakefile:
+ $(ERL_TOP)/make/make_emakefile $(ERL_COMPILE_FLAGS) -o$(EBIN) \
+ $(MODULES) >> $(EMAKEFILE)
+
+tests debug opt: make_emakefile
+ cd $(ERL_TOP)/lib/test_server/src && \
+ $(MAKE) ../ebin/test_server_line.beam
+ erl $(ERL_MAKE_FLAGS) -make
+
+clean:
+ rm -f $(EMAKEFILE)
+ rm -f $(TARGET_FILES)
+ rm -f core
+
+docs:
+
+# ----------------------------------------------------
+# Special targets
+# ----------------------------------------------------
+
+# ----------------------------------------------------
+# Release Target
+# ----------------------------------------------------
+include $(ERL_TOP)/make/otp_release_targets.mk
+
+release_spec: opt
+
+release_tests_spec: make_emakefile
+ $(INSTALL_DIR) $(RELSYSDIR)
+ $(INSTALL_DATA) observer.spec observer.dynspec $(EMAKEFILE) \
+ $(COVERFILE) $(ERL_FILES) \
+ $(RELSYSDIR)
+ @tar cf - *_SUITE_data | (cd $(RELSYSDIR); tar xf -)
+
+release_docs_spec:
+
+
diff --git a/lib/observer/test/crashdump_helper.erl b/lib/observer/test/crashdump_helper.erl
new file mode 100644
index 0000000000..43b3db738f
--- /dev/null
+++ b/lib/observer/test/crashdump_helper.erl
@@ -0,0 +1,61 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2007-2010. 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(crashdump_helper).
+-export([n1_proc/2,remote_proc/2]).
+-compile(r11).
+-include("test_server.hrl").
+
+n1_proc(N2,Creator) ->
+ spawn(fun() -> n1_proc(Creator,N2,x,[]) end).
+n1_proc(Creator,N2,P2,L) when P2==x;length(L)<2->
+ receive
+ {N2,P} ->
+ n1_proc(Creator,N2,P,L);
+ P ->
+ n1_proc(Creator,N2,P2,[P|L])
+ end;
+n1_proc(Creator,_N2,P2,_L) ->
+ register(aaaaaaaa,self()),
+ process_flag(save_calls,3),
+ ets:new(cdv_test_ordset_table,[ordered_set]),
+ erlang:send_after(1000000,self(),cdv_test_timer_message),
+ Port = hd(erlang:ports()),
+ Fun = fun() -> ok end,
+ Ref = make_ref(),
+ Pid = self(),
+ Bin = list_to_binary(lists:seq(1, 255)),
+ SubBin = element(1, split_binary(element(2, split_binary(Bin, 8)), 17)),
+ DictionaryValue = {"list",atom,42,54.654,math:pow(2,1023),{},
+ Port,Fun,Ref,Pid,
+ Bin,SubBin,83974938738373873,-38748762783736367},
+ put(dictionary_key,DictionaryValue),
+ spawn(fun() -> register(aaaaaaab,self()),
+ receive after infinity -> ok end
+ end),
+ link(P2),
+ Creator ! {self(),done},
+ receive after infinity -> ok end.
+
+remote_proc(P1,Creator) ->
+ spawn(fun() ->
+ P1 ! {node(),self()},
+ Creator ! {self(),done},
+ receive after infinity -> ok end
+ end).
diff --git a/lib/observer/test/crashdump_viewer_SUITE.erl b/lib/observer/test/crashdump_viewer_SUITE.erl
new file mode 100644
index 0000000000..fcf383dc2e
--- /dev/null
+++ b/lib/observer/test/crashdump_viewer_SUITE.erl
@@ -0,0 +1,723 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2003-2010. 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(crashdump_viewer_SUITE).
+
+%% Test functions
+-export([all/1,translate/1,start/1,fini/1,load_file/1,
+ non_existing/1,not_a_crashdump/1,old_crashdump/1]).
+-export([init_per_suite/1, end_per_suite/1]).
+-export([init_per_testcase/2, end_per_testcase/2]).
+
+-include("test_server.hrl").
+-include("test_server_line.hrl").
+-include_lib("kernel/include/file.hrl").
+
+-include_lib("stdlib/include/ms_transform.hrl").
+
+-define(default_timeout, ?t:minutes(30)).
+-define(sl_alloc_vsns,[r9b]).
+
+init_per_testcase(_Case, Config) ->
+ DataDir = ?config(data_dir,Config),
+ Fs = filelib:wildcard(filename:join(DataDir,"*translated*")),
+ lists:foreach(fun(F) -> file:delete(F) end,Fs),
+ catch crashdump_viewer:stop(),
+ Dog = ?t:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+end_per_testcase(_Case, Config) ->
+ Dog=?config(watchdog, Config),
+ ?t:timetrap_cancel(Dog),
+ ok.
+
+all(suite) ->
+ [translate,{conf,start,[load_file,non_existing,not_a_crashdump,
+ old_crashdump],fini}].
+
+init_per_suite(doc) ->
+ ["Create a lot of crashdumps which can be used in the testcases below"];
+init_per_suite(Config) when is_list(Config) ->
+ Dog = ?t:timetrap(?default_timeout),
+ application:start(inets), % will be using the http client later
+ http:set_options([{ipv6,disabled}]),
+ DataDir = ?config(data_dir,Config),
+ Rels = [R || R <- [r12b,r13b], ?t:is_release_available(R)] ++ [current],
+ io:format("Creating crash dumps for the following releases: ~p", [Rels]),
+ AllDumps = create_dumps(DataDir,Rels),
+ ?t:timetrap_cancel(Dog),
+ [{dumps,AllDumps}|Config].
+
+translate(suite) ->
+ [];
+translate(doc) ->
+ ["Test that crash dumps from OTP R9B can be translated"];
+translate(Config) when is_list(Config) ->
+ DataDir = ?config(data_dir,Config),
+ OutFile = filename:join(DataDir,"translated"),
+
+ R9BFiles = filelib:wildcard(filename:join(DataDir,"r9b_dump.*")),
+ AllFiles = R9BFiles,
+ lists:foreach(
+ fun(File) ->
+ io:format("Translating file: ~s~n",[File]),
+ ok = crashdump_translate:old2new(File,OutFile),
+ check_result(File,OutFile)
+ end,
+ AllFiles),
+ ok.
+
+start(suite) ->
+ [];
+start(doc) ->
+ ["Test start and stop of the Crashdump Viewer"];
+start(Config) when is_list(Config) ->
+ %% Set a much shorter timeout here... We don't have all the time in world.
+ AngryDog = ?t:timetrap(?t:seconds(30)),
+ Port = start_cdv(),
+ true = is_pid(whereis(crashdump_viewer_server)),
+ true = is_pid(whereis(web_tool)),
+ Html = contents(Port,"start_page"),
+ "Welcome to the Web BasedErlang Crash Dump Analyser" = strip(Html),
+ ok = crashdump_viewer:stop(),
+ timer:sleep(10), % give some time to stop
+ undefined = whereis(crashdump_viewer_server),
+ undefined = whereis(web_tool),
+ Url = cdv_url(Port,"start_page"),
+ {error,_} = http:request(get,{Url,[]},[],[]),
+% exit(whereis(httpc_manager),kill),
+ ?t:timetrap_cancel(AngryDog),
+ ok.
+
+fini(Config) when is_list(Config) ->
+ ok.
+
+load_file(suite) ->
+ [];
+load_file(doc) ->
+ ["Load files into the tool and view all pages"];
+load_file(Config) when is_list(Config) ->
+ case ?t:is_debug() of
+ true ->
+ {skip,"Debug-compiled emulator -- far too slow"};
+ false ->
+ load_file_1(Config)
+ end.
+
+
+load_file_1(Config) ->
+ DataDir = ?config(data_dir,Config),
+ Port = start_cdv(),
+
+ AllFiles = filelib:wildcard(filename:join(DataDir,"r*_dump.*")),
+ lists:foreach(
+ fun(File) ->
+ browse_file(Port,File),
+ special(Port,File)
+ end,
+ AllFiles),
+ ok = crashdump_viewer:stop().
+
+non_existing(suite) ->
+ [];
+non_existing(doc) ->
+ ["Try to load nonexisting file"];
+non_existing(Config) when is_list(Config) ->
+ Port = start_cdv(),
+ Url = "http://localhost:"++Port++"/cdv_erl/crashdump_viewer/read_file",
+ Html = request_sync(post,{Url,[],[],"path=nonexistingfile"}),
+ "Please wait..." = title(Html),
+ "An error occured:nonexistingfile is not an Erlang crash dump" =
+ strip(wait(10,Port,"redirect")),
+ ok = crashdump_viewer:stop().
+
+old_crashdump(doc) ->
+ ["Try to load nonexisting file"];
+old_crashdump(Config) when is_list(Config) ->
+ Port = start_cdv(),
+ DataDir = ?config(data_dir, Config),
+ OldCrashDump = filename:join(DataDir, "old_format.dump"),
+ Url = "http://localhost:"++Port++"/cdv_erl/crashdump_viewer/read_file",
+ Html = request_sync(post,{Url,[],[],"path="++OldCrashDump}),
+ "Please wait..." = title(Html),
+ Str = "An error occured:The crashdump "++OldCrashDump++
+ " is in the pre-R10B format, which is no longer supported.",
+ Str = strip(wait(10,Port,"redirect")),
+ ok = crashdump_viewer:stop().
+
+
+not_a_crashdump(suite) ->
+ [];
+not_a_crashdump(doc) ->
+ ["Try to load a file which is not an erlang crashdump"];
+not_a_crashdump(Config) when is_list(Config) ->
+ Port = start_cdv(),
+ NoCrashdump = code:which(?MODULE),
+ Url = "http://localhost:"++Port++"/cdv_erl/crashdump_viewer/read_file",
+ Html = request_sync(post,{Url,[],[],"path="++NoCrashdump}),
+ "Please wait..." = title(Html),
+ Str = "An error occured:"++NoCrashdump++" is not an Erlang crash dump",
+ Str = strip(wait(10,Port,"redirect")),
+ ok = crashdump_viewer:stop(),
+% exit(whereis(httpc_manager),kill),
+ ok.
+
+
+
+end_per_suite(doc) ->
+ ["Remove generated crashdumps"];
+end_per_suite(Config) when is_list(Config) ->
+ Dumps = ?config(dumps,Config),
+ lists:foreach(fun(CD) -> ok = file:delete(CD) end,Dumps),
+ lists:keydelete(dumps,1,Config).
+
+
+%%%-----------------------------------------------------------------
+%%% Internal
+start_cdv() ->
+ ?t:capture_start(),
+ ok = crashdump_viewer:start(),
+ "WebTool is available at http://localhost:" ++ Where =
+ lists:flatten(?t:capture_get()),
+ ?t:capture_stop(),
+ [Port|_] = string:tokens(Where,"/"),
+ Port.
+
+
+check_result(File,OutFile) ->
+ {ok,#file_info{size=FS}} = file:read_file_info(File),
+ {ok,#file_info{size=OFS}} = file:read_file_info(OutFile),
+ Rel =
+ if OFS > 0 -> FS/OFS;
+ true -> 1.25
+ end,
+ if Rel>0.75, Rel<1.25 -> ok;
+ true -> ?t:fail({unreasonable_size,File,FS,OFS})
+ end,
+ {ok,Fd} = file:open(OutFile,[read]),
+ "=erl_crash_dump:0.0\n" = io:get_line(Fd,''),
+ case is_truncated(File) of
+ true ->
+ ok;
+ false ->
+ {ok,_} = file:position(Fd,{eof,-5}),
+ case io:get_line(Fd,'') of
+ "=end\n" -> ok;
+ Other -> ?t:fail({truncated,File,Other})
+ end
+ end,
+ ok = file:close(Fd).
+
+
+%% Read a page and check that the page title matches Title
+contents(Port,Link) ->
+ Url = cdv_url(Port,Link),
+ request_sync(get,{Url,[]}).
+
+cdv_url(Port,Link) ->
+ "http://localhost:" ++ Port ++ "/cdv_erl/crashdump_viewer/" ++ Link.
+
+request_sync(Method,HTTPReqCont) ->
+ case http:request(Method,
+ HTTPReqCont,
+ [{timeout,30000}],
+ [{full_result, false}]) of
+ {ok,{200,Html}} ->
+ Html;
+ {ok,{Code,Html}} ->
+ io:format("~s\n", [Html]),
+ io:format("Received ~w from http:request(...) with\nMethod=~w\n"
+ "HTTPReqCont=~p\n",
+ [Code,Method,HTTPReqCont]),
+ ?t:fail();
+ Other ->
+ io:format(
+ "Received ~w from http:request(...) with\nMethod=~w\n"
+ "HTTPReqCont=~p\n",
+ [Other,Method,HTTPReqCont]),
+ ?t:fail()
+ end.
+
+
+
+
+strip([$<|Html]) ->
+ strip(drop_tag(Html));
+strip([$\n|Html]) ->
+ strip(Html);
+strip([X|Html]) ->
+ [X|strip(Html)];
+strip([]) ->
+ [].
+drop_tag([$>|Html]) ->
+ Html;
+drop_tag([_|Html]) ->
+ drop_tag(Html).
+
+title(Port,Link,Title) ->
+ Html = contents(Port,Link),
+ Title = title(Html).
+
+wait(0,_Port,Link) ->
+ ?t:fail({wait,Link,timeout});
+wait(Time,Port,Link) ->
+ Html = contents(Port,Link),
+ case title(Html) of
+ "Please wait..." ->
+ timer:sleep(1000),
+ wait(Time-1,Port,Link);
+ _Title ->
+ Html
+ end.
+
+title([$<,$T,$I,$T,$L,$E,$>|Html]) ->
+ title_end(Html);
+title([_|Html]) ->
+ title(Html);
+title([]) ->
+ [].
+
+title_end([$<,$/,$T,$I,$T,$L,$E,$>|_]) ->
+ [];
+title_end([X|Html]) ->
+ [X|title_end(Html)].
+
+
+%%%-----------------------------------------------------------------
+%%% General check of what is displayed for a dump
+browse_file(Port,File) ->
+ io:format("Browsing file: ~s~n",[File]),
+
+ %% The page where a filename can be entered
+ title(Port,"read_file_frame","Read File"),
+
+ %% Load a file
+ Url = "http://localhost:"++Port++"/cdv_erl/crashdump_viewer/read_file",
+ Html = request_sync(post,{Url,[],[],"path="++File}),
+ "Please wait..." = title(Html),
+ "Crashdump Viewer Start Page" = title(wait(10,Port,"start_page")),
+
+ %% The frame with the initial information for a dump
+ title(Port,"initial_info_frame","General Information"),
+
+ %% Topmost frame of the page
+ FilenameFrame = contents(Port,"filename_frame"),
+ Match = "FilenameCrashdump currently viewed:" ++ File,
+ true = lists:prefix(Match,strip(FilenameFrame)),
+
+ %% Toggle a menu item and check that it explodes/collapses
+ title(Port,"menu_frame","Menu"),
+ exploded = toggle_menu(Port),
+ collapsed = toggle_menu(Port),
+
+ %% Open each page in menu and check that correct title is shown
+ title(Port,"general_info","General Information"),
+ title(Port,"processes","Process Information"),
+ title(Port,"sort_procs?sort=state","Process Information"),
+ title(Port,"sort_procs?sort=state","Process Information"),
+ title(Port,"sort_procs?sort=pid","Process Information"),
+ title(Port,"sort_procs?sort=pid","Process Information"),
+ title(Port,"sort_procs?sort=msg_q_len","Process Information"),
+ title(Port,"sort_procs?sort=msg_q_len","Process Information"),
+ title(Port,"sort_procs?sort=reds","Process Information"),
+ title(Port,"sort_procs?sort=reds","Process Information"),
+ title(Port,"sort_procs?sort=mem","Process Information"),
+ title(Port,"sort_procs?sort=mem","Process Information"),
+ title(Port,"sort_procs?sort=name","Process Information"),
+ title(Port,"sort_procs?sort=name","Process Information"),
+ title(Port,"sort_procs?sort=init_func","Process Information"),
+ title(Port,"sort_procs?sort=init_func","Process Information"),
+ title(Port,"ports","Port Information"),
+ title(Port,"ets_tables","ETS Table Information"),
+ title(Port,"timers","Timer Information"),
+ title(Port,"fun_table","Fun Information"),
+ title(Port,"atoms","Atoms"),
+ title(Port,"dist_info","Distribution Information"),
+ title(Port,"loaded_modules","Loaded Modules Information"),
+ title(Port,"hash_tables","Hash Table Information"),
+ title(Port,"index_tables","Index Table Information"),
+ title(Port,"memory","Memory Information"),
+ title(Port,"allocated_areas","Information about allocated areas"),
+ title(Port,"allocator_info","Allocator Information"),
+
+ case is_truncated(File) of
+ true ->
+ ok;
+ _ ->
+ proc_details(Port),
+ port_details(Port),
+ title(Port,"loaded_mod_details?mod=kernel","kernel")
+ end,
+
+ ok.
+
+
+special(Port,File) ->
+ case filename:extension(File) of
+ ".full_dist" ->
+ contents(Port,"processes"),
+ AllProcs = contents(Port,"sort_procs?sort=name"),
+
+ %% I registered a process as aaaaaaaa in the full_dist dumps
+ %% to make sure it will be the first in the list when sorted
+ %% on names. There are some special data here, s� I'll thoroughly
+ %% read the process details for this process. Other processes
+ %% are just briefly traversed.
+ {Pid,Rest1} = get_first_process(AllProcs),
+
+ ProcDetails = contents(Port,"proc_details?pid=" ++ Pid),
+ ProcTitle = "Process " ++ Pid,
+ ProcTitle = title(ProcDetails),
+ title(Port,"ets_tables?pid="++Pid,"ETS Tables for Process "++Pid),
+ title(Port,"timers?pid="++Pid,"Timers for Process "++Pid),
+
+ case filename:basename(File) of
+ "r10b_dump.full_dist" ->
+ [MsgQueueLink,DictLink,StackDumpLink] =
+ expand_memory_links(ProcDetails),
+ MsgQueue = contents(Port,MsgQueueLink),
+ "MsgQueue" = title(MsgQueue),
+ title(Port,DictLink,"Dictionary"),
+ title(Port,StackDumpLink,"StackDump"),
+
+ ExpandBinaryLink = expand_binary_link(MsgQueue),
+ title(Port,ExpandBinaryLink,"Expanded binary"),
+ lookat_all_pids(Port,Rest1);
+ _ ->
+ ok
+ end;
+ ".250atoms" ->
+ Html1 = contents(Port,"atoms"),
+ NextLink1 = next_link(Html1),
+ "Atoms" = title(Html1),
+ Html2 = contents(Port,NextLink1),
+ NextLink2 = next_link(Html2),
+ "Atoms" = title(Html2),
+ Html3 = contents(Port,NextLink2),
+ "" = next_link(Html3),
+ "Atoms" = title(Html3);
+ _ ->
+ ok
+ end,
+ case filename:basename(File) of
+ "r10b_dump." ++ _ ->
+ lookat_all_pids(Port,contents(Port,"processes"));
+ "r11b_dump." ++ _ ->
+ lookat_all_pids(Port,contents(Port,"processes"));
+ _ ->
+ ok
+ end,
+ ok.
+
+
+lookat_all_pids(Port,Pids) ->
+ case get_first_process(Pids) of
+ {Pid,Rest} ->
+ ProcDetails = contents(Port,"proc_details?pid=" ++ Pid),
+ ProcTitle = "Process " ++ Pid,
+ ProcTitle = title(ProcDetails),
+ title(Port,"ets_tables?pid="++Pid,"ETS Tables for Process "++Pid),
+ title(Port,"timers?pid="++Pid,"Timers for Process "++Pid),
+
+ MemoryLinks = expand_memory_links(ProcDetails),
+ lists:foreach(
+ fun(Link) ->
+ Cont = contents(Port,Link),
+ true = lists:member(title(Cont),
+ ["MsgQueue",
+ "Dictionary",
+ "StackDump"])
+ end,
+ MemoryLinks),
+ lookat_all_pids(Port,Rest);
+ false ->
+ ok
+ end.
+
+
+get_first_process([]) ->
+ false;
+get_first_process(Html) ->
+ case Html of
+ "<TD><A HREF=\"./proc_details?pid=" ++ Rest ->
+ {string:sub_word(Rest,1,$"),Rest};
+ [_H|T] ->
+ get_first_process(T)
+ end.
+
+expand_memory_links(Html) ->
+ case Html of
+ "<B>MsgQueue</B></TD><TD COLSPAN=3><A HREF=\"./" ++ Rest ->
+ [string:sub_word(Rest,1,$")|expand_memory_links(Rest)];
+ "<B>Dictionary</B></TD><TD COLSPAN=3><A HREF=\"./" ++ Rest ->
+ [string:sub_word(Rest,1,$")|expand_memory_links(Rest)];
+ "<B>StackDump</B></TD><TD COLSPAN=3><A HREF=\"./" ++ Rest ->
+ [string:sub_word(Rest,1,$")];
+ [_H|T] ->
+ expand_memory_links(T);
+ [] ->
+ []
+ end.
+
+expand_binary_link(Html) ->
+ case Html of
+ "<A HREF=\"./expand_binary?pos=" ++ Rest ->
+ "expand_binary?pos=" ++ string:sub_word(Rest,1,$");
+ [_H|T] ->
+ expand_binary_link(T)
+ end.
+
+
+next_link(Html) ->
+ case Html of
+ "<A HREF=\"./next?pos=" ++ Rest ->
+ "next?pos=" ++ string:sub_word(Rest,1,$");
+ [_H|T] ->
+ next_link(T);
+ [] ->
+ []
+ end.
+
+
+
+toggle_menu(Port) ->
+ Html = contents(Port,"toggle?index=10"),
+ check_toggle(Html).
+
+check_toggle(Html) ->
+ case Html of
+ "<A HREF=\"./toggle?index=10\"><IMG SRC=\"/crashdump_viewer/collapsd.gif\"" ++ _ ->
+ collapsed;
+ "<A HREF=\"./toggle?index=10\"><IMG SRC=\"/crashdump_viewer/exploded.gif\"" ++ _ ->
+ exploded;
+ [_H|T] ->
+ check_toggle(T)
+ end.
+
+
+proc_details(Port) ->
+ ProcDetails = contents(Port,"proc_details?pid=<0.0.0>"),
+ "Process <0.0.0>" = title(ProcDetails),
+
+ ExpandLink = expand_link(ProcDetails),
+ title(Port,ExpandLink,"StackDump"),
+
+ Unknown = contents(Port,"proc_details?pid=<0.9999.0>"),
+ "Could not find process: <0.9999.0>" = title(Unknown).
+
+expand_link(Html) ->
+ case Html of
+ "<B>StackDump</B></TD><TD COLSPAN=3><A HREF=\"./" ++ Rest ->
+ string:sub_word(Rest,1,$");
+ [_H|T] ->
+ expand_link(T)
+ end.
+
+
+port_details(Port) ->
+ Port1 = contents(Port,"ports?port=Port<0.1>"),
+ "#Port<0.1>" = title(Port1),
+
+ Port0 = contents(Port,"ports?port=Port<0.0>"),
+ "Could not find port: #Port<0.0>" = title(Port0).
+
+is_truncated(File) ->
+ case filename:extension(filename:rootname(File)) of
+ ".trunc" -> true;
+ _ -> false
+ end.
+
+
+%%%-----------------------------------------------------------------
+%%%
+create_dumps(DataDir,Rels) ->
+ create_dumps(DataDir,Rels,[]).
+create_dumps(DataDir,[Rel|Rels],Acc) ->
+ Fun = fun() -> do_create_dumps(DataDir,Rel) end,
+ Pa = filename:dirname(code:which(?MODULE)),
+ {SlAllocDumps,Dumps,DosDump} =
+ ?t:run_on_shielded_node(Fun, compat_rel(Rel) ++ "-pa " ++ Pa),
+ create_dumps(DataDir,Rels,SlAllocDumps ++ Dumps ++ Acc ++ DosDump);
+create_dumps(_DataDir,[],Acc) ->
+ Acc.
+
+do_create_dumps(DataDir,Rel) ->
+ SlAllocDumps =
+ case lists:member(Rel,?sl_alloc_vsns) of
+ true ->
+ [dump_with_args(DataDir,Rel,"no_sl_alloc","+Se false"),
+ dump_with_args(DataDir,Rel,"sl_alloc_1","+Se true +Sr 1"),
+ dump_with_args(DataDir,Rel,"sl_alloc_2","+Se true +Sr 2")];
+ false ->
+ []
+ end,
+ CD1 = full_dist_dump(DataDir,Rel),
+ CD2 = dump_with_args(DataDir,Rel,"port_is_unix_fd","-oldshell"),
+ DosDump =
+ case os:type() of
+ {unix,sunos} -> dos_dump(DataDir,Rel,CD1);
+ _ -> []
+ end,
+ case Rel of
+ current ->
+ CD3 = dump_with_args(DataDir,Rel,"instr","+Mim true"),
+ {SlAllocDumps, [CD1,CD2,CD3], DosDump};
+ _ ->
+ {SlAllocDumps, [CD1,CD2], DosDump}
+ end.
+
+
+%% Create a dump which has two visible nodes, one hidden and one
+%% not connected node, and with monitors and links between nodes.
+full_dist_dump(DataDir,Rel) ->
+ Opt = rel_opt(Rel),
+ Pz = "-pz " ++ filename:dirname(code:which(?MODULE)),
+ PzOpt = [{args,Pz}],
+ {ok,N1} = ?t:start_node(n1,peer,Opt ++ PzOpt),
+ {ok,N2} = ?t:start_node(n2,peer,Opt ++ PzOpt),
+ {ok,N3} = ?t:start_node(n3,peer,Opt ++ PzOpt),
+ {ok,N4} = ?t:start_node(n4,peer,Opt ++ [{args,"-hidden " ++ Pz}]),
+ Creator = self(),
+
+ HelperMod = crashdump_helper,
+
+ P1 = rpc:call(N1,HelperMod,n1_proc,[N2,Creator]),
+ P2 = rpc:call(N2,HelperMod,remote_proc,[P1,Creator]),
+ P3 = rpc:call(N3,HelperMod,remote_proc,[P1,Creator]),
+ P4 = rpc:call(N4,HelperMod,remote_proc,[P1,Creator]),
+
+ get_response(P2),
+ get_response(P3),
+ get_response(P4),
+ get_response(P1),
+
+ L = lists:seq(0,255),
+ BigMsg = {message,list_to_binary(L),L},
+ Port = hd(erlang:ports()),
+ {aaaaaaaa,N1} ! {short,message,1,2.5,"hello world",Port,{}},
+ {aaaaaaaa,N1} ! BigMsg,
+
+ ?t:stop_node(N3),
+ DumpName = "full_dist",
+ CD = dump(N1,DataDir,Rel,DumpName),
+
+ ?t:stop_node(N2),
+ ?t:stop_node(N4),
+ CD.
+
+get_response(P) ->
+ receive {P,done} -> ok
+ after 3000 -> ?t:fail({get_response_timeout,P,node(P)})
+ end.
+
+
+dump_with_args(DataDir,Rel,DumpName,Args) ->
+ RelOpt = rel_opt(Rel),
+ Opt = RelOpt ++ [{args,Args}],
+ {ok,N1} = ?t:start_node(n1,peer,Opt),
+ CD = dump(N1,DataDir,Rel,DumpName),
+ ?t:stop_node(n1),
+ CD.
+
+
+
+dump(Node,DataDir,Rel,DumpName) ->
+ rpc:call(Node,erlang,halt,[DumpName]),
+ Crashdump0 = filename:join(filename:dirname(code:which(?t)),
+ "erl_crash_dump.n1"),
+ Crashdump1 = filename:join(DataDir, dump_prefix(Rel)++DumpName),
+ ok = rename(Crashdump0,Crashdump1),
+ Crashdump1.
+
+rename(From,To) ->
+ ok = check_complete(From),
+ case file:rename(From,To) of
+ {error,exdev} ->
+ {ok,_} = file:copy(From,To),
+ ok = file:delete(From);
+ ok ->
+ ok
+ end.
+
+check_complete(File) ->
+ check_complete1(File,5).
+
+check_complete1(_File,0) ->
+ {error,enoent};
+check_complete1(File,N) ->
+ case file:read_file_info(File) of
+ {error,enoent} ->
+ timer:sleep(500),
+ check_complete1(File,N-1);
+ {ok,#file_info{size=Size}} ->
+ check_complete2(File,Size)
+ end.
+
+check_complete2(File,Size) ->
+ timer:sleep(500),
+ case file:read_file_info(File) of
+ {ok,#file_info{size=Size}} ->
+ ok;
+ {ok,#file_info{size=OtherSize}} ->
+ check_complete2(File,OtherSize)
+ end.
+
+dos_dump(DataDir,Rel,Dump) ->
+ DosDumpName = filename:join(DataDir,dump_prefix(Rel)++"dos"),
+ Cmd = "unix2dos " ++ Dump ++ " > " ++ DosDumpName,
+ Port = open_port({spawn,Cmd},[exit_status]),
+ receive
+ {Port,{exit_status,0}} ->
+ [DosDumpName];
+ {Port,{exit_status,_Error}} ->
+ ?t:comment("Couldn't run \'unix2dos\'"),
+ []
+ end.
+
+rel_opt(Rel) ->
+ case Rel of
+ r9b -> [{erl,[{release,"r9b_patched"}]}];
+ r9c -> [{erl,[{release,"r9c_patched"}]}];
+ r10b -> [{erl,[{release,"r10b_patched"}]}];
+ r11b -> [{erl,[{release,"r11b_patched"}]}];
+ r12b -> [{erl,[{release,"r12b_patched"}]}];
+ r13b -> [{erl,[{release,"r13b_patched"}]}];
+ current -> []
+ end.
+
+dump_prefix(Rel) ->
+ case Rel of
+ r9b -> "r9b_dump.";
+ r9c -> "r9c_dump.";
+ r10b -> "r10b_dump.";
+ r11b -> "r11b_dump.";
+ r12b -> "r12b_dump.";
+ r13b -> "r13b_dump.";
+ current -> "r14b_dump."
+ end.
+
+compat_rel(Rel) ->
+ case Rel of
+ r9b -> "+R9 ";
+ r9c -> "+R9 ";
+ r10b -> "+R10 ";
+ r11b -> "+R11 ";
+ r12b -> "+R12 ";
+ r13b -> "+R13 ";
+ current -> ""
+ end.
diff --git a/lib/observer/test/crashdump_viewer_SUITE_data/old_format.dump b/lib/observer/test/crashdump_viewer_SUITE_data/old_format.dump
new file mode 100644
index 0000000000..2c8944fa9d
--- /dev/null
+++ b/lib/observer/test/crashdump_viewer_SUITE_data/old_format.dump
@@ -0,0 +1,3991 @@
+<Erlang crash dump>
+Mon Feb 17 10:48:12 2003
+
+Slogan: saf
+
+
+Erlang (BEAM) emulator version 5.0.2.23
+Compiled on Wed Dec 4 11:11:21 2002
+
+Process Information
+--------------------------------------------------
+<0.0.0> Waiting. Registered as: init
+Spawned as: otp_ring0:start/2
+Message buffer data: 4 words
+Link list: [<0.5.0>,<0.4.0>,<0.2.0>]
+Reductions 3125 stack+heap 610 old_heap_sz=233
+Heap unused=417 OldHeap unused=233
+Stack dump:
+program counter = 0x31a2cc (init:loop/1 + 20)
+cp = 0xfcec8 (<terminate process normally>)
+arity = 0
+
+3169f8 Return addr 0xFCEC8 (<terminate process normally>)
+y(0) {state,[{'-root',[<<53 bytes>>]},{'-progname',[<<3 bytes>>]},{'-home',[<<10 bytes>>]}],[],[],[{application_controller,<0.5.0>},{error_logger,<0.4.0>},{erl_prim_loader,<0.2.0>}],<0.1.0>,{started,started},{"OTP APN 181 01","R7B01"},[]}
+--------------------------------------------------
+<0.2.0> Waiting. Registered as: erl_prim_loader
+Spawned as: erl_prim_loader:start_it/4
+Message buffer data: 0 words
+Link list: [<0.0.0>,#Port<0.2>]
+Reductions 13587 stack+heap 610 old_heap_sz=610
+Heap unused=358 OldHeap unused=610
+Stack dump:
+program counter = 0x32963c (erl_prim_loader:loop/3 + 52)
+cp = 0xfcec8 (<terminate process normally>)
+arity = 0
+
+4289dc Return addr 0xFCEC8 (<terminate process normally>)
+y(0) ["/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/kernel-2.6.3.15/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/stdlib-1.9.4.4/ebin"]
+y(1) <0.1.0>
+y(2) {state,[],none,get_from_port_efile,stop_port,exit_port,#Port<0.2>,infinity,dummy_in_handler}
+y(3) infinity
+--------------------------------------------------
+<0.4.0> Waiting. Registered as: error_logger
+Spawned as: proc_lib:init_p/5
+Message buffer data: 0 words
+Link list: [<0.19.0>,<0.0.0>]
+Dictionary: [{'$initial_call',{gen,init_it,[gen_event,<0.1.0>,<0.1.0>,{local,error_logger},[],[],[]]}},{'$ancestors',[<0.1.0>]}]
+Reductions 1462 stack+heap 1597 old_heap_sz=0
+Heap unused=1180 OldHeap unused=0
+Stack dump:
+program counter = 0x33f0c0 (gen_event:loop/4 + 40)
+cp = 0x33480c (proc_lib:init_p/5 + 164)
+arity = 0
+
+334244 Return addr 0x33480C (proc_lib:init_p/5 + 164)
+y(0) []
+y(1) [{handler,error_logger,false,[],false},{handler,error_logger_tty_h,false,{<0.19.0>,error_logger},false}]
+y(2) error_logger
+y(3) <0.1.0>
+
+334258 Return addr 0xFCEC8 (<terminate process normally>)
+y(0) Catch 0x33480C (proc_lib:init_p/5 + 164)
+y(1) gen
+y(2) init_it
+y(3) [gen_event,<0.1.0>,<0.1.0>,{local,error_logger},[],[],[]]
+--------------------------------------------------
+<0.5.0> Waiting. Registered as: application_controller
+Spawned as: proc_lib:init_p/5
+Message buffer data: 4 words
+Link list: [<0.7.0>,<0.0.0>]
+Dictionary: [{'$initial_call',{gen,init_it,[gen_server,<0.1.0>,<0.1.0>,{local,application_controller},application_controller,{application,kernel,[{description,"ERTS CXC 138 10"},{vsn,"2.6.3.15"},{id,[]},{modules,[application,application_controller,application_master,application_starter,auth,code,code_aux,code_server,code_server_int,dist_util,erl_boot_server,erl_distribution,erl_open_port,erl_prim_loader,erl_reply,erlang,error_handler,error_logger,file,global,global_group,global_search,group,heart,inet6_tcp,inet6_tcp_dist,inet6_udp,inet_config,inet_hosts,inet_gethost_native,inet_tcp_dist,otp_pre_init,init,kernel,kernel_config,net,net_adm,net_kernel,os,ram_file,rpc,user,user_drv,user_sup,disk_log,disk_log_1,disk_log_server,disk_log_sup,dist_ac,erl_atom_cache,erl_ddll,erl_epmd,erl_external,erts_debug,fixtable_server,gen_tcp,gen_udp,prim_inet,inet,inet_db,inet_dns,inet_parse,inet_res,inet_tcp,inet_udp,pg2,seq_trace,socks5,socks5_auth,socks5_tcp,socks5_udp,wrap_log_reader,otp_ring0]},{registered,[application_controller,erl_reply,auth,boot_server,code_server,disk_log_server,disk_log_sup,erl_prim_loader,error_logger,file_server,fixtable_server,global_group,global_name_server,heart,init,kernel_config,kernel_sup,net_kernel,net_sup,rex,user,os_server,ddll_server,erl_epmd,inet_db,pg2]},{applications,[]},{included_applications,[]},{env,[{error_logger,tty}]},{start_phases,undefined},{maxT,infinity},{maxP,infinity},{mod,{kernel,[]}}]},[]]}},{'$ancestors',[<0.1.0>]}]
+Reductions 527 stack+heap 1597 old_heap_sz=0
+Heap unused=833 OldHeap unused=0
+Stack dump:
+program counter = 0x34ff24 (gen_server:loop/6 + 52)
+cp = 0x33480c (proc_lib:init_p/5 + 164)
+arity = 0
+
+3ed70c Return addr 0x33480C (proc_lib:init_p/5 + 164)
+y(0) []
+y(1) infinity
+y(2) application_controller
+y(3) {state,[],[],[],[{stdlib,undefined},{kernel,<0.7.0>}],[],[{stdlib,permanent},{kernel,permanent}],[],[]}
+y(4) application_controller
+y(5) <0.1.0>
+
+3ed728 Return addr 0xFCEC8 (<terminate process normally>)
+y(0) Catch 0x33480C (proc_lib:init_p/5 + 164)
+y(1) gen
+y(2) init_it
+y(3) [gen_server,<0.1.0>,<0.1.0>,{local,application_controller},application_controller,{application,kernel,[{description,"ERTS CXC 138 10"},{vsn,"2.6.3.15"},{id,[]},{modules,[application,application_controller,application_master,application_starter,auth,code,code_aux,code_server,code_server_int,dist_util,erl_boot_server,erl_distribution,erl_open_port,erl_prim_loader,erl_reply,erlang,error_handler,error_logger,file,global,global_group,global_search,group,heart,inet6_tcp,inet6_tcp_dist,inet6_udp,inet_config,inet_hosts,inet_gethost_native,inet_tcp_dist,otp_pre_init,init,kernel,kernel_config,net,net_adm,net_kernel,os,ram_file,rpc,user,user_drv,user_sup,disk_log,disk_log_1,disk_log_server,disk_log_sup,dist_ac,erl_atom_cache,erl_ddll,erl_epmd,erl_external,erts_debug,fixtable_server,gen_tcp,gen_udp,prim_inet,inet,inet_db,inet_dns,inet_parse,inet_res,inet_tcp,inet_udp,pg2,seq_trace,socks5,socks5_auth,socks5_tcp,socks5_udp,wrap_log_reader,otp_ring0]},{registered,[application_controller,erl_reply,auth,boot_server,code_server,disk_log_server,disk_log_sup,erl_prim_loader,error_logger,file_server,fixtable_server,global_group,global_name_server,heart,init,kernel_config,kernel_sup,net_kernel,net_sup,rex,user,os_server,ddll_server,erl_epmd,inet_db,pg2]},{applications,[]},{included_applications,[]},{env,[{error_logger,tty}]},{start_phases,undefined},{maxT,infinity},{maxP,infinity},{mod,{kernel,[]}}]},[]]
+--------------------------------------------------
+<0.7.0> Waiting.
+Spawned as: proc_lib:init_p/5
+Message buffer data: 0 words
+Link list: [<0.8.0>,<0.5.0>]
+Dictionary: [{'$initial_call',{application_master,init,[<0.5.0>,<0.6.0>,{appl_data,kernel,[application_controller,erl_reply,auth,boot_server,code_server,disk_log_server,disk_log_sup,erl_prim_loader,error_logger,file_server,fixtable_server,global_group,global_name_server,heart,init,kernel_config,kernel_sup,net_kernel,net_sup,rex,user,os_server,ddll_server,erl_epmd,inet_db,pg2],undefined,{kernel,[]},[application,application_controller,application_master,application_starter,auth,code,code_aux,code_server,code_server_int,dist_util,erl_boot_server,erl_distribution,erl_open_port,erl_prim_loader,erl_reply,erlang,error_handler,error_logger,file,global,global_group,global_search,group,heart,inet6_tcp,inet6_tcp_dist,inet6_udp,inet_config,inet_hosts,inet_gethost_native,inet_tcp_dist,otp_pre_init,init,kernel,kernel_config,net,net_adm,net_kernel,os,ram_file,rpc,user,user_drv,user_sup,disk_log,disk_log_1,disk_log_server,disk_log_sup,dist_ac,erl_atom_cache,erl_ddll,erl_epmd,erl_external,erts_debug,fixtable_server,gen_tcp,gen_udp,prim_inet,inet,inet_db,inet_dns,inet_parse,inet_res,inet_tcp,inet_udp,pg2,seq_trace,socks5,socks5_auth,socks5_tcp,socks5_udp,wrap_log_reader,otp_ring0],[],infinity,infinity},normal]}},{'$ancestors',[<0.6.0>]}]
+Reductions 45 stack+heap 377 old_heap_sz=377
+Heap unused=306 OldHeap unused=377
+Stack dump:
+program counter = 0x339ee0 (application_master:main_loop/2 + 28)
+cp = 0x33480c (proc_lib:init_p/5 + 164)
+arity = 0
+
+347174 Return addr 0x33480C (proc_lib:init_p/5 + 164)
+y(0) {state,<0.8.0>,{appl_data,kernel,[application_controller,erl_reply,auth,boot_server,code_server,disk_log_server,disk_log_sup,erl_prim_loader,error_logger,file_server,fixtable_server,global_group,global_name_server,heart,init,kernel_config,kernel_sup,net_kernel,net_sup,rex,user,os_server,ddll_server,erl_epmd,inet_db,pg2],undefined,{kernel,[]},[application,application_controller,application_master,application_starter,auth,code,code_aux,code_server,code_server_int,dist_util,erl_boot_server,erl_distribution,erl_open_port,erl_prim_loader,erl_reply,erlang,error_handler,error_logger,file,global,global_group,global_search,group,heart,inet6_tcp,inet6_tcp_dist,inet6_udp,inet_config,inet_hosts,inet_gethost_native,inet_tcp_dist,otp_pre_init,init,kernel,kernel_config,net,net_adm,net_kernel,os,ram_file,rpc,user,user_drv,user_sup,disk_log,disk_log_1,disk_log_server,disk_log_sup,dist_ac,erl_atom_cache,erl_ddll,erl_epmd,erl_external,erts_debug,fixtable_server,gen_tcp,gen_udp,prim_inet,inet,inet_db,inet_dns,inet_parse,inet_res,inet_tcp,inet_udp,pg2,seq_trace,socks5,socks5_auth,socks5_tcp,socks5_udp,wrap_log_reader,otp_ring0],[],infinity,infinity},[],0,<0.0.0>}
+y(1) <0.5.0>
+
+347180 Return addr 0xFCEC8 (<terminate process normally>)
+y(0) Catch 0x33480C (proc_lib:init_p/5 + 164)
+y(1) application_master
+y(2) init
+y(3) [<0.5.0>,<0.6.0>,{appl_data,kernel,[application_controller,erl_reply,auth,boot_server,code_server,disk_log_server,disk_log_sup,erl_prim_loader,error_logger,file_server,fixtable_server,global_group,global_name_server,heart,init,kernel_config,kernel_sup,net_kernel,net_sup,rex,user,os_server,ddll_server,erl_epmd,inet_db,pg2],undefined,{kernel,[]},[application,application_controller,application_master,application_starter,auth,code,code_aux,code_server,code_server_int,dist_util,erl_boot_server,erl_distribution,erl_open_port,erl_prim_loader,erl_reply,erlang,error_handler,error_logger,file,global,global_group,global_search,group,heart,inet6_tcp,inet6_tcp_dist,inet6_udp,inet_config,inet_hosts,inet_gethost_native,inet_tcp_dist,otp_pre_init,init,kernel,kernel_config,net,net_adm,net_kernel,os,ram_file,rpc,user,user_drv,user_sup,disk_log,disk_log_1,disk_log_server,disk_log_sup,dist_ac,erl_atom_cache,erl_ddll,erl_epmd,erl_external,erts_debug,fixtable_server,gen_tcp,gen_udp,prim_inet,inet,inet_db,inet_dns,inet_parse,inet_res,inet_tcp,inet_udp,pg2,seq_trace,socks5,socks5_auth,socks5_tcp,socks5_udp,wrap_log_reader,otp_ring0],[],infinity,infinity},normal]
+--------------------------------------------------
+<0.8.0> Waiting.
+Spawned as: application_master:start_it/4
+Message buffer data: 0 words
+Link list: [<0.9.0>,<0.7.0>]
+Reductions 113 stack+heap 233 old_heap_sz=377
+Heap unused=59 OldHeap unused=377
+Stack dump:
+program counter = 0x33b324 (application_master:loop_it/4 + 40)
+cp = 0xfcec8 (<terminate process normally>)
+arity = 0
+
+330c30 Return addr 0xFCEC8 (<terminate process normally>)
+y(0) {state,tty}
+y(1) kernel
+y(2) <0.9.0>
+y(3) <0.7.0>
+--------------------------------------------------
+<0.9.0> Waiting. Registered as: kernel_sup
+Spawned as: proc_lib:init_p/5
+Message buffer data: 306 words
+Link list: [<0.22.0>,<0.21.0>,<0.17.0>,<0.16.0>,<0.15.0>,<0.14.0>,<0.13.0>,<0.11.0>,<0.10.0>,<0.8.0>]
+Dictionary: [{'$initial_call',{gen,init_it,[gen_server,<0.8.0>,<0.8.0>,{local,kernel_sup},supervisor,{{local,kernel_sup},kernel,[]},[]]}},{'$ancestors',[<0.8.0>]}]
+Reductions 7060 stack+heap 1597 old_heap_sz=0
+Heap unused=209 OldHeap unused=0
+Stack dump:
+program counter = 0x34ff24 (gen_server:loop/6 + 52)
+cp = 0x33480c (proc_lib:init_p/5 + 164)
+arity = 0
+
+3a6384 Return addr 0x33480C (proc_lib:init_p/5 + 164)
+y(0) []
+y(1) infinity
+y(2) supervisor
+y(3) {state,{local,kernel_sup},one_for_all,[{child,<0.22.0>,kernel_safe_sup,{supervisor,start_link,[{local,kernel_safe_sup},kernel,safe]},permanent,infinity,supervisor,[kernel]},{child,<0.21.0>,kernel_config,{kernel_config,start_link,[]},permanent,2000,worker,[kernel_config]},{child,<0.17.0>,user,{user_sup,start,[]},temporary,2000,supervisor,[user_sup]},{child,<0.16.0>,code_server,{code,start_link,[]},permanent,2000,worker,[code]},{child,<0.15.0>,file_server,{file,start_link,[]},permanent,2000,worker,[file]},{child,<0.14.0>,global_group,{global_group,start_link,[]},permanent,2000,worker,[global_group]},{child,undefined,net_sup,{erl_distribution,start_link,[]},permanent,infinity,supervisor,[erl_distribution]},{child,<0.13.0>,inet_db,{inet_db,start_link,[]},permanent,2000,worker,[inet_db]},{child,<0.11.0>,global_name_server,{global,start_link,[]},permanent,2000,worker,[global]},{child,<0.10.0>,rex,{rpc,start_link,[]},permanent,2000,worker,[rpc]}],[],0,1,[],kernel,[]}
+y(4) kernel_sup
+y(5) <0.8.0>
+
+3a63a0 Return addr 0xFCEC8 (<terminate process normally>)
+y(0) Catch 0x33480C (proc_lib:init_p/5 + 164)
+y(1) gen
+y(2) init_it
+y(3) [gen_server,<0.8.0>,<0.8.0>,{local,kernel_sup},supervisor,{{local,kernel_sup},kernel,[]},[]]
+--------------------------------------------------
+<0.10.0> Waiting. Registered as: rex
+Spawned as: proc_lib:init_p/5
+Message buffer data: 0 words
+Link list: [<0.9.0>]
+Dictionary: [{'$initial_call',{gen,init_it,[gen_server,<0.9.0>,<0.9.0>,{local,rex},rpc,[],[]]}},{'$ancestors',[kernel_sup,<0.8.0>]}]
+Reductions 31 stack+heap 233 old_heap_sz=0
+Heap unused=147 OldHeap unused=0
+Stack dump:
+program counter = 0x34ff24 (gen_server:loop/6 + 52)
+cp = 0x33480c (proc_lib:init_p/5 + 164)
+arity = 0
+
+38e734 Return addr 0x33480C (proc_lib:init_p/5 + 164)
+y(0) []
+y(1) infinity
+y(2) rpc
+y(3) []
+y(4) rex
+y(5) <0.9.0>
+
+38e750 Return addr 0xFCEC8 (<terminate process normally>)
+y(0) Catch 0x33480C (proc_lib:init_p/5 + 164)
+y(1) gen
+y(2) init_it
+y(3) [gen_server,<0.9.0>,<0.9.0>,{local,rex},rpc,[],[]]
+--------------------------------------------------
+<0.11.0> Waiting. Registered as: global_name_server
+Spawned as: proc_lib:init_p/5
+Message buffer data: 0 words
+Link list: [<0.12.0>,<0.9.0>]
+Dictionary: [{'$initial_call',{gen,init_it,[gen_server,<0.9.0>,<0.9.0>,{local,global_name_server},global,[],[]]}},{'$ancestors',[kernel_sup,<0.8.0>]}]
+Reductions 44 stack+heap 233 old_heap_sz=0
+Heap unused=100 OldHeap unused=0
+Stack dump:
+program counter = 0x34ff24 (gen_server:loop/6 + 52)
+cp = 0x33480c (proc_lib:init_p/5 + 164)
+arity = 0
+
+39abec Return addr 0x33480C (proc_lib:init_p/5 + 164)
+y(0) []
+y(1) infinity
+y(2) global
+y(3) {state,true,[],[],[],[],'nonode@nohost',<0.12.0>}
+y(4) global_name_server
+y(5) <0.9.0>
+
+39ac08 Return addr 0xFCEC8 (<terminate process normally>)
+y(0) Catch 0x33480C (proc_lib:init_p/5 + 164)
+y(1) gen
+y(2) init_it
+y(3) [gen_server,<0.9.0>,<0.9.0>,{local,global_name_server},global,[],[]]
+--------------------------------------------------
+<0.12.0> Waiting.
+Spawned as: global:init_the_locker/1
+Message buffer data: 0 words
+Link list: [<0.11.0>]
+Reductions 3 stack+heap 233 old_heap_sz=0
+Heap unused=215 OldHeap unused=0
+Stack dump:
+program counter = 0x3abf20 (global:loop_the_locker/2 + 112)
+cp = 0x3abd50 (global:init_the_locker/1 + 112)
+arity = 0
+
+31766c Return addr 0x3ABD50 (global:init_the_locker/1 + 112)
+y(0) []
+y(1) []
+y(2) []
+y(3) []
+y(4) []
+y(5) []
+y(6) infinity
+y(7) {multi,undefined,[]}
+y(8) <0.11.0>
+
+317694 Return addr 0xFCEC8 (<terminate process normally>)
+y(0) []
+--------------------------------------------------
+<0.13.0> Waiting. Registered as: inet_db
+Spawned as: proc_lib:init_p/5
+Message buffer data: 0 words
+Link list: [<0.9.0>]
+Dictionary: [{'$initial_call',{gen,init_it,[gen_server,<0.9.0>,<0.9.0>,{local,inet_db},inet_db,[],[]]}},{'$ancestors',[kernel_sup,<0.8.0>]}]
+Reductions 420 stack+heap 233 old_heap_sz=0
+Heap unused=119 OldHeap unused=0
+Stack dump:
+program counter = 0x34ff24 (gen_server:loop/6 + 52)
+cp = 0x33480c (proc_lib:init_p/5 + 164)
+arity = 0
+
+336e04 Return addr 0x33480C (proc_lib:init_p/5 + 164)
+y(0) []
+y(1) infinity
+y(2) inet_db
+y(3) {state,inet_db,inet_cache,inet_hosts,#Ref<0.0.0.6>}
+y(4) inet_db
+y(5) <0.9.0>
+
+336e20 Return addr 0xFCEC8 (<terminate process normally>)
+y(0) Catch 0x33480C (proc_lib:init_p/5 + 164)
+y(1) gen
+y(2) init_it
+y(3) [gen_server,<0.9.0>,<0.9.0>,{local,inet_db},inet_db,[],[]]
+--------------------------------------------------
+<0.14.0> Waiting. Registered as: global_group
+Spawned as: proc_lib:init_p/5
+Message buffer data: 0 words
+Link list: [<0.9.0>]
+Dictionary: [{'$initial_call',{gen,init_it,[gen_server,<0.9.0>,<0.9.0>,{local,global_group},global_group,[],[]]}},{registered_names,[undefined]},{'$ancestors',[kernel_sup,<0.8.0>]},{send,[undefined]},{whereis_name,[undefined]}]
+Reductions 71 stack+heap 233 old_heap_sz=0
+Heap unused=80 OldHeap unused=0
+Stack dump:
+program counter = 0x34ff24 (gen_server:loop/6 + 52)
+cp = 0x33480c (proc_lib:init_p/5 + 164)
+arity = 0
+
+3eb47c Return addr 0x33480C (proc_lib:init_p/5 + 164)
+y(0) []
+y(1) infinity
+y(2) global_group
+y(3) {state,no_conf,true,[],[],[],[],[],'nonode@nohost',[],normal,normal}
+y(4) global_group
+y(5) <0.9.0>
+
+3eb498 Return addr 0xFCEC8 (<terminate process normally>)
+y(0) Catch 0x33480C (proc_lib:init_p/5 + 164)
+y(1) gen
+y(2) init_it
+y(3) [gen_server,<0.9.0>,<0.9.0>,{local,global_group},global_group,[],[]]
+--------------------------------------------------
+<0.15.0> Waiting. Registered as: file_server
+Spawned as: proc_lib:init_p/5
+Message buffer data: 208 words
+Link list: [#Port<0.4>,<0.9.0>]
+Dictionary: [{'$initial_call',{gen,init_it,[gen_server,<0.9.0>,<0.9.0>,{local,file_server},file,[],[]]}},{'$ancestors',[kernel_sup,<0.8.0>]}]
+Reductions 43458 stack+heap 6765 old_heap_sz=0
+Heap unused=2485 OldHeap unused=0
+Stack dump:
+program counter = 0x34ff24 (gen_server:loop/6 + 52)
+cp = 0x33480c (proc_lib:init_p/5 + 164)
+arity = 0
+
+3de984 Return addr 0x33480C (proc_lib:init_p/5 + 164)
+y(0) []
+y(1) infinity
+y(2) file
+y(3) #Port<0.4>
+y(4) file_server
+y(5) <0.9.0>
+
+3de9a0 Return addr 0xFCEC8 (<terminate process normally>)
+y(0) Catch 0x33480C (proc_lib:init_p/5 + 164)
+y(1) gen
+y(2) init_it
+y(3) [gen_server,<0.9.0>,<0.9.0>,{local,file_server},file,[],[]]
+--------------------------------------------------
+<0.16.0> Waiting. Registered as: code_server
+Spawned as: proc_lib:init_p/5
+Message buffer data: 508 words
+Link list: [<0.9.0>]
+Dictionary: [{'$initial_call',{gen,init_it,[gen_server,<0.9.0>,<0.9.0>,{local,code_server},code_server,["/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched",interactive],[]]}},{'$ancestors',[kernel_sup,<0.8.0>]}]
+Reductions 71231 stack+heap 17711 old_heap_sz=0
+Heap unused=8909 OldHeap unused=0
+Stack dump:
+program counter = 0x34ff24 (gen_server:loop/6 + 52)
+cp = 0x33480c (proc_lib:init_p/5 + 164)
+arity = 0
+
+45128c Return addr 0x33480C (proc_lib:init_p/5 + 164)
+y(0) []
+y(1) infinity
+y(2) code_server
+y(3) {state,"/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched",[".","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/kernel-2.6.3.15/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/stdlib-1.9.4.4/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/tv-2.0.3/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/tools-1.6.3.1/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/toolbar-1.0.4/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/ssl-2.3.2/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/snmp-3.3.7/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/sasl-1.9.2/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/runtime_tools-1.1.6/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/pman-2.4/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/parsetools-1.1/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/os_mon-1.4.2/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/orber-3.4.1/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/odbc-0.8.2/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/observer-0.9.1/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/mnesia_session-1.1.4/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/mnesia-3.10.7/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/mnemosyne-1.2.5/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/mesh-1.1.0/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/megaco-1.0.4/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/jinterface-1.2.1","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/inets-2.6.5/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/ic-4.2/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/gs-1.3.8/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/eva-2.0.2.1/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/etk-0.9.3/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/erl_interface-3.2.9","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/debugger-1.5.3/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/crypto-1.1.2/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/cosTransactions-1.2/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/cosTime-1.1/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/cosNotification-1.1/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/cosEvent-2.1/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/compiler-3.0.1.2/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/comet-1.1","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/asn1-1.3.1.4/ebin","/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched/lib/appmon-2.0.1/ebin","/home/siri/erlang","/ldisk/siri/tools/distel-3.1/ebin"],9,10,[],interactive}
+y(4) code_server
+y(5) <0.9.0>
+
+4512a8 Return addr 0xFCEC8 (<terminate process normally>)
+y(0) Catch 0x33480C (proc_lib:init_p/5 + 164)
+y(1) gen
+y(2) init_it
+y(3) [gen_server,<0.9.0>,<0.9.0>,{local,code_server},code_server,["/usr/local/otp/releases/otp_beam_sunos5_r7b01_patched",interactive],[]]
+--------------------------------------------------
+<0.17.0> Waiting.
+Spawned as: proc_lib:init_p/5
+Message buffer data: 156 words
+Link list: [<0.19.0>,<0.9.0>]
+Dictionary: [{'$initial_call',{gen,init_it,[gen_server,<0.9.0>,<0.9.0>,supervisor_bridge,[user_sup,[],self],[]]}},{'$ancestors',[kernel_sup,<0.8.0>]}]
+Reductions 80 stack+heap 233 old_heap_sz=0
+Heap unused=44 OldHeap unused=0
+Stack dump:
+program counter = 0x34ff24 (gen_server:loop/6 + 52)
+cp = 0x33480c (proc_lib:init_p/5 + 164)
+arity = 0
+
+3cf014 Return addr 0x33480C (proc_lib:init_p/5 + 164)
+y(0) []
+y(1) infinity
+y(2) supervisor_bridge
+y(3) {state,user_sup,<0.19.0>,<0.19.0>,{<0.17.0>,user_sup}}
+y(4) <0.17.0>
+y(5) <0.9.0>
+
+3cf030 Return addr 0xFCEC8 (<terminate process normally>)
+y(0) Catch 0x33480C (proc_lib:init_p/5 + 164)
+y(1) gen
+y(2) init_it
+y(3) [gen_server,<0.9.0>,<0.9.0>,supervisor_bridge,[user_sup,[],self],[]]
+--------------------------------------------------
+<0.18.0> Waiting.
+Spawned as: user_drv:server/2
+Message buffer data: 0 words
+Link list: [<0.20.0>,<0.19.0>,#Port<0.5>]
+Dictionary: [{eof,false}]
+Reductions 473 stack+heap 377 old_heap_sz=377
+Heap unused=178 OldHeap unused=377
+Stack dump:
+program counter = 0x39ec48 (user_drv:server_loop/5 + 44)
+cp = 0xfcec8 (<terminate process normally>)
+arity = 0
+
+32db5c Return addr 0xFCEC8 (<terminate process normally>)
+y(0) {3,2,<0.20.0>,[{1,<0.19.0>,{}},{2,<0.20.0>,{shell,start,[]}}]}
+y(1) <0.19.0>
+y(2) <0.20.0>
+y(3) #Port<0.5>
+y(4) #Port<0.5>
+--------------------------------------------------
+<0.19.0> Waiting. Registered as: user
+Spawned as: group:server/2
+Message buffer data: 0 words
+Link list: [<0.4.0>,<0.17.0>,<0.18.0>]
+Dictionary: [{line_buffer,[]},{kill_buffer,[]}]
+Reductions 968 stack+heap 987 old_heap_sz=610
+Heap unused=497 OldHeap unused=610
+Stack dump:
+program counter = 0x368db0 (group:server_loop/3 + 32)
+cp = 0xfcec8 (<terminate process normally>)
+arity = 0
+
+420ecc Return addr 0xFCEC8 (<terminate process normally>)
+y(0) []
+y(1) undefined
+y(2) <0.18.0>
+--------------------------------------------------
+<0.20.0> Waiting.
+Spawned as: group:server/2
+Message buffer data: 0 words
+Link list: [<0.23.0>,<0.18.0>]
+Dictionary: [{line_buffer,["halt(\"saf\").\n","\n"]},{shell,<0.23.0>},{kill_buffer,[]}]
+Reductions 1643 stack+heap 377 old_heap_sz=233
+Heap unused=268 OldHeap unused=233
+Stack dump:
+program counter = 0x368db0 (group:server_loop/3 + 32)
+cp = 0xfcec8 (<terminate process normally>)
+arity = 0
+
+3edd1c Return addr 0xFCEC8 (<terminate process normally>)
+y(0) []
+y(1) <0.23.0>
+y(2) <0.18.0>
+--------------------------------------------------
+<0.21.0> Waiting.
+Spawned as: proc_lib:init_p/5
+Message buffer data: 0 words
+Link list: [<0.9.0>]
+Dictionary: [{'$initial_call',{gen,init_it,[gen_server,<0.9.0>,<0.9.0>,kernel_config,[],[]]}},{'$ancestors',[kernel_sup,<0.8.0>]}]
+Reductions 39 stack+heap 233 old_heap_sz=0
+Heap unused=78 OldHeap unused=0
+Stack dump:
+program counter = 0x34ff24 (gen_server:loop/6 + 52)
+cp = 0x33480c (proc_lib:init_p/5 + 164)
+arity = 0
+
+3683a4 Return addr 0x33480C (proc_lib:init_p/5 + 164)
+y(0) []
+y(1) infinity
+y(2) kernel_config
+y(3) []
+y(4) <0.21.0>
+y(5) <0.9.0>
+
+3683c0 Return addr 0xFCEC8 (<terminate process normally>)
+y(0) Catch 0x33480C (proc_lib:init_p/5 + 164)
+y(1) gen
+y(2) init_it
+y(3) [gen_server,<0.9.0>,<0.9.0>,kernel_config,[],[]]
+--------------------------------------------------
+<0.22.0> Waiting. Registered as: kernel_safe_sup
+Spawned as: proc_lib:init_p/5
+Message buffer data: 0 words
+Link list: [<0.9.0>]
+Dictionary: [{'$initial_call',{gen,init_it,[gen_server,<0.9.0>,<0.9.0>,{local,kernel_safe_sup},supervisor,{{local,kernel_safe_sup},kernel,safe},[]]}},{'$ancestors',[kernel_sup,<0.8.0>]}]
+Reductions 60 stack+heap 233 old_heap_sz=0
+Heap unused=82 OldHeap unused=0
+Stack dump:
+program counter = 0x34ff24 (gen_server:loop/6 + 52)
+cp = 0x33480c (proc_lib:init_p/5 + 164)
+arity = 0
+
+32fae4 Return addr 0x33480C (proc_lib:init_p/5 + 164)
+y(0) []
+y(1) infinity
+y(2) supervisor
+y(3) {state,{local,kernel_safe_sup},one_for_one,[],[],4,3600,[],kernel,safe}
+y(4) kernel_safe_sup
+y(5) <0.9.0>
+
+32fb00 Return addr 0xFCEC8 (<terminate process normally>)
+y(0) Catch 0x33480C (proc_lib:init_p/5 + 164)
+y(1) gen
+y(2) init_it
+y(3) [gen_server,<0.9.0>,<0.9.0>,{local,kernel_safe_sup},supervisor,{{local,kernel_safe_sup},kernel,safe},[]]
+--------------------------------------------------
+<0.23.0> Waiting.
+Spawned as: shell:server/1
+Message buffer data: 31 words
+Link list: [<0.27.0>,<0.20.0>]
+Dictionary: []
+Reductions 111 stack+heap 233 old_heap_sz=0
+Heap unused=173 OldHeap unused=0
+Stack dump:
+program counter = 0x41ae64 (shell:shell_rep/3 + 36)
+cp = 0x419728 (shell:server_loop/4 + 1016)
+arity = 0
+
+39e014 Return addr 0x419728 (shell:server_loop/4 + 1016)
+y(0) []
+y(1) []
+y(2) []
+y(3) <0.27.0>
+
+39e028 Return addr 0xFCEC8 (<terminate process normally>)
+y(0) []
+y(1) 1
+y(2) [{call,3,{atom,3,halt},[{string,3,"saf"}]}]
+y(3) []
+y(4) []
+y(5) []
+--------------------------------------------------
+<0.27.0> Running.
+Spawned as: shell:evaluator/3
+Last scheduled in for: erlang:halt/1
+Message buffer data: 0 words
+Link list: [<0.23.0>]
+Reductions 24 stack+heap 233 old_heap_sz=0
+Heap unused=120 OldHeap unused=0
+Stack dump:
+program counter = 0x119c54 (unknown function)
+cp = 0x422188 (erl_eval:expr/3 + 1112)
+
+399a48 Return addr 0x421C74 (erl_eval:exprs/4 + 52)
+y(0) []
+y(1) []
+y(2) []
+y(3) []
+
+399a5c Return addr 0x41B3D0 (shell:eval_loop/2 + 240)
+y(0) []
+y(1) {eval,{shell,local_func},[<0.23.0>]}
+
+399a68 Return addr 0xFCEC8 (<terminate process normally>)
+y(0) []
+y(1) []
+y(2) []
+y(3) <0.23.0>
+--------------------------------------------------
+
+Zombie Process Information
+Processes kept: 0
+--------------------------------------------------
+
+Port Information
+--------------------------------------------------
+<1>
+Connected: #Port<0.0>
+Port controls linked-in driver: async
+--------------------------------------------------
+<2>
+Connected: <0.2.0>
+Links: <0.2.0>
+Port controls linked-in driver: efile
+--------------------------------------------------
+<4>
+Connected: <0.15.0>
+Links: <0.15.0>
+Port controls linked-in driver: efile
+--------------------------------------------------
+<5>
+Connected: <0.18.0>
+Links: <0.18.0>
+Port controls linked-in driver: tty_sl -c -e
+--------------------------------------------------
+
+Internal Table Information
+--------------------------------------------------
+Hash Table(atom_tab), size(2411), used(1777), objs(3269), depth(8)
+Index Table(atom_tab), size(3300), limit(1048576), used(3270), rate(100)
+Atom space 33915/65544
+Hash Table(module_code), size(97), used(49), objs(61), depth(3)
+Index Table(module_code), size(70), limit(65536), used(61), rate(10)
+Hash Table(export_list), size(1201), used(895), objs(1558), depth(6)
+Index Table(export_list), size(1600), limit(65536), used(1558), rate(100)
+Hash Table(process_reg), size(23), used(12), objs(13), depth(2)
+Mmap chunks 0
+Mmap size 0/0
+Allocated binary 37252
+Allocated by process_desc 11040
+Allocated by table_desc 1120
+Allocated by link_desc 2880
+Allocated by atom_desc 78720
+Allocated by export_desc 62400
+Allocated by module_desc 3200
+Allocated by preg_desc 320
+--------------------------------------------------
+
+ETS tables
+--------------------------------------------------
+In slot 9
+Table 9(with name)code
+Owner <0.16.0>
+Buckets: 256
+Table's got 220 objects
+Table's got 11372 words of active data
+
+In slot 10
+Table 10(with name)code_names
+Owner <0.16.0>
+Buckets: 256
+Table's got 39 objects
+Table's got 5947 words of active data
+
+In slot 264
+Table file_io_servers(with name)file_io_servers
+Owner <0.15.0>
+Buckets: 256
+Table's got 0 objects
+Table's got 0 words of active data
+
+In slot 875
+Table inet_hosts(with name)inet_hosts
+Owner <0.13.0>
+Buckets: 256
+Table's got 4 objects
+Table's got 112 words of active data
+
+In slot 899
+Table inet_db(with name)inet_db
+Owner <0.13.0>
+Buckets: 256
+Table's got 20 objects
+Table's got 234 words of active data
+
+In slot 1202
+Table ac_tab(with name)ac_tab
+Owner <0.5.0>
+Buckets: 256
+Table's got 6 objects
+Table's got 508 words of active data
+
+In slot 1607
+Table global_names(with name)global_names
+Owner <0.11.0>
+Buckets: 256
+Table's got 0 objects
+Table's got 0 words of active data
+
+In slot 1619
+Table global_locks(with name)global_locks
+Owner <0.11.0>
+Buckets: 256
+Table's got 0 objects
+Table's got 0 words of active data
+
+In slot 1620
+Table global_names_ext(with name)global_names_ext
+Owner <0.11.0>
+Buckets: 256
+Table's got 0 objects
+Table's got 0 words of active data
+
+In slot 1842
+Table inet_cache(with name)inet_cache
+Owner <0.13.0>
+Buckets: 256
+Table's got 0 objects
+Table's got 0 words of active data
+
+
+Timers
+--------------------------------------------------
+message=refresh_timeout, pid=<0.13.0>, time left 3593292 ms
+--------------------------------------------------
+
+Distribution Information
+Not alive
+
+Loaded Modules Information
+--------------------------------------------------
+otp_ring0 448
+init 28000
+prim_inet 34800
+erl_prim_loader 14187
+erlang 5751
+error_handler 1691
+heart 6093
+error_logger 6347
+gen_event 17687
+gen 7142
+proc_lib 10250
+application_controller 54728
+gen_server 16422
+sys 11562
+lists 19762
+application 2515
+application_master 10640
+kernel 7059
+supervisor 21159
+rpc 11856
+global 41295
+inet_db 36752
+inet_config 11809
+inet_udp 2471
+inet 26666
+inet_parse 21970
+os 5922
+filename 16858
+inet_hosts 3811
+erl_distribution 2524
+global_group 32620
+net_kernel 35168
+file 30538
+erl_open_port 3319
+code 7146
+ets 15083
+fixtable_server 10283
+code_server 24117
+code_server_int 2053
+code_aux 1704
+string 7538
+user_sup 2503
+supervisor_bridge 2587
+user_drv 12046
+group 8588
+io_lib 8661
+edlin 17419
+io_lib_format 12167
+shell 12096
+kernel_config 3254
+error_logger_tty_h 6287
+erl_eval 26214
+orddict 4878
+c 23302
+io 6522
+erl_scan 15973
+erl_parse 132363
+user_default 1034
+io_lib_pretty 6503
+erl_internal 3634
+
+Totals. Current code = 933777 Old code = 0
+--------------------------------------------------
+
+Atoms
+--------------------------------------------------
+false
+true
+'_'
+'nonode@nohost'
+fun
+infinity
+timeout
+normal
+call
+return
+'DOWN'
+'EXIT'
+all
+allocated
+allocated_areas
+allocator
+and
+andthen
+arity
+attributes
+backtrace
+backtrace_depth
+badarg
+badarith
+badarity
+badcookie
+badfile
+badmatch
+badsig
+badfun
+bag
+band
+binary
+bnot
+bor
+bxor
+bsl
+bsr
+caller
+case_clause
+catchlevel
+cd
+clear
+close
+closed
+command
+compile
+compressed
+connect
+connected
+const
+context_switches
+cpu_timestamp
+current_function
+data
+debug_flags
+dexit
+depth
+dgroup_leader
+dictionary
+disable_trace
+display_items
+dist
+'/'
+div
+dlink
+dmonitor_node
+dmonitor_p
+'$$'
+'$_'
+'$dictionary'
+dsend
+dsend_nosuspend
+dunlink
+duplicate_bag
+elib_malloc
+emulator
+enable_trace
+env
+eof
+eol
+'=:='
+'=='
+erlang
+error
+error_handler
+error_logger
+exit_status
+existing
+exiting
+exports
+fd
+fix_alloc
+flags
+fullsweep_after
+fullsweep_if_old_binaries
+function
+functions
+function_clause
+garbage_collection
+gc_end
+gc_start
+'>='
+generational
+get_seq_token
+get_tcw
+getenv
+getting_linked
+getting_unlinked
+global
+'>'
+heap_block_size
+heap_size
+heap_sizes
+hidden
+hide
+high
+id
+if_clause
+imports
+in
+index
+initial_call
+input
+internal_error
+instruction_counts
+invalid
+is_seq_trace
+io
+keep_zombies
+keypos
+kill
+killed
+known
+label
+last_calls
+'=<'
+line
+links
+local
+low
+'<'
+machine
+match_spec
+max
+maximum
+max_tables
+max_processes
+mbuf_size
+memory
+message
+message_queue_len
+messages
+min_heap_size
+'-'
+module
+module_info
+monitored_by
+monitors
+more
+name
+named_table
+'=/='
+'/='
+net_kernel
+new
+nocatch
+noconnect
+noconnection
+nocookie
+node
+nodedown
+noeol
+nofile
+noproc
+not
+not_purged
+notalive
+nouse_stdio
+objects
+old_heap_block_size
+old_heap_size
+on_load
+or
+ordered_set
+orelse
+os_type
+os_version
+out
+output
+owner
+packet
+'+'
+pid
+port
+print
+priority
+private
+process
+process_count
+process_limit
+process_dump
+procs
+protected
+protection
+public
+purify
+quantify
+receive
+recent_size
+reductions
+register
+registered_name
+rem
+return_from
+return_to
+return_trace
+run_queue
+runnable
+running
+runtime
+save_calls
+see_zombies
+sequential_tracer
+sequential_trace_token
+serial
+set
+set_on_first_link
+set_on_first_spawn
+set_on_link
+set_on_spawn
+set_seq_token
+set_tcw
+silent
+size
+sl_alloc
+stack_size
+start
+status
+stderr_to_stdout
+stop
+stream
+suspend
+suspended
+system_limit
+system_version
+'SYSTEM'
+table
+this
+thread_pool_size
+timeout_value
+'*'
+timestamp
+trace
+trace_ts
+traced
+trace_control_word
+tracer
+trap_exit
+type
+undef
+undefined
+undefined_function
+undefined_lambda
+unregister
+ultrasparc_read_pic1
+ultrasparc_read_tick1
+ultrasparc_read_pic2
+ultrasparc_read_tick2
+ultrasparc_set_pcr
+use_mmap_table
+use_stdio
+used
+uniq
+value
+version
+visible
+waiting
+wall_clock
+xor
+abs
+append
+apply
+atom_to_list
+binary_to_list
+binary_to_term
+check_process_code
+concat_binary
+date
+delete_module
+display
+display_string
+display_nl
+element
+erase
+exit
+float
+float_to_list
+fun_info
+function_exported
+garbage_collect
+get
+get_keys
+group_leader
+halt
+hash
+phash
+hd
+info
+integer_to_list
+is_alive
+length
+link
+list_to_atom
+list_to_binary
+list_to_float
+list_to_integer
+list_to_pid
+list_to_tuple
+load_module
+loaded
+localtime
+localtime_to_universaltime
+make_ref
+md5
+md5_init
+md5_update
+md5_final
+module_loaded
+monitor_node
+nodes
+now
+open_port_prim
+pid_to_list
+port_info
+ports
+pre_loaded
+process_flag
+process_info
+processes
+purge_module
+put
+registered
+round
+self
+send
+send_nosuspend
+setelement
+spawn
+spawn_link
+split_binary
+statistics
+subtract
+term_to_binary
+throw
+time
+tl
+trunc
+tuple_to_list
+universaltime
+universaltime_to_localtime
+unlink
+whereis
+spawn_opt
+setnode
+dist_exit
+dist_unlink
+dist_link
+port_command
+port_control
+port_close
+port_connect
+trace_pattern
+trace_info
+suspend_process
+resume_process
+yield
+bump_reductions
+math
+cos
+cosh
+sin
+sinh
+tan
+tanh
+acos
+acosh
+asin
+asinh
+atan
+atanh
+erf
+erfc
+exp
+log
+log10
+sqrt
+atan2
+pow
+old_binary_to_term
+start_timer
+send_after
+cancel_timer
+read_timer
+make_tuple
+append_element
+seq_trace
+seq_trace_info
+seq_trace_print
+system_flag
+system_info
+ref_to_list
+port_to_list
+fun_to_list
+monitor
+demonitor
+process_display
+is_process_alive
+fault
+is_builtin
+is_atom
+is_list
+is_tuple
+is_constant
+is_float
+is_integer
+is_number
+is_pid
+is_port
+is_reference
+is_binary
+is_function
+is_record
+match_spec_test
+'$put'
+'$get'
+'$get_keys'
+'$erase'
+ets
+db_delete
+delete
+first
+fixtable
+lookup
+lookup_element
+db_info
+last
+match
+match_delete
+db_match_object
+next
+prev
+insert
+rename
+slot
+update_counter
+select
+match_spec_compile
+match_spec_run
+os
+putenv
+getpid
+lists
+member
+reverse
+keymember
+keysearch
+vector
+from_list
+to_list
+erts_debug
+disassemble
+make_fun
+'$end_of_table'
+ok
+tcp
+tcp_closed
+tcp_error
+udp
+udp_closed
+udp_error
+inet_async
+inet_reply
+empty_out_q
+otp_ring0
+boot
+init
+run
+fatal
+'does not export'
+'/1'
+get_arguments
+get_plain_arguments
+get_argument
+script_id
+bs2as
+bs2ss
+get_args
+get_flag
+get_flags
+get_status
+fetch_loaded
+ensure_loaded
+make_permanent
+request
+restart
+reboot
+prepare_run_args
+s
+b2a
+b2s
+map
+values_to_atoms_again
+flags_to_atoms_again
+starting
+state
+to_string
+things_to_string
+halt_string
+crash
+boot_loop
+progress
+started
+'init terminating in do_boot'
+garb_boot_loop
+new_kernelpid
+ignore
+'could not start kernel pid'
+loop
+not_allowed
+handle_msg
+new_state
+do_handle_msg
+notfound
+user
+'-boot'
+'-config'
+set_flag
+stopping
+do_stop
+clear_system
+stop_heart
+shutdown
+shutdown_pids
+get_heart
+heart
+shutdown_kernel_pid
+shutdown_loop
+shutdown_timeout
+resend
+kill_all_pids
+alive_processes
+filter
+get_pids
+kill_em
+kill_all_ports
+unload
+do_unload
+sub
+del
+terminate
+'Kernel pid terminated'
+kernel_pid
+sleep
+start_prim_loader
+erl_prim_loader
+set_path
+'can not start loader'
+add_to_kernel
+prim_load_flags
+'-loader'
+'-hosts'
+none
+'-id'
+'-path'
+do_boot
+'-root'
+'-mode'
+'-init_debug'
+'-boot_var'
+bootfile
+path_flags
+'-pa'
+'-pz'
+get_boot
+not_found
+'can not get bootfile'
+'bootfile format error'
+get_file
+script
+eval_script
+kernel_load_completed
+embedded
+path
+primLoad
+preLoaded
+kernelProcess
+debug
+load_modules
+fix_path
+add_var
+extract_var
+get_var_value
+get_var_val
+start_in_kernel
+start_em
+start_it
+load_mod
+shutdown_timer
+'-shutdown_time'
+timer
+flush_timout
+parse_boot_args
+arg
+end_args
+start_arg
+start_arg2
+flag
+check
+get_flag_list
+get_flag_args
+to_strings
+get_argument1
+set_argument
+concat
+search
+extension
+'-values_to_atoms_again/1-fun-0-'
+'-boot/1-fun-0-'
+'-bs2ss/1-fun-0-'
+'-bs2as/1-fun-0-'
+'can not load'
+'unexpected command in bootfile'
+prim_inet
+open
+inet6
+inet
+einval
+fdopen
+open1
+fdopen1
+open0
+dgram
+udp_inet
+tcp_inet
+subs_empty_out_q
+close_pend_loop
+send_pend
+bind
+connect0
+async_connect
+accept
+accept0
+accept_opts
+keepalive
+nodelay
+active
+async_accept
+listen
+sendto
+recv
+recv0
+async_recv
+recvfrom
+recvfrom0
+peername
+setpeername
+sockname
+setsockname
+setopt
+setopts
+getopt
+getopts
+getiflist
+ifget
+ifset
+subscribe
+getstat
+getfd
+getindex
+gettype
+getstatus
+gethostname
+getservbyname
+getservbyname1
+getservbyport
+getservbyport1
+unrecv
+detach
+attach
+is_sockopt_val
+enc_opt
+send_timeout
+bit8
+low_watermark
+high_watermark
+exit_on_close
+deliver
+mode
+header
+buffer
+drop_membership
+add_membership
+multicast_loop
+multicast_ttl
+multicast_if
+recbuf
+sndbuf
+broadcast
+linger
+dontroute
+reuseaddr
+dec_opt
+type_opt
+tpkt
+fcgi
+cdr
+asn1
+sunrm
+raw
+enum
+off
+on
+once
+term
+list
+ip
+bool
+int
+uint
+type_value
+bitenumlist
+ether
+enc_value
+loopback
+any
+dec_value
+borlist
+enum_vals
+enum_names
+enum_val
+enum_name
+encode_opt_val
+enc_opt_val
+encode_opts
+enc_opts
+decode_opt_val
+dec_opt_val
+type_ifopt
+netmask
+addr
+broadaddr
+dstaddr
+mtu
+hwaddr
+multicast
+no_pointtopoint
+pointtopoint
+no_broadcast
+down
+up
+enc_ifopt
+dec_ifopt
+decode_ifopts
+encode_ifopts
+encode_ifopt_val
+encode_subs
+enc_subs
+decode_subs
+dec_subs
+encode_stats
+enc_stats
+send_oct
+recv_oct
+send_avg
+send_max
+send_cnt
+recv_dvi
+recv_avg
+recv_max
+recv_cnt
+decode_stats
+dec_stats
+dec_status
+bound
+connecting
+accepting
+listening
+busy
+enc_time
+encode_ifname
+build_iflist
+rev
+ip_to_bytes
+ip4_to_bytes
+ip6_to_bytes
+get_ip
+get_ip4
+get_ip6
+ctl_cmd
+internal
+get_from_port_inet
+stop_port
+inet_exit_port
+dummy_in_handler
+efile
+get_from_port_efile
+exit_port
+get_from_port
+init_ack
+get_path
+handle_input
+get_from_port1
+'prim_load port died'
+die
+port_died
+get_from_port_efile1
+find_master
+connect_master
+ebusy
+find_loop
+find_collect
+noport
+badrecord
+inet_in_handler
+get_from_port_inet1
+tcp_options
+tcp_timeout
+udp_options
+ll_tcp_connect
+ll_udp_open
+ll_open_set_bind
+ll_close
+port_error
+absolute_filename
+win32
+send_all
+keysort
+keyins
+to_strs
+ipv4_list
+einal
+ipv4_address
+ipv4_addr
+'-progname'
+'-home'
+'no -loader flag'
+'no -hosts flag'
+'no -id flag'
+'no -path flag'
+'no -boot flag'
+preloaded
+application
+application_controller
+application_master
+application_starter
+auth
+code
+code_aux
+code_server
+code_server_int
+dist_util
+erl_boot_server
+erl_distribution
+erl_open_port
+erl_reply
+file
+global_group
+global_search
+group
+inet6_tcp
+inet6_tcp_dist
+inet6_udp
+inet_config
+inet_hosts
+inet_gethost_native
+inet_tcp_dist
+otp_pre_init
+kernel
+kernel_config
+net
+net_adm
+ram_file
+rpc
+user_drv
+user_sup
+disk_log
+disk_log_1
+disk_log_server
+disk_log_sup
+dist_ac
+erl_atom_cache
+erl_ddll
+erl_epmd
+erl_external
+fixtable_server
+gen_tcp
+gen_udp
+inet_db
+inet_dns
+inet_parse
+inet_res
+inet_tcp
+inet_udp
+pg2
+socks5
+socks5_auth
+socks5_tcp
+socks5_udp
+wrap_log_reader
+beam_lib
+bplus_tree
+c
+calendar
+dets
+dict
+digraph
+digraph_utils
+edlin
+epp
+eval_bits
+erl_bits
+erl_compile
+erl_eval
+erl_id_trans
+erl_internal
+erl_lint
+erl_parse
+erl_posix_msg
+erl_pp
+erl_scan
+erl_tar
+error_logger_file_h
+error_logger_tty_h
+filelib
+filename
+gen
+gen_event
+gen_fsm
+gen_server
+io_lib
+io_lib_format
+io_lib_fread
+io_lib_pretty
+lib
+log_mf_h
+orddict
+ordsets
+otp_internal
+pg
+pool
+proc_lib
+queue
+random
+regexp
+sets
+shell
+shell_default
+slave
+string
+supervisor
+supervisor_bridge
+sys
+unix
+win32reg
+modules_loaded
+start_link
+description
+vsn
+modules
+boot_server
+file_server
+global_name_server
+kernel_sup
+net_sup
+rex
+os_server
+ddll_server
+applications
+included_applications
+tty
+start_phases
+maxT
+maxP
+mod
+init_kernel_started
+load
+stdlib
+timer_server
+rsh_starter
+take_over_monitor
+pool_master
+applications_loaded
+start_boot
+permanent
+erlangrc
+'no -mode flag'
+'no -init_debug flag'
+sunos
+open_port
+crasher
+'** Can not start ~w:~w,~w on ~w **~n'
+error_msg
+disconnect_node
+disconnect
+sand
+sor
+sxor
+snot
+sgt
+sge
+slt
+sle
+seq
+seqeq
+sneq
+sneqeq
+ignored
+set_cookie
+get_cookie
+'-fun_info/1-fun-0-'
+interpret
+eval
+stub_function
+wait_for_init_ack
+no_heart
+start_error
+set_cmd
+clear_cmd
+cycle
+wait
+start_portprogram
+port_problem
+get_heart_timeouts
+check_start_heart
+bad_heart_flag
+wait_ack
+bad_cmd
+port_terminated
+no_reboot_shutdown
+do_cycle_port_program
+stop_error
+send_heart_beat
+send_heart_cmd
+send_shutdown
+report_problem
+root
+progname
+home
+format
+error_report
+std_error
+info_report
+std_info
+info_msg
+error_info
+notify
+swap_handler
+logfile
+swap
+add_report_handler
+add_handler
+delete_report_handler
+delete_handler
+simple_logger
+which_handlers
+allready_have_logfile
+no_log_file
+go_back
+handle_event
+handle_info
+handle_call
+bad_query
+lost_messages
+handle_event2
+tag_event
+add_node
+display2
+nice
+nice_tuple
+is_string
+nolink
+init_it
+debug_options
+add_sup_handler
+sync_notify
+swap_sup_handler
+call1
+system
+handle_system_msg
+print_event
+handle_debug
+get_modules
+terminate_server
+do_unlink
+foreach
+handle_exit
+terminate_supervised
+system_continue
+system_terminate
+system_code_change
+zf
+server_add_handler
+handler
+server_add_sup_handler
+server_delete_handler
+module_not_found
+server_swap_handler
+s_s_h
+split_and_terminate
+swapped
+server_notify
+no
+server_update
+remove_handler
+remove
+do_swap
+new_handler
+split
+server_call
+bad_module
+replace
+server_call_update
+do_terminate
+report_terminate
+gen_event_EXIT
+report_error
+stop_handlers
+the_handlers
+list_to_set
+set_to_list
+format_status
+items
+'-get_modules/1-fun-0-'
+'-the_handlers/1-fun-0-'
+'-system_code_change/4-fun-0-'
+code_change
+'-terminate_supervised/4-fun-0-'
+parent_terminated
+'-do_unlink/2-fun-0-'
+already_started
+do_spawn
+init_it2
+do_call
+wait_resp_mon
+wait_resp
+reply
+where
+whereis_name
+name_register
+register_name
+yes
+spawn_opts
+opt
+init_p
+ensure_link
+'$ancestors'
+'$initial_call'
+exit_p
+sync_wait
+ack
+flush
+init_call
+translate_initial_call
+trans_init
+crash_report
+my_info
+get_ancestors
+ancestors
+get_cleaned_dictionary
+clean_dict
+get_dictionary
+linked_info
+make_neighbour_reports1
+neighbour
+make_neighbour_report
+get_initial_call
+max_neighbours
+neighbours
+visit
+adjacents
+no_trap
+get_process_info
+translate_process_info
+get_my_name
+proc_info
+badrpc
+format_own
+format_link
+format_report
+format_rep
+load_application
+unload_application
+start_application
+start_boot_application
+bad_environment_value
+already_loaded
+flatten
+stop_application
+which_applications
+loaded_applications
+ac_tab
+control_application
+change_application_data
+prep_config_change
+config_change
+get_pid_env
+'$1'
+get_env
+get_pid_all_env
+get_all_env
+'$2'
+get_pid_key
+get_key
+appl
+get_pid_all_key
+get_all_key
+start_type
+get_master
+get_application
+get_application_module
+appl_data
+permit_application
+set_env
+'invalid configuration file'
+'load error'
+check_conf_data
+'configuration must be a list ended by <dot><whitespace>'
+check_para_kernel
+distributed
+check_distributed
+check_para
+keydelete
+ac_application_stopped
+not_started
+ac_load_application_req
+noreply
+ac_application_unloaded
+not_loaded
+distributed_application
+only_loaded
+ac_start_application_req
+permissions
+start_p_false
+loading
+handle_cast
+application_started
+handle_application_started
+temporary
+transient
+ac_start_application_reply
+ac_change_application_req
+ac_load_application_reply
+takeover
+failover
+not_running
+stop_it
+ac_application_not_run
+keyreplace
+cntrl
+notify_cntrl_started
+ac_application_run
+del_cntrl
+get_loaded
+do_load_application
+foldl
+check_start_cond
+do_start
+spawn_starter
+init_starter
+cast
+start_appl
+stop_appl
+stopped
+keysearchdelete
+ksd
+keyreplaceadd
+validRestartType
+invalid_restart_type
+nd
+get_restart_type
+get_appl_name
+bad_application
+make_appl
+path_consult
+format_error
+make_appl_i
+badstartspec
+invalid_name
+invalid_options
+do_change_apps
+do_change_appl
+get_opt
+get_cmd_env
+conv
+make_term
+dot
+parse_term
+get_env_i
+merge_env
+merge_app_env
+get_env_key
+add_env
+del_env
+check_user
+do_prep_config_change
+do_config_change
+sort
+module_not_defined
+application_not_found
+do_config_diff
+check_conf
+config
+load_file
+tokens
+done
+nth
+'['
+']'
+parse_file
+open_file
+get_new_appl
+change_appl
+info_started
+started_at
+info_exited
+exited
+reply_to_requester
+update_permissions
+test_change_apps
+test_do_change_appl
+test_make_apps
+'-reply_to_requester/3-fun-0-'
+'-check_conf/0-fun-0-'
+basename
+dirname
+join
+config_error
+'-do_config_diff/3-fun-0-'
+'-add_env/2-fun-0-'
+'-get_cmd_env/1-fun-0-'
+'-do_change_apps/3-fun-0-'
+'-start_appl/3-fun-0-'
+'-check_start_cond/4-fun-0-'
+'-unload/2-fun-0-'
+'-load/2-fun-0-'
+'-terminate/2-fun-0-'
+'-handle_call/3-fun-2-'
+'-handle_call/3-fun-1-'
+'-handle_call/3-fun-0-'
+'-get_application_module/1-fun-1-'
+'-get_application_module/1-fun-0-'
+'-get_all_env/1-fun-0-'
+'-loaded_applications/0-fun-0-'
+'$gen_call'
+do_cast
+'$gen_cast'
+abcast
+multi_call
+send_nodes
+start_monitor
+unmonitor
+rec_nodes
+rec_nodes_rest
+bad_return_value
+dispatch
+handle_common_reply
+print_log
+dbg_options
+generic_debug
+dbg_opts
+get_debug
+resume
+change_code
+log_to_file
+no_debug
+install
+send_system_msg
+mfa
+suspend_loop
+do_cmd
+unknown_system_msg
+debug_cmd
+write
+unknown_debug
+do_change_code
+standard_io
+init_stat
+get_stat
+messages_out
+messages_in
+current_time
+start_time
+no_statistics
+stat
+trim
+sublist
+install_debug
+remove_debug
+close_log_file
+'-print_log/1-fun-0-'
+nthtail
+prefix
+suffix
+sum
+duplicate
+min
+sublist_2
+split2
+init_merge_lists
+mergeit
+rmergeit
+combine
+merge
+merge2
+rmerge
+rmerge2
+thing_to_list
+flat_length
+flatlength
+keydelete3
+keyreplace3
+keysort2
+samkeyrun
+keymerge
+keymap
+fsplit_1
+fsplit_1_1
+fsplit_2
+fmergel
+rfmergel
+fmerge2_1
+fmerge2_2
+rfmerge2_1
+rfmerge2_2
+flatmap
+foldr
+mapfoldl
+mapfoldr
+takewhile
+dropwhile
+splitwith
+'-filter/3-fun-0-'
+'-map/3-fun-0-'
+'-filter/2-fun-0-'
+'-concat/1-fun-0-'
+takeover_application
+permit
+permit_only_loaded_application
+spawn_request
+here_i_am
+get_child
+init_loop
+io_request
+main_loop
+terminate_loop
+bad_keys
+start_it_old
+start_it_new
+start_the_app
+start_supervisor
+bad_return
+loop_it
+prep_stop
+shutdown_error
+get_child_i
+terminate_child_i
+terminate_child
+kill_children
+kill_all_procs
+set_timer
+exit_after
+'-kill_all_procs/0-fun-1-'
+'-kill_all_procs/0-fun-0-'
+'-kill_children/1-fun-0-'
+get_error_logger_type
+swap_error_logger
+args
+safe
+one_for_one
+one_for_all
+worker
+kernel_safe_sup
+config_zombies
+get_code_args
+nostick
+start_dist_ac
+start_ddll
+start_boot_server
+get_boot_args
+boot_server_slaves
+start_disk_log
+start_pg2
+do_distribution_change
+distribution_changed
+distribution_not_changed
+is_dist_changed
+do_global_groups_change
+global_groups_changed
+global_groups_added
+global_groups_removed
+is_gg_changed
+global_groups
+bad_config
+start_child
+restart_child
+delete_child
+which_children
+check_childspecs
+simple_one_for_one
+supervisor_data
+init_children
+start_spec
+init_dynamic
+bad_start_spec
+start_children
+do_start_child
+child
+do_start_child_i
+check_flags
+bad_flags
+update_childspec
+update_childspec1
+update_chsp
+handle_start_child
+already_present
+do_restart
+child_terminated
+reached_max_restart_intensity
+rest_for_one
+terminate_children
+brutal_kill
+state_del_child
+del_child
+split_child
+replace_child
+do_replace_child
+remove_child
+init_state
+init_state1
+invalid_type
+validStrategy
+invalid_strategy
+validIntensity
+invalid_intensity
+validPeriod
+invalid_period
+supname
+check_startspec
+duplicate_child_name
+check_childspec
+invalid_child_spec
+validChildType
+invalid_child_type
+validName
+validFunc
+invalid_mfa
+validShutdown
+invalid_shutdown
+validMods
+dynamic
+invalid_modules
+add_restart
+inPeriod
+difference
+offender
+reason
+errorContext
+supervisor_report
+extract_child
+child_type
+restart_type
+report_progress
+'-validMods/1-fun-0-'
+invalid_module
+'-update_chsp/2-fun-0-'
+block_call
+sbcast
+nonexisting_name
+set_group_leader
+rpc_check
+eval_everywhere
+multicall
+multi_server_call
+safe_multi_server_call
+async_call
+infinite
+nb_yield
+do_yield
+promise_reply
+parallel_eval
+map_nodes
+pmap
+build_args
+pinfo
+'-parallel_eval/1-fun-0-'
+'-async_call/4-fun-0-'
+'-multicall/4-fun-0-'
+'-handle_cast/2-fun-0-'
+sync
+safe_whereis_name
+node_disconnected
+random_exit_name
+unregister_name
+re_register_name
+registered_names
+global_names
+tab2list
+register_name_external
+unregister_name_external
+set_lock
+lock_on_nodes
+del_lock
+check_replies
+trans
+aborted
+trans_all_known
+get_known
+global_locks
+global_names_ext
+connect_all
+unregister_ext
+register_ext
+get_known_v2
+get_protocol_version
+get_names_ext
+new_nodes
+lock_is_set
+in_sync
+async_del_name
+async_del_lock
+sync_tag_my
+prot_vsn
+wait_lock
+pre_connect
+sync_tag_his
+init_connect
+resolved
+exchange
+nodeup
+test_vsn_tag_nodeup
+locker
+save_ops
+his_the_locker
+his_locker
+his_locker_new
+do_whereis
+resend_pre_connect
+ins_name
+ins_name_ext
+handle_set_lock
+before_or_false
+index_or_false
+is_lock_set
+handle_del_lock
+do_ops
+do_ops_ext
+start_the_locker
+init_the_locker
+multi
+locker_exited
+remove_node
+find_node_tag
+loop_the_locker
+cancel
+lock_set
+start_locker
+init_locker
+loop_locker
+lock
+d_lock
+try_again_locker
+cancel_locker
+exchange_names
+resolve_it
+minmax
+random_notify_name
+global_name_conflict
+notify_all_name
+cnode
+dolink
+dolink_ext
+dounlink
+is_pid_used
+check_exit
+del_names
+del_name
+del_locks
+continue
+del_locks2
+do_node_down
+do_node_down_names
+do_node_down_names_ext
+do_node_down_locks
+do_node_down_locks2
+get_names
+random_sleep
+random_seed
+seed
+uniform
+dec
+send_again
+change_our_node_name
+start_sync
+sync_init
+sync_loop
+synced
+check_sync_nodes
+get_own_nodes
+get_own_nodes_with_errors
+cs
+'-sync_loop/2-fun-0-'
+'-sync_init/2-fun-0-'
+'-del_name/2-fun-0-'
+'-do_ops_ext/2-fun-0-'
+'-do_ops/1-fun-0-'
+'-resolved/5-fun-1-'
+'-resolved/5-fun-0-'
+'-unregister_name_external/1-fun-0-'
+'-register_name_external/3-fun-0-'
+'-registered_names/0-fun-0-'
+'-re_register_name/3-fun-0-'
+'-unregister_name/1-fun-0-'
+'-register_name/3-fun-0-'
+reset
+add_resolv
+resolv
+add_hosts
+hosts
+add_host
+del_host
+clear_hosts
+add_ns
+ins_ns
+del_ns
+add_alt_ns
+ins_alt_ns
+del_alt_ns
+add_search
+ins_search
+del_search
+set_hostname
+set_domain
+set_lookup
+set_recurse
+set_timeout
+set_retry
+set_inet6
+set_usevc
+set_socks_server
+set_socks_port
+add_socks_methods
+del_socks_methods
+add_socks_noproxy
+del_socks_noproxy
+set_cache_size
+set_cache_refresh
+clear_cache
+set_tcp_module
+tcp_module
+set_udp_module
+udp_module
+add_rc
+consult
+add_rc_bin
+add_rc_list
+add_rc_list_int
+translate_lookup
+yp
+dns
+native
+nisplus
+nis
+get_rc
+cache_refresh
+cache_size
+host
+socks5_noproxy
+socks5_methods
+socks5_port
+socks5_server
+usevc
+retry
+alt_nameserver
+nameserver
+domain
+res_domain
+res_ns
+res_alt_ns
+cache_refresh_interval
+res_timeout
+res_retry
+rety
+res_usevc
+res_inet6
+res_search
+get_rc_noproxy
+get_rc_ns
+res_option
+recurse
+next_id
+res_recurse
+res_lookup
+res_id
+socks_option
+server
+noproxy
+methods
+hostname
+db_get
+add_rr
+dns_rr
+del_rr
+res_cache_answer
+getbyname
+dots
+getbysearch
+make_hostent
+aaaa
+a
+hostent
+hostent_by_domain
+nxdomain
+lookup_type
+lookup_cname
+cname
+lookup_ptr
+ptr
+lookup_rr
+res_hostent_by_domain
+res_lookup_type
+gethostbyaddr
+res_gethostbyaddr
+ent_gethostbyaddr
+dnip
+formerr
+dnt
+register_socket
+unregister_socket
+socket
+lookup_socket
+inet_cache
+reset_db
+visible_string
+refresh_timeout
+do_add_rr
+cache_rr
+times
+do_lookup_rr
+match_rr
+match_object
+filter_rr
+lower_rr
+tolower
+arpa_addr_in_dn
+int_ip6_dn
+dig
+dn_ip6_int
+dn_in_addr_arpa
+dnib
+hex
+init_timer
+stop_timer
+do_refresh_cache
+alloc_entry
+delete_n_oldest
+delete_older
+'-delete_older/5-fun-0-'
+'-do_refresh_cache/4-fun-0-'
+'-res_lookup_type/3-fun-0-'
+'-lookup_ptr/1-fun-0-'
+'-lookup_cname/1-fun-0-'
+'-lookup_type/2-fun-0-'
+'-res_cache_answer/1-fun-0-'
+'-add_rc_list_int/1-fun-1-'
+badopt
+'-add_rc_list_int/1-fun-0-'
+'-add_hosts/1-fun-0-'
+unix_sv
+linux
+freebsd
+'bsd/os'
+host_conf_linux
+gethostbyname
+host_conf_freebsd
+host_conf_bsdos
+nsswitch_conf
+vxworks
+no_ERLRESCONF
+standalone_host
+handle_native_lookup
+is_native
+wins
+add_dns_lookup
+inet_dns_when_nis
+set_search_dom
+load_resolv
+chars
+load_hosts
+win32_load_from_registry
+read
+nt
+windows
+change_key
+win32_load1
+expand
+win32_split_line
+split_line
+win32_get_strings
+not_string
+vxworks_load_hosts
+cmd
+hosts_vxworks
+check_hostShow
+next_line
+load_rc
+load_inetrc
+which_file
+cwd
+inetrc_dir
+warning
+inet_warnings
+parse_inetrc
+parse_inetrc_skip_line
+more_chars
+'scan_.inetrc'
+'parse_.inetrc'
+'-vxworks_load_hosts/0-fun-0-'
+'-win32_load1/3-fun-1-'
+'-win32_load1/3-fun-0-'
+address
+'-load_hosts/2-fun-0-'
+'-set_hostname/1-fun-0-'
+getserv
+getaddr
+getaddr_tm
+udp_close
+controlling_process
+udp_controlling_process
+optuniquify
+getif
+withsocket
+pushf
+popf
+gethostbyname_tm
+gethostbyaddr_tm
+getll
+getaddrs
+options
+stats
+connect_options
+connect_opts
+con_opt
+ifaddr
+con_add
+listen_options
+backlog
+listen_opts
+list_opt
+list_add
+udp_opts
+udp_opt
+udp_add
+add_opt
+translate_ip
+getaddrs_tm
+ipv6_address
+bytes_to_ip6
+i
+foreign_address
+local_address
+sent
+ii
+smax
+info_lines
+i_line
+h_line
+h_field
+hh_field
+upper
+fmt_status
+fmt_addr
+enotconn
+ntoa
+fmt_port
+tcp_sockets
+udp_sockets
+port_list
+exbadseq
+exbadport
+tcp_close
+tcp_controlling_process
+not_owner
+tcp_sync_input
+udp_sync_input
+'-port_list/1-fun-0-'
+'-h_line/1-fun-0-'
+'-i_line/3-fun-0-'
+'-info_lines/3-fun-0-'
+'-ii/3-fun-2-'
+'-ii/3-fun-1-'
+'-ii/3-fun-0-'
+'-gethostname/0-fun-0-'
+'-getif/1-fun-0-'
+'-getif/0-fun-0-'
+'-ifset/2-fun-0-'
+'-ifget/2-fun-0-'
+'-getiflist/0-fun-0-'
+services
+noname
+delete_options
+protocols
+netmasks
+networks
+parse_fd
+skip
+parse_cs
+get_line
+read_line
+''
+collect_line
+cur
+position
+port_proto
+is_vis1
+is_dom1
+is_dom_ldh
+is_dom2
+ipv6_addr1
+ipv6_addr2
+ipv6_addr3
+x4
+tox
+tod
+mkaddr
+ds4
+zero
+dig_to_dec
+dig_to_hex
+shex
+split_mid
+split_end
+split_comma
+split_mid_comma
+'-networks/2-fun-0-'
+'-netmasks/2-fun-0-'
+'-protocols/2-fun-0-'
+'-nsswitch_conf/2-fun-0-'
+'-host_conf_bsdos/2-fun-0-'
+'-host_conf_freebsd/2-fun-0-'
+'-host_conf_linux/2-fun-0-'
+'-resolv/2-fun-0-'
+'-hosts_vxworks/1-fun-0-'
+'-hosts/2-fun-0-'
+'-rpc/2-fun-0-'
+'-services/2-fun-0-'
+find_executable
+pathtype
+relative
+find_executable1
+verify_executable
+read_file_info
+file_info
+split_path
+get_cwd
+reverse_element
+extensions
+unix_cmd
+unix_cmd1
+start_port
+unix_get_data
+eot
+mk_cmd
+validate
+validate1
+get_data
+absname
+absolute
+volumerelative
+absname_vr
+absname_pretty
+device
+basename1
+skip_prefix
+not_device
+skip_prefix1
+join1
+maybe_remove_dirsep
+unix_pathtype
+win32_pathtype
+rootname
+rootname2
+vxworks_split
+unix_split
+win32_split
+nativename
+win32_nativename
+separators
+find_src
+source_search_rules
+try
+which
+filter_options
+outdir
+export_all
+fast
+d
+parse_transform
+get_source_file
+source_file
+source_by_rules
+source_file_not_found
+try_rule
+readable_file
+regular
+read_write
+make_abs_path
+major_os_type
+vxworks_first
+vxworks_first2
+find_name
+'-find_name/3-fun-1-'
+'-find_name/3-fun-0-'
+no_epmd
+epmd_module
+protocol_childspecs
+start_p
+sname
+shortnames
+lname
+longnames
+ticktime
+net_ticktime
+net_sup_dynamic
+monitor_nodes
+not_boolean
+own_nodes
+ng_add_check
+registered_names_test
+send_test
+whereis_name_test
+global_group_not_runnig
+no_conf
+publish_type
+'invalid global_groups definition'
+test3844zty
+whereis_test
+illegal_function_call
+names_test
+names
+agreed
+not_agreed
+global_group_check
+monitoring
+other_groups
+no_contact
+sync_error
+synced_nodes
+own_group_nodes
+own_group_name
+illegal_message
+registered_names_res
+find_name_res
+send_res
+conf_check
+config_ok
+cont
+config_scan
+original
+no_name
+'node defined twice'
+grp_tuple
+sync_check_node
+ping
+pong
+pang
+sync_check_init
+sync_check
+no_global_group_configuration
+delete_all
+send_monitor
+safesend
+not_own_group
+safesend_nc
+check_exit_reg
+not_found_ignored
+check_exit_send
+check_exit_where
+kill_global_group_check
+disconnect_nodes
+force_nodedown
+publish_arg
+own_group
+no_group
+publish_on_nodes
+update_publish_nodes
+'-force_nodedown/1-fun-0-'
+'-disconnect_nodes/1-fun-0-'
+'-sync_check_init/8-fun-0-'
+'-init/1-fun-0-'
+kernel_apply
+allow
+node_info
+nodes_info
+verbose
+set_net_ticktime
+new_ticktime
+get_net_ticktime
+ticktime_res
+hidden_connect
+publish_on_node
+connect_node
+hidden_connect_node
+sys_dist
+barred_connection
+dist_auto_connect
+never
+ticker
+tick
+bad_cookie
+not_implemented
+is_auth
+pending
+up_pending
+tick_change
+ongoing_change_to
+unchanged
+longer
+shorter
+change_initiated
+do_spawn_link
+no_network
+remark_pending
+set_monitors
+is_pending
+remarked
+bad_request
+accept_pending
+connection
+already_pending
+inserted
+do_nodeup
+pend_nodeup
+registered_send
+accept_connection
+controller
+unsupported_protocol
+transition_period_end
+aux_tick
+do_handle_exit
+remove_conn_pid
+listen_exit
+accept_exit
+conn_own_exit
+nodeup_exit
+monitor_exit
+pending_own_exit
+ticker_exit
+get_conn
+pending_nodedown
+up_pending_nodedown
+up_nodedown
+mark_sys_dist_nodedown
+do_disconnect
+disconnect_pid
+get_nodes
+to_integer
+ticker_loop
+start_aux_ticker
+aux_ticker
+aux_ticker1
+bye
+send_list
+setup
+bad_node
+net_address
+select_mod
+unsupported_address_type
+get_proto_mod
+lookup_pend
+del_pend
+init_node
+create_name
+create_hostpart
+short
+long
+proto_dist
+childspecs
+start_protos
+duplicate_name
+sync_cookie
+std_monitors
+connecttime
+net_setuptime
+get_node_info
+invalid_key
+get_nodes_info
+reply_waiting
+reply_waiting1
+all_atoms
+restart_ticker
+print_info
+display_info
+fmt_address
+fetch
+nformat
+getnode
+'-print_info/0-fun-0-'
+'-create_hostpart/2-fun-0-'
+'-init_node/2-fun-0-'
+'-handle_info/2-fun-1-'
+'-handle_info/2-fun-0-'
+'-terminate/2-fun-2-'
+'-terminate/2-fun-1-'
+nodistribution
+pid2name
+file_io_servers
+set_cwd
+make_dir
+del_dir
+read_link_info
+read_link
+write_file_info
+list_dir
+read_file
+make_link
+make_symlink
+write_file
+unused
+rawopen
+raw_read_file_info
+raw_write_file_info
+get_chars
+enomem
+pread
+put_chars
+pwrite
+truncate
+new_bindings
+path_eval
+consult_stream
+eval_stream
+parse_erl_exprs
+exprs
+path_open
+enoent
+path_open1
+change_mode
+change_owner
+change_group
+change_time
+master
+start_slave
+'can not get remote filer '
+start_relay
+relay
+'Port controlling ~w terminated in file_server'
+do_read_file
+do_write_file
+fm_op
+list_dir_op
+collect_files
+write_file_info_op
+info_to_list
+int_to_bytes
+date_to_bytes
+file_loop
+file_request
+get_until
+requests
+io_requests
+position_file
+get_until1
+ll_raw_open
+ll_open
+emfile
+ll_write
+ll_pwrite
+ll_sync
+ll_read
+ll_pread
+ll_lseek
+ll_truncate
+ll_command
+mkport
+file_name2
+check_binary
+open_mode
+new_open_mode
+translate_old_mode
+character
+this_is_an_error
+file_position
+bof
+get_response
+bad_response_from_port
+transform_ints
+file_type
+symlink
+directory
+other
+file_access
+i32
+getints
+check_and_call
+check_args
+io_reply
+file_reply
+wait_file_reply
+terminated
+delete_env_var
+change_env_var
+single_os_type
+uc_lc_equal
+uc_lc_match
+strict_match
+precedes
+uc_lc_precedes
+make_binary
+add_nul_chars
+transform_settings
+transform_one
+objfile_extension
+load_abs
+load_binary
+purge
+soft_purge
+is_loaded
+get_object_code
+all_loaded
+root_dir
+dir
+lib_dir
+compiler_dir
+uc_dir
+priv_dir
+stick_dir
+unstick_dir
+add_path
+add_pathz
+add_patha
+add_paths
+add_pathsz
+add_pathsa
+del_path
+replace_path
+rel_loaded_p
+interpreted
+delete_interpret
+delete_int
+interpret_binary
+add_uc
+stick
+interactive
+do_stick_dirs
+do_s
+get_mode
+which2
+non_existing
+clash
+build
+decorate
+filter2
+has_ext
+do_foldl
+do_foldr
+table_closed
+safe_fixtable
+erlang_db_match_object
+local_info
+safe_fixed
+do_filter
+tab2file
+badtab
+log_terms
+get_objs
+file2tab
+read_only
+repaired
+init_file2tab
+chunk
+fill_tab
+file2tab_error
+old_file2tab
+mk_tab
+insert_all
+mem
+tabs
+prinfo
+prinfo2
+is_reg
+hform
+pad_right
+'EOT (q)uit (p)Digits (k)ill /Regexp -->'
+'(c)ontinue (q)uit (p)Digits (k)ill /Regexp -->'
+choice
+re
+quit
+nonl
+right
+strip
+print_number
+do_display
+do_display_items
+do_display_item
+substr
+re_search
+re_display
+print_re_num
+re_match
+check_fixtable_access
+'-hform/6-fun-0-'
+'-i/0-fun-0-'
+fixit
+releaseit
+do_fixtable
+server_init
+fixtable_server_sup
+call_unchecked
+fixtable_processes
+fixtable_owners
+fixtable_tables
+handle_request
+handle_request2
+caller_dead
+badrequest
+insert_owner
+wipe_table_owner
+wipe_table
+wipe_process
+'-wipe_process/4-fun-0-'
+'-wipe_table/4-fun-0-'
+'-handle_request2/5-fun-0-'
+del_interpret
+do_purge
+to_atom
+add_interpret
+load_interpret
+do_ensure
+do_delete
+init_db
+fix
+init_insert
+add_module
+make_path
+choose_bundles
+cr_b
+vsn_to_num
+is_vsn
+is_numstr
+choose
+add_loader_path
+pa
+pz
+exclude_pa_pz
+excl
+strip_path
+add
+add1
+add_pa_pz
+get_arg
+exclude
+get_name
+get_name1
+get_name2
+check_path
+bad_directory
+bad_path
+do_add
+maybe_update
+update
+normalize
+init_namedb
+code_names
+insert_name
+bad_name
+del_path1
+insert_old_shadowed
+replace_path1
+check_pars
+del_ebin
+replace_name
+delete_name
+delete_name_dir
+lookup_name
+do_dir
+'bad request to code'
+stick_library
+unstick_library
+putem
+sticky
+eraseem
+get_mods
+do_load_binary
+modp
+try_load_module
+sticky_directory
+int_list
+mod_to_bin
+do_soft_purge
+ints
+all_l
+strip_mod_info
+'-exclude/2-fun-0-'
+'-is_numstr/1-fun-0-'
+'-is_vsn/1-fun-0-'
+'-vsn_to_num/1-fun-0-'
+'-choose_bundles/1-fun-1-'
+'-choose_bundles/1-fun-0-'
+tell_interpreter
+no_interpreter
+delete_modules
+len
+equal
+chr
+rchr
+str
+rstr
+span
+cspan
+substr1
+tokens1
+tokens2
+copies
+words
+both
+w_count
+left
+sub_word
+s_word
+strip_left
+strip_right
+strip_right_1
+l_pad
+r_pad
+centre
+sub_string
+re_sh_to_awk
+sh_to_awk
+re_parse
+parse
+nomatch
+re_sub
+re_gsub
+gsub
+re_split
+beam_opcodes
+beam_dict
+beam_asm
+beam_listing
+beam_flatten
+beam_type
+beam_jump
+beam_block
+beam_bs
+v3_codegen
+v3_life
+v3_kernel_pp
+v3_kernel
+core_pp
+core_lint
+core_parse
+core_scan
+corec
+core_lib
+sys_core_inline
+sys_core_fold
+v3_core_opt
+v3_core
+sys_pre_expand
+sys_pre_attributes
+nouser
+'Cannot get remote user'
+relay1
+start_user
+wait_for_user_p
+get_user
+x
+noinput
+noinp_shell
+oldshell
+sys_xerl
+start_out
+badcall
+terminate_pid
+'tty_sl -c -e'
+server1
+server_loop
+port_bytes
+switch_loop
+switch_cmd
+'?'
+atom
+k
+r
+j
+h
+q
+integer
+interrupt
+get_node
+unknown_group
+list_commands
+beep
+edit_line
+get_line_timeout
+blink
+delete_chars
+move_rel
+insert_chars
+put_int16
+gr_new
+gr_get_num
+gr_get_num1
+gr_add_cur
+gr_set_cur
+gr_set_num
+gr_set_num1
+gr_del_pid
+gr_del_pid1
+gr_cur_pid
+gr_list
+line_buffer
+start_shell
+start_shell1
+exit_shell
+deep_char_list
+send_drv
+send_drv_reqs
+interrupted
+get_line1
+erase_line
+prompt
+edit_line1
+redraw_line
+new_stack
+stack
+up_stack
+down_stack
+prompt_bytes
+scan
+reserved_word
+fwrite
+fread
+indentation
+fwrite_g
+write_tail
+write_port
+write_ref
+write_bin_tail
+write_binary
+bin_to_list_max
+write_vector
+write_vector_contents
+write_atom
+quote_atom
+name_chars
+name_char
+write_string
+write_string1
+string_char
+write_char
+char_list
+printable_list
+nl
+collect_chars
+collect_chars1
+collect_line1
+kill_buffer
+edit
+meta
+ctlx
+new_line
+tab
+whitespace_only
+prefix_arg
+ctlu
+key_map
+yank
+transpose_char
+kill_line
+forward_delete_char
+forward_char
+end_of_line
+beginning_of_line
+backward_delete_char
+backward_char
+auto_blink
+yank_pop
+transpose_word
+kill_word
+forward_word
+backward_word
+backward_kill_word
+do_op
+over_word
+over_non_word
+word_char
+over_white
+over_paren
+over_paren_auto
+erase_inp
+redraw
+length_before
+length_after
+expand_module_name
+expand_function_name
+print_matches
+col_print
+field_width
+match1
+longest_common_head
+same_head
+all_tails
+collect
+collect_cseq
+precision
+field_value
+pad_char
+collect_cc
+pcount
+decr_pc
+control
+fwrite_e
+float_e
+float_man
+float_exp
+fwrite_f
+float_f
+float_data
+char
+newline
+adjust_error
+adjust
+user_default
+no_control_g
+get_command
+get_command1
+expand_hist
+expand_exprs
+expand_expr
+if
+catch
+tuple
+block
+lc
+case
+remote
+record_field
+cons
+record
+record_index
+op
+v
+e
+expand_cs
+clause
+expand_fields
+expand_quals
+generate
+no_command
+expr
+add_cmd
+get_cmd
+del_cmd
+shell_cmd
+shell_rep
+shell_req
+start_eval
+evaluator
+eval_loop
+local_func
+init_dict
+f
+b
+var
+del_binding
+bindings
+expr_list
+list_bindings
+'-get_command/4-fun-0-'
+go
+sync_nodes
+wait_nodes
+mandatory_nodes_down
+check_up
+get_sync_data
+get_sync_timeout
+sync_nodes_timeout
+get_sync_mandatory_nodes
+sync_nodes_mandatory
+get_sync_optional_nodes
+sync_nodes_optional
+'-wait_nodes/2-fun-0-'
+install_prev
+write_events
+write_events1
+write_event
+string_p
+string_p1
+write_time
+t
+t1
+month
+arg_list
+nil
+field
+bif
+bin
+clauses
+unbound
+expr_grp
+eval_lc
+eval_lc1
+is_guard_test
+eval_fun
+'-inside-a-shell-fun-'
+eval_op
+'--'
+'++'
+'!'
+if_clauses
+case_clauses
+receive_clauses
+merge_queue
+recv_all
+match_clause
+guard
+guard1
+guard0
+guard_test
+type_test
+reference
+number
+constant
+string_to_conses
+match_bits
+match_tuple
+match_list
+match_list1
+dict_to_list
+binding
+find
+add_binding
+store
+add_bindings
+merge_bindings
+is_constant_expr
+eval_expr
+partial_eval
+ev_expr
+ret_expr
+'-ev_expr/1-fun-0-'
+'-merge_bindings/2-fun-0-'
+'-add_bindings/2-fun-0-'
+'-match1/3-fun-1-'
+'-match1/3-fun-0-'
+'-eval_lc1/4-fun-0-'
+'-expr/3-fun-21-'
+'-expr/3-fun-20-'
+'-expr/3-fun-19-'
+'-expr/3-fun-18-'
+'-expr/3-fun-17-'
+'-expr/3-fun-16-'
+'-expr/3-fun-15-'
+'-expr/3-fun-14-'
+'-expr/3-fun-13-'
+'-expr/3-fun-12-'
+'-expr/3-fun-11-'
+'-expr/3-fun-10-'
+'-expr/3-fun-9-'
+'-expr/3-fun-8-'
+'-expr/3-fun-7-'
+'-expr/3-fun-6-'
+'-expr/3-fun-5-'
+'-expr/3-fun-4-'
+'-expr/3-fun-3-'
+'-expr/3-fun-2-'
+'-expr/3-fun-1-'
+'-expr/3-fun-0-'
+guard_expr
+argument_limit
+undef_record
+badexpr
+':'
+'.'
+bad_filter
+is_key
+fetch_keys
+append_list
+fold
+list_to_dict
+'-from_list/1-fun-0-'
+help
+report_warnings
+report_errors
+machine_load
+output_generated
+check_load
+lc_batch
+'@o'
+'@i'
+'@d'
+split_def
+nc
+ni
+l
+zi
+i1
+mfa_string
+iformat
+all_procs
+palive
+pzombie
+bt
+m
+relative_name
+strip_cwd
+mformat
+f_p_e
+bi
+print_object_file
+get_compile_time
+compiletime
+notime
+get_compile_options
+compiler_options
+get_src_file
+get_compile_info
+print_exports
+split_print_exports
+print_time
+nregs
+regs
+all_regs
+print_node_regs
+display_name_info
+pwhereis
+pline
+rformat
+pwd
+ls
+ls_print
+lengths
+w
+get_proc_mem
+get_non_proc_mem
+atom_table
+module_table
+export_table
+register_table
+loaded_code
+static
+process_desc
+proc_bin_desc
+link_desc
+atom_desc
+export_desc
+module_desc
+preg_desc
+plist_desc
+fixed_deletion_desc
+bif_timer_rec_desc
+atom_space
+get_mem
+get_ets_mem
+total
+atom_used
+get_proc_mem_if_needed
+get_allocated_areas_if_needed
+get_ets_mem_if_needed
+'-get_proc_mem/0-fun-0-'
+'-print_node_regs/1-fun-0-'
+'-all_regs/0-fun-0-'
+'-nregs/0-fun-0-'
+'-m/0-fun-1-'
+'-m/0-fun-0-'
+'-all_procs/0-fun-0-'
+'-i1/1-fun-0-'
+'-i/1-fun-1-'
+'-i/1-fun-0-'
+'-alive_processes/0-fun-0-'
+'-lc_batch/1-fun-0-'
+'-lc/1-fun-0-'
+scan_erl_seq
+parse_erl_seq
+parse_exprs
+to_tuple
+o_request
+conv_reason
+scan_erl_exprs
+scan_erl_form
+parse_erl_form
+parse_form
+arguments
+default_input
+default_output
+wait_io_mon_reply
+fix_error_start_line
+string_pre_scan
+is_end
+string_thing
+base
+illegal
+pre_scan
+'\''
+'"'
+'%'
+pre_string
+pre_string_error
+pre_char
+pre_escape
+pre_comment
+pre_dot
+pre_error
+scan1
+'||'
+':-'
+'->'
+'>>'
+'<='
+'<<'
+'<-'
+scan_atom
+scan_variable
+scan_name
+scan_string
+scan_char
+scan_escape
+escape_char
+scan_number
+scan_integer
+scan_after_int
+scan_based_int
+scan_after_fraction
+scan_exponent
+scan_exponent1
+scan_dot
+scan_error
+begin
+when
+query
+of
+end
+let
+after
+'('
+')'
+mkop
+build_attribute
+import
+export
+attribute
+farity_list
+record_tuple
+record_fields
+build_function
+build_rule
+rule
+build_fun
+check_clauses
+mapl
+normalise
+normalise_list
+abstract
+abstract_string
+abstract_list
+'{'
+'}'
+tokens_tail
+','
+'|'
+tokens_tuple
+inop_prec
+'#'
+'='
+preop_prec
+func_prec
+max_prec
+parse_and_scan
+return_error
+yeccpars1
+'$end'
+yeccerror
+yecctoken2string
+'~w'
+reserved_symbol
+'~s'
+yeccpars2
+bit_type
+lc_expr
+bit_type_list
+lc_exprs
+';'
+function_clauses
+bin_elements
+default
+cr_clauses
+fun_clauses
+rule_clauses
+expr_700
+strings
+rule_clause
+record_expr
+fun_clause
+cr_clause
+bin_element
+expr_800
+expr_100
+tail
+expr_200
+expr_500
+expr_300
+fun_expr
+function_call
+rule_body
+opt_bit_type_list
+opt_bit_size_expr
+clause_guard
+clause_body
+bit_expr
+expr_600
+receive_expr
+list_comprehension
+case_expr
+query_expr
+if_expr
+expr_max
+argument_list
+form
+clause_args
+prefix_op
+mult_op
+list_op
+comp_op
+bit_size_expr
+attr_val
+atomic
+add_op
+expr_400
+yeccgoto
+'-abstract/2-fun-0-'
+'-abstract/1-fun-0-'
+'-normalise/1-fun-0-'
+'-check_clauses/3-fun-0-'
+missing_in_goto_table
+parser
+missing_state_in_action_table
+uh
+mk
+make
+tt
+gl
+get_loopdata
+distel
+print_tag_tuple
+print_tail
+write_length
+write_length_list
+nl_indent
+guard_bif
+arith_op
+bool_op
+send_op
+op_type
+comp
+arith
+behaviour_info
+obsolete
+
+<End of Erlang crash dump>
diff --git a/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.100atoms b/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.100atoms
new file mode 100644
index 0000000000..921c27bd0e
--- /dev/null
+++ b/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.100atoms
@@ -0,0 +1,13135 @@
+=erl_crash_dump:0.1
+Wed Apr 21 13:22:44 2004
+Slogan: eheap_alloc: Cannot allocate 785672 bytes of memory (of type "heap").
+System version: Erlang (BEAM) emulator version 5.4 [source] [hipe] [threads:0]
+Compiled: Thu Dec 18 14:07:45 2003
+Atoms: 5614
+=memory
+total: 653336887
+processes: 1768396
+processes_used: 1765460
+system: 651568491
+atom: 244837
+atom_used: 237116
+binary: 648618369
+code: 2158413
+ets: 225620
+=hash_table:atom_tab
+size: 4813
+used: 3304
+objs: 5614
+depth: 7
+=index_table:atom_tab
+size: 5700
+limit: 1048576
+used: 5614
+rate: 100
+=hash_table:module_code
+size: 97
+used: 69
+objs: 107
+depth: 5
+=index_table:module_code
+size: 110
+limit: 65536
+used: 107
+rate: 10
+=hash_table:export_list
+size: 2411
+used: 1674
+objs: 2843
+depth: 6
+=index_table:export_list
+size: 2900
+limit: 65536
+used: 2843
+rate: 100
+=hash_table:process_reg
+size: 47
+used: 16
+objs: 23
+depth: 3
+=hash_table:fun_table
+size: 397
+used: 261
+objs: 400
+depth: 4
+=hash_table:node_table
+size: 11
+used: 1
+objs: 1
+depth: 1
+=hash_table:dist_table
+size: 11
+used: 1
+objs: 1
+depth: 1
+=allocated_areas
+processes: 1765460 1768396
+ets: 225620
+sys_misc: 24634
+static: 295033
+atom_space: 65544 57967
+binary: 648618369
+atom_table: 42141
+module_table: 920
+export_table: 21336
+register_table: 252
+fun_table: 1650
+module_refs: 1024
+loaded_code: 1968915
+dist_table: 159
+node_table: 131
+bits_bufs_size: 19
+bif_timer: 13392
+link_lh: 0
+dist_buf: 0
+proc: 15080 13576
+atom_entry: 137152 137008
+export_entry: 138448 137632
+module_entry: 4872 4352
+reg_proc: 1000 592
+link_nh: 2464 2080
+link_sh: 832 192
+proc_list: 24 24
+fun_entry: 22584 22584
+db_tab: 1632 1632
+=allocator:sys_alloc
+option e: true
+option m: libc
+=allocator:temp_alloc
+versions: 0.9 2.1
+option e: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 90
+option rsbcmt: 80
+option mmbcs: 65536
+option mmsbc: 256
+option mmmbc: 10
+option lmbcs: 5242880
+option smbcs: 1048576
+option mbcgs: 10
+option as: af
+mbcs blocks: 0 9 9
+mbcs blocks size: 0 35376 35376
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 65568 65568 65568
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 65568
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+temp_alloc calls: 6155
+temp_free calls: 6155
+temp_realloc calls: 29
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:sl_alloc
+option e: false
+=allocator:std_alloc
+option e: false
+=allocator:ll_alloc
+versions: 0.9 2.1
+option e: true
+option sbct: 4294967295
+option asbcst: 0
+option rsbcst: 0
+option rsbcmt: 0
+option mmbcs: 2097152
+option mmsbc: 0
+option mmmbc: 0
+option lmbcs: 5242880
+option smbcs: 1048576
+option mbcgs: 10
+option as: aobf
+mbcs blocks: 592 592 592
+mbcs blocks size: 2838520 2863304 2863304
+mbcs carriers: 2 2 2
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 2
+mbcs carriers size: 3145760 3145760 3145760
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 3145760
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ll_alloc calls: 592
+ll_free calls: 0
+ll_realloc calls: 235
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 2
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:eheap_alloc
+versions: 2.1 2.1
+option e: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 50
+option rsbcmt: 80
+option mmbcs: 524288
+option mmsbc: 256
+option mmmbc: 10
+option lmbcs: 5242880
+option smbcs: 1048576
+option mbcgs: 10
+option mbsd: 3
+option as: gf
+mbcs blocks: 56 102 102
+mbcs blocks size: 833280 1638920 1638920
+mbcs carriers: 2 3 3
+mbcs mseg carriers: 1
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 1998880 3047456 3047456
+mbcs mseg carriers size: 1474560
+mbcs sys_alloc carriers size: 524320
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+eheap_alloc calls: 6971
+eheap_free calls: 6914
+eheap_realloc calls: 461
+mseg_alloc calls: 16
+mseg_dealloc calls: 14
+mseg_realloc calls: 0
+sys_alloc calls: 3
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:binary_alloc
+option e: false
+=allocator:ets_alloc
+option e: false
+=allocator:fix_alloc
+option e: true
+proc: 15080 13576
+atom_entry: 137152 137008
+export_entry: 138448 137632
+module_entry: 4872 4352
+reg_proc: 1000 592
+link_nh: 2464 2080
+link_sh: 832 192
+proc_list: 24 24
+fun_entry: 22584 22584
+db_tab: 1632 1632
+=allocator:mseg_alloc
+version: 0.9
+option amcbf: 4194304
+option rmcbf: 20
+option mcs: 5
+option cci: 1000
+cached_segments: 0
+cache_hits: 13
+segments: 2
+segments_watermark: 2
+mseg_alloc calls: 16
+mseg_dealloc calls: 14
+mseg_realloc calls: 0
+mseg_create calls: 4
+mseg_destroy calls: 1
+mseg_clear_cache calls: 6
+mseg_check_cache calls: 2
+=allocator:alloc_util
+option mmc: 1024
+option ycs: 1048576
+=allocator:instr
+option m: false
+option s: false
+option t: false
+=proc:<0.0.0>
+State: Waiting
+Name: init
+Spawned as: otp_ring0:start/2
+Spawned by: []
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.5.0>,<0.4.0>,<0.2.0>]
+Reductions: 3851
+Stack+heap: 377
+OldHeap: 610
+Heap unused: 53
+OldHeap unused: 610
+Program counter: 0x1f496c (init:loop/1 + 20)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.2.0>
+State: Waiting
+Name: erl_prim_loader
+Spawned as: erlang:apply/2
+Spawned by: <0.1.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.0.0>,#Port<0.2>]
+Reductions: 201036
+Stack+heap: 987
+OldHeap: 987
+Heap unused: 923
+OldHeap unused: 987
+Program counter: 0x20cc94 (erl_prim_loader:loop/3 + 52)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.4.0>
+State: Waiting
+Name: error_logger
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.1.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.21.0>,<0.0.0>]
+Reductions: 296
+Stack+heap: 6765
+OldHeap: 0
+Heap unused: 851
+OldHeap unused: 0
+Program counter: 0x21f5b8 (gen_event:loop/4 + 40)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.5.0>
+State: Waiting
+Name: application_controller
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.1.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.7.0>,<0.0.0>]
+Reductions: 1508
+Stack+heap: 1597
+OldHeap: 0
+Heap unused: 835
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.7.0>
+State: Waiting
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.6.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.8.0>,<0.5.0>]
+Reductions: 23
+Stack+heap: 377
+OldHeap: 0
+Heap unused: 79
+OldHeap unused: 0
+Program counter: 0x248d04 (application_master:main_loop/2 + 28)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.8.0>
+State: Waiting
+Spawned as: application_master:start_it/4
+Spawned by: <0.7.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>,<0.7.0>]
+Reductions: 91
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 177
+OldHeap unused: 0
+Program counter: 0x24a26c (application_master:loop_it/4 + 40)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.9.0>
+State: Waiting
+Name: kernel_sup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.8.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.24.0>,<0.23.0>,<0.19.0>,<0.18.0>,<0.17.0>,<0.16.0>,<0.15.0>,<0.14.0>,<0.11.0>,<0.10.0>,<0.8.0>]
+Reductions: 7402
+Stack+heap: 610
+OldHeap: 987
+Heap unused: 311
+OldHeap unused: 987
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.10.0>
+State: Waiting
+Name: rex
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>]
+Reductions: 44
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 144
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.11.0>
+State: Waiting
+Name: global_name_server
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.13.0>,<0.12.0>,<0.9.0>]
+Reductions: 47
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 98
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.12.0>
+State: Waiting
+Spawned as: global:init_the_locker/1
+Spawned by: <0.11.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.11.0>]
+Reductions: 3
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 227
+OldHeap unused: 0
+Program counter: 0x261340 (global:loop_the_locker/2 + 92)
+CP: 0x261184 (global:init_the_locker/1 + 112)
+arity = 0
+=proc:<0.13.0>
+State: Waiting
+Spawned as: erlang:apply/2
+Spawned by: <0.11.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.11.0>]
+Reductions: 4
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 221
+OldHeap unused: 0
+Program counter: 0x265288 (global:collect_deletions/2 + 76)
+CP: 0x2651ac (global:loop_the_deleter/1 + 36)
+arity = 0
+=proc:<0.14.0>
+State: Waiting
+Name: inet_db
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>]
+Reductions: 376
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 30
+OldHeap unused: 233
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.15.0>
+State: Waiting
+Name: global_group
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>]
+Reductions: 71
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 92
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.16.0>
+State: Waiting
+Name: file_server_2
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 1
+Heap fragment data: 119
+Link list: [{from,<0.17.0>,#Ref<0.0.0.22>},#Port<0.4>,<0.9.0>]
+Reductions: 83605
+Stack+heap: 4181
+OldHeap: 4181
+Heap unused: 1720
+OldHeap unused: 4181
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.17.0>
+State: Waiting
+Name: file_server
+Spawned as: erlang:apply/2
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [{to,<0.16.0>,#Ref<0.0.0.22>},<0.9.0>]
+Reductions: 12
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 207
+OldHeap unused: 0
+Program counter: 0x2a18e8 (old_file_server:relay_loop/3 + 32)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.18.0>
+State: Waiting
+Name: code_server
+Spawned as: erlang:apply/2
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>]
+Reductions: 108900
+Stack+heap: 6765
+OldHeap: 6765
+Heap unused: 4389
+OldHeap unused: 6765
+Program counter: 0x2a6e64 (code_server:loop/1 + 64)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.19.0>
+State: Waiting
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.21.0>,<0.9.0>]
+Reductions: 74
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 180
+OldHeap unused: 233
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.20.0>
+State: Waiting
+Spawned as: user_drv:server/2
+Spawned by: <0.19.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.22.0>,<0.21.0>,#Port<0.72>]
+Reductions: 596
+Stack+heap: 233
+OldHeap: 377
+Heap unused: 214
+OldHeap unused: 377
+Program counter: 0x2ca4e0 (user_drv:server_loop/5 + 56)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.21.0>
+State: Waiting
+Name: user
+Spawned as: group:server/2
+Spawned by: <0.20.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.4.0>,<0.19.0>,<0.20.0>]
+Reductions: 26
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 202
+OldHeap unused: 0
+Program counter: 0x2cd9d8 (group:server_loop/3 + 32)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.22.0>
+State: Waiting
+Spawned as: group:server/2
+Spawned by: <0.20.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [{from,<0.49.0>,#Ref<0.0.0.307>},<0.25.0>,<0.20.0>]
+Reductions: 1244
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 40
+OldHeap unused: 233
+Program counter: 0x2cf238 (group:get_line1/3 + 1652)
+CP: 0x2cf230 (group:get_line1/3 + 1644)
+arity = 0
+=proc:<0.23.0>
+State: Waiting
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>]
+Reductions: 45
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 63
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.24.0>
+State: Waiting
+Name: kernel_safe_sup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.31.0>,<0.9.0>]
+Reductions: 133
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 198
+OldHeap unused: 233
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.25.0>
+State: Waiting
+Spawned as: erlang:apply/2
+Spawned by: <0.22.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.49.0>,<0.27.0>,<0.22.0>]
+Reductions: 161
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 169
+OldHeap unused: 0
+Program counter: 0x2e0d00 (shell:get_command1/4 + 40)
+CP: 0x2e06fc (shell:server_loop/6 + 140)
+arity = 0
+=proc:<0.27.0>
+State: Waiting
+Spawned as: erlang:apply/2
+Spawned by: <0.25.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.25.0>]
+Reductions: 506
+Stack+heap: 4181
+OldHeap: 0
+Heap unused: 1131
+OldHeap unused: 0
+Program counter: 0x2e2bbc (shell:eval_loop/2 + 32)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.31.0>
+State: Waiting
+Name: inet_gethost_native_sup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.24.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.32.0>,<0.24.0>]
+Reductions: 49
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 87
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.32.0>
+State: Waiting
+Name: inet_gethost_native
+Spawned as: inet_gethost_native:server_init/2
+Spawned by: <0.31.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 1
+Heap fragment data: 118
+Link list: [#Port<0.105>,<0.31.0>]
+Reductions: 65
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 13
+OldHeap unused: 0
+Program counter: 0x4ad840 (inet_gethost_native:main_loop/1 + 20)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.33.0>
+State: Waiting
+Name: web_tool
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.27.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.41.0>]
+Reductions: 131773
+Stack+heap: 6765
+OldHeap: 6765
+Heap unused: 2941
+OldHeap unused: 6765
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.41.0>
+State: Waiting
+Name: websup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.33.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.48.0>,<0.33.0>]
+Reductions: 118
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 205
+OldHeap unused: 233
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.43.0>
+State: Waiting
+Name: httpd_sup__127_0_0_1__8888
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.33.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.46.0>,<0.45.0>,<0.44.0>]
+Reductions: 1220
+Stack+heap: 6765
+OldHeap: 0
+Heap unused: 277
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.44.0>
+State: Waiting
+Name: httpd_acc_sup__127_0_0_1__8888
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.43.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.47.0>,<0.43.0>]
+Reductions: 147
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 77
+OldHeap unused: 233
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.45.0>
+State: Waiting
+Name: httpd_misc_sup__127_0_0_1__8888
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.43.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.43.0>]
+Reductions: 52
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 80
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.46.0>
+State: Waiting
+Name: httpd__127_0_0_1__8888
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.43.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.43.0>]
+Reductions: 2905
+Stack+heap: 6765
+OldHeap: 10946
+Heap unused: 138
+OldHeap unused: 10946
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.47.0>
+State: Waiting
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.44.0>
+Started: Wed Apr 21 13:22:18 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [#Port<0.161>,#Port<0.141>,<0.44.0>]
+Reductions: 874
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 190
+OldHeap unused: 233
+Program counter: 0x1fe798 (prim_inet:accept0/2 + 96)
+CP: 0x1feb04 (prim_inet:async_accept/2 + 380)
+arity = 0
+=proc:<0.48.0>
+State: Waiting
+Name: crashdump_viewer_server
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.41.0>
+Started: Wed Apr 21 13:22:18 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.56.0>,<0.41.0>]
+Reductions: 1913
+Stack+heap: 987
+OldHeap: 987
+Heap unused: 524
+OldHeap unused: 987
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.49.0>
+State: Waiting
+Spawned as: erlang:apply/2
+Spawned by: <0.25.0>
+Started: Wed Apr 21 13:22:18 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [{to,<0.22.0>,#Ref<0.0.0.307>},<0.25.0>]
+Reductions: 15
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 190
+OldHeap unused: 0
+Program counter: 0x301d58 (io:wait_io_mon_reply/2 + 28)
+CP: 0x30174c (io:parse_erl_exprs/3 + 92)
+arity = 0
+=proc:<0.56.0>
+State: Garbing
+Spawned as: erlang:apply/2
+Last scheduled in for: erlang:garbage_collect/0
+Spawned by: <0.48.0>
+Started: Wed Apr 21 13:22:27 2004
+Message queue length: 0
+Number of heap fragments: 1
+Heap fragment data: 121
+Link list: [#Port<0.158>,#Port<0.157>,<0.48.0>]
+Reductions: 2420470
+Stack+heap: 121393
+OldHeap: 0
+Heap unused: 22172
+OldHeap unused: 0
+New heap start: FE5768E0
+New heap top: FE5D7734
+Stack top: FE5ED130
+Stack end: FE5ED1A4
+Old heap start: 0
+Old heap top: 0
+Old heap end: 0
+Program counter: 0x1a4980 (unknown function)
+CP: 0x20710c (prim_file:read/2 + 436)
+=port:#Port<0.1>
+Slot: 1
+Connected: #Port<0.0>
+Port controls linked-in driver: async
+=port:#Port<0.2>
+Slot: 2
+Connected: <0.2.0>
+Links: <0.2.0>
+Port controls linked-in driver: efile
+=port:#Port<0.4>
+Slot: 4
+Connected: <0.16.0>
+Links: <0.16.0>
+Port controls linked-in driver: efile
+=port:#Port<0.72>
+Slot: 72
+Connected: <0.20.0>
+Links: <0.20.0>
+Port controls linked-in driver: tty_sl -c -e
+=port:#Port<0.105>
+Slot: 105
+Connected: <0.32.0>
+Links: <0.32.0>
+Port controls external process: inet_gethost 4
+=port:#Port<0.141>
+Slot: 141
+Connected: <0.47.0>
+Links: <0.47.0>
+Port controls linked-in driver: tcp_inet
+=port:#Port<0.157>
+Slot: 157
+Connected: <0.56.0>
+Links: <0.56.0>
+Port controls linked-in driver: efile
+=port:#Port<0.158>
+Slot: 158
+Connected: <0.56.0>
+Links: <0.56.0>
+Port controls linked-in driver: efile
+=port:#Port<0.161>
+Slot: 161
+Connected: <0.47.0>
+Links: <0.47.0>
+Port controls linked-in driver: tcp_inet
+=ets:<0.18.0>
+Slot: 9
+Table: 9
+Name: code
+Buckets: 256
+Objects: 289
+Words: 14108
+=ets:<0.18.0>
+Slot: 10
+Table: 10
+Name: code_names
+Buckets: 256
+Objects: 47
+Words: 4334
+=ets:<0.32.0>
+Slot: 11
+Table: 11
+Name: ign_requests
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.32.0>
+Slot: 12
+Table: 12
+Name: ign_req_index
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.33.0>
+Slot: 13
+Table: 13
+Name: app_data
+Buckets: 256
+Objects: 7
+Words: 952
+=ets:<0.46.0>
+Slot: 15
+Table: 15
+Name: httpd_mime__127_0_0_1__8888
+Buckets: 256
+Objects: 105
+Words: 5742
+=ets:<0.11.0>
+Slot: 84
+Table: global_names
+Name: global_names
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.11.0>
+Slot: 95
+Table: global_locks
+Name: global_locks
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.11.0>
+Slot: 96
+Table: global_names_ext
+Name: global_names_ext
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.14.0>
+Slot: 316
+Table: inet_cache
+Name: inet_cache
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.48.0>
+Slot: 340
+Table: cdv_menu_table
+Name: cdv_menu_table
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.48.0>
+Slot: 341
+Table: cdv_dump_index_table
+Name: cdv_dump_index_table
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.48.0>
+Slot: 342
+Table: cdv_decode_heap_table
+Name: cdv_decode_heap_table
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.16.0>
+Slot: 780
+Table: file_io_servers
+Name: file_io_servers
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.46.0>
+Slot: 984
+Table: httpd_conf__127_0_0_1__8888
+Name: httpd_conf__127_0_0_1__8888
+Buckets: 256
+Objects: 17
+Words: 1176
+=ets:<0.14.0>
+Slot: 1342
+Table: inet_hosts
+Name: inet_hosts
+Buckets: 256
+Objects: 4
+Words: 421
+=ets:<0.14.0>
+Slot: 1362
+Table: inet_db
+Name: inet_db
+Buckets: 256
+Objects: 20
+Words: 671
+=ets:<0.5.0>
+Slot: 1655
+Table: ac_tab
+Name: ac_tab
+Buckets: 256
+Objects: 6
+Words: 843
+=timer:<0.14.0>
+Message: refresh_timeout
+Time left: 3565692 ms
+=node:'nonode@nohost'
+=no_distribution
+=loaded_modules
+Current code: 1968915
+Old code: 0
+=mod:otp_ring0
+Current size: 489
+=mod:init
+Current size: 30110
+=mod:prim_inet
+Current size: 35532
+=mod:prim_file
+Current size: 24965
+=mod:erl_prim_loader
+Current size: 19607
+=mod:erlang
+Current size: 11137
+=mod:error_handler
+Current size: 2389
+Current attributes: 836C00000001680264000376736E6C000000016E100030769A34345F26EF6D3433254FF2AE576A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161216802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6572726F725F68616E646C65722E65726C6A
+=mod:heart
+Current size: 6687
+Current attributes: 836C00000001680264000376736E6C000000016E10003094F7BECF345494DDBB4D7186E694186A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261086802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F68656172742E65726C6A
+=mod:error_logger
+Current size: 7051
+Current attributes: 836C00000001680264000376736E6C000000016E10004E3347F841DEAE2EB6A74389E6E127146A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161246802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6572726F725F6C6F676765722E65726C6A
+=mod:gen_event
+Current size: 18288
+Current attributes: 836C00000001680264000376736E6C000000016E1000336F22DF1EA75E0EA4AE65D3B8C34F946A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61346802640006736F757263656B00302F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E5F6576656E742E65726C6A
+=mod:gen
+Current size: 7129
+Current attributes: 836C00000001680264000376736E6C000000016E10007BE6AEB66EF48D8B33323C89C9936A526A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61316802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E2E65726C6A
+=mod:proc_lib
+Current size: 11658
+Current attributes: 836C00000001680264000376736E6C000000016E10005C589A8C9BD2E1F2E895E765CAE983406A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E612D6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F70726F635F6C69622E65726C6A
+=mod:application_controller
+Current size: 55249
+Current attributes: 836C00000002680264000376736E6C000000016E10003372E1AB0410565065FA086086A721316A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061246802640006736F757263656B003D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F636F6E74726F6C6C65722E65726C6A
+=mod:gen_server
+Current size: 18728
+Current attributes: 836C00000001680264000376736E6C000000016E10004C5E93533036DAC7698FC4112F59CF236A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61396802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E5F7365727665722E65726C6A
+=mod:sys
+Current size: 11589
+Current attributes: 836C00000001680264000376736E6C000000016E1000E12B0E8267551204BD5924BAB9629ADF6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61176802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7379732E65726C6A
+=mod:lists
+Current size: 18638
+Current attributes: 836C00000002680264000376736E6C000000016E10001E95B32C30E4CDAF0BDD1ABA58CBB5F36A680264000A646570726563617465646C0000000B68026400066B65796D617061046802640003616C6C61036802640003616E79610368026400036D617061036802640007666C61746D617061036802640005666F6C646C61046802640005666F6C64726104680264000666696C746572610368026400086D6170666F6C646C610468026400086D6170666F6C647261046802640007666F726561636861036A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61116802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6C697374732E65726C6A
+=mod:application
+Current size: 2666
+Current attributes: 836C00000001680264000376736E6C000000016E1000C0C5A7B67B306300FEFF9D91AA50ECB36A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6130611F6802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E2E65726C6A
+=mod:application_master
+Current size: 10912
+Current attributes: 836C00000001680264000376736E6C000000016E1000360420F5CEB80AD7DD51B3A8A0E2AFA26A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061266802640006736F757263656B00392F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F6D61737465722E65726C6A
+=mod:kernel
+Current size: 7639
+Current attributes: 836C00000002680264000376736E6C000000016E10004D418ACCB0F948D4D3CA6B9A81B462746A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261336802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6B65726E656C2E65726C6A
+=mod:supervisor
+Current size: 24469
+Current attributes: 836C00000002680264000376736E6C000000016E1000979F65727577135484BE0892A35087CC6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61126802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F73757065727669736F722E65726C6A
+=mod:rpc
+Current size: 14539
+Current attributes: 836C00000002680264000376736E6C000000016E10008C5D6242D36B3201E3B11E82D5E1581E6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6133610F6802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F7270632E65726C6A
+=mod:gb_trees
+Current size: 8274
+Current attributes: 836C00000001680264000376736E6C000000016E1000094BEFDE7B866EF2CB6FCD895AC2EE056A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D612B6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67625F74726565732E65726C6A
+=mod:global
+Current size: 40753
+Current attributes: 836C00000002680264000376736E6C000000016E10001D02C89BDE6CB2052F099894683C14CA6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161386802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F676C6F62616C2E65726C6A
+=mod:inet_db
+Current size: 34555
+Current attributes: 836C00000001680264000376736E6C000000016E1000C1CF6A6F2E83D4EBC23D2CCECBF376226A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132611A6802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F64622E65726C6A
+=mod:inet_config
+Current size: 13575
+Current attributes: 836C00000001680264000376736E6C000000016E1000650F6571C03BC9C16BB7973A747565066A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261166802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F636F6E6669672E65726C6A
+=mod:os
+Current size: 5997
+Current attributes: 836C00000001680264000376736E6C000000016E100017144CD766A604A9DFBA0B58C8FCA78B6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361056802640006736F757263656B00292F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6F732E65726C6A
+=mod:inet_udp
+Current size: 2451
+Current attributes: 836C00000001680264000376736E6C000000016E1000ACB163E87A687A6683B50B331C6E289B6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261306802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F7564702E65726C6A
+=mod:inet
+Current size: 28288
+Current attributes: 836C00000001680264000376736E6C000000016E10009B9AD400F0BAF6AAF17A4788A4EFF11E6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132610C6802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65742E65726C6A
+=mod:inet_parse
+Current size: 21928
+Current attributes: 836C00000001680264000376736E6C000000016E1000E0E65454C096847749930EDC1C53C80B6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261266802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F70617273652E65726C6A
+=mod:filename
+Current size: 17411
+Current attributes: 836C00000001680264000376736E6C000000016E100068085214F459D51A3E08819BF8D7698A6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61296802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F66696C656E616D652E65726C6A
+=mod:inet_hosts
+Current size: 3745
+Current attributes: 836C00000001680264000376736E6C000000016E1000E7430304E86230057150DEE5D279881F6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261226802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F686F7374732E65726C6A
+=mod:erl_distribution
+Current size: 2512
+Current attributes: 836C00000002680264000376736E6C000000016E1000CDE49D63ACA767E0D49679657E99D2046A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161186802640006736F757263656B00372F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F65726C5F646973747269627574696F6E2E65726C6A
+=mod:global_group
+Current size: 30960
+Current attributes: 836C00000002680264000376736E6C000000016E10008ECE759E5920988CA3ACFF34B32F86736A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131613B6802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F676C6F62616C5F67726F75702E65726C6A
+=mod:net_kernel
+Current size: 37648
+Current attributes: 836C00000002680264000376736E6C000000016E1000967CE7DE41F9B39906CCCF3225E6E5286A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361026802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6E65745F6B65726E656C2E65726C6A
+=mod:file_server
+Current size: 8372
+Current attributes: 836C00000002680264000376736E6C000000016E1000EF90906EC6204204AC0A77C4A25B65236A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612D6802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C655F7365727665722E65726C6A
+=mod:old_file_server
+Current size: 3074
+Current attributes: 836C00000001680264000376736E6C000000016E1000C802085DD76D4EFBA6A8F528FECB94B36A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612F6802640006736F757263656B00362F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6F6C645F66696C655F7365727665722E65726C6A
+=mod:code
+Current size: 7419
+Current attributes: 836C00000001680264000376736E6C000000016E1000AE618E3041C8E3807A3719CD5140DF5E6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6130612E6802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64652E65726C6A
+=mod:code_server
+Current size: 30811
+Current attributes: 836C00000001680264000376736E6C000000016E0F00BFB96248C2CA8601B4CB7F543F52E26A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061346802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64655F7365727665722E65726C6A
+=mod:code_aux
+Current size: 1736
+Current attributes: 836C00000001680264000376736E6C000000016E10007A90DB53FCCECD52504F20E7A3B6BAE26A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061316802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64655F6175782E65726C6A
+=mod:packages
+Current size: 3119
+Current attributes: 836C00000001680264000376736E6C000000016E1000044DC8EEB65F178AE23EF2465E1954496A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361076802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F7061636B616765732E65726C6A
+=mod:hipe_unified_loader
+Current size: 37330
+Current attributes: 836C00000001680264000376736E6C000000016E1000DABD57945702E56F4B3AA7B7B19C1D166A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361326802640006736F757263656B003A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F686970655F756E69666965645F6C6F616465722E65726C6A
+=mod:hipe_sparc_loader
+Current size: 1821
+Current attributes: 836C00000001680264000376736E6C000000016E1000582BC55E9FADFF879C2C45D25A6CB7E56A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F6D61696E6802640001696B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F72746C6802640001696B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F737061726364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6133612B6802640006736F757263656B00382F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F686970655F73706172635F6C6F616465722E65726C6A
+=mod:ets
+Current size: 16577
+Current attributes: 836C00000002680264000376736E6C000000016E100033D982AC91129E5FC35E0AC3337A4EB56A680264000A646570726563617465646C0000000168026400086669787461626C6561026A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D611C6802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6574732E65726C6A
+=mod:lists_sort
+Current size: 38692
+Current attributes: 836C00000001680264000376736E6C000000016E1000E17EC92FA9AA3199DD71701C215044616A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000B68026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736802640006696E6C696E656C0000000468026400096D65726765335F3132610768026400096D65726765335F32316107680264000A726D65726765335F31326107680264000A726D65726765335F323161076A6802640006696E6C696E656C00000004680264000A756D65726765335F31326108680264000A756D65726765335F32316108680264000C72756D65726765335F3132616107680264000C72756D65726765335F31326261086A6802640006696E6C696E656C00000004680264000C6B65796D65726765335F3132610C680264000C6B65796D65726765335F3231610C680264000D726B65796D65726765335F3132610C680264000D726B65796D65726765335F3231610C6A6802640006696E6C696E656C00000006680264000D756B65796D65726765335F3132610D680264000D756B65796D65726765335F3231610D680264000F72756B65796D65726765335F313261610B680264000F72756B65796D65726765335F323161610D680264000F72756B65796D65726765335F313262610D680264000F72756B65796D65726765335F323162610C6A6A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61166802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6C697374735F736F72742E65726C6A
+=mod:user_sup
+Current size: 2355
+Current attributes: 836C00000002680264000376736E6C000000016E100074BA860804CB4D60D6908C705E6544BD6A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361246802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F757365725F7375702E65726C6A
+=mod:supervisor_bridge
+Current size: 2944
+Current attributes: 836C00000002680264000376736E6C000000016E10001590DDC10CF8A9D09763CDB7479678ED6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61156802640006736F757263656B00382F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F73757065727669736F725F6272696467652E65726C6A
+=mod:user_drv
+Current size: 14630
+Current attributes: 836C00000001680264000376736E6C000000016E1000F29F3B193A1EB1ADA9975D97E51BF0E86A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361216802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F757365725F6472762E65726C6A
+=mod:group
+Current size: 10165
+Current attributes: 836C00000001680264000376736E6C000000016E1000F6427D0DA330BBFAD5D4C19058516FF36A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261066802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F67726F75702E65726C6A
+=mod:io_lib
+Current size: 12601
+Current attributes: 836C00000002680264000376736E6C000000016E10004160DD78F37EE7C72F7C5B6A751DB7F56A680264000A646570726563617465646C0000000468026400047363616E610168026400047363616E610268026400047363616E6103680264000D72657365727665645F776F726461016A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61036802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69622E65726C6A
+=mod:edlin
+Current size: 18178
+Current attributes: 836C00000001680264000376736E6C000000016E100035D752FCBA8ED7F4D26990EF3E6A1A526A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C61016802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65646C696E2E65726C6A
+=mod:io_lib_format
+Current size: 16189
+Current attributes: 836C00000001680264000376736E6C000000016E10004F382F327C456F83F33C3D5EBFBD87906A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61066802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69625F666F726D61742E65726C6A
+=mod:kernel_config
+Current size: 3295
+Current attributes: 836C00000002680264000376736E6C000000016E100077B8EE6C9E95FBBE5DB0371F6DB235226A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261356802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6B65726E656C5F636F6E6669672E65726C6A
+=mod:shell
+Current size: 22571
+Current attributes: 836C00000001680264000376736E6C000000016E10007D1354325618EB98A5BD4E8F41E6A0226A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61016802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7368656C6C2E65726C6A
+=mod:error_logger_tty_h
+Current size: 7773
+Current attributes: 836C00000002680264000376736E6C000000016E10001502D55D6C1777F07E2E05CDD91D16986A68026400096265686176696F75726C0000000164000967656E5F6576656E746A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61196802640006736F757263656B00392F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6572726F725F6C6F676765725F7474795F682E65726C6A
+=mod:erl_eval
+Current size: 33481
+Current attributes: 836C00000002680264000376736E6C000000016E1000D06903753C86BBC49A5CBD789CCB09B66A680264000A646570726563617465646C00000004680264000373657161026802640003736571610368026400086172675F6C697374610268026400086172675F6C69737461036A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C610D6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F6576616C2E65726C6A
+=mod:orddict
+Current size: 4872
+Current attributes: 836C00000002680264000376736E6C000000016E100078DCF69F3949D79BC54168266A3ABF566A680264000A646570726563617465646C00000002680264000C646963745F746F5F6C6973746101680264000C6C6973745F746F5F6469637461016A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61236802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F7264646963742E65726C6A
+=mod:c
+Current size: 19555
+Current attributes: 836C00000001680264000376736E6C000000016E10003FACCF5DE16ABBC988ABF0811980C33B6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61136802640006736F757263656B00282F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F632E65726C6A
+=mod:io
+Current size: 7417
+Current attributes: 836C00000002680264000376736E6C000000016E1000E2F2A6094B3C3D945865225D0620E7546A680264000A646570726563617465646C00000007680264000B70617273655F65787072736102680264000C7363616E5F65726C5F7365716101680264000C7363616E5F65726C5F7365716102680264000C7363616E5F65726C5F7365716103680264000D70617273655F65726C5F7365716101680264000D70617273655F65726C5F7365716102680264000D70617273655F65726C5F73657161036A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61006802640006736F757263656B00292F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F2E65726C6A
+=mod:file
+Current size: 20795
+Current attributes: 836C00000002680264000376736E6C000000016E1000D291AF77EE8B08B792B7FE99274504506A680264000A646570726563617465646C00000001680264000966696C655F696E666F61016A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161276802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C652E65726C6A
+=mod:file_io_server
+Current size: 12071
+Current attributes: 836C00000001680264000376736E6C000000016E1000A5A8C4E2B2646855AD5C617CB216CB966A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612A6802640006736F757263656B00352F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C655F696F5F7365727665722E65726C6A
+=mod:erl_scan
+Current size: 21891
+Current attributes: 836C00000001680264000376736E6C000000016E100094F386F0C378B258E5D9CEADD4F03B6A6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61116802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F7363616E2E65726C6A
+=mod:erl_parse
+Current size: 161233
+Current attributes: 836C00000001680264000376736E6C000000016E10000E8CBC32C293BFC1FBC721CE918062236A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000968026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F76617273640006696E6C696E656802640004686970656C000000016802640008726567616C6C6F6364000B6C696E6561725F7363616E6A6A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61076802640006736F757263656B00302F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F70617273652E65726C6A
+=mod:erl_lint
+Current size: 73159
+Current attributes: 836C00000001680264000376736E6C000000016E1000D1D2A7D6DDFD1195CB180993C76FD2CD6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C61156802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F6C696E742E65726C6A
+=mod:ordsets
+Current size: 3257
+Current attributes: 836C00000002680264000376736E6C000000016E1000FD39D8FD846511128F5670BA28600F676A680264000A646570726563617465646C0000000468026400076E65775F7365746100680264000B7365745F746F5F6C6973746101680264000B6C6973745F746F5F7365746101680264000673756273657461026A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61256802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F7264736574732E65726C6A
+=mod:dict
+Current size: 15637
+Current attributes: 836C00000002680264000376736E6C000000016E1000BC846E7EF85045A5D76190CE9B1AE97C6A680264000A646570726563617465646C00000002680264000C646963745F746F5F6C6973746101680264000C6C6973745F746F5F6469637461016A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61356802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F646963742E65726C6A
+=mod:otp_internal
+Current size: 7133
+Current attributes: 836C00000001680264000376736E6C000000016E1000DC494F64DE590AFC4919DFEB0EB026B66A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61206802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F74705F696E7465726E616C2E65726C6A
+=mod:user_default
+Current size: 1261
+Current attributes: 836C00000002680264000376736E6C000000016E1000505078ACD9B84D514FC6DA2BE249E6756A6802640006617574686F726C0000000164001765656973686E6E406565692E6572696373736F6E2E73656A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000368026400036377646B00112F686F6D652F736972692F65726C616E6768026400066F75746469726B00112F686F6D652F736972692F65726C616E676400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461036116610D612C61126802640006736F757263656B00222F686F6D652F736972692F65726C616E672F757365725F64656661756C742E65726C6A
+=mod:tt
+Current size: 2959
+Current attributes: 836C00000002680264000376736E6C000000016E10001D71FD5A55D3BCBF06BFEDF2426C3C386A6802640006617574686F726C0000000164001765656973686E6E406565692E6572696373736F6E2E73656A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000368026400036377646B00112F686F6D652F736972692F65726C616E6768026400066F75746469726B00112F686F6D652F736972692F65726C616E676400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461036116610D612B610C6802640006736F757263656B00182F686F6D652F736972692F65726C616E672F74742E65726C6A
+=mod:distel
+Current size: 18214
+Current attributes: 836C00000002680264000376736E6C000000016E1000CC9C9EF141459249C1CCA00993B2E29A6A6802640006617574686F726C000000016400116C756B6540626C75657461696C2E636F6D6A6A
+Current compilation info: 836C0000000368026400076F7074696F6E736C0000000664000276336400107761726E5F756E757365645F7661727364000A64656275675F696E666F68026400066F75746469726B00046562696E68026400036377646B001C2F6C6469736B2F736972692F746F6F6C732F64697374656C2D332E3164000A6578706F72745F616C6C6A680264000776657273696F6E6B0003342E31680264000474696D65680662000007D2610B6114610B610361336A
+=mod:crashdump_viewer
+Current size: 125756
+Current attributes: 836C00000001680264000376736E6C000000016E10002DC5D9D96190A2D5F27FAC3FA3D5C7956A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F76617273680264000F70617273655F7472616E73666F726D64000C6D735F7472616E73666F726D6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461146108611B61366802640006736F757263656B00362F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7669657765722E65726C6A
+=mod:webtool
+Current size: 29229
+Current attributes: 836C00000002680264000376736E6C000000016E10008AEEF06B60527A3390CBC2C98083CC0A6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00202F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F73726368026400066F75746469726B00282F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F2E2E2F6562696E64000A64656275675F696E666F6400107761726E5F756E757365645F76617273680264000F70617273655F7472616E73666F726D64000C6D735F7472616E73666F726D6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104610661086106612D6802640006736F757263656B002C2F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F776562746F6F6C2E65726C6A
+=mod:gen_tcp
+Current size: 3574
+Current attributes: 836C00000001680264000376736E6C000000016E1000C965E4EAFDAA94D7F21EDCBE30B21E7B6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161316802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F67656E5F7463702E65726C6A
+=mod:inet_tcp
+Current size: 2743
+Current attributes: 836C00000001680264000376736E6C000000016E1000C4AFE0B49768E4CF78B2C42EA1D3DB7F6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132612B6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F7463702E65726C6A
+=mod:inet_gethost_native
+Current size: 15611
+Current attributes: 836C00000002680264000376736E6C000000016E10005D8CD4277D0BD2425B9C26036AE314506A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261206802640006736F757263656B003A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F676574686F73745F6E61746976652E65726C6A
+=mod:filelib
+Current size: 7202
+Current attributes: 836C00000001680264000376736E6C000000016E10007B42AA23FF99DF2CD9D586635B77556A6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61266802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F66696C656C69622E65726C6A
+=mod:httpd_util
+Current size: 24068
+Current attributes: 836C00000002680264000376736E6C000000016E10008D99E096221B88D542E52CB9C8377F6D6A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128613B6802640006736F757263656B00312F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F7574696C2E65726C6A
+=mod:webtool_sup
+Current size: 695
+Current attributes: 836C00000002680264000376736E6C000000016E1000FA5449E12816CF3AD0A3085BB26CDB9B6A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400036377646B00202F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F73726368026400066F75746469726B00282F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F2E2E2F6562696E64000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461066108610761236802640006736F757263656B00302F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F776562746F6F6C5F7375702E65726C6A
+=mod:httpd_conf
+Current size: 33659
+Current attributes: 836C00000002680264000376736E6C000000016E1000E3198FBDC73BC48CB7D0C1C762B8F1AB6A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861116802640006736F757263656B00312F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F636F6E662E65726C6A
+=mod:regexp
+Current size: 13698
+Current attributes: 836C00000001680264000376736E6C000000016E10009DD44F3D02F8328BE3ABF4DDA89E0CAE6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61376802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7265676578702E65726C6A
+=mod:string
+Current size: 7740
+Current attributes: 836C00000002680264000376736E6C000000016E10005521DDF38903D46D7C53DB864266F7456A680264000A646570726563617465646C00000007680264000C72655F73685F746F5F61776B6101680264000872655F70617273656101680264000872655F6D617463686102680264000672655F7375626103680264000772655F677375626103680264000872655F73706C697461026802640005696E64657861026A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F610F6802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F737472696E672E65726C6A
+=mod:httpd
+Current size: 7563
+Current attributes: 836C00000002680264000376736E6C000000016E1000BFD190D951EB3CAD2CC72ADEF20886906A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861036802640006736F757263656B002C2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470642E65726C6A
+=mod:httpd_sup
+Current size: 4068
+Current attributes: 836C00000003680264000376736E6C000000016E10007FA5C790118F18F3D20A2BFAF0229F0A6A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861366802640006736F757263656B00302F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F7375702E65726C6A
+=mod:httpd_acceptor_sup
+Current size: 2161
+Current attributes: 836C00000003680264000376736E6C000000016E10003E6F9289B64C13F1EC8A1184BACF055F6A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128610C6802640006736F757263656B00392F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6163636570746F725F7375702E65726C6A
+=mod:httpd_verbosity
+Current size: 2672
+Current attributes: 836C00000002680264000376736E6C000000016E100018B6F407D391872421748F87877DAAF36A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961036802640006736F757263656B00362F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F766572626F736974792E65726C6A
+=mod:timer
+Current size: 8223
+Current attributes: 836C00000001680264000376736E6C000000016E10001D0D64DB1B923D1B3B9497655C43B4AD6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F611A6802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F74696D65722E65726C6A
+=mod:httpd_misc_sup
+Current size: 2066
+Current attributes: 836C00000003680264000376736E6C000000016E100092342F38AC16C074DDC21532FBFB52C26A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128611F6802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6D6973635F7375702E65726C6A
+=mod:httpd_manager
+Current size: 28916
+Current attributes: 836C00000003680264000376736E6C000000016E100013F7A1E6A4B6407A0A1892A794EE10A36A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128611B6802640006736F757263656B00342F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6D616E616765722E65726C6A
+=mod:mod_alias
+Current size: 6720
+Current attributes: 836C00000002680264000376736E6C000000016E10002F35C36060B4AC45474440381D146AB96A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961106802640006736F757263656B00302F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F616C6961732E65726C6A
+=mod:mod_auth
+Current size: 25168
+Current attributes: 836C00000002680264000376736E6C000000016E100083F3CA0C7A3E7B5E19A635A7F916595D6A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961166802640006736F757263656B002F2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F617574682E65726C6A
+=mod:mod_esi
+Current size: 22534
+Current attributes: 836C00000002680264000376736E6C000000016E1000513E3FF733E1E6592B86CB55B9C14E086A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61026802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6573692E65726C6A
+=mod:mod_actions
+Current size: 3625
+Current attributes: 836C00000002680264000376736E6C000000016E10008E5437921662830490CA76DFF88548966A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066129610C6802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F616374696F6E732E65726C6A
+=mod:mod_cgi
+Current size: 25891
+Current attributes: 836C00000002680264000376736E6C000000016E1000F91D405488188F1BD25110B4ED9EE8786A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961306802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6367692E65726C6A
+=mod:mod_include
+Current size: 34923
+Current attributes: 836C00000002680264000376736E6C000000016E1000B9CCE88D63DD6AC49D5DF533C46B97D56A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61176802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F696E636C7564652E65726C6A
+=mod:mod_dir
+Current size: 13488
+Current attributes: 836C00000002680264000376736E6C000000016E1000EF620CB4B5DE5586ED681347496DA1C86A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961356802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6469722E65726C6A
+=mod:mod_get
+Current size: 4672
+Current attributes: 836C00000002680264000376736E6C000000016E1000AD2730B6BE6AF875A500AF4857C4D7F86A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61076802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6765742E65726C6A
+=mod:mod_head
+Current size: 3074
+Current attributes: 836C00000002680264000376736E6C000000016E1000CAF803B9FA6A28D4153BC109B00D7DF96A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A610B6802640006736F757263656B002F2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F686561642E65726C6A
+=mod:mod_log
+Current size: 8546
+Current attributes: 836C00000002680264000376736E6C000000016E1000F9664B54861260DEA081249379219AF86A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A611B6802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6C6F672E65726C6A
+=mod:mod_disk_log
+Current size: 15160
+Current attributes: 836C00000002680264000376736E6C000000016E1000DDA1E88A9C423A2866B56425DF36F5C66A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961396802640006736F757263656B00332F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6469736B5F6C6F672E65726C6A
+=mod:httpd_socket
+Current size: 7426
+Current attributes: 836C00000002680264000376736E6C000000016E1000B831219096661E4D2E200A07C4A9A7776A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861326802640006736F757263656B00332F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F736F636B65742E65726C6A
+=mod:httpd_acceptor
+Current size: 4472
+Current attributes: 836C00000002680264000376736E6C000000016E1000A501686DF4E4053E7D978E0CA162BEC56A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861076802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6163636570746F722E65726C6A
+=mod:io_lib_pretty
+Current size: 8171
+Current attributes: 836C00000001680264000376736E6C000000016E1000CD397E11D2D380D02A4BC6EE309B98CB6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E610C6802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69625F7072657474792E65726C6A
+=mod:httpd_request_handler
+Current size: 26393
+Current attributes: 836C00000002680264000376736E6C000000016E100021C280A5EB5B9CCD00A2C418A341202A6A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861296802640006736F757263656B003C2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F726571756573745F68616E646C65722E65726C6A
+=mod:calendar
+Current size: 7158
+Current attributes: 836C00000002680264000376736E6C000000016E10008C44498546709037F8D72DA4AF8B7FB76A680264000A646570726563617465646C00000001680264001C6C6F63616C5F74696D655F746F5F756E6976657273616C5F74696D6561016A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61166802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F63616C656E6461722E65726C6A
+=mod:httpd_parse
+Current size: 9977
+Current attributes: 836C00000002680264000376736E6C000000016E1000174653BAA652261FEB44FFDED99E50B76A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861246802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F70617273652E65726C6A
+=mod:httpd_response
+Current size: 13535
+Current attributes: 836C00000002680264000376736E6C000000016E1000785B247D894BA08A40D814EF11F848976A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128612D6802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F726573706F6E73652E65726C6A
+=mod:crashdump_viewer_html
+Current size: 68343
+Current attributes: 836C00000001680264000376736E6C000000016E1000AE414770FDB0806C5583FF8D6D71DC766A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461146108611C61026802640006736F757263656B003B2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7669657765725F68746D6C2E65726C6A
+=mod:crashdump_translate
+Current size: 89840
+Current attributes: 836C00000001680264000376736E6C000000016E100038F332287181E933A76CEF4799BDB6416A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000668026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461046115610B611661106802640006736F757263656B00392F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7472616E736C6174652E65726C6A
+=fun
+Module: crashdump_viewer_html
+Uniq: 9122590
+Index: 0
+Address: 526308
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 77168418
+Index: 14
+Address: 26541c
+Native_address: bcf04
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 88083515
+Index: 9
+Address: 284c30
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 36747896
+Index: 4
+Address: 26df84
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 80395734
+Index: 8
+Address: 265838
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 103184573
+Index: 5
+Address: 2fa59c
+Native_address: bce80
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 88265811
+Index: 24
+Address: 34f6a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global_group
+Uniq: 9644262
+Index: 2
+Address: 292cec
+Native_address: bcef4
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 100885585
+Index: 0
+Address: 29eb2c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 128335479
+Index: 6
+Address: 26de84
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 42988083
+Index: 1
+Address: 210c14
+Native_address: bcf04
+Refc: 1
+=fun
+Module: dict
+Uniq: 7105125
+Index: 7
+Address: 354f84
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 29030584
+Index: 8
+Address: 234978
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 29214351
+Index: 2
+Address: 285660
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 5158633
+Index: 4
+Address: 274034
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 74624950
+Index: 25
+Address: 34f63c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 6477018
+Index: 3
+Address: 2adb6c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 117885138
+Index: 7
+Address: 2ffff8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: dict
+Uniq: 47566924
+Index: 6
+Address: 354fb8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 114637756
+Index: 12
+Address: 313c60
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 121316204
+Index: 31
+Address: 313a68
+Native_address: bced4
+Refc: 1
+=fun
+Module: code_server
+Uniq: 61363639
+Index: 12
+Address: 2ad6a4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 116208699
+Index: 3
+Address: 274094
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global_group
+Uniq: 113750737
+Index: 0
+Address: 292d54
+Native_address: bcefc
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 12853672
+Index: 0
+Address: 222e74
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 108046357
+Index: 12
+Address: 4ab0b0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 111569299
+Index: 47
+Address: 34e80c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 20108653
+Index: 15
+Address: 2f9f94
+Native_address: bcea4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 45252965
+Index: 15
+Address: 313c0c
+Native_address: bced4
+Refc: 1
+=fun
+Module: webtool
+Uniq: 12437425
+Index: 9
+Address: 4ab3e0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 30942993
+Index: 22
+Address: 34f6ec
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_parse
+Uniq: 93430337
+Index: 3
+Address: 33b100
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_parse
+Uniq: 6604883
+Index: 2
+Address: 33b16c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: rpc
+Uniq: 36867745
+Index: 5
+Address: 255e28
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 90563105
+Index: 1
+Address: 285708
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 18519297
+Index: 7
+Address: 26ddfc
+Native_address: bcef4
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 8058975
+Index: 16
+Address: 4a36b4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 30694569
+Index: 7
+Address: 27d018
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 76933943
+Index: 0
+Address: 2741b4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 9033258
+Index: 6
+Address: 4a4690
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 74851752
+Index: 5
+Address: 4a4798
+Native_address: bcef4
+Refc: 1
+=fun
+Module: global
+Uniq: 50855382
+Index: 4
+Address: 2659a8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 39211582
+Index: 52
+Address: 34e504
+Native_address: bceec
+Refc: 1
+=fun
+Module: file_server
+Uniq: 77665472
+Index: 0
+Address: 2a0dec
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 57487277
+Index: 8
+Address: 2fa3c4
+Native_address: bce94
+Refc: 1
+=fun
+Module: webtool
+Uniq: 87386575
+Index: 11
+Address: 4ab1c8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 58991950
+Index: 8
+Address: 4a4338
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 118859163
+Index: 17
+Address: 4a34d4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: dict
+Uniq: 38265609
+Index: 12
+Address: 354dec
+Native_address: bcefc
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 56903339
+Index: 1
+Address: 2527c4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_hosts
+Uniq: 129504763
+Index: 0
+Address: 28aae8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: dict
+Uniq: 44817307
+Index: 10
+Address: 354e3c
+Native_address: bceec
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 52856894
+Index: 41
+Address: 34eb70
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 22623360
+Index: 23
+Address: 34f5d4
+Native_address: bceec
+Refc: 1
+=fun
+Module: orddict
+Uniq: 34963136
+Index: 0
+Address: 2fbbbc
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erlang
+Uniq: 24496633
+Index: 0
+Address: 213744
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 99313855
+Index: 27
+Address: 2f9914
+Native_address: bcef4
+Refc: 1
+=fun
+Module: httpd_util
+Uniq: 99137703
+Index: 3
+Address: 4b5dfc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 124043500
+Index: 3
+Address: 222b84
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 102650878
+Index: 22
+Address: 313b48
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 13333720
+Index: 12
+Address: 34fb2c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: global_group
+Uniq: 133457
+Index: 5
+Address: 292a80
+Native_address: bcefc
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 64640983
+Index: 4
+Address: 29e944
+Native_address: bcefc
+Refc: 1
+=fun
+Module: rpc
+Uniq: 7580218
+Index: 2
+Address: 255f08
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 131850870
+Index: 59
+Address: 34e6b8
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 56617403
+Index: 10
+Address: 284b40
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 108680306
+Index: 4
+Address: 4ab5e0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 90880071
+Index: 2
+Address: 26e150
+Native_address: bcefc
+Refc: 1
+=fun
+Module: file_io_server
+Uniq: 23980778
+Index: 0
+Address: 30ac30
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 12006418
+Index: 19
+Address: 2f9d54
+Native_address: bce80
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 81701030
+Index: 8
+Address: 526228
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 71013875
+Index: 1
+Address: 4a4ddc
+Native_address: bcf04
+Refc: 1
+=fun
+Module: distel
+Uniq: 87740845
+Index: 2
+Address: 35c0e0
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 90782401
+Index: 17
+Address: 2f9e8c
+Native_address: bced4
+Refc: 1
+=fun
+Module: shell
+Uniq: 133882676
+Index: 6
+Address: 2e52ac
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 105698088
+Index: 3
+Address: 2855b4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 58370899
+Index: 0
+Address: 27d370
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 15274536
+Index: 25
+Address: 2f9a94
+Native_address: bcef4
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 94349557
+Index: 0
+Address: 252844
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_parse
+Uniq: 33328185
+Index: 1
+Address: 33b1d8
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 86971387
+Index: 16
+Address: 313db0
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 53364473
+Index: 38
+Address: 34ee84
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 128145687
+Index: 0
+Address: 4ab944
+Native_address: bcee4
+Refc: 1
+=fun
+Module: c
+Uniq: 98651404
+Index: 10
+Address: 2fff20
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 78224618
+Index: 0
+Address: 313dcc
+Native_address: bced4
+Refc: 1
+=fun
+Module: shell
+Uniq: 40779085
+Index: 11
+Address: 2e50c8
+Native_address: bcef4
+Refc: 1
+=fun
+Module: c
+Uniq: 93517350
+Index: 4
+Address: 300090
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 58551291
+Index: 0
+Address: 234f14
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 10055518
+Index: 17
+Address: 526170
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 15795706
+Index: 19
+Address: 313bd4
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 31129467
+Index: 13
+Address: 313c44
+Native_address: bced4
+Refc: 1
+=fun
+Module: old_file_server
+Uniq: 115635393
+Index: 0
+Address: 2a1a4c
+Native_address: bcf04
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 65839696
+Index: 22
+Address: 2f9c00
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 69275064
+Index: 28
+Address: 313aa0
+Native_address: bced4
+Refc: 1
+=fun
+Module: dict
+Uniq: 55938066
+Index: 11
+Address: 354d6c
+Native_address: bceec
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 22323433
+Index: 3
+Address: 252688
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 129726129
+Index: 29
+Address: 313abc
+Native_address: bced4
+Refc: 1
+=fun
+Module: dict
+Uniq: 84346832
+Index: 0
+Address: 3550fc
+Native_address: bceec
+Refc: 1
+=fun
+Module: shell
+Uniq: 102096820
+Index: 7
+Address: 2e5290
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 70385762
+Index: 11
+Address: 27cf44
+Native_address: bcefc
+Refc: 1
+=fun
+Module: mod_cgi
+Uniq: 1483038
+Index: 0
+Address: 4ec2e8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: dict
+Uniq: 3664813
+Index: 1
+Address: 3550b4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet
+Uniq: 131143671
+Index: 6
+Address: 27d08c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 46286977
+Index: 2
+Address: 2740b0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: mod_esi
+Uniq: 49099432
+Index: 0
+Address: 4e522c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_master
+Uniq: 95764905
+Index: 2
+Address: 24aaa8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: packages
+Uniq: 62890926
+Index: 0
+Address: 2ae814
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 41564771
+Index: 35
+Address: 3139f8
+Native_address: bced4
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 95490768
+Index: 0
+Address: 4a4dc0
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 121559432
+Index: 3
+Address: 313d78
+Native_address: bced4
+Refc: 1
+=fun
+Module: httpd_conf
+Uniq: 21152662
+Index: 0
+Address: 4be5a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 41630916
+Index: 5
+Address: 29e914
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 19747201
+Index: 5
+Address: 313d24
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 100584837
+Index: 36
+Address: 34f0f4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64635712
+Index: 15
+Address: 34f94c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 46398361
+Index: 3
+Address: 29e9a4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 86699817
+Index: 27
+Address: 313b2c
+Native_address: bced4
+Refc: 1
+=fun
+Module: distel
+Uniq: 40869731
+Index: 0
+Address: 35c12c
+Native_address: bcf04
+Refc: 1
+=fun
+Module: inet
+Uniq: 83701641
+Index: 1
+Address: 27d33c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: mod_auth
+Uniq: 85845790
+Index: 0
+Address: 4dfd84
+Native_address: bcefc
+Refc: 1
+=fun
+Module: shell
+Uniq: 101292714
+Index: 9
+Address: 2e519c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 134173702
+Index: 1
+Address: 265b68
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 92433687
+Index: 6
+Address: 2ad9f4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: dict
+Uniq: 62315241
+Index: 8
+Address: 354f38
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 11615541
+Index: 12
+Address: 265530
+Native_address: bcefc
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 11160090
+Index: 2
+Address: 2b6bb4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 12116524
+Index: 15
+Address: 2342c4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: mod_log
+Uniq: 61620901
+Index: 2
+Address: 4fc670
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 23665189
+Index: 12
+Address: 4a3b94
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 43844413
+Index: 0
+Address: 300100
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 100514258
+Index: 6
+Address: 313d08
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 54271286
+Index: 17
+Address: 34f8a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 47017252
+Index: 3
+Address: 26dfa0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 1228304
+Index: 7
+Address: 4a45a4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 127131470
+Index: 10
+Address: 2655a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: file_server
+Uniq: 22638227
+Index: 1
+Address: 2a0e20
+Native_address: bcf04
+Refc: 1
+=fun
+Module: code_server
+Uniq: 112704920
+Index: 15
+Address: 2ad488
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 88302875
+Index: 2
+Address: 2fa76c
+Native_address: bceb4
+Refc: 1
+=fun
+Module: inet_hosts
+Uniq: 85808984
+Index: 1
+Address: 28ab18
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_parse
+Uniq: 106391799
+Index: 0
+Address: 33b22c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 25830519
+Index: 5
+Address: 27d0c0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: shell
+Uniq: 110491036
+Index: 1
+Address: 2e5398
+Native_address: bcef4
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 13128736
+Index: 5
+Address: 52627c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 84644982
+Index: 21
+Address: 313b9c
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 120577486
+Index: 3
+Address: 34fffc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 4504456
+Index: 44
+Address: 34e938
+Native_address: bceec
+Refc: 1
+=fun
+Module: mod_disk_log
+Uniq: 28754183
+Index: 0
+Address: 500140
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 88043334
+Index: 14
+Address: 313c28
+Native_address: bced4
+Refc: 1
+=fun
+Module: code_server
+Uniq: 61592373
+Index: 0
+Address: 2adc28
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 74468346
+Index: 26
+Address: 313ad8
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 69896253
+Index: 21
+Address: 2f9c40
+Native_address: bce80
+Refc: 1
+=fun
+Module: global_group
+Uniq: 59656873
+Index: 4
+Address: 292ac0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 103891261
+Index: 2
+Address: 4a4d70
+Native_address: bcefc
+Refc: 1
+=fun
+Module: httpd_util
+Uniq: 89619733
+Index: 0
+Address: 4b5e64
+Native_address: bcefc
+Refc: 1
+=fun
+Module: shell
+Uniq: 133201466
+Index: 10
+Address: 2e5180
+Native_address: bceec
+Refc: 1
+=fun
+Module: webtool
+Uniq: 32159369
+Index: 2
+Address: 4ab820
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 76861396
+Index: 2
+Address: 2adbb0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: mod_log
+Uniq: 48206487
+Index: 0
+Address: 4fc6f0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 118996551
+Index: 28
+Address: 34f384
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 12593774
+Index: 50
+Address: 34e60c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: httpd_request_handler
+Uniq: 48542841
+Index: 1
+Address: 50e88c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 56178490
+Index: 9
+Address: 4a420c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: distel
+Uniq: 88212576
+Index: 4
+Address: 35bf44
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 79562132
+Index: 29
+Address: 34f368
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 129524917
+Index: 32
+Address: 34f2c0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 54029891
+Index: 23
+Address: 2f9af0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 108872092
+Index: 4
+Address: 27d0f0
+Native_address: bcef4
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 40905124
+Index: 6
+Address: 234ac0
+Native_address: bcef4
+Refc: 1
+=fun
+Module: code_server
+Uniq: 50124876
+Index: 10
+Address: 2ad760
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 791358
+Index: 48
+Address: 34e7b0
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 18404828
+Index: 24
+Address: 313af4
+Native_address: bced4
+Refc: 1
+=fun
+Module: httpd_util
+Uniq: 13278653
+Index: 1
+Address: 4b5e48
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 110307423
+Index: 13
+Address: 284a7c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: rpc
+Uniq: 99592247
+Index: 0
+Address: 256118
+Native_address: bcf04
+Refc: 1
+=fun
+Module: global
+Uniq: 99918211
+Index: 2
+Address: 265af4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 71442319
+Index: 27
+Address: 34f510
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 7612785
+Index: 13
+Address: 2fa0fc
+Native_address: bce80
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 56095795
+Index: 15
+Address: 4a38a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 23626796
+Index: 25
+Address: 313b10
+Native_address: bced4
+Refc: 1
+=fun
+Module: file_server
+Uniq: 126074974
+Index: 2
+Address: 2a0cac
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 104278122
+Index: 1
+Address: 274154
+Native_address: bcefc
+Refc: 1
+=fun
+Module: sys
+Uniq: 90854051
+Index: 0
+Address: 240344
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 113334594
+Index: 2
+Address: 313d5c
+Native_address: bced4
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 8832142
+Index: 7
+Address: 284e30
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 9159706
+Index: 42
+Address: 34eb54
+Native_address: bceec
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 123946665
+Index: 8
+Address: 26e494
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 3149789
+Index: 1
+Address: 5262d0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 48288621
+Index: 11
+Address: 2ffed8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 8953292
+Index: 20
+Address: 4a4d54
+Native_address: bcee4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 9632158
+Index: 4
+Address: 34ff88
+Native_address: bcefc
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 31111567
+Index: 7
+Address: 29e8c8
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 85307443
+Index: 10
+Address: 2fa29c
+Native_address: bcec4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 104417191
+Index: 7
+Address: 313cd0
+Native_address: bced4
+Refc: 1
+=fun
+Module: dict
+Uniq: 43625777
+Index: 5
+Address: 354fec
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 92698798
+Index: 3
+Address: 4ab780
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 39074546
+Index: 6
+Address: 2fa54c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 71451126
+Index: 5
+Address: 234b98
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 122084387
+Index: 6
+Address: 300038
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 9625924
+Index: 14
+Address: 284a60
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 128777368
+Index: 11
+Address: 313c7c
+Native_address: bced4
+Refc: 1
+=fun
+Module: webtool
+Uniq: 10203723
+Index: 7
+Address: 4ab4f8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 35032400
+Index: 10
+Address: 313c98
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 17252586
+Index: 34
+Address: 313a14
+Native_address: bced4
+Refc: 1
+=fun
+Module: code_server
+Uniq: 7177165
+Index: 11
+Address: 2ad734
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 115778175
+Index: 3
+Address: 4a4930
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 96440880
+Index: 51
+Address: 34e590
+Native_address: bcefc
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 68275407
+Index: 0
+Address: 2b7340
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 88854488
+Index: 16
+Address: 2f9f04
+Native_address: bcebc
+Refc: 1
+=fun
+Module: global
+Uniq: 26353848
+Index: 13
+Address: 2654e8
+Native_address: bcf04
+Refc: 3
+=fun
+Module: global
+Uniq: 93414722
+Index: 11
+Address: 265568
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 11194189
+Index: 60
+Address: 34fe0c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: c
+Uniq: 125189992
+Index: 8
+Address: 2fffdc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: dict
+Uniq: 112472016
+Index: 2
+Address: 355088
+Native_address: bceec
+Refc: 1
+=fun
+Module: shell
+Uniq: 104426442
+Index: 5
+Address: 2e52e0
+Native_address: bceec
+Refc: 1
+=fun
+Module: global
+Uniq: 17426458
+Index: 0
+Address: 265bc4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 81191039
+Index: 5
+Address: 2ada48
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 71765042
+Index: 5
+Address: 284f74
+Native_address: bcefc
+Refc: 1
+=fun
+Module: init
+Uniq: 85855821
+Index: 2
+Address: 1fa298
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 70586122
+Index: 10
+Address: 4a3fe4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 87067911
+Index: 49
+Address: 34e708
+Native_address: bcef4
+Refc: 1
+=fun
+Module: distel
+Uniq: 63126735
+Index: 1
+Address: 35c0fc
+Native_address: bcf04
+Refc: 1
+=fun
+Module: c
+Uniq: 58270309
+Index: 1
+Address: 3000e4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: ets
+Uniq: 80538457
+Index: 1
+Address: 2bc1a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 69827241
+Index: 9
+Address: 34fd70
+Native_address: bcef4
+Refc: 1
+=fun
+Module: dict
+Uniq: 103968752
+Index: 3
+Address: 355054
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 117175573
+Index: 21
+Address: 34f728
+Native_address: bcef4
+Refc: 1
+=fun
+Module: shell
+Uniq: 57865450
+Index: 2
+Address: 2e537c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 14705965
+Index: 20
+Address: 313b80
+Native_address: bced4
+Refc: 1
+=fun
+Module: webtool
+Uniq: 85360931
+Index: 6
+Address: 4ab56c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: kernel_config
+Uniq: 41755598
+Index: 0
+Address: 2d9e20
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 7110547
+Index: 37
+Address: 34ef14
+Native_address: bcef4
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 28091577
+Index: 16
+Address: 234244
+Native_address: bcef4
+Refc: 2
+=fun
+Module: code_server
+Uniq: 96448152
+Index: 14
+Address: 2ad4e4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 40177568
+Index: 13
+Address: 4a39a4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 31948320
+Index: 58
+Address: 34dfdc
+Native_address: bcef4
+Refc: 1
+=fun
+Module: global
+Uniq: 54153760
+Index: 7
+Address: 265854
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 60156260
+Index: 3
+Address: 5262b4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 1010616
+Index: 2
+Address: 350064
+Native_address: bcef4
+Refc: 1
+=fun
+Module: init
+Uniq: 96784459
+Index: 1
+Address: 1fa2b4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 48691771
+Index: 18
+Address: 313bb8
+Native_address: bced4
+Refc: 1
+=fun
+Module: global
+Uniq: 26895060
+Index: 9
+Address: 265710
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 109625093
+Index: 7
+Address: 2ad8fc
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 59436171
+Index: 1
+Address: 3500dc
+Native_address: bcef4
+Refc: 1
+=fun
+Module: dict
+Uniq: 92768306
+Index: 9
+Address: 354f04
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global_group
+Uniq: 106430008
+Index: 3
+Address: 292b38
+Native_address: bcefc
+Refc: 1
+=fun
+Module: init
+Uniq: 79749196
+Index: 6
+Address: 1fa01c
+Native_address: bceec
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 6014929
+Index: 9
+Address: 2fa324
+Native_address: bceac
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 57051922
+Index: 7
+Address: 234a28
+Native_address: bcef4
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 77043468
+Index: 6
+Address: 29e8e4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 36176045
+Index: 9
+Address: 52620c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: rpc
+Uniq: 35862809
+Index: 3
+Address: 255edc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113649451
+Index: 4
+Address: 2850a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 67943969
+Index: 5
+Address: 2658f4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 109003032
+Index: 16
+Address: 5260d0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 104711447
+Index: 13
+Address: 525f5c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 107666872
+Index: 9
+Address: 27cfb0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 89410000
+Index: 10
+Address: 5261f0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 47356870
+Index: 11
+Address: 284ab4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 17873449
+Index: 56
+Address: 34e1e8
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 8839441
+Index: 33
+Address: 34f25c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 82513204
+Index: 2
+Address: 222c18
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_master
+Uniq: 5973059
+Index: 0
+Address: 24ab7c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_gethost_native
+Uniq: 127832132
+Index: 0
+Address: 4b065c
+Native_address: bcefc
+Refc: 2
+=fun
+Module: crashdump_viewer_html
+Uniq: 39322658
+Index: 14
+Address: 525f40
+Native_address: bcefc
+Refc: 1
+=fun
+Module: gen_server
+Uniq: 100284021
+Index: 0
+Address: 23d288
+Native_address: bcf04
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 17430070
+Index: 12
+Address: 284a98
+Native_address: bcefc
+Refc: 1
+=fun
+Module: init
+Uniq: 97509773
+Index: 3
+Address: 1fa27c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: distel
+Uniq: 32364818
+Index: 3
+Address: 35c050
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 58576084
+Index: 32
+Address: 313a4c
+Native_address: bced4
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 38384851
+Index: 14
+Address: 4a3988
+Native_address: bceec
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 14139883
+Index: 4
+Address: 234d78
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 122590256
+Index: 0
+Address: 2fa8b4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 14705629
+Index: 11
+Address: 2fa22c
+Native_address: bcedc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 9273769
+Index: 4
+Address: 2fa684
+Native_address: bcee4
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 87950142
+Index: 11
+Address: 5261d4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: mod_log
+Uniq: 54913678
+Index: 1
+Address: 4fc6b0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 28370334
+Index: 0
+Address: 26e4b0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 24927227
+Index: 40
+Address: 34ed4c
+Native_address: bceec
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 105437500
+Index: 33
+Address: 313a30
+Native_address: bced4
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 10921695
+Index: 1
+Address: 234eac
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 112431564
+Index: 55
+Address: 34e22c
+Native_address: bceec
+Refc: 1
+=fun
+Module: webtool
+Uniq: 129460863
+Index: 5
+Address: 4ab5c4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 89001648
+Index: 3
+Address: 27d2ec
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 36199507
+Index: 8
+Address: 27cfe4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 35620771
+Index: 2
+Address: 5262ec
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 83214871
+Index: 18
+Address: 2f9e34
+Native_address: bceec
+Refc: 1
+=fun
+Module: code_server
+Uniq: 122455383
+Index: 1
+Address: 2adc0c
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 22389488
+Index: 31
+Address: 34f1b8
+Native_address: bceec
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 41869059
+Index: 12
+Address: 2fa1d4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 18130505
+Index: 45
+Address: 34e904
+Native_address: bcefc
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 107414126
+Index: 1
+Address: 2b706c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 116638945
+Index: 28
+Address: 2f98f8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 48465762
+Index: 9
+Address: 2348c8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: httpd_request_handler
+Uniq: 87633852
+Index: 0
+Address: 50e97c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 28213098
+Index: 8
+Address: 4ab42c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 123630574
+Index: 4
+Address: 222b58
+Native_address: bcefc
+Refc: 1
+=fun
+Module: dict
+Uniq: 127425508
+Index: 13
+Address: 354eb4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 95048118
+Index: 16
+Address: 2ad46c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 108661978
+Index: 19
+Address: 34f75c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 21272619
+Index: 13
+Address: 34fad8
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 29943747
+Index: 17
+Address: 313bf0
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 120240397
+Index: 4
+Address: 313d94
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 124060676
+Index: 0
+Address: 350124
+Native_address: bcef4
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 100975346
+Index: 6
+Address: 526260
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 61421476
+Index: 4
+Address: 2ada9c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 45197232
+Index: 7
+Address: 34fe5c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 3151900
+Index: 15
+Address: 525f24
+Native_address: bcefc
+Refc: 1
+=fun
+Module: httpd_util
+Uniq: 77509245
+Index: 2
+Address: 4b5e2c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 94110229
+Index: 8
+Address: 2ad7e4
+Native_address: bcef4
+Refc: 3
+=fun
+Module: rpc
+Uniq: 101217130
+Index: 1
+Address: 2560c4
+Native_address: bcf04
+Refc: 1
+=fun
+Module: lists
+Uniq: 103647452
+Index: 0
+Address: 244b7c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 37841211
+Index: 9
+Address: 2ad77c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 40109251
+Index: 54
+Address: 34e2b4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: init
+Uniq: 98012300
+Index: 0
+Address: 1fa2d0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 73604759
+Index: 10
+Address: 4ab270
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 12042434
+Index: 1
+Address: 313d40
+Native_address: bced4
+Refc: 1
+=fun
+Module: shell
+Uniq: 127137775
+Index: 4
+Address: 2e531c
+Native_address: bcf04
+Refc: 1
+=fun
+Module: inet
+Uniq: 45498037
+Index: 12
+Address: 27cec0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 122441107
+Index: 34
+Address: 34f1d4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 70933889
+Index: 46
+Address: 34e8d0
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet
+Uniq: 69850797
+Index: 2
+Address: 27d308
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 103965539
+Index: 13
+Address: 234684
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 29979659
+Index: 30
+Address: 313a84
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 17148721
+Index: 20
+Address: 34f778
+Native_address: bcefc
+Refc: 1
+=fun
+Module: httpd_response
+Uniq: 100673049
+Index: 0
+Address: 5165dc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_gethost_native
+Uniq: 10508176
+Index: 1
+Address: 4b04dc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 32476064
+Index: 57
+Address: 34e1c4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 74835078
+Index: 9
+Address: 313cec
+Native_address: bced4
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 60689814
+Index: 19
+Address: 4a3b78
+Native_address: bceec
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 39269715
+Index: 5
+Address: 34ff14
+Native_address: bcef4
+Refc: 1
+=fun
+Module: shell
+Uniq: 112923172
+Index: 0
+Address: 2e5404
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 43010824
+Index: 14
+Address: 2fa03c
+Native_address: bce8c
+Refc: 1
+=fun
+Module: global
+Uniq: 82495254
+Index: 3
+Address: 265ac8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: shell
+Uniq: 48568081
+Index: 8
+Address: 2e5220
+Native_address: bcefc
+Refc: 1
+=fun
+Module: init
+Uniq: 77236637
+Index: 7
+Address: 1fa000
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 109386574
+Index: 1
+Address: 2fa804
+Native_address: bce9c
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 42613220
+Index: 14
+Address: 34f980
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 67093144
+Index: 23
+Address: 313b64
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 86833790
+Index: 11
+Address: 34fbe8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 6344855
+Index: 1
+Address: 29eabc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 5149749
+Index: 35
+Address: 34f220
+Native_address: bcefc
+Refc: 1
+=fun
+Module: init
+Uniq: 93451769
+Index: 5
+Address: 1fa120
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 117428568
+Index: 11
+Address: 234758
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 15225890
+Index: 4
+Address: 526298
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 120760477
+Index: 2
+Address: 234cdc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 88561919
+Index: 3
+Address: 3000ac
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 108931174
+Index: 8
+Address: 313cb4
+Native_address: bced4
+Refc: 1
+=fun
+Module: rpc
+Uniq: 122901192
+Index: 4
+Address: 255e44
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 32985930
+Index: 10
+Address: 34fc40
+Native_address: bcef4
+Refc: 1
+=fun
+Module: global_group
+Uniq: 97968498
+Index: 1
+Address: 292b7c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 45671671
+Index: 18
+Address: 4a32d0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 117968056
+Index: 3
+Address: 2fa6ec
+Native_address: bcecc
+Refc: 1
+=fun
+Module: init
+Uniq: 108717591
+Index: 4
+Address: 1fa194
+Native_address: bcf04
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 15091954
+Index: 2
+Address: 2526dc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 65707495
+Index: 6
+Address: 2658a4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 34473969
+Index: 17
+Address: 2ad450
+Native_address: bcef4
+Refc: 2
+=fun
+Module: crashdump_viewer_html
+Uniq: 124296602
+Index: 7
+Address: 526244
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 23074707
+Index: 15
+Address: 265460
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 25972856
+Index: 10
+Address: 27cf74
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 43110452
+Index: 24
+Address: 2f9ad4
+Native_address: bceec
+Refc: 1
+=fun
+Module: code_server
+Uniq: 106445918
+Index: 13
+Address: 2ad660
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 116071286
+Index: 12
+Address: 5261b8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 130814477
+Index: 8
+Address: 284cfc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 121017037
+Index: 39
+Address: 34ed80
+Native_address: bcef4
+Refc: 1
+=fun
+Module: ets
+Uniq: 104895267
+Index: 0
+Address: 2bc1bc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 104682437
+Index: 11
+Address: 4a3de0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 70248777
+Index: 30
+Address: 34f30c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 13274975
+Index: 5
+Address: 300074
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 98442771
+Index: 53
+Address: 34e2d0
+Native_address: bceec
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 69829006
+Index: 7
+Address: 2fa47c
+Native_address: bce80
+Refc: 1
+=fun
+Module: old_file_server
+Uniq: 36444943
+Index: 1
+Address: 2a1a80
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 58719455
+Index: 26
+Address: 34f5f0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: timer
+Uniq: 42505885
+Index: 0
+Address: 4cd62c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 54682479
+Index: 20
+Address: 2f9d08
+Native_address: bcf04
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 86070332
+Index: 1
+Address: 222d7c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 54728136
+Index: 9
+Address: 2fff68
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 16474219
+Index: 3
+Address: 234c60
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 108831556
+Index: 10
+Address: 234810
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 72053761
+Index: 16
+Address: 34f8ec
+Native_address: bcef4
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 65127616
+Index: 2
+Address: 29ea04
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 126167637
+Index: 14
+Address: 234640
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113704917
+Index: 0
+Address: 285788
+Native_address: bcefc
+Refc: 1
+=fun
+Module: mod_disk_log
+Uniq: 75279647
+Index: 1
+Address: 500100
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 119218247
+Index: 5
+Address: 26df68
+Native_address: bcef4
+Refc: 1
+=fun
+Module: httpd_util
+Uniq: 85690044
+Index: 4
+Address: 4b5d6c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 53075592
+Index: 1
+Address: 26e16c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 39490182
+Index: 2
+Address: 3000c8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 75189006
+Index: 12
+Address: 234714
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 14980808
+Index: 43
+Address: 34eb38
+Native_address: bceec
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 16463468
+Index: 4
+Address: 4a4914
+Native_address: bcee4
+Refc: 1
+=fun
+Module: dict
+Uniq: 99965326
+Index: 4
+Address: 355020
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 36900786
+Index: 6
+Address: 284f3c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 45447147
+Index: 18
+Address: 34f794
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 32353825
+Index: 6
+Address: 34fe78
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 134052338
+Index: 8
+Address: 34fdc0
+Native_address: bceec
+Refc: 1
+=fun
+Module: application_master
+Uniq: 23840924
+Index: 1
+Address: 24aae0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 108282500
+Index: 1
+Address: 4ab918
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 31081110
+Index: 0
+Address: 210c68
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 54275742
+Index: 26
+Address: 2f9a4c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: shell
+Uniq: 45083091
+Index: 3
+Address: 2e5350
+Native_address: bcf04
+Refc: 3
+=proc_stack:<0.0.0>
+3a48bc:SReturn addr 0x156F90 (<terminate process normally>)
+y0:H371264
+=proc_heap:<0.0.0>
+371264:t9:A5:state,H3710D8,N,N,H3710F4,P<0.1.0>,H37128C,H3710FC,N
+3710FC:t2:H371138,H371140
+371140:lI80|H371194
+371194:lI49|H3711E0
+3711E0:lI48|H371204
+371204:lI66|N
+371138:lI79|H37118C
+37118C:lI84|H3711D8
+3711D8:lI80|H3711FC
+3711FC:lI32|H37120C
+37120C:lI32|H371214
+371214:lI65|H37121C
+37121C:lI80|H371224
+371224:lI78|H37122C
+37122C:lI32|H371234
+371234:lI49|H37123C
+37123C:lI56|H371244
+371244:lI49|H37124C
+37124C:lI32|H371254
+371254:lI48|H37125C
+37125C:lI49|N
+37128C:t2:A7:started,A7:started
+3710F4:lH371124|H371130
+371124:t2:A16:application_controller,P<0.5.0>
+371130:lH371178|H371184
+371178:t2:AC:error_logger,P<0.4.0>
+371184:lH3711CC|N
+3711CC:t2:AF:erl_prim_loader,P<0.2.0>
+3710D8:lH3710E0|H3710EC
+3710E0:t2:A5:-root,H371108
+371108:lH371148|N
+371148:Yh13:2F636C656172636173652F6F74702F65727473
+3710EC:lH371110|H37111C
+371110:t2:A9:-progname,H371164
+371164:lH37119C|N
+37119C:Yh1D:2F636C656172636173652F6F74702F657274732F62696E2F6365726C20
+37111C:lH37116C|N
+37116C:t2:A5:-home,H3711C4
+3711C4:lH3711E8|N
+3711E8:YhA:2F686F6D652F73697269
+=proc_stack:<0.2.0>
+38eca8:SReturn addr 0x156F90 (<terminate process normally>)
+y0:H367D20
+y1:P<0.1.0>
+y2:H367D28
+y3:A8:infinity
+=proc_heap:<0.2.0>
+367D20:lH367D48|H367D50
+367D48:lI47|H367D58
+367D58:lI99|H367D68
+367D68:lI108|H367D78
+367D78:lI101|H367D88
+367D88:lI97|H367D98
+367D98:lI114|H367DA8
+367DA8:lI99|H367DB8
+367DB8:lI97|H367DC8
+367DC8:lI115|H367DD8
+367DD8:lI101|H367DE8
+367DE8:lI47|H367DF8
+367DF8:lI111|H367E08
+367E08:lI116|H367E18
+367E18:lI112|H367E28
+367E28:lI47|H367E38
+367E38:lI101|H367E48
+367E48:lI114|H367E58
+367E58:lI116|H367E68
+367E68:lI115|H367E78
+367E78:lI47|H367E88
+367E88:lI108|H367E98
+367E98:lI105|H367EA8
+367EA8:lI98|H367EB8
+367EB8:lI47|H367EC8
+367EC8:lI107|H367ED8
+367ED8:lI101|H367EE8
+367EE8:lI114|H367EF8
+367EF8:lI110|H367F08
+367F08:lI101|H367F18
+367F18:lI108|H367F28
+367F28:lI47|H367F38
+367F38:lI101|H367F48
+367F48:lI98|H367F58
+367F58:lI105|H367F68
+367F68:lI110|N
+367D50:lH367D60|N
+367D60:lI47|H367D70
+367D70:lI99|H367D80
+367D80:lI108|H367D90
+367D90:lI101|H367DA0
+367DA0:lI97|H367DB0
+367DB0:lI114|H367DC0
+367DC0:lI99|H367DD0
+367DD0:lI97|H367DE0
+367DE0:lI115|H367DF0
+367DF0:lI101|H367E00
+367E00:lI47|H367E10
+367E10:lI111|H367E20
+367E20:lI116|H367E30
+367E30:lI112|H367E40
+367E40:lI47|H367E50
+367E50:lI101|H367E60
+367E60:lI114|H367E70
+367E70:lI116|H367E80
+367E80:lI115|H367E90
+367E90:lI47|H367EA0
+367EA0:lI108|H367EB0
+367EB0:lI105|H367EC0
+367EC0:lI98|H367ED0
+367ED0:lI47|H367EE0
+367EE0:lI115|H367EF0
+367EF0:lI116|H367F00
+367F00:lI100|H367F10
+367F10:lI108|H367F20
+367F20:lI105|H367F30
+367F30:lI98|H367F40
+367F40:lI47|H367F50
+367F50:lI101|H367F60
+367F60:lI98|H367F70
+367F70:lI105|H367F78
+367F78:lI110|N
+367D28:t7:A5:state,A5:efile,N,A4:none,p<0.2>,A8:infinity,A5:false
+=proc_dictionary:<0.4.0>
+H3AC588
+H3AC594
+=proc_stack:<0.4.0>
+3b2f14:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:H3B21E8
+y2:AC:error_logger
+y3:P<0.1.0>
+3b2f28:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H3AC5A8
+=proc_heap:<0.4.0>
+3B21E8:lH3B2144|H3B21E0
+3B2144:t5:A7:handler,AC:error_logger,A5:false,N,A5:false
+3B21E0:lH3B21BC|N
+3B21BC:t5:A7:handler,A12:error_logger_tty_h,A5:false,H3AC610,A5:false
+3AC610:t2:P<0.21.0>,AC:error_logger
+3AC5A8:lA9:gen_event|H3AC5E8
+3AC5E8:lP<0.1.0>|H3AC608
+3AC608:lP<0.1.0>|H3AC61C
+3AC61C:lH3AC624|H3AC630
+3AC624:t2:A5:local,AC:error_logger
+3AC630:lN|H3AC638
+3AC638:lN|H3AC640
+3AC640:lN|N
+3AC588:t2:AD:$initial_call,H3AC5B0
+3AC5B0:t3:A3:gen,A7:init_it,H3AC5A8
+3AC594:t2:AA:$ancestors,H3AC5C0
+3AC5C0:lP<0.1.0>|N
+=proc_dictionary:<0.5.0>
+H372E4C
+H372E58
+=proc_stack:<0.5.0>
+374704:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A16:application_controller
+y3:H3739F4
+y4:A16:application_controller
+y5:P<0.1.0>
+374720:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H372ED0
+=proc_heap:<0.5.0>
+3739F4:t9:A5:state,N,N,N,H373914,N,H373928,N,N
+373928:lH37391C|H372F54
+37391C:t2:A6:stdlib,A9:permanent
+372F54:lH372F90|N
+372F90:t2:A6:kernel,A9:permanent
+373914:lH373908|H372F4C
+373908:t2:A6:stdlib,A9:undefined
+372F4C:lH372F84|N
+372F84:t2:A6:kernel,P<0.7.0>
+372ED0:lAA:gen_server|H372F5C
+372F5C:lP<0.1.0>|H372F9C
+372F9C:lP<0.1.0>|H372FC4
+372FC4:lH372FEC|H372FF8
+372FEC:t2:A5:local,A16:application_controller
+372FF8:lA16:application_controller|H373018
+373018:lH373038|H373048
+373038:t3:AB:application,A6:kernel,H373060
+373060:lH373078|H373084
+373078:t2:AB:description,H37309C
+37309C:lI69|H3730C8
+3730C8:lI82|H3730FC
+3730FC:lI84|H373130
+373130:lI83|H37316C
+37316C:lI32|H3731A8
+3731A8:lI32|H3731E4
+3731E4:lI67|H373220
+373220:lI88|H37325C
+37325C:lI67|H37329C
+37329C:lI32|H3732D0
+3732D0:lI49|H3732FC
+3732FC:lI51|H373328
+373328:lI56|H373348
+373348:lI32|H373368
+373368:lI49|H373388
+373388:lI48|N
+373084:lH3730A4|H3730B0
+3730A4:t2:A3:vsn,H3730D0
+3730D0:lI50|H373104
+373104:lI46|H373138
+373138:lI57|N
+3730B0:lH3730D8|H3730E4
+3730D8:t2:A2:id,N
+3730E4:lH37310C|H373118
+37310C:t2:A7:modules,H373140
+373140:lAB:application|H373174
+373174:lA16:application_controller|H3731B0
+3731B0:lA12:application_master|H3731EC
+3731EC:lA13:application_starter|H373228
+373228:lA4:auth|H373264
+373264:lA4:code|H3732A4
+3732A4:lA8:code_aux|H3732D8
+3732D8:lA8:packages|H373304
+373304:lAB:code_server|H373330
+373330:lA9:dist_util|H373350
+373350:lAF:erl_boot_server|H373370
+373370:lA10:erl_distribution|H373390
+373390:lAF:erl_prim_loader|H3733A8
+3733A8:lA9:erl_reply|H3733C0
+3733C0:lA6:erlang|H3733D8
+3733D8:lAD:error_handler|H3733F0
+3733F0:lAC:error_logger|H373408
+373408:lA4:file|H373420
+373420:lAB:file_server|H373438
+373438:lAF:old_file_server|H373450
+373450:lAE:file_io_server|H373468
+373468:lA9:prim_file|H373480
+373480:lA6:global|H373498
+373498:lAC:global_group|H3734B0
+3734B0:lAD:global_search|H3734C8
+3734C8:lA5:group|H3734E0
+3734E0:lA5:heart|H3734F8
+3734F8:lA13:hipe_unified_loader|H373510
+373510:lA11:hipe_sparc_loader|H373520
+373520:lAF:hipe_x86_loader|H373530
+373530:lA9:inet6_tcp|H373540
+373540:lAE:inet6_tcp_dist|H373550
+373550:lA9:inet6_udp|H373560
+373560:lAB:inet_config|H373570
+373570:lAA:inet_hosts|H373580
+373580:lA13:inet_gethost_native|H373590
+373590:lAD:inet_tcp_dist|H3735A0
+3735A0:lA4:init|H3735B0
+3735B0:lA6:kernel|H3735C0
+3735C0:lAD:kernel_config|H3735D0
+3735D0:lA3:net|H3735E0
+3735E0:lA7:net_adm|H3735F0
+3735F0:lAA:net_kernel|H373600
+373600:lA2:os|H373610
+373610:lA8:ram_file|H373620
+373620:lA3:rpc|H373630
+373630:lA4:user|H373640
+373640:lA8:user_drv|H373650
+373650:lA8:user_sup|H373660
+373660:lA8:disk_log|H373670
+373670:lAA:disk_log_1|H373680
+373680:lAF:disk_log_server|H373690
+373690:lAC:disk_log_sup|H3736A0
+3736A0:lA7:dist_ac|H3736B0
+3736B0:lA8:erl_ddll|H3736C0
+3736C0:lA8:erl_epmd|H3736D0
+3736D0:lAA:erts_debug|H3736E0
+3736E0:lA7:gen_tcp|H3736F0
+3736F0:lA7:gen_udp|H373700
+373700:lA9:prim_inet|H373708
+373708:lA4:inet|H373710
+373710:lA7:inet_db|H373718
+373718:lA8:inet_dns|H373720
+373720:lAA:inet_parse|H373728
+373728:lA8:inet_res|H373730
+373730:lA8:inet_tcp|H373738
+373738:lA8:inet_udp|H373740
+373740:lA3:pg2|H373748
+373748:lA9:seq_trace|H373750
+373750:lA6:socks5|H373758
+373758:lAB:socks5_auth|H373760
+373760:lAA:socks5_tcp|H373768
+373768:lAA:socks5_udp|H373770
+373770:lAF:wrap_log_reader|H373778
+373778:lA4:zlib|H373780
+373780:lA9:otp_ring0|N
+373118:lH373148|H373154
+373148:t2:AA:registered,H37317C
+37317C:lA16:application_controller|H3731B8
+3731B8:lA9:erl_reply|H3731F4
+3731F4:lA4:auth|H373230
+373230:lAB:boot_server|H37326C
+37326C:lAB:code_server|H3732AC
+3732AC:lAF:disk_log_server|H3732E0
+3732E0:lAC:disk_log_sup|H37330C
+37330C:lAF:erl_prim_loader|H373338
+373338:lAC:error_logger|H373358
+373358:lAB:file_server|H373378
+373378:lAD:file_server_2|H373398
+373398:lAF:fixtable_server|H3733B0
+3733B0:lAC:global_group|H3733C8
+3733C8:lA12:global_name_server|H3733E0
+3733E0:lA5:heart|H3733F8
+3733F8:lA4:init|H373410
+373410:lAD:kernel_config|H373428
+373428:lAA:kernel_sup|H373440
+373440:lAA:net_kernel|H373458
+373458:lA7:net_sup|H373470
+373470:lA3:rex|H373488
+373488:lA4:user|H3734A0
+3734A0:lA9:os_server|H3734B8
+3734B8:lAB:ddll_server|H3734D0
+3734D0:lA8:erl_epmd|H3734E8
+3734E8:lA7:inet_db|H373500
+373500:lA3:pg2|N
+373154:lH373184|H373190
+373184:t2:AC:applications,N
+373190:lH3731C0|H3731CC
+3731C0:t2:A15:included_applications,N
+3731CC:lH3731FC|H373208
+3731FC:t2:A3:env,H373238
+373238:lH373274|N
+373274:t2:AC:error_logger,A3:tty
+373208:lH373240|H37324C
+373240:t2:AC:start_phases,A9:undefined
+37324C:lH373280|H37328C
+373280:t2:A4:maxT,A8:infinity
+37328C:lH3732B4|H3732C0
+3732B4:t2:A4:maxP,A8:infinity
+3732C0:lH3732E8|N
+3732E8:t2:A3:mod,H373314
+373314:t2:A6:kernel,N
+373048:lN|N
+372E4C:t2:AD:$initial_call,H372EE4
+372EE4:t3:A3:gen,A7:init_it,H372ED0
+372E58:t2:AA:$ancestors,H372EF4
+372EF4:lP<0.1.0>|N
+=proc_dictionary:<0.7.0>
+H369B78
+H369B5C
+=proc_stack:<0.7.0>
+369d64:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:H369C2C
+y1:P<0.5.0>
+369d70:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A12:application_master
+y2:A4:init
+y3:H369B2C
+=proc_heap:<0.7.0>
+369C2C:t6:A5:state,P<0.8.0>,H3697B0,N,I0,P<0.0.0>
+3697B0:t9:A9:appl_data,A6:kernel,H369B14,A9:undefined,H3697D8,H369A3C,N,A8:infinity,A8:infinity
+369A3C:lAB:application|H369A34
+369A34:lA16:application_controller|H369A2C
+369A2C:lA12:application_master|H369A24
+369A24:lA13:application_starter|H369A1C
+369A1C:lA4:auth|H369A14
+369A14:lA4:code|H369A0C
+369A0C:lA8:code_aux|H369A04
+369A04:lA8:packages|H3699FC
+3699FC:lAB:code_server|H3699F4
+3699F4:lA9:dist_util|H3699EC
+3699EC:lAF:erl_boot_server|H3699E4
+3699E4:lA10:erl_distribution|H3699DC
+3699DC:lAF:erl_prim_loader|H3699D4
+3699D4:lA9:erl_reply|H3699CC
+3699CC:lA6:erlang|H3699C4
+3699C4:lAD:error_handler|H3699BC
+3699BC:lAC:error_logger|H3699B4
+3699B4:lA4:file|H3699AC
+3699AC:lAB:file_server|H3699A4
+3699A4:lAF:old_file_server|H36999C
+36999C:lAE:file_io_server|H369994
+369994:lA9:prim_file|H36998C
+36998C:lA6:global|H369984
+369984:lAC:global_group|H36997C
+36997C:lAD:global_search|H369974
+369974:lA5:group|H36996C
+36996C:lA5:heart|H369964
+369964:lA13:hipe_unified_loader|H36995C
+36995C:lA11:hipe_sparc_loader|H369954
+369954:lAF:hipe_x86_loader|H36994C
+36994C:lA9:inet6_tcp|H369944
+369944:lAE:inet6_tcp_dist|H36993C
+36993C:lA9:inet6_udp|H369934
+369934:lAB:inet_config|H36992C
+36992C:lAA:inet_hosts|H369924
+369924:lA13:inet_gethost_native|H36991C
+36991C:lAD:inet_tcp_dist|H369914
+369914:lA4:init|H36990C
+36990C:lA6:kernel|H369904
+369904:lAD:kernel_config|H3698FC
+3698FC:lA3:net|H3698F4
+3698F4:lA7:net_adm|H3698EC
+3698EC:lAA:net_kernel|H3698E4
+3698E4:lA2:os|H3698DC
+3698DC:lA8:ram_file|H3698D4
+3698D4:lA3:rpc|H3698CC
+3698CC:lA4:user|H3698C4
+3698C4:lA8:user_drv|H3698BC
+3698BC:lA8:user_sup|H3698B4
+3698B4:lA8:disk_log|H3698AC
+3698AC:lAA:disk_log_1|H3698A4
+3698A4:lAF:disk_log_server|H36989C
+36989C:lAC:disk_log_sup|H369894
+369894:lA7:dist_ac|H36988C
+36988C:lA8:erl_ddll|H369884
+369884:lA8:erl_epmd|H36987C
+36987C:lAA:erts_debug|H369874
+369874:lA7:gen_tcp|H36986C
+36986C:lA7:gen_udp|H369864
+369864:lA9:prim_inet|H36985C
+36985C:lA4:inet|H369854
+369854:lA7:inet_db|H36984C
+36984C:lA8:inet_dns|H369844
+369844:lAA:inet_parse|H36983C
+36983C:lA8:inet_res|H369834
+369834:lA8:inet_tcp|H36982C
+36982C:lA8:inet_udp|H369824
+369824:lA3:pg2|H36981C
+36981C:lA9:seq_trace|H369814
+369814:lA6:socks5|H36980C
+36980C:lAB:socks5_auth|H369804
+369804:lAA:socks5_tcp|H3697FC
+3697FC:lAA:socks5_udp|H3697F4
+3697F4:lAF:wrap_log_reader|H3697EC
+3697EC:lA4:zlib|H3697E4
+3697E4:lA9:otp_ring0|N
+3697D8:t2:A6:kernel,N
+369B14:lA16:application_controller|H369B0C
+369B0C:lA9:erl_reply|H369B04
+369B04:lA4:auth|H369AFC
+369AFC:lAB:boot_server|H369AF4
+369AF4:lAB:code_server|H369AEC
+369AEC:lAF:disk_log_server|H369AE4
+369AE4:lAC:disk_log_sup|H369ADC
+369ADC:lAF:erl_prim_loader|H369AD4
+369AD4:lAC:error_logger|H369ACC
+369ACC:lAB:file_server|H369AC4
+369AC4:lAD:file_server_2|H369ABC
+369ABC:lAF:fixtable_server|H369AB4
+369AB4:lAC:global_group|H369AAC
+369AAC:lA12:global_name_server|H369AA4
+369AA4:lA5:heart|H369A9C
+369A9C:lA4:init|H369A94
+369A94:lAD:kernel_config|H369A8C
+369A8C:lAA:kernel_sup|H369A84
+369A84:lAA:net_kernel|H369A7C
+369A7C:lA7:net_sup|H369A74
+369A74:lA3:rex|H369A6C
+369A6C:lA4:user|H369A64
+369A64:lA9:os_server|H369A5C
+369A5C:lAB:ddll_server|H369A54
+369A54:lA8:erl_epmd|H369A4C
+369A4C:lA7:inet_db|H369A44
+369A44:lA3:pg2|N
+369B2C:lP<0.5.0>|H369B24
+369B24:lP<0.6.0>|H3697A8
+3697A8:lH3697B0|H369B1C
+369B1C:lA6:normal|N
+369B78:t2:AD:$initial_call,H369B68
+369B68:t3:A12:application_master,A4:init,H369B2C
+369B5C:t2:AA:$ancestors,H369B54
+369B54:lP<0.6.0>|N
+=proc_stack:<0.8.0>
+384ec0:SReturn addr 0x156F90 (<terminate process normally>)
+y0:H384BDC
+y1:A6:kernel
+y2:P<0.9.0>
+y3:P<0.7.0>
+=proc_heap:<0.8.0>
+384BDC:t2:A5:state,A3:tty
+=proc_dictionary:<0.9.0>
+H376850
+H37685C
+=proc_stack:<0.9.0>
+36bde8:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AA:supervisor
+y3:H36B8E8
+y4:AA:kernel_sup
+y5:P<0.8.0>
+36be04:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H3768D4
+=proc_heap:<0.9.0>
+36B8E8:tA:A5:state,H376868,AB:one_for_all,H36B8D4,N,I0,I1,N,A6:kernel,N
+36B8D4:lH36B8B0|H36B6E8
+36B8B0:t8:A5:child,P<0.24.0>,AF:kernel_safe_sup,H376BF0,A9:permanent,A8:infinity,AA:supervisor,H376C00
+376C00:lA6:kernel|N
+376BF0:t3:AA:supervisor,AA:start_link,H376C08
+376C08:lH376C10|H376C1C
+376C10:t2:A5:local,AF:kernel_safe_sup
+376C1C:lA6:kernel|H376C24
+376C24:lA4:safe|N
+36B6E8:lH36B6C4|H36B490
+36B6C4:t8:A5:child,P<0.23.0>,AD:kernel_config,H376BB4,A9:permanent,I2000,A6:worker,H376BC4
+376BC4:lAD:kernel_config|N
+376BB4:t3:AD:kernel_config,AA:start_link,N
+36B490:lH36B498|H36B4BC
+36B498:t8:A5:child,P<0.19.0>,A4:user,H376B70,A9:temporary,I2000,AA:supervisor,H376B80
+376B80:lA8:user_sup|N
+376B70:t3:A8:user_sup,A5:start,N
+36B4BC:lH36B4C4|H376CB0
+36B4C4:t8:A5:child,P<0.18.0>,AB:code_server,H376B0C,A9:permanent,I2000,A6:worker,H376B1C
+376B1C:lA4:code|N
+376B0C:t3:A4:code,AA:start_link,N
+376CB0:lH376CB8|H376CDC
+376CB8:t8:A5:child,P<0.17.0>,AB:file_server,H376AB8,A9:permanent,I2000,A6:worker,H376AC8
+376AC8:lAF:old_file_server|N
+376AB8:t3:AF:old_file_server,AA:start_link,N
+376CDC:lH376CE4|H376C2C
+376CE4:t8:A5:child,P<0.16.0>,AD:file_server_2,H376A58,A9:permanent,I2000,A6:worker,H376A68
+376A68:lA4:file|H376AB0
+376AB0:lAB:file_server|H376B04
+376B04:lAE:file_io_server|H376B68
+376B68:lA9:prim_file|N
+376A58:t3:AB:file_server,AA:start_link,N
+376C2C:lH376C34|H376C58
+376C34:t8:A5:child,P<0.15.0>,AC:global_group,H3769F4,A9:permanent,I2000,A6:worker,H376A04
+376A04:lAC:global_group|N
+3769F4:t3:AC:global_group,AA:start_link,N
+376C58:lH376C60|H376C84
+376C60:t8:A5:child,A9:undefined,A7:net_sup,H37696C,A9:permanent,A8:infinity,AA:supervisor,H37697C
+37697C:lA10:erl_distribution|N
+37696C:t3:A10:erl_distribution,AA:start_link,N
+376C84:lH376C8C|H3768A0
+376C8C:t8:A5:child,P<0.14.0>,A7:inet_db,H3768F4,A9:permanent,I2000,A6:worker,H376904
+376904:lA7:inet_db|N
+3768F4:t3:A7:inet_db,AA:start_link,N
+3768A0:lH376938|H37695C
+376938:t8:A5:child,P<0.11.0>,A12:global_name_server,H3769B0,A9:permanent,I2000,A6:worker,H3769C0
+3769C0:lA6:global|N
+3769B0:t3:A6:global,AA:start_link,N
+37695C:lH3769C8|N
+3769C8:t8:A5:child,P<0.10.0>,A3:rex,H376A38,A9:permanent,I2000,A6:worker,H376A48
+376A48:lA3:rpc|N
+376A38:t3:A3:rpc,AA:start_link,N
+376868:t2:A5:local,AA:kernel_sup
+3768D4:lAA:gen_server|H376964
+376964:lP<0.8.0>|H3769EC
+3769EC:lP<0.8.0>|H376A50
+376A50:lH376A9C|H376AA8
+376A9C:t2:A5:local,AA:kernel_sup
+376AA8:lAA:supervisor|H376AFC
+376AFC:lH376B50|H376B60
+376B50:t3:H376868,A6:kernel,N
+376B60:lN|N
+376850:t2:AD:$initial_call,H3768DC
+3768DC:t3:A3:gen,A7:init_it,H3768D4
+37685C:t2:AA:$ancestors,H3768EC
+3768EC:lP<0.8.0>|N
+=proc_dictionary:<0.10.0>
+H367A10
+H3679F4
+=proc_stack:<0.10.0>
+367cec:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A3:rpc
+y3:H367AA8
+y4:A3:rex
+y5:P<0.9.0>
+367d08:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H3679C4
+=proc_heap:<0.10.0>
+367AA8:t2:I0,A3:nil
+3679C4:lAA:gen_server|H3679BC
+3679BC:lP<0.9.0>|H3679B4
+3679B4:lP<0.9.0>|H367988
+367988:lH367990|H3679AC
+367990:t2:A5:local,A3:rex
+3679AC:lA3:rpc|H3679A4
+3679A4:lN|H36799C
+36799C:lN|N
+367A10:t2:AD:$initial_call,H367A00
+367A00:t3:A3:gen,A7:init_it,H3679C4
+3679F4:t2:AA:$ancestors,H3679EC
+3679EC:lAA:kernel_sup|H3679CC
+3679CC:lP<0.8.0>|N
+=proc_dictionary:<0.11.0>
+H36ADD8
+H36ADBC
+=proc_stack:<0.11.0>
+36b0b4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A6:global
+y3:H36AF0C
+y4:A12:global_name_server
+y5:P<0.9.0>
+36b0d0:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H36AD8C
+=proc_heap:<0.11.0>
+36AF0C:t9:A5:state,A4:true,N,N,N,N,AD:nonode@nohost,P<0.12.0>,P<0.13.0>
+36AD8C:lAA:gen_server|H36AD84
+36AD84:lP<0.9.0>|H36AD7C
+36AD7C:lP<0.9.0>|H36AD50
+36AD50:lH36AD58|H36AD74
+36AD58:t2:A5:local,A12:global_name_server
+36AD74:lA6:global|H36AD6C
+36AD6C:lN|H36AD64
+36AD64:lN|N
+36ADD8:t2:AD:$initial_call,H36ADC8
+36ADC8:t3:A3:gen,A7:init_it,H36AD8C
+36ADBC:t2:AA:$ancestors,H36ADB4
+36ADB4:lAA:kernel_sup|H36AD94
+36AD94:lP<0.8.0>|N
+=proc_stack:<0.12.0>
+36921c:SReturn addr 0x261184 (global:init_the_locker/1 + 112)
+y0:N
+y1:N
+y2:N
+y3:N
+y4:N
+y5:N
+y6:A8:infinity
+y7:H368EB0
+y8:P<0.11.0>
+369244:SReturn addr 0x156F90 (<terminate process normally>)
+y0:N
+=proc_heap:<0.12.0>
+368EB0:t3:A5:multi,A9:undefined,N
+=proc_stack:<0.13.0>
+3695d0:SReturn addr 0x2651AC (global:loop_the_deleter/1 + 36)
+y0:A8:infinity
+y1:N
+y2:P<0.11.0>
+3695e0:SReturn addr 0x2654F8 (global:'-start_the_deleter/1-fun-0-'/1 + 20)
+y0:N
+y1:N
+y2:P<0.11.0>
+3695f0:SReturn addr 0x156F90 (<terminate process normally>)
+=proc_heap:<0.13.0>
+=proc_dictionary:<0.14.0>
+H36A998
+H36A9A4
+=proc_stack:<0.14.0>
+372e0c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A7:inet_db
+y3:H36A9B0
+y4:A7:inet_db
+y5:P<0.9.0>
+372e28:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H36A9C8
+=proc_heap:<0.14.0>
+36A9B0:t5:A5:state,A7:inet_db,AA:inet_cache,AA:inet_hosts,H36A9E8
+36A9E8:E21:8372000364000D6E6F6E6F6465406E6F686F737400000000060000000000000000
+36A9C8:lAA:gen_server|H36A9F8
+36A9F8:lP<0.9.0>|H36AA08
+36AA08:lP<0.9.0>|H36AA10
+36AA10:lH36AA18|H36AA24
+36AA18:t2:A5:local,A7:inet_db
+36AA24:lA7:inet_db|H36AA2C
+36AA2C:lN|H36AA34
+36AA34:lN|N
+36A998:t2:AD:$initial_call,H36A9D0
+36A9D0:t3:A3:gen,A7:init_it,H36A9C8
+36A9A4:t2:AA:$ancestors,H36A9E0
+36A9E0:lAA:kernel_sup|H36AA00
+36AA00:lP<0.8.0>|N
+=proc_dictionary:<0.15.0>
+H372788
+H3727F8
+H37276C
+H37280C
+H372820
+=proc_stack:<0.15.0>
+372a64:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AC:global_group
+y3:H3728C8
+y4:AC:global_group
+y5:P<0.9.0>
+372a80:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H37273C
+=proc_heap:<0.15.0>
+3728C8:tC:A5:state,A7:no_conf,A4:true,N,N,N,N,N,AD:nonode@nohost,N,A6:normal,A6:normal
+37273C:lAA:gen_server|H372734
+372734:lP<0.9.0>|H37272C
+37272C:lP<0.9.0>|H372700
+372700:lH372708|H372724
+372708:t2:A5:local,AC:global_group
+372724:lAC:global_group|H37271C
+37271C:lN|H372714
+372714:lN|N
+372788:t2:AD:$initial_call,H372778
+372778:t3:A3:gen,A7:init_it,H37273C
+3727F8:t2:A10:registered_names,H3727F0
+3727F0:lA9:undefined|N
+37276C:t2:AA:$ancestors,H372764
+372764:lAA:kernel_sup|H372744
+372744:lP<0.8.0>|N
+37280C:t2:A4:send,H372804
+372804:lA9:undefined|N
+372820:t2:AC:whereis_name,H372818
+372818:lA9:undefined|N
+=proc_dictionary:<0.16.0>
+H37B918
+H37B924
+=proc_stack:<0.16.0>
+3d303c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AB:file_server
+y3:p<0.4>
+y4:AD:file_server_2
+y5:P<0.9.0>
+3d3058:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H37B930
+=proc_heap:<0.16.0>
+37B930:lAA:gen_server|H37B950
+37B950:lP<0.9.0>|H37B960
+37B960:lP<0.9.0>|H37B968
+37B968:lH37B970|H37B97C
+37B970:t2:A5:local,AD:file_server_2
+37B97C:lAB:file_server|H37B984
+37B984:lN|H37B98C
+37B98C:lN|N
+37B918:t2:AD:$initial_call,H37B938
+37B938:t3:A3:gen,A7:init_it,H37B930
+37B924:t2:AA:$ancestors,H37B948
+37B948:lAA:kernel_sup|H37B958
+37B958:lP<0.8.0>|N
+=proc_stack:<0.17.0>
+3763cc:SReturn addr 0x156F90 (<terminate process normally>)
+y0:H376084
+y1:P<0.16.0>
+y2:P<0.9.0>
+=proc_heap:<0.17.0>
+376084:E21:8372000364000D6E6F6E6F6465406E6F686F737400000000160000000000000000
+=proc_stack:<0.18.0>
+3b98e8:SReturn addr 0x156F90 (<terminate process normally>)
+y0:H38AE84
+y1:P<0.9.0>
+=proc_heap:<0.18.0>
+38AE84:t8:A5:state,P<0.9.0>,H3873BC,H38AEB8,I9,I10,A8:no_cache,AB:interactive
+38AEB8:lH3873D4|H38AEE0
+3873D4:lI46|N
+38AEE0:lH3873EC|H38AF10
+3873EC:lI47|H387404
+387404:lI99|H387424
+387424:lI108|H38744C
+38744C:lI101|H38747C
+38747C:lI97|H3874B4
+3874B4:lI114|H3874F4
+3874F4:lI99|H38753C
+38753C:lI97|H38758C
+38758C:lI115|H3875E4
+3875E4:lI101|H387644
+387644:lI47|H3876AC
+3876AC:lI111|H38771C
+38771C:lI116|H387794
+387794:lI112|H387814
+387814:lI47|H38789C
+38789C:lI101|H38792C
+38792C:lI114|H3879BC
+3879BC:lI116|H387A54
+387A54:lI115|H387AF4
+387AF4:lI47|H387B9C
+387B9C:lI108|H387C4C
+387C4C:lI105|H387D04
+387D04:lI98|H387DC4
+387DC4:lI47|H387E8C
+387E8C:lI107|H387F5C
+387F5C:lI101|H388034
+388034:lI114|H388114
+388114:lI110|H3881FC
+3881FC:lI101|H3882EC
+3882EC:lI108|H3883E4
+3883E4:lI47|H3884E4
+3884E4:lI101|H3885EC
+3885EC:lI98|H3886FC
+3886FC:lI105|H388814
+388814:lI110|N
+38AF10:lH38740C|H38AF48
+38740C:lI47|H38742C
+38742C:lI99|H387454
+387454:lI108|H387484
+387484:lI101|H3874BC
+3874BC:lI97|H3874FC
+3874FC:lI114|H387544
+387544:lI99|H387594
+387594:lI97|H3875EC
+3875EC:lI115|H38764C
+38764C:lI101|H3876B4
+3876B4:lI47|H387724
+387724:lI111|H38779C
+38779C:lI116|H38781C
+38781C:lI112|H3878A4
+3878A4:lI47|H387934
+387934:lI101|H3879C4
+3879C4:lI114|H387A5C
+387A5C:lI116|H387AFC
+387AFC:lI115|H387BA4
+387BA4:lI47|H387C54
+387C54:lI108|H387D0C
+387D0C:lI105|H387DCC
+387DCC:lI98|H387E94
+387E94:lI47|H387F64
+387F64:lI115|H38803C
+38803C:lI116|H38811C
+38811C:lI100|H388204
+388204:lI108|H3882F4
+3882F4:lI105|H3883EC
+3883EC:lI98|H3884EC
+3884EC:lI47|H3885F4
+3885F4:lI101|H388704
+388704:lI98|H38881C
+38881C:lI105|H38892C
+38892C:lI110|N
+38AF48:lH387434|H38AF70
+387434:lI47|H38745C
+38745C:lI99|H38748C
+38748C:lI108|H3874C4
+3874C4:lI101|H387504
+387504:lI97|H38754C
+38754C:lI114|H38759C
+38759C:lI99|H3875F4
+3875F4:lI97|H387654
+387654:lI115|H3876BC
+3876BC:lI101|H38772C
+38772C:lI47|H3877A4
+3877A4:lI111|H387824
+387824:lI116|H3878AC
+3878AC:lI112|H38793C
+38793C:lI47|H3879CC
+3879CC:lI101|H387A64
+387A64:lI114|H387B04
+387B04:lI116|H387BAC
+387BAC:lI115|H387C5C
+387C5C:lI47|H387D14
+387D14:lI108|H387DD4
+387DD4:lI105|H387E9C
+387E9C:lI98|H387F6C
+387F6C:lI47|H388044
+388044:lI119|H388124
+388124:lI101|H38820C
+38820C:lI98|H3882FC
+3882FC:lI116|H3883F4
+3883F4:lI111|H3884F4
+3884F4:lI111|H3885FC
+3885FC:lI108|H38870C
+38870C:lI47|H388824
+388824:lI101|H388934
+388934:lI98|H388A44
+388A44:lI105|H388B54
+388B54:lI110|N
+38AF70:lH387464|H38AF98
+387464:lI47|H387494
+387494:lI99|H3874CC
+3874CC:lI108|H38750C
+38750C:lI101|H387554
+387554:lI97|H3875A4
+3875A4:lI114|H3875FC
+3875FC:lI99|H38765C
+38765C:lI97|H3876C4
+3876C4:lI115|H387734
+387734:lI101|H3877AC
+3877AC:lI47|H38782C
+38782C:lI111|H3878B4
+3878B4:lI116|H387944
+387944:lI112|H3879D4
+3879D4:lI47|H387A6C
+387A6C:lI101|H387B0C
+387B0C:lI114|H387BB4
+387BB4:lI116|H387C64
+387C64:lI115|H387D1C
+387D1C:lI47|H387DDC
+387DDC:lI108|H387EA4
+387EA4:lI105|H387F74
+387F74:lI98|H38804C
+38804C:lI47|H38812C
+38812C:lI116|H388214
+388214:lI118|H388304
+388304:lI47|H3883FC
+3883FC:lI101|H3884FC
+3884FC:lI98|H388604
+388604:lI105|H388714
+388714:lI110|N
+38AF98:lH38749C|H38AFC0
+38749C:lI47|H3874D4
+3874D4:lI99|H387514
+387514:lI108|H38755C
+38755C:lI101|H3875AC
+3875AC:lI97|H387604
+387604:lI114|H387664
+387664:lI99|H3876CC
+3876CC:lI97|H38773C
+38773C:lI115|H3877B4
+3877B4:lI101|H387834
+387834:lI47|H3878BC
+3878BC:lI111|H38794C
+38794C:lI116|H3879DC
+3879DC:lI112|H387A74
+387A74:lI47|H387B14
+387B14:lI101|H387BBC
+387BBC:lI114|H387C6C
+387C6C:lI116|H387D24
+387D24:lI115|H387DE4
+387DE4:lI47|H387EAC
+387EAC:lI108|H387F7C
+387F7C:lI105|H388054
+388054:lI98|H388134
+388134:lI47|H38821C
+38821C:lI116|H38830C
+38830C:lI115|H388404
+388404:lI112|H388504
+388504:lI47|H38860C
+38860C:lI101|H38871C
+38871C:lI98|H38882C
+38882C:lI105|H38893C
+38893C:lI110|N
+38AFC0:lH3874DC|H38AFE8
+3874DC:lI47|H38751C
+38751C:lI99|H387564
+387564:lI108|H3875B4
+3875B4:lI101|H38760C
+38760C:lI97|H38766C
+38766C:lI114|H3876D4
+3876D4:lI99|H387744
+387744:lI97|H3877BC
+3877BC:lI115|H38783C
+38783C:lI101|H3878C4
+3878C4:lI47|H387954
+387954:lI111|H3879E4
+3879E4:lI116|H387A7C
+387A7C:lI112|H387B1C
+387B1C:lI47|H387BC4
+387BC4:lI101|H387C74
+387C74:lI114|H387D2C
+387D2C:lI116|H387DEC
+387DEC:lI115|H387EB4
+387EB4:lI47|H387F84
+387F84:lI108|H38805C
+38805C:lI105|H38813C
+38813C:lI98|H388224
+388224:lI47|H388314
+388314:lI116|H38840C
+38840C:lI111|H38850C
+38850C:lI111|H388614
+388614:lI108|H388724
+388724:lI115|H388834
+388834:lI47|H388944
+388944:lI101|H388A4C
+388A4C:lI98|H388B5C
+388B5C:lI105|H388C6C
+388C6C:lI110|N
+38AFE8:lH387524|H38B008
+387524:lI47|H38756C
+38756C:lI99|H3875BC
+3875BC:lI108|H387614
+387614:lI101|H387674
+387674:lI97|H3876DC
+3876DC:lI114|H38774C
+38774C:lI99|H3877C4
+3877C4:lI97|H387844
+387844:lI115|H3878CC
+3878CC:lI101|H38795C
+38795C:lI47|H3879EC
+3879EC:lI111|H387A84
+387A84:lI116|H387B24
+387B24:lI112|H387BCC
+387BCC:lI47|H387C7C
+387C7C:lI101|H387D34
+387D34:lI114|H387DF4
+387DF4:lI116|H387EBC
+387EBC:lI115|H387F8C
+387F8C:lI47|H388064
+388064:lI108|H388144
+388144:lI105|H38822C
+38822C:lI98|H38831C
+38831C:lI47|H388414
+388414:lI116|H388514
+388514:lI111|H38861C
+38861C:lI111|H38872C
+38872C:lI108|H38883C
+38883C:lI98|H38894C
+38894C:lI97|H388A54
+388A54:lI114|H388B64
+388B64:lI47|H388C74
+388C74:lI101|H388D84
+388D84:lI98|H388E9C
+388E9C:lI105|H388FB4
+388FB4:lI110|N
+38B008:lH387574|H38B018
+387574:lI47|H3875C4
+3875C4:lI99|H38761C
+38761C:lI108|H38767C
+38767C:lI101|H3876E4
+3876E4:lI97|H387754
+387754:lI114|H3877CC
+3877CC:lI99|H38784C
+38784C:lI97|H3878D4
+3878D4:lI115|H387964
+387964:lI101|H3879F4
+3879F4:lI47|H387A8C
+387A8C:lI111|H387B2C
+387B2C:lI116|H387BD4
+387BD4:lI112|H387C84
+387C84:lI47|H387D3C
+387D3C:lI101|H387DFC
+387DFC:lI114|H387EC4
+387EC4:lI116|H387F94
+387F94:lI115|H38806C
+38806C:lI47|H38814C
+38814C:lI108|H388234
+388234:lI105|H388324
+388324:lI98|H38841C
+38841C:lI47|H38851C
+38851C:lI116|H388624
+388624:lI101|H388734
+388734:lI115|H388844
+388844:lI116|H388954
+388954:lI95|H388A5C
+388A5C:lI115|H388B6C
+388B6C:lI101|H388C7C
+388C7C:lI114|H388D8C
+388D8C:lI118|H388EA4
+388EA4:lI101|H388FBC
+388FBC:lI114|H3890D4
+3890D4:lI47|H3891EC
+3891EC:lI101|H3892FC
+3892FC:lI98|H38940C
+38940C:lI105|H38951C
+38951C:lI110|N
+38B018:lH3875CC|H38AE7C
+3875CC:lI47|H387624
+387624:lI99|H387684
+387684:lI108|H3876EC
+3876EC:lI101|H38775C
+38775C:lI97|H3877D4
+3877D4:lI114|H387854
+387854:lI99|H3878DC
+3878DC:lI97|H38796C
+38796C:lI115|H3879FC
+3879FC:lI101|H387A94
+387A94:lI47|H387B34
+387B34:lI111|H387BDC
+387BDC:lI116|H387C8C
+387C8C:lI112|H387D44
+387D44:lI47|H387E04
+387E04:lI101|H387ECC
+387ECC:lI114|H387F9C
+387F9C:lI116|H388074
+388074:lI115|H388154
+388154:lI47|H38823C
+38823C:lI108|H38832C
+38832C:lI105|H388424
+388424:lI98|H388524
+388524:lI47|H38862C
+38862C:lI115|H38873C
+38873C:lI115|H38884C
+38884C:lI108|H38895C
+38895C:lI47|H388A64
+388A64:lI101|H388B74
+388B74:lI98|H388C84
+388C84:lI105|H388D94
+388D94:lI110|N
+38AE7C:lH38762C|H38AEB0
+38762C:lI47|H38768C
+38768C:lI99|H3876F4
+3876F4:lI108|H387764
+387764:lI101|H3877DC
+3877DC:lI97|H38785C
+38785C:lI114|H3878E4
+3878E4:lI99|H387974
+387974:lI97|H387A04
+387A04:lI115|H387A9C
+387A9C:lI101|H387B3C
+387B3C:lI47|H387BE4
+387BE4:lI111|H387C94
+387C94:lI116|H387D4C
+387D4C:lI112|H387E0C
+387E0C:lI47|H387ED4
+387ED4:lI101|H387FA4
+387FA4:lI114|H38807C
+38807C:lI116|H38815C
+38815C:lI115|H388244
+388244:lI47|H388334
+388334:lI108|H38842C
+38842C:lI105|H38852C
+38852C:lI98|H388634
+388634:lI47|H388744
+388744:lI115|H388854
+388854:lI110|H388964
+388964:lI109|H388A6C
+388A6C:lI112|H388B7C
+388B7C:lI47|H388C8C
+388C8C:lI101|H388D9C
+388D9C:lI98|H388EAC
+388EAC:lI105|H388FC4
+388FC4:lI110|N
+38AEB0:lH387694|H38AED8
+387694:lI47|H3876FC
+3876FC:lI99|H38776C
+38776C:lI108|H3877E4
+3877E4:lI101|H387864
+387864:lI97|H3878EC
+3878EC:lI114|H38797C
+38797C:lI99|H387A0C
+387A0C:lI97|H387AA4
+387AA4:lI115|H387B44
+387B44:lI101|H387BEC
+387BEC:lI47|H387C9C
+387C9C:lI111|H387D54
+387D54:lI116|H387E14
+387E14:lI112|H387EDC
+387EDC:lI47|H387FAC
+387FAC:lI101|H388084
+388084:lI114|H388164
+388164:lI116|H38824C
+38824C:lI115|H38833C
+38833C:lI47|H388434
+388434:lI108|H388534
+388534:lI105|H38863C
+38863C:lI98|H38874C
+38874C:lI47|H38885C
+38885C:lI115|H38896C
+38896C:lI97|H388A74
+388A74:lI115|H388B84
+388B84:lI108|H388C94
+388C94:lI47|H388DA4
+388DA4:lI101|H388EB4
+388EB4:lI98|H388FCC
+388FCC:lI105|H3890DC
+3890DC:lI110|N
+38AED8:lH387704|H38AF08
+387704:lI47|H387774
+387774:lI99|H3877EC
+3877EC:lI108|H38786C
+38786C:lI101|H3878F4
+3878F4:lI97|H387984
+387984:lI114|H387A14
+387A14:lI99|H387AAC
+387AAC:lI97|H387B4C
+387B4C:lI115|H387BF4
+387BF4:lI101|H387CA4
+387CA4:lI47|H387D5C
+387D5C:lI111|H387E1C
+387E1C:lI116|H387EE4
+387EE4:lI112|H387FB4
+387FB4:lI47|H38808C
+38808C:lI101|H38816C
+38816C:lI114|H388254
+388254:lI116|H388344
+388344:lI115|H38843C
+38843C:lI47|H38853C
+38853C:lI108|H388644
+388644:lI105|H388754
+388754:lI98|H388864
+388864:lI47|H388974
+388974:lI114|H388A7C
+388A7C:lI117|H388B8C
+388B8C:lI110|H388C9C
+388C9C:lI116|H388DAC
+388DAC:lI105|H388EBC
+388EBC:lI109|H388FD4
+388FD4:lI101|H3890E4
+3890E4:lI95|H3891F4
+3891F4:lI116|H389304
+389304:lI111|H389414
+389414:lI111|H389524
+389524:lI108|H389624
+389624:lI115|H38971C
+38971C:lI47|H389814
+389814:lI101|H38990C
+38990C:lI98|H389A04
+389A04:lI105|H389AE4
+389AE4:lI110|N
+38AF08:lH38777C|H38AF40
+38777C:lI47|H3877F4
+3877F4:lI99|H387874
+387874:lI108|H3878FC
+3878FC:lI101|H38798C
+38798C:lI97|H387A1C
+387A1C:lI114|H387AB4
+387AB4:lI99|H387B54
+387B54:lI97|H387BFC
+387BFC:lI115|H387CAC
+387CAC:lI101|H387D64
+387D64:lI47|H387E24
+387E24:lI111|H387EEC
+387EEC:lI116|H387FBC
+387FBC:lI112|H388094
+388094:lI47|H388174
+388174:lI101|H38825C
+38825C:lI114|H38834C
+38834C:lI116|H388444
+388444:lI115|H388544
+388544:lI47|H38864C
+38864C:lI108|H38875C
+38875C:lI105|H38886C
+38886C:lI98|H38897C
+38897C:lI47|H388A84
+388A84:lI114|H388B94
+388B94:lI115|H388CA4
+388CA4:lI104|H388DB4
+388DB4:lI101|H388EC4
+388EC4:lI108|H388FDC
+388FDC:lI108|H3890EC
+3890EC:lI47|H3891FC
+3891FC:lI101|H38930C
+38930C:lI98|H38941C
+38941C:lI105|H38952C
+38952C:lI110|N
+38AF40:lH3877FC|H38AF68
+3877FC:lI47|H38787C
+38787C:lI99|H387904
+387904:lI108|H387994
+387994:lI101|H387A24
+387A24:lI97|H387ABC
+387ABC:lI114|H387B5C
+387B5C:lI99|H387C04
+387C04:lI97|H387CB4
+387CB4:lI115|H387D6C
+387D6C:lI101|H387E2C
+387E2C:lI47|H387EF4
+387EF4:lI111|H387FC4
+387FC4:lI116|H38809C
+38809C:lI112|H38817C
+38817C:lI47|H388264
+388264:lI101|H388354
+388354:lI114|H38844C
+38844C:lI116|H38854C
+38854C:lI115|H388654
+388654:lI47|H388764
+388764:lI108|H388874
+388874:lI105|H388984
+388984:lI98|H388A8C
+388A8C:lI47|H388B9C
+388B9C:lI112|H388CAC
+388CAC:lI109|H388DBC
+388DBC:lI97|H388ECC
+388ECC:lI110|H388FE4
+388FE4:lI47|H3890F4
+3890F4:lI101|H389204
+389204:lI98|H389314
+389314:lI105|H389424
+389424:lI110|N
+38AF68:lH387884|H38AF90
+387884:lI47|H38790C
+38790C:lI99|H38799C
+38799C:lI108|H387A2C
+387A2C:lI101|H387AC4
+387AC4:lI97|H387B64
+387B64:lI114|H387C0C
+387C0C:lI99|H387CBC
+387CBC:lI97|H387D74
+387D74:lI115|H387E34
+387E34:lI101|H387EFC
+387EFC:lI47|H387FCC
+387FCC:lI111|H3880A4
+3880A4:lI116|H388184
+388184:lI112|H38826C
+38826C:lI47|H38835C
+38835C:lI101|H388454
+388454:lI114|H388554
+388554:lI116|H38865C
+38865C:lI115|H38876C
+38876C:lI47|H38887C
+38887C:lI108|H38898C
+38898C:lI105|H388A94
+388A94:lI98|H388BA4
+388BA4:lI47|H388CB4
+388CB4:lI112|H388DC4
+388DC4:lI97|H388ED4
+388ED4:lI114|H388FEC
+388FEC:lI115|H3890FC
+3890FC:lI101|H38920C
+38920C:lI116|H38931C
+38931C:lI111|H38942C
+38942C:lI111|H389534
+389534:lI108|H38962C
+38962C:lI115|H389724
+389724:lI47|H38981C
+38981C:lI101|H389914
+389914:lI98|H389A0C
+389A0C:lI105|H389AEC
+389AEC:lI110|N
+38AF90:lH387914|H38AFB8
+387914:lI47|H3879A4
+3879A4:lI99|H387A34
+387A34:lI108|H387ACC
+387ACC:lI101|H387B6C
+387B6C:lI97|H387C14
+387C14:lI114|H387CC4
+387CC4:lI99|H387D7C
+387D7C:lI97|H387E3C
+387E3C:lI115|H387F04
+387F04:lI101|H387FD4
+387FD4:lI47|H3880AC
+3880AC:lI111|H38818C
+38818C:lI116|H388274
+388274:lI112|H388364
+388364:lI47|H38845C
+38845C:lI101|H38855C
+38855C:lI114|H388664
+388664:lI116|H388774
+388774:lI115|H388884
+388884:lI47|H388994
+388994:lI108|H388A9C
+388A9C:lI105|H388BAC
+388BAC:lI98|H388CBC
+388CBC:lI47|H388DCC
+388DCC:lI111|H388EDC
+388EDC:lI116|H388FF4
+388FF4:lI112|H389104
+389104:lI95|H389214
+389214:lI109|H389324
+389324:lI105|H389434
+389434:lI98|H38953C
+38953C:lI115|H389634
+389634:lI47|H38972C
+38972C:lI101|H389824
+389824:lI98|H38991C
+38991C:lI105|H389A14
+389A14:lI110|N
+38AFB8:lH3879AC|H38AFE0
+3879AC:lI47|H387A3C
+387A3C:lI99|H387AD4
+387AD4:lI108|H387B74
+387B74:lI101|H387C1C
+387C1C:lI97|H387CCC
+387CCC:lI114|H387D84
+387D84:lI99|H387E44
+387E44:lI97|H387F0C
+387F0C:lI115|H387FDC
+387FDC:lI101|H3880B4
+3880B4:lI47|H388194
+388194:lI111|H38827C
+38827C:lI116|H38836C
+38836C:lI112|H388464
+388464:lI47|H388564
+388564:lI101|H38866C
+38866C:lI114|H38877C
+38877C:lI116|H38888C
+38888C:lI115|H38899C
+38899C:lI47|H388AA4
+388AA4:lI108|H388BB4
+388BB4:lI105|H388CC4
+388CC4:lI98|H388DD4
+388DD4:lI47|H388EE4
+388EE4:lI111|H388FFC
+388FFC:lI115|H38910C
+38910C:lI95|H38921C
+38921C:lI109|H38932C
+38932C:lI111|H38943C
+38943C:lI110|H389544
+389544:lI47|H38963C
+38963C:lI101|H389734
+389734:lI98|H38982C
+38982C:lI105|H389924
+389924:lI110|N
+38AFE0:lH387A44|H38B000
+387A44:lI47|H387ADC
+387ADC:lI99|H387B7C
+387B7C:lI108|H387C24
+387C24:lI101|H387CD4
+387CD4:lI97|H387D8C
+387D8C:lI114|H387E4C
+387E4C:lI99|H387F14
+387F14:lI97|H387FE4
+387FE4:lI115|H3880BC
+3880BC:lI101|H38819C
+38819C:lI47|H388284
+388284:lI111|H388374
+388374:lI116|H38846C
+38846C:lI112|H38856C
+38856C:lI47|H388674
+388674:lI101|H388784
+388784:lI114|H388894
+388894:lI116|H3889A4
+3889A4:lI115|H388AAC
+388AAC:lI47|H388BBC
+388BBC:lI108|H388CCC
+388CCC:lI105|H388DDC
+388DDC:lI98|H388EEC
+388EEC:lI47|H389004
+389004:lI111|H389114
+389114:lI114|H389224
+389224:lI98|H389334
+389334:lI101|H389444
+389444:lI114|H38954C
+38954C:lI47|H389644
+389644:lI101|H38973C
+38973C:lI98|H389834
+389834:lI105|H38992C
+38992C:lI110|N
+38B000:lH387AE4|H38B010
+387AE4:lI47|H387B84
+387B84:lI99|H387C2C
+387C2C:lI108|H387CDC
+387CDC:lI101|H387D94
+387D94:lI97|H387E54
+387E54:lI114|H387F1C
+387F1C:lI99|H387FEC
+387FEC:lI97|H3880C4
+3880C4:lI115|H3881A4
+3881A4:lI101|H38828C
+38828C:lI47|H38837C
+38837C:lI111|H388474
+388474:lI116|H388574
+388574:lI112|H38867C
+38867C:lI47|H38878C
+38878C:lI101|H38889C
+38889C:lI114|H3889AC
+3889AC:lI116|H388AB4
+388AB4:lI115|H388BC4
+388BC4:lI47|H388CD4
+388CD4:lI108|H388DE4
+388DE4:lI105|H388EF4
+388EF4:lI98|H38900C
+38900C:lI47|H38911C
+38911C:lI111|H38922C
+38922C:lI100|H38933C
+38933C:lI98|H38944C
+38944C:lI99|H389554
+389554:lI47|H38964C
+38964C:lI101|H389744
+389744:lI98|H38983C
+38983C:lI105|H389934
+389934:lI110|N
+38B010:lH387B8C|H38B020
+387B8C:lI47|H387C34
+387C34:lI99|H387CE4
+387CE4:lI108|H387D9C
+387D9C:lI101|H387E5C
+387E5C:lI97|H387F24
+387F24:lI114|H387FF4
+387FF4:lI99|H3880CC
+3880CC:lI97|H3881AC
+3881AC:lI115|H388294
+388294:lI101|H388384
+388384:lI47|H38847C
+38847C:lI111|H38857C
+38857C:lI116|H388684
+388684:lI112|H388794
+388794:lI47|H3888A4
+3888A4:lI101|H3889B4
+3889B4:lI114|H388ABC
+388ABC:lI116|H388BCC
+388BCC:lI115|H388CDC
+388CDC:lI47|H388DEC
+388DEC:lI108|H388EFC
+388EFC:lI105|H389014
+389014:lI98|H389124
+389124:lI47|H389234
+389234:lI111|H389344
+389344:lI98|H389454
+389454:lI115|H38955C
+38955C:lI101|H389654
+389654:lI114|H38974C
+38974C:lI118|H389844
+389844:lI101|H38993C
+38993C:lI114|H389A1C
+389A1C:lI47|H389AF4
+389AF4:lI101|H389BBC
+389BBC:lI98|H389C84
+389C84:lI105|H389D4C
+389D4C:lI110|N
+38B020:lH387C3C|H38B028
+387C3C:lI47|H387CEC
+387CEC:lI99|H387DA4
+387DA4:lI108|H387E64
+387E64:lI101|H387F2C
+387F2C:lI97|H387FFC
+387FFC:lI114|H3880D4
+3880D4:lI99|H3881B4
+3881B4:lI97|H38829C
+38829C:lI115|H38838C
+38838C:lI101|H388484
+388484:lI47|H388584
+388584:lI111|H38868C
+38868C:lI116|H38879C
+38879C:lI112|H3888AC
+3888AC:lI47|H3889BC
+3889BC:lI101|H388AC4
+388AC4:lI114|H388BD4
+388BD4:lI116|H388CE4
+388CE4:lI115|H388DF4
+388DF4:lI47|H388F04
+388F04:lI108|H38901C
+38901C:lI105|H38912C
+38912C:lI98|H38923C
+38923C:lI47|H38934C
+38934C:lI109|H38945C
+38945C:lI110|H389564
+389564:lI101|H38965C
+38965C:lI115|H389754
+389754:lI105|H38984C
+38984C:lI97|H389944
+389944:lI95|H389A24
+389A24:lI115|H389AFC
+389AFC:lI101|H389BC4
+389BC4:lI115|H389C8C
+389C8C:lI115|H389D54
+389D54:lI105|H389E14
+389E14:lI111|H389ECC
+389ECC:lI110|H389F7C
+389F7C:lI47|H38A01C
+38A01C:lI101|H38A0AC
+38A0AC:lI98|H38A12C
+38A12C:lI105|H38A19C
+38A19C:lI110|N
+38B028:lH387CF4|H38B030
+387CF4:lI47|H387DAC
+387DAC:lI99|H387E6C
+387E6C:lI108|H387F34
+387F34:lI101|H388004
+388004:lI97|H3880DC
+3880DC:lI114|H3881BC
+3881BC:lI99|H3882A4
+3882A4:lI97|H388394
+388394:lI115|H38848C
+38848C:lI101|H38858C
+38858C:lI47|H388694
+388694:lI111|H3887A4
+3887A4:lI116|H3888B4
+3888B4:lI112|H3889C4
+3889C4:lI47|H388ACC
+388ACC:lI101|H388BDC
+388BDC:lI114|H388CEC
+388CEC:lI116|H388DFC
+388DFC:lI115|H388F0C
+388F0C:lI47|H389024
+389024:lI108|H389134
+389134:lI105|H389244
+389244:lI98|H389354
+389354:lI47|H389464
+389464:lI109|H38956C
+38956C:lI110|H389664
+389664:lI101|H38975C
+38975C:lI115|H389854
+389854:lI105|H38994C
+38994C:lI97|H389A2C
+389A2C:lI47|H389B04
+389B04:lI101|H389BCC
+389BCC:lI98|H389C94
+389C94:lI105|H389D5C
+389D5C:lI110|N
+38B030:lH387DB4|H38B038
+387DB4:lI47|H387E74
+387E74:lI99|H387F3C
+387F3C:lI108|H38800C
+38800C:lI101|H3880E4
+3880E4:lI97|H3881C4
+3881C4:lI114|H3882AC
+3882AC:lI99|H38839C
+38839C:lI97|H388494
+388494:lI115|H388594
+388594:lI101|H38869C
+38869C:lI47|H3887AC
+3887AC:lI111|H3888BC
+3888BC:lI116|H3889CC
+3889CC:lI112|H388AD4
+388AD4:lI47|H388BE4
+388BE4:lI101|H388CF4
+388CF4:lI114|H388E04
+388E04:lI116|H388F14
+388F14:lI115|H38902C
+38902C:lI47|H38913C
+38913C:lI108|H38924C
+38924C:lI105|H38935C
+38935C:lI98|H38946C
+38946C:lI47|H389574
+389574:lI109|H38966C
+38966C:lI110|H389764
+389764:lI101|H38985C
+38985C:lI109|H389954
+389954:lI111|H389A34
+389A34:lI115|H389B0C
+389B0C:lI121|H389BD4
+389BD4:lI110|H389C9C
+389C9C:lI101|H389D64
+389D64:lI47|H389E1C
+389E1C:lI101|H389ED4
+389ED4:lI98|H389F84
+389F84:lI105|H38A024
+38A024:lI110|N
+38B038:lH387E7C|H38B040
+387E7C:lI47|H387F44
+387F44:lI99|H388014
+388014:lI108|H3880EC
+3880EC:lI101|H3881CC
+3881CC:lI97|H3882B4
+3882B4:lI114|H3883A4
+3883A4:lI99|H38849C
+38849C:lI97|H38859C
+38859C:lI115|H3886A4
+3886A4:lI101|H3887B4
+3887B4:lI47|H3888C4
+3888C4:lI111|H3889D4
+3889D4:lI116|H388ADC
+388ADC:lI112|H388BEC
+388BEC:lI47|H388CFC
+388CFC:lI101|H388E0C
+388E0C:lI114|H388F1C
+388F1C:lI116|H389034
+389034:lI115|H389144
+389144:lI47|H389254
+389254:lI108|H389364
+389364:lI105|H389474
+389474:lI98|H38957C
+38957C:lI47|H389674
+389674:lI109|H38976C
+38976C:lI101|H389864
+389864:lI103|H38995C
+38995C:lI97|H389A3C
+389A3C:lI99|H389B14
+389B14:lI111|H389BDC
+389BDC:lI47|H389CA4
+389CA4:lI101|H389D6C
+389D6C:lI98|H389E24
+389E24:lI105|H389EDC
+389EDC:lI110|N
+38B040:lH387F4C|H38B048
+387F4C:lI47|H38801C
+38801C:lI99|H3880F4
+3880F4:lI108|H3881D4
+3881D4:lI101|H3882BC
+3882BC:lI97|H3883AC
+3883AC:lI114|H3884A4
+3884A4:lI99|H3885A4
+3885A4:lI97|H3886AC
+3886AC:lI115|H3887BC
+3887BC:lI101|H3888CC
+3888CC:lI47|H3889DC
+3889DC:lI111|H388AE4
+388AE4:lI116|H388BF4
+388BF4:lI112|H388D04
+388D04:lI47|H388E14
+388E14:lI101|H388F24
+388F24:lI114|H38903C
+38903C:lI116|H38914C
+38914C:lI115|H38925C
+38925C:lI47|H38936C
+38936C:lI108|H38947C
+38947C:lI105|H389584
+389584:lI98|H38967C
+38967C:lI47|H389774
+389774:lI106|H38986C
+38986C:lI105|H389964
+389964:lI110|H389A44
+389A44:lI116|H389B1C
+389B1C:lI101|H389BE4
+389BE4:lI114|H389CAC
+389CAC:lI102|H389D74
+389D74:lI97|H389E2C
+389E2C:lI99|H389EE4
+389EE4:lI101|N
+38B048:lH388024|H38B050
+388024:lI47|H3880FC
+3880FC:lI99|H3881DC
+3881DC:lI108|H3882C4
+3882C4:lI101|H3883B4
+3883B4:lI97|H3884AC
+3884AC:lI114|H3885AC
+3885AC:lI99|H3886B4
+3886B4:lI97|H3887C4
+3887C4:lI115|H3888D4
+3888D4:lI101|H3889E4
+3889E4:lI47|H388AEC
+388AEC:lI111|H388BFC
+388BFC:lI116|H388D0C
+388D0C:lI112|H388E1C
+388E1C:lI47|H388F2C
+388F2C:lI101|H389044
+389044:lI114|H389154
+389154:lI116|H389264
+389264:lI115|H389374
+389374:lI47|H389484
+389484:lI108|H38958C
+38958C:lI105|H389684
+389684:lI98|H38977C
+38977C:lI47|H389874
+389874:lI105|H38996C
+38996C:lI110|H389A4C
+389A4C:lI101|H389B24
+389B24:lI116|H389BEC
+389BEC:lI115|H389CB4
+389CB4:lI47|H389D7C
+389D7C:lI101|H389E34
+389E34:lI98|H389EEC
+389EEC:lI105|H389F8C
+389F8C:lI110|N
+38B050:lH388104|H38B058
+388104:lI47|H3881E4
+3881E4:lI99|H3882CC
+3882CC:lI108|H3883BC
+3883BC:lI101|H3884B4
+3884B4:lI97|H3885B4
+3885B4:lI114|H3886BC
+3886BC:lI99|H3887CC
+3887CC:lI97|H3888DC
+3888DC:lI115|H3889EC
+3889EC:lI101|H388AF4
+388AF4:lI47|H388C04
+388C04:lI111|H388D14
+388D14:lI116|H388E24
+388E24:lI112|H388F34
+388F34:lI47|H38904C
+38904C:lI101|H38915C
+38915C:lI114|H38926C
+38926C:lI116|H38937C
+38937C:lI115|H38948C
+38948C:lI47|H389594
+389594:lI108|H38968C
+38968C:lI105|H389784
+389784:lI98|H38987C
+38987C:lI47|H389974
+389974:lI105|H389A54
+389A54:lI99|H389B2C
+389B2C:lI47|H389BF4
+389BF4:lI101|H389CBC
+389CBC:lI98|H389D84
+389D84:lI105|H389E3C
+389E3C:lI110|N
+38B058:lH3881EC|H38B060
+3881EC:lI47|H3882D4
+3882D4:lI99|H3883C4
+3883C4:lI108|H3884BC
+3884BC:lI101|H3885BC
+3885BC:lI97|H3886C4
+3886C4:lI114|H3887D4
+3887D4:lI99|H3888E4
+3888E4:lI97|H3889F4
+3889F4:lI115|H388AFC
+388AFC:lI101|H388C0C
+388C0C:lI47|H388D1C
+388D1C:lI111|H388E2C
+388E2C:lI116|H388F3C
+388F3C:lI112|H389054
+389054:lI47|H389164
+389164:lI101|H389274
+389274:lI114|H389384
+389384:lI116|H389494
+389494:lI115|H38959C
+38959C:lI47|H389694
+389694:lI108|H38978C
+38978C:lI105|H389884
+389884:lI98|H38997C
+38997C:lI47|H389A5C
+389A5C:lI104|H389B34
+389B34:lI105|H389BFC
+389BFC:lI112|H389CC4
+389CC4:lI101|H389D8C
+389D8C:lI47|H389E44
+389E44:lI101|H389EF4
+389EF4:lI98|H389F94
+389F94:lI105|H38A02C
+38A02C:lI110|N
+38B060:lH3882DC|H38B068
+3882DC:lI47|H3883CC
+3883CC:lI99|H3884C4
+3884C4:lI108|H3885C4
+3885C4:lI101|H3886CC
+3886CC:lI97|H3887DC
+3887DC:lI114|H3888EC
+3888EC:lI99|H3889FC
+3889FC:lI97|H388B04
+388B04:lI115|H388C14
+388C14:lI101|H388D24
+388D24:lI47|H388E34
+388E34:lI111|H388F44
+388F44:lI116|H38905C
+38905C:lI112|H38916C
+38916C:lI47|H38927C
+38927C:lI101|H38938C
+38938C:lI114|H38949C
+38949C:lI116|H3895A4
+3895A4:lI115|H38969C
+38969C:lI47|H389794
+389794:lI108|H38988C
+38988C:lI105|H389984
+389984:lI98|H389A64
+389A64:lI47|H389B3C
+389B3C:lI103|H389C04
+389C04:lI115|H389CCC
+389CCC:lI47|H389D94
+389D94:lI101|H389E4C
+389E4C:lI98|H389EFC
+389EFC:lI105|H389F9C
+389F9C:lI110|N
+38B068:lH3883D4|H38B070
+3883D4:lI47|H3884CC
+3884CC:lI99|H3885CC
+3885CC:lI108|H3886D4
+3886D4:lI101|H3887E4
+3887E4:lI97|H3888F4
+3888F4:lI114|H388A04
+388A04:lI99|H388B0C
+388B0C:lI97|H388C1C
+388C1C:lI115|H388D2C
+388D2C:lI101|H388E3C
+388E3C:lI47|H388F4C
+388F4C:lI111|H389064
+389064:lI116|H389174
+389174:lI112|H389284
+389284:lI47|H389394
+389394:lI101|H3894A4
+3894A4:lI114|H3895AC
+3895AC:lI116|H3896A4
+3896A4:lI115|H38979C
+38979C:lI47|H389894
+389894:lI108|H38998C
+38998C:lI105|H389A6C
+389A6C:lI98|H389B44
+389B44:lI47|H389C0C
+389C0C:lI101|H389CD4
+389CD4:lI118|H389D9C
+389D9C:lI97|H389E54
+389E54:lI47|H389F04
+389F04:lI101|H389FA4
+389FA4:lI98|H38A034
+38A034:lI105|H38A0B4
+38A0B4:lI110|N
+38B070:lH3884D4|H38B078
+3884D4:lI47|H3885D4
+3885D4:lI99|H3886DC
+3886DC:lI108|H3887EC
+3887EC:lI101|H3888FC
+3888FC:lI97|H388A0C
+388A0C:lI114|H388B14
+388B14:lI99|H388C24
+388C24:lI97|H388D34
+388D34:lI115|H388E44
+388E44:lI101|H388F54
+388F54:lI47|H38906C
+38906C:lI111|H38917C
+38917C:lI116|H38928C
+38928C:lI112|H38939C
+38939C:lI47|H3894AC
+3894AC:lI101|H3895B4
+3895B4:lI114|H3896AC
+3896AC:lI116|H3897A4
+3897A4:lI115|H38989C
+38989C:lI47|H389994
+389994:lI108|H389A74
+389A74:lI105|H389B4C
+389B4C:lI98|H389C14
+389C14:lI47|H389CDC
+389CDC:lI101|H389DA4
+389DA4:lI116|H389E5C
+389E5C:lI47|H389F0C
+389F0C:lI101|H389FAC
+389FAC:lI98|H38A03C
+38A03C:lI105|H38A0BC
+38A0BC:lI110|N
+38B078:lH3885DC|H38B080
+3885DC:lI47|H3886E4
+3886E4:lI99|H3887F4
+3887F4:lI108|H388904
+388904:lI101|H388A14
+388A14:lI97|H388B1C
+388B1C:lI114|H388C2C
+388C2C:lI99|H388D3C
+388D3C:lI97|H388E4C
+388E4C:lI115|H388F5C
+388F5C:lI101|H389074
+389074:lI47|H389184
+389184:lI111|H389294
+389294:lI116|H3893A4
+3893A4:lI112|H3894B4
+3894B4:lI47|H3895BC
+3895BC:lI101|H3896B4
+3896B4:lI114|H3897AC
+3897AC:lI116|H3898A4
+3898A4:lI115|H38999C
+38999C:lI47|H389A7C
+389A7C:lI108|H389B54
+389B54:lI105|H389C1C
+389C1C:lI98|H389CE4
+389CE4:lI47|H389DAC
+389DAC:lI101|H389E64
+389E64:lI114|H389F14
+389F14:lI108|H389FB4
+389FB4:lI95|H38A044
+38A044:lI105|H38A0C4
+38A0C4:lI110|H38A134
+38A134:lI116|H38A1A4
+38A1A4:lI101|H38A20C
+38A20C:lI114|H38A274
+38A274:lI102|H38A2DC
+38A2DC:lI97|H38A344
+38A344:lI99|H38A3AC
+38A3AC:lI101|N
+38B080:lH3886EC|H38B088
+3886EC:lI47|H3887FC
+3887FC:lI99|H38890C
+38890C:lI108|H388A1C
+388A1C:lI101|H388B24
+388B24:lI97|H388C34
+388C34:lI114|H388D44
+388D44:lI99|H388E54
+388E54:lI97|H388F64
+388F64:lI115|H38907C
+38907C:lI101|H38918C
+38918C:lI47|H38929C
+38929C:lI111|H3893AC
+3893AC:lI116|H3894BC
+3894BC:lI112|H3895C4
+3895C4:lI47|H3896BC
+3896BC:lI101|H3897B4
+3897B4:lI114|H3898AC
+3898AC:lI116|H3899A4
+3899A4:lI115|H389A84
+389A84:lI47|H389B5C
+389B5C:lI108|H389C24
+389C24:lI105|H389CEC
+389CEC:lI98|H389DB4
+389DB4:lI47|H389E6C
+389E6C:lI100|H389F1C
+389F1C:lI101|H389FBC
+389FBC:lI98|H38A04C
+38A04C:lI117|H38A0CC
+38A0CC:lI103|H38A13C
+38A13C:lI103|H38A1AC
+38A1AC:lI101|H38A214
+38A214:lI114|H38A27C
+38A27C:lI47|H38A2E4
+38A2E4:lI101|H38A34C
+38A34C:lI98|H38A3B4
+38A3B4:lI105|H38A414
+38A414:lI110|N
+38B088:lH388804|H38B090
+388804:lI47|H388914
+388914:lI99|H388A24
+388A24:lI108|H388B2C
+388B2C:lI101|H388C3C
+388C3C:lI97|H388D4C
+388D4C:lI114|H388E5C
+388E5C:lI99|H388F6C
+388F6C:lI97|H389084
+389084:lI115|H389194
+389194:lI101|H3892A4
+3892A4:lI47|H3893B4
+3893B4:lI111|H3894C4
+3894C4:lI116|H3895CC
+3895CC:lI112|H3896C4
+3896C4:lI47|H3897BC
+3897BC:lI101|H3898B4
+3898B4:lI114|H3899AC
+3899AC:lI116|H389A8C
+389A8C:lI115|H389B64
+389B64:lI47|H389C2C
+389C2C:lI108|H389CF4
+389CF4:lI105|H389DBC
+389DBC:lI98|H389E74
+389E74:lI47|H389F24
+389F24:lI99|H389FC4
+389FC4:lI114|H38A054
+38A054:lI121|H38A0D4
+38A0D4:lI112|H38A144
+38A144:lI116|H38A1B4
+38A1B4:lI111|H38A21C
+38A21C:lI47|H38A284
+38A284:lI101|H38A2EC
+38A2EC:lI98|H38A354
+38A354:lI105|H38A3BC
+38A3BC:lI110|N
+38B090:lH38891C|H38B098
+38891C:lI47|H388A2C
+388A2C:lI99|H388B34
+388B34:lI108|H388C44
+388C44:lI101|H388D54
+388D54:lI97|H388E64
+388E64:lI114|H388F74
+388F74:lI99|H38908C
+38908C:lI97|H38919C
+38919C:lI115|H3892AC
+3892AC:lI101|H3893BC
+3893BC:lI47|H3894CC
+3894CC:lI111|H3895D4
+3895D4:lI116|H3896CC
+3896CC:lI112|H3897C4
+3897C4:lI47|H3898BC
+3898BC:lI101|H3899B4
+3899B4:lI114|H389A94
+389A94:lI116|H389B6C
+389B6C:lI115|H389C34
+389C34:lI47|H389CFC
+389CFC:lI108|H389DC4
+389DC4:lI105|H389E7C
+389E7C:lI98|H389F2C
+389F2C:lI47|H389FCC
+389FCC:lI99|H38A05C
+38A05C:lI111|H38A0DC
+38A0DC:lI115|H38A14C
+38A14C:lI84|H38A1BC
+38A1BC:lI114|H38A224
+38A224:lI97|H38A28C
+38A28C:lI110|H38A2F4
+38A2F4:lI115|H38A35C
+38A35C:lI97|H38A3C4
+38A3C4:lI99|H38A41C
+38A41C:lI116|H38A46C
+38A46C:lI105|H38A4BC
+38A4BC:lI111|H38A50C
+38A50C:lI110|H38A554
+38A554:lI115|H38A59C
+38A59C:lI47|H38A5E4
+38A5E4:lI101|H38A62C
+38A62C:lI98|H38A66C
+38A66C:lI105|H38A6A4
+38A6A4:lI110|N
+38B098:lH388A34|H38B0A0
+388A34:lI47|H388B3C
+388B3C:lI99|H388C4C
+388C4C:lI108|H388D5C
+388D5C:lI101|H388E6C
+388E6C:lI97|H388F7C
+388F7C:lI114|H389094
+389094:lI99|H3891A4
+3891A4:lI97|H3892B4
+3892B4:lI115|H3893C4
+3893C4:lI101|H3894D4
+3894D4:lI47|H3895DC
+3895DC:lI111|H3896D4
+3896D4:lI116|H3897CC
+3897CC:lI112|H3898C4
+3898C4:lI47|H3899BC
+3899BC:lI101|H389A9C
+389A9C:lI114|H389B74
+389B74:lI116|H389C3C
+389C3C:lI115|H389D04
+389D04:lI47|H389DCC
+389DCC:lI108|H389E84
+389E84:lI105|H389F34
+389F34:lI98|H389FD4
+389FD4:lI47|H38A064
+38A064:lI99|H38A0E4
+38A0E4:lI111|H38A154
+38A154:lI115|H38A1C4
+38A1C4:lI84|H38A22C
+38A22C:lI105|H38A294
+38A294:lI109|H38A2FC
+38A2FC:lI101|H38A364
+38A364:lI47|H38A3CC
+38A3CC:lI101|H38A424
+38A424:lI98|H38A474
+38A474:lI105|H38A4C4
+38A4C4:lI110|N
+38B0A0:lH388B44|H38B0A8
+388B44:lI47|H388C54
+388C54:lI99|H388D64
+388D64:lI108|H388E74
+388E74:lI101|H388F84
+388F84:lI97|H38909C
+38909C:lI114|H3891AC
+3891AC:lI99|H3892BC
+3892BC:lI97|H3893CC
+3893CC:lI115|H3894DC
+3894DC:lI101|H3895E4
+3895E4:lI47|H3896DC
+3896DC:lI111|H3897D4
+3897D4:lI116|H3898CC
+3898CC:lI112|H3899C4
+3899C4:lI47|H389AA4
+389AA4:lI101|H389B7C
+389B7C:lI114|H389C44
+389C44:lI116|H389D0C
+389D0C:lI115|H389DD4
+389DD4:lI47|H389E8C
+389E8C:lI108|H389F3C
+389F3C:lI105|H389FDC
+389FDC:lI98|H38A06C
+38A06C:lI47|H38A0EC
+38A0EC:lI99|H38A15C
+38A15C:lI111|H38A1CC
+38A1CC:lI115|H38A234
+38A234:lI80|H38A29C
+38A29C:lI114|H38A304
+38A304:lI111|H38A36C
+38A36C:lI112|H38A3D4
+38A3D4:lI101|H38A42C
+38A42C:lI114|H38A47C
+38A47C:lI116|H38A4CC
+38A4CC:lI121|H38A514
+38A514:lI47|H38A55C
+38A55C:lI101|H38A5A4
+38A5A4:lI98|H38A5EC
+38A5EC:lI105|H38A634
+38A634:lI110|N
+38B0A8:lH388C5C|H38B0B0
+388C5C:lI47|H388D6C
+388D6C:lI99|H388E7C
+388E7C:lI108|H388F8C
+388F8C:lI101|H3890A4
+3890A4:lI97|H3891B4
+3891B4:lI114|H3892C4
+3892C4:lI99|H3893D4
+3893D4:lI97|H3894E4
+3894E4:lI115|H3895EC
+3895EC:lI101|H3896E4
+3896E4:lI47|H3897DC
+3897DC:lI111|H3898D4
+3898D4:lI116|H3899CC
+3899CC:lI112|H389AAC
+389AAC:lI47|H389B84
+389B84:lI101|H389C4C
+389C4C:lI114|H389D14
+389D14:lI116|H389DDC
+389DDC:lI115|H389E94
+389E94:lI47|H389F44
+389F44:lI108|H389FE4
+389FE4:lI105|H38A074
+38A074:lI98|H38A0F4
+38A0F4:lI47|H38A164
+38A164:lI99|H38A1D4
+38A1D4:lI111|H38A23C
+38A23C:lI115|H38A2A4
+38A2A4:lI78|H38A30C
+38A30C:lI111|H38A374
+38A374:lI116|H38A3DC
+38A3DC:lI105|H38A434
+38A434:lI102|H38A484
+38A484:lI105|H38A4D4
+38A4D4:lI99|H38A51C
+38A51C:lI97|H38A564
+38A564:lI116|H38A5AC
+38A5AC:lI105|H38A5F4
+38A5F4:lI111|H38A63C
+38A63C:lI110|H38A674
+38A674:lI47|H38A6AC
+38A6AC:lI101|H38A6D4
+38A6D4:lI98|H38A6EC
+38A6EC:lI105|H38A704
+38A704:lI110|N
+38B0B0:lH388D74|H38B0B8
+388D74:lI47|H388E84
+388E84:lI99|H388F94
+388F94:lI108|H3890AC
+3890AC:lI101|H3891BC
+3891BC:lI97|H3892CC
+3892CC:lI114|H3893DC
+3893DC:lI99|H3894EC
+3894EC:lI97|H3895F4
+3895F4:lI115|H3896EC
+3896EC:lI101|H3897E4
+3897E4:lI47|H3898DC
+3898DC:lI111|H3899D4
+3899D4:lI116|H389AB4
+389AB4:lI112|H389B8C
+389B8C:lI47|H389C54
+389C54:lI101|H389D1C
+389D1C:lI114|H389DE4
+389DE4:lI116|H389E9C
+389E9C:lI115|H389F4C
+389F4C:lI47|H389FEC
+389FEC:lI108|H38A07C
+38A07C:lI105|H38A0FC
+38A0FC:lI98|H38A16C
+38A16C:lI47|H38A1DC
+38A1DC:lI99|H38A244
+38A244:lI111|H38A2AC
+38A2AC:lI115|H38A314
+38A314:lI70|H38A37C
+38A37C:lI105|H38A3E4
+38A3E4:lI108|H38A43C
+38A43C:lI101|H38A48C
+38A48C:lI84|H38A4DC
+38A4DC:lI114|H38A524
+38A524:lI97|H38A56C
+38A56C:lI110|H38A5B4
+38A5B4:lI115|H38A5FC
+38A5FC:lI102|H38A644
+38A644:lI101|H38A67C
+38A67C:lI114|H38A6B4
+38A6B4:lI47|H38A6DC
+38A6DC:lI101|H38A6F4
+38A6F4:lI98|H38A70C
+38A70C:lI105|H38A71C
+38A71C:lI110|N
+38B0B8:lH388E8C|H38B0C0
+388E8C:lI47|H388F9C
+388F9C:lI99|H3890B4
+3890B4:lI108|H3891C4
+3891C4:lI101|H3892D4
+3892D4:lI97|H3893E4
+3893E4:lI114|H3894F4
+3894F4:lI99|H3895FC
+3895FC:lI97|H3896F4
+3896F4:lI115|H3897EC
+3897EC:lI101|H3898E4
+3898E4:lI47|H3899DC
+3899DC:lI111|H389ABC
+389ABC:lI116|H389B94
+389B94:lI112|H389C5C
+389C5C:lI47|H389D24
+389D24:lI101|H389DEC
+389DEC:lI114|H389EA4
+389EA4:lI116|H389F54
+389F54:lI115|H389FF4
+389FF4:lI47|H38A084
+38A084:lI108|H38A104
+38A104:lI105|H38A174
+38A174:lI98|H38A1E4
+38A1E4:lI47|H38A24C
+38A24C:lI99|H38A2B4
+38A2B4:lI111|H38A31C
+38A31C:lI115|H38A384
+38A384:lI69|H38A3EC
+38A3EC:lI118|H38A444
+38A444:lI101|H38A494
+38A494:lI110|H38A4E4
+38A4E4:lI116|H38A52C
+38A52C:lI68|H38A574
+38A574:lI111|H38A5BC
+38A5BC:lI109|H38A604
+38A604:lI97|H38A64C
+38A64C:lI105|H38A684
+38A684:lI110|H38A6BC
+38A6BC:lI47|H38A6E4
+38A6E4:lI101|H38A6FC
+38A6FC:lI98|H38A714
+38A714:lI105|H38A724
+38A724:lI110|N
+38B0C0:lH388FA4|H38B0C8
+388FA4:lI47|H3890BC
+3890BC:lI99|H3891CC
+3891CC:lI108|H3892DC
+3892DC:lI101|H3893EC
+3893EC:lI97|H3894FC
+3894FC:lI114|H389604
+389604:lI99|H3896FC
+3896FC:lI97|H3897F4
+3897F4:lI115|H3898EC
+3898EC:lI101|H3899E4
+3899E4:lI47|H389AC4
+389AC4:lI111|H389B9C
+389B9C:lI116|H389C64
+389C64:lI112|H389D2C
+389D2C:lI47|H389DF4
+389DF4:lI101|H389EAC
+389EAC:lI114|H389F5C
+389F5C:lI116|H389FFC
+389FFC:lI115|H38A08C
+38A08C:lI47|H38A10C
+38A10C:lI108|H38A17C
+38A17C:lI105|H38A1EC
+38A1EC:lI98|H38A254
+38A254:lI47|H38A2BC
+38A2BC:lI99|H38A324
+38A324:lI111|H38A38C
+38A38C:lI115|H38A3F4
+38A3F4:lI69|H38A44C
+38A44C:lI118|H38A49C
+38A49C:lI101|H38A4EC
+38A4EC:lI110|H38A534
+38A534:lI116|H38A57C
+38A57C:lI47|H38A5C4
+38A5C4:lI101|H38A60C
+38A60C:lI98|H38A654
+38A654:lI105|H38A68C
+38A68C:lI110|N
+38B0C8:lH3890C4|H38B0D0
+3890C4:lI47|H3891D4
+3891D4:lI99|H3892E4
+3892E4:lI108|H3893F4
+3893F4:lI101|H389504
+389504:lI97|H38960C
+38960C:lI114|H389704
+389704:lI99|H3897FC
+3897FC:lI97|H3898F4
+3898F4:lI115|H3899EC
+3899EC:lI101|H389ACC
+389ACC:lI47|H389BA4
+389BA4:lI111|H389C6C
+389C6C:lI116|H389D34
+389D34:lI112|H389DFC
+389DFC:lI47|H389EB4
+389EB4:lI101|H389F64
+389F64:lI114|H38A004
+38A004:lI116|H38A094
+38A094:lI115|H38A114
+38A114:lI47|H38A184
+38A184:lI108|H38A1F4
+38A1F4:lI105|H38A25C
+38A25C:lI98|H38A2C4
+38A2C4:lI47|H38A32C
+38A32C:lI99|H38A394
+38A394:lI111|H38A3FC
+38A3FC:lI109|H38A454
+38A454:lI112|H38A4A4
+38A4A4:lI105|H38A4F4
+38A4F4:lI108|H38A53C
+38A53C:lI101|H38A584
+38A584:lI114|H38A5CC
+38A5CC:lI47|H38A614
+38A614:lI101|H38A65C
+38A65C:lI98|H38A694
+38A694:lI105|H38A6C4
+38A6C4:lI110|N
+38B0D0:lH3891DC|H38B0D8
+3891DC:lI47|H3892EC
+3892EC:lI99|H3893FC
+3893FC:lI108|H38950C
+38950C:lI101|H389614
+389614:lI97|H38970C
+38970C:lI114|H389804
+389804:lI99|H3898FC
+3898FC:lI97|H3899F4
+3899F4:lI115|H389AD4
+389AD4:lI101|H389BAC
+389BAC:lI47|H389C74
+389C74:lI111|H389D3C
+389D3C:lI116|H389E04
+389E04:lI112|H389EBC
+389EBC:lI47|H389F6C
+389F6C:lI101|H38A00C
+38A00C:lI114|H38A09C
+38A09C:lI116|H38A11C
+38A11C:lI115|H38A18C
+38A18C:lI47|H38A1FC
+38A1FC:lI108|H38A264
+38A264:lI105|H38A2CC
+38A2CC:lI98|H38A334
+38A334:lI47|H38A39C
+38A39C:lI97|H38A404
+38A404:lI115|H38A45C
+38A45C:lI110|H38A4AC
+38A4AC:lI49|H38A4FC
+38A4FC:lI47|H38A544
+38A544:lI101|H38A58C
+38A58C:lI98|H38A5D4
+38A5D4:lI105|H38A61C
+38A61C:lI110|N
+38B0D8:lH3892F4|H38B0E0
+3892F4:lI47|H389404
+389404:lI99|H389514
+389514:lI108|H38961C
+38961C:lI101|H389714
+389714:lI97|H38980C
+38980C:lI114|H389904
+389904:lI99|H3899FC
+3899FC:lI97|H389ADC
+389ADC:lI115|H389BB4
+389BB4:lI101|H389C7C
+389C7C:lI47|H389D44
+389D44:lI111|H389E0C
+389E0C:lI116|H389EC4
+389EC4:lI112|H389F74
+389F74:lI47|H38A014
+38A014:lI101|H38A0A4
+38A0A4:lI114|H38A124
+38A124:lI116|H38A194
+38A194:lI115|H38A204
+38A204:lI47|H38A26C
+38A26C:lI108|H38A2D4
+38A2D4:lI105|H38A33C
+38A33C:lI98|H38A3A4
+38A3A4:lI47|H38A40C
+38A40C:lI97|H38A464
+38A464:lI112|H38A4B4
+38A4B4:lI112|H38A504
+38A504:lI109|H38A54C
+38A54C:lI111|H38A594
+38A594:lI110|H38A5DC
+38A5DC:lI47|H38A624
+38A624:lI101|H38A664
+38A664:lI98|H38A69C
+38A69C:lI105|H38A6CC
+38A6CC:lI110|N
+38B0E0:lH38AA88|H38B0E8
+38AA88:lI47|H38AA90
+38AA90:lI104|H38AA98
+38AA98:lI111|H38AAA0
+38AAA0:lI109|H38AAA8
+38AAA8:lI101|H38AAB0
+38AAB0:lI47|H38AAB8
+38AAB8:lI115|H38AAC0
+38AAC0:lI105|H38AAC8
+38AAC8:lI114|H38AAD0
+38AAD0:lI105|H38AAD8
+38AAD8:lI47|H38AAE0
+38AAE0:lI101|H38AAE8
+38AAE8:lI114|H38AAF0
+38AAF0:lI108|H38AAF8
+38AAF8:lI97|H38AB00
+38AB00:lI110|H38AB08
+38AB08:lI103|N
+38B0E8:lH38AB1C|H38B0F0
+38AB1C:lI47|H38AB2C
+38AB2C:lI104|H38AB4C
+38AB4C:lI111|H38AB74
+38AB74:lI109|H38ABA4
+38ABA4:lI101|H38ABC4
+38ABC4:lI47|H38ABE4
+38ABE4:lI115|H38AC04
+38AC04:lI105|H38AC24
+38AC24:lI114|H38AC3C
+38AC3C:lI105|H38AC44
+38AC44:lI47|H38AC4C
+38AC4C:lI116|H38AC54
+38AC54:lI111|H38AC5C
+38AC5C:lI111|H38AC64
+38AC64:lI108|H38AC6C
+38AC6C:lI115|H38AC74
+38AC74:lI47|H38AC7C
+38AC7C:lI100|H38AC84
+38AC84:lI105|H38AC8C
+38AC8C:lI115|H38AC94
+38AC94:lI116|H38AC9C
+38AC9C:lI101|H38ACA4
+38ACA4:lI108|H38ACAC
+38ACAC:lI47|H38ACB4
+38ACB4:lI101|H38ACBC
+38ACBC:lI98|H38ACC4
+38ACC4:lI105|H38ACCC
+38ACCC:lI110|N
+38B0F0:lH38B0F8|N
+38B0F8:lI47|H38B100
+38B100:lI104|H38B108
+38B108:lI111|H38B110
+38B110:lI109|H38B118
+38B118:lI101|H38B120
+38B120:lI47|H38B128
+38B128:lI115|H38B130
+38B130:lI105|H38B138
+38B138:lI114|H38B140
+38B140:lI105|H38B148
+38B148:lI47|H38B150
+38B150:lI79|H38B158
+38B158:lI84|H38B160
+38B160:lI80|H38B168
+38B168:lI47|H38B170
+38B170:lI103|H38B178
+38B178:lI112|H38B180
+38B180:lI114|H38B188
+38B188:lI115|H38B190
+38B190:lI95|H38B198
+38B198:lI116|H38B1A0
+38B1A0:lI114|H38B1A8
+38B1A8:lI97|H38B1B0
+38B1B0:lI99|H38B1B8
+38B1B8:lI101|H38B1C0
+38B1C0:lI47|H38B1C8
+38B1C8:lI106|H38B1D0
+38B1D0:lI97|H38B1D8
+38B1D8:lI110|N
+3873BC:lI47|H3873CC
+3873CC:lI99|H3873E4
+3873E4:lI108|H3873FC
+3873FC:lI101|H38741C
+38741C:lI97|H387444
+387444:lI114|H387474
+387474:lI99|H3874AC
+3874AC:lI97|H3874EC
+3874EC:lI115|H387534
+387534:lI101|H387584
+387584:lI47|H3875DC
+3875DC:lI111|H38763C
+38763C:lI116|H3876A4
+3876A4:lI112|H387714
+387714:lI47|H38778C
+38778C:lI101|H38780C
+38780C:lI114|H387894
+387894:lI116|H387924
+387924:lI115|N
+=proc_dictionary:<0.19.0>
+H370244
+H370250
+=proc_stack:<0.19.0>
+36b45c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A11:supervisor_bridge
+y3:H36B17C
+y4:P<0.19.0>
+y5:P<0.9.0>
+36b478:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H37025C
+=proc_heap:<0.19.0>
+36B17C:t5:A5:state,A8:user_sup,P<0.21.0>,P<0.21.0>,H370238
+370238:t2:P<0.19.0>,A8:user_sup
+37025C:lAA:gen_server|H37027C
+37027C:lP<0.9.0>|H37028C
+37028C:lP<0.9.0>|H370294
+370294:lA11:supervisor_bridge|H37029C
+37029C:lH3702A4|H3702AC
+3702A4:lA8:user_sup|H3702B4
+3702B4:lN|H3702BC
+3702BC:lA4:self|N
+3702AC:lN|N
+370244:t2:AD:$initial_call,H370264
+370264:t3:A3:gen,A7:init_it,H37025C
+370250:t2:AA:$ancestors,H370274
+370274:lAA:kernel_sup|H370284
+370284:lP<0.8.0>|N
+=proc_dictionary:<0.20.0>
+H36F8A8
+=proc_stack:<0.20.0>
+36a714:SReturn addr 0x156F90 (<terminate process normally>)
+y0:N
+y1:N
+y2:H36F8C4
+y3:P<0.21.0>
+y4:P<0.22.0>
+y5:p<0.72>
+y6:p<0.72>
+=proc_heap:<0.20.0>
+36F8C4:t4:I3,I2,P<0.22.0>,H36F8F0
+36F8F0:lH36F900|H36F910
+36F900:t3:I1,P<0.21.0>,H36F920
+36F920:t0:
+36F910:lH36F924|N
+36F924:t3:I2,P<0.22.0>,H36F93C
+36F93C:t3:A5:shell,A5:start,N
+36F8A8:t2:A3:eof,A5:false
+=proc_dictionary:<0.21.0>
+H3709DC
+H3709D0
+H3709F8
+=proc_stack:<0.21.0>
+370d1c:SReturn addr 0x156F90 (<terminate process normally>)
+y0:N
+y1:A9:undefined
+y2:P<0.20.0>
+=proc_heap:<0.21.0>
+3709DC:t2:AB:line_buffer,N
+3709D0:t2:AB:kill_buffer,N
+3709F8:t2:A9:read_mode,A4:list
+=proc_dictionary:<0.22.0>
+H370D44
+H370D60
+H370D7C
+H370D38
+=proc_stack:<0.22.0>
+374a88:SReturn addr 0x2CE718 (group:get_chars_loop/7 + 80)
+y0:N
+y1:N
+y2:A8:infinity
+y3:H374A00
+y4:P<0.20.0>
+y5:H374A28
+374aa4:SReturn addr 0x2CDC18 (group:io_request/5 + 48)
+y0:H37499C
+y1:A6:io_lib
+y2:A9:get_until
+y3:H3748B8
+y4:P<0.20.0>
+y5:A5:start
+374ac0:SReturn addr 0x2CDB2C (group:server_loop/3 + 372)
+y0:P<0.49.0>
+y1:P<0.22.0>
+374acc:SReturn addr 0x156F90 (<terminate process normally>)
+y0:N
+y1:P<0.25.0>
+y2:P<0.20.0>
+=proc_heap:<0.22.0>
+374A00:t4:A4:line,H37499C,H3749A4,A4:none
+3749A4:t2:N,N
+37499C:lI50|H374994
+374994:lI62|H37498C
+37498C:lI32|N
+374A28:t4:A5:stack,H370D58,H374A24,N
+374A24:t0:
+370D58:lH370D74|N
+370D74:lI99|H370D88
+370D88:lI114|H370D90
+370D90:lI97|H370D98
+370D98:lI115|H370DA0
+370DA0:lI104|H370DA8
+370DA8:lI100|H370DB0
+370DB0:lI117|H370DB8
+370DB8:lI109|H370DC0
+370DC0:lI112|H370DC8
+370DC8:lI95|H370DD0
+370DD0:lI118|H370DD8
+370DD8:lI105|H370DE0
+370DE0:lI101|H370DE8
+370DE8:lI119|H370DF0
+370DF0:lI101|H370DF8
+370DF8:lI114|H370E00
+370E00:lI58|H370E08
+370E08:lI115|H370E10
+370E10:lI116|H370E18
+370E18:lI97|H370E20
+370E20:lI114|H370E28
+370E28:lI116|H370E30
+370E30:lI40|H370E38
+370E38:lI41|H370E40
+370E40:lI46|H370E48
+370E48:lI10|N
+3748B8:t3:A8:erl_scan,A6:tokens,H3748B0
+3748B0:lI1|N
+370D44:t2:AB:line_buffer,H370D58
+370D60:t2:A5:shell,P<0.25.0>
+370D7C:t2:AB:kill_buffer,N
+370D38:t2:A9:read_mode,A4:list
+=proc_dictionary:<0.23.0>
+H376464
+H376448
+=proc_stack:<0.23.0>
+376754:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AD:kernel_config
+y3:N
+y4:P<0.23.0>
+y5:P<0.9.0>
+376770:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H376418
+=proc_heap:<0.23.0>
+376418:lAA:gen_server|H376410
+376410:lP<0.9.0>|H376408
+376408:lP<0.9.0>|H376400
+376400:lAD:kernel_config|H3763F8
+3763F8:lN|H3763F0
+3763F0:lN|N
+376464:t2:AD:$initial_call,H376454
+376454:t3:A3:gen,A7:init_it,H376418
+376448:t2:AA:$ancestors,H376440
+376440:lAA:kernel_sup|H376420
+376420:lP<0.8.0>|N
+=proc_dictionary:<0.24.0>
+H3705E0
+H3705EC
+=proc_stack:<0.24.0>
+36f38c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AA:supervisor
+y3:H36F018
+y4:AF:kernel_safe_sup
+y5:P<0.9.0>
+36f3a8:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H37063C
+=proc_heap:<0.24.0>
+36F018:tA:A5:state,H370644,AB:one_for_one,H36F044,N,I4,I3600,N,A6:kernel,A4:safe
+36F044:lH36F04C|N
+36F04C:t8:A5:child,P<0.31.0>,A17:inet_gethost_native_sup,H370650,A9:temporary,I1000,A6:worker,H370660
+370660:lA13:inet_gethost_native|N
+370650:t3:A13:inet_gethost_native,AA:start_link,N
+370644:t2:A5:local,AF:kernel_safe_sup
+37063C:lAA:gen_server|H3706AC
+3706AC:lP<0.9.0>|H3706BC
+3706BC:lP<0.9.0>|H3706C4
+3706C4:lH3706CC|H3706D8
+3706CC:t2:A5:local,AF:kernel_safe_sup
+3706D8:lAA:supervisor|H3706E0
+3706E0:lH3706E8|H3706F8
+3706E8:t3:H370644,A6:kernel,A4:safe
+3706F8:lN|N
+3705E0:t2:AD:$initial_call,H370668
+370668:t3:A3:gen,A7:init_it,H37063C
+3705EC:t2:AA:$ancestors,H370678
+370678:lAA:kernel_sup|H3706B4
+3706B4:lP<0.8.0>|N
+=proc_dictionary:<0.25.0>
+H36E304
+H36E31C
+=proc_stack:<0.25.0>
+36e610:SReturn addr 0x2E06FC (shell:server_loop/6 + 140)
+y0:N
+y1:N
+y2:P<0.27.0>
+y3:P<0.49.0>
+36e624:SReturn addr 0x156F90 (<terminate process normally>)
+y0:N
+y1:N
+y2:I2
+y3:I1
+y4:N
+y5:N
+y6:N
+y7:I20
+y8:I20
+=proc_heap:<0.25.0>
+36E304:t2:H36E2F8,H36E2A8
+36E2A8:lH36E2B0|N
+36E2B0:t4:A4:call,I1,H36E2C4,N
+36E2C4:t4:A6:remote,I1,H36E2D8,H36E2E8
+36E2E8:t3:A4:atom,I1,A5:start
+36E2D8:t3:A4:atom,I1,A10:crashdump_viewer
+36E2F8:t2:A7:command,I1
+36E31C:t2:H36E310,A2:ok
+36E310:t2:A6:result,I1
+=proc_stack:<0.27.0>
+3bda3c:SReturn addr 0x156F90 (<terminate process normally>)
+y0:N
+y1:N
+y2:P<0.25.0>
+=proc_heap:<0.27.0>
+=proc_dictionary:<0.31.0>
+H36DA24
+H36DA08
+=proc_stack:<0.31.0>
+36dcd4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A11:supervisor_bridge
+y3:H36DB68
+y4:A17:inet_gethost_native_sup
+y5:P<0.24.0>
+36dcf0:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H36D9D0
+=proc_heap:<0.31.0>
+36DB68:t5:A5:state,A13:inet_gethost_native,P<0.32.0>,P<0.32.0>,H36D994
+36D994:t2:A5:local,A17:inet_gethost_native_sup
+36D9D0:lAA:gen_server|H36D9C8
+36D9C8:lP<0.24.0>|H36D9C0
+36D9C0:lP<0.24.0>|H36D970
+36D970:lH36D980|H36D9B8
+36D980:t2:A5:local,A17:inet_gethost_native_sup
+36D9B8:lA11:supervisor_bridge|H36D978
+36D978:lH36D9A8|H36D9B0
+36D9A8:lA13:inet_gethost_native|H36D9A0
+36D9A0:lN|H36D98C
+36D98C:lH36D994|N
+36D9B0:lN|N
+36DA24:t2:AD:$initial_call,H36DA14
+36DA14:t3:A3:gen,A7:init_it,H36D9D0
+36DA08:t2:AA:$ancestors,H36DA00
+36DA00:lAF:kernel_safe_sup|H36D9E0
+36D9E0:lAA:kernel_sup|H36D9D8
+36D9D8:lP<0.8.0>|N
+=proc_dictionary:<0.32.0>
+H36CFD4
+H36D0BC
+=proc_stack:<0.32.0>
+36d12c:SReturn addr 0x156F90 (<terminate process normally>)
+y0:H36CF18
+=proc_heap:<0.32.0>
+36CF18:t8:A5:state,p<0.105>,I8000,I11,I12,P<0.31.0>,I4,H36CEF0
+36CEF0:t9:AA:statistics,I0,I0,I0,I0,I0,I0,I0,I0
+36CFD4:t2:A3:rid,I1
+36D0BC:t2:AC:num_requests,I0
+=proc_dictionary:<0.33.0>
+H3905C4
+H3905D0
+=proc_stack:<0.33.0>
+3ceee4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A7:webtool
+y3:H3C8570
+y4:A8:web_tool
+y5:P<0.33.0>
+3cef00:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H3905FC
+=proc_heap:<0.33.0>
+3C8570:t6:A5:state,H3905EC,I13,P<0.41.0>,H3905F4,H3C85D4
+3C85D4:lA10:crashdump_viewer|N
+3905F4:lH390650|H39065C
+390650:t2:A4:port,I8888
+39065C:lH3906C8|H3906D4
+3906C8:t2:AC:bind_address,H390760
+390760:t4:I127,I0,I0,I1
+3906D4:lH390774|H390780
+390774:t2:AB:server_name,H39082C
+39082C:lI108|H390908
+390908:lI111|H3909DC
+3909DC:lI99|H390AC0
+390AC0:lI97|H390B98
+390B98:lI108|H390C78
+390C78:lI104|H390D58
+390D58:lI111|H390E2C
+390E2C:lI115|H390F10
+390F10:lI116|N
+390780:lH390834|H390840
+390834:t2:AE:max_header_siz,I1024
+390840:lH390910|H39091C
+390910:t2:A11:max_header_action,A8:reply414
+39091C:lH3909E4|H3909F0
+3909E4:t2:A8:com_type,A7:ip_comm
+3909F0:lH390AC8|H390AD4
+390AC8:t2:A7:modules,H390BA0
+390BA0:lA9:mod_alias|H390C80
+390C80:lA8:mod_auth|H390D60
+390D60:lA7:mod_esi|H390E34
+390E34:lAB:mod_actions|H390F18
+390F18:lA7:mod_cgi|H390FF4
+390FF4:lAB:mod_include|H3910D8
+3910D8:lA7:mod_dir|H3911B4
+3911B4:lA7:mod_get|H3912A0
+3912A0:lA8:mod_head|H39139C
+39139C:lA7:mod_log|H3914A0
+3914A0:lAC:mod_disk_log|N
+390AD4:lH390BA8|H390BB4
+390BA8:t2:AF:directory_index,H390C88
+390C88:lH390D68|N
+390D68:lI105|H390E3C
+390E3C:lI110|H390F20
+390F20:lI100|H390FFC
+390FFC:lI101|H3910E0
+3910E0:lI120|H3911BC
+3911BC:lI46|H3912A8
+3912A8:lI104|H3913A4
+3913A4:lI116|H3914A8
+3914A8:lI109|H39159C
+39159C:lI108|N
+390BB4:lH390C90|N
+390C90:t2:AC:default_type,H390D70
+390D70:lI116|H390E44
+390E44:lI101|H390F28
+390F28:lI120|H391004
+391004:lI116|H3910E8
+3910E8:lI47|H3911C4
+3911C4:lI112|H3912B0
+3912B0:lI108|H3913AC
+3913AC:lI97|H3914B0
+3914B0:lI105|H3915A4
+3915A4:lI110|N
+3905EC:lI47|H390648
+390648:lI99|H3906C0
+3906C0:lI108|H390758
+390758:lI101|H390824
+390824:lI97|H390900
+390900:lI114|H3909D4
+3909D4:lI99|H390AB8
+390AB8:lI97|H390B90
+390B90:lI115|H390C70
+390C70:lI101|H390D50
+390D50:lI47|H390E24
+390E24:lI111|H390F08
+390F08:lI116|H390FEC
+390FEC:lI112|H3910D0
+3910D0:lI47|H3911AC
+3911AC:lI101|H391298
+391298:lI114|H391394
+391394:lI116|H391498
+391498:lI115|H391594
+391594:lI47|H391680
+391680:lI108|H39175C
+39175C:lI105|H391840
+391840:lI98|H391924
+391924:lI47|H3919F8
+3919F8:lI119|H391AC4
+391AC4:lI101|H391B90
+391B90:lI98|H391C54
+391C54:lI116|H391D18
+391D18:lI111|H391DD4
+391DD4:lI111|H391E90
+391E90:lI108|H391F5C
+391F5C:lI47|H392030
+392030:lI112|H3920EC
+3920EC:lI114|H3921A8
+3921A8:lI105|H392264
+392264:lI118|N
+3905FC:lAA:gen_server|H390664
+390664:lP<0.27.0>|H3906DC
+3906DC:lA4:self|H390788
+390788:lH390848|H390854
+390848:t2:A5:local,A8:web_tool
+390854:lA7:webtool|H390924
+390924:lH3909F8|H390A04
+3909F8:t2:H3905EC,H3905F4
+390A04:lN|N
+3905C4:t2:AD:$initial_call,H390614
+390614:t3:A3:gen,A7:init_it,H3905FC
+3905D0:t2:AA:$ancestors,H390624
+390624:lP<0.27.0>|N
+=proc_dictionary:<0.41.0>
+H36DF0C
+H36DF18
+=proc_stack:<0.41.0>
+36eda4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AA:supervisor
+y3:H36EA3C
+y4:A6:websup
+y5:P<0.33.0>
+36edc0:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H36DF24
+=proc_heap:<0.41.0>
+36EA3C:tA:A5:state,H36DF2C,AB:one_for_one,H36EA68,N,I100,I10,N,AB:webtool_sup,N
+36EA68:lH36EA70|N
+36EA70:t8:A5:child,P<0.48.0>,H36DF38,H36DF44,A9:permanent,I100,A6:worker,H36DF54
+36DF54:lA10:crashdump_viewer|N
+36DF44:t3:A10:crashdump_viewer,AA:start_link,N
+36DF38:t2:A5:local,A17:crashdump_viewer_server
+36DF2C:t2:A5:local,A6:websup
+36DF24:lAA:gen_server|H36DF84
+36DF84:lP<0.33.0>|H36DF94
+36DF94:lP<0.33.0>|H36DF9C
+36DF9C:lH36DFA4|H36DFB0
+36DFA4:t2:A5:local,A6:websup
+36DFB0:lAA:supervisor|H36DFB8
+36DFB8:lH36DFC0|H36DFD0
+36DFC0:t3:H36DF2C,AB:webtool_sup,N
+36DFD0:lN|N
+36DF0C:t2:AD:$initial_call,H36DF6C
+36DF6C:t3:A3:gen,A7:init_it,H36DF24
+36DF18:t2:AA:$ancestors,H36DF7C
+36DF7C:lA8:web_tool|H36DF8C
+36DF8C:lP<0.27.0>|N
+=proc_dictionary:<0.43.0>
+H39D940
+H39D94C
+=proc_stack:<0.43.0>
+3a42ac:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AA:supervisor
+y3:H3A3E34
+y4:A1A:httpd_sup__127_0_0_1__8888
+y5:P<0.33.0>
+3a42c8:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H39D9CC
+=proc_heap:<0.43.0>
+3A3E34:tA:A5:state,H39D960,AB:one_for_one,H3A3E20,N,I0,I1,N,A9:httpd_sup,H39DA88
+39DA88:lA9:undefined|H39DB18
+39DB18:lH39DB50|H39DB58
+39DB50:lH39DB88|H39DB94
+39DB88:t2:AB:server_root,H39DBD0
+39DBD0:lI47|H39DC0C
+39DC0C:lI99|H39DC50
+39DC50:lI108|H39DC84
+39DC84:lI101|H39DCC4
+39DCC4:lI97|H39DD28
+39DD28:lI114|H39DD90
+39DD90:lI99|H39DE00
+39DE00:lI97|H39DE78
+39DE78:lI115|H39DF00
+39DF00:lI101|H39DF90
+39DF90:lI47|H39E038
+39E038:lI111|H39E0E8
+39E0E8:lI116|H39E1AC
+39E1AC:lI112|H39E288
+39E288:lI47|H39E37C
+39E37C:lI101|H39E478
+39E478:lI114|H39E580
+39E580:lI116|H39E69C
+39E69C:lI115|H39E7B0
+39E7B0:lI47|H39E8C4
+39E8C4:lI108|H39E9D8
+39E9D8:lI105|H39EACC
+39EACC:lI98|H39EBC0
+39EBC0:lI47|H39ECB4
+39ECB4:lI119|H39EDA8
+39EDA8:lI101|H39EE7C
+39EE7C:lI98|H39EF50
+39EF50:lI116|H39F02C
+39F02C:lI111|H39F110
+39F110:lI111|H39F1E4
+39F1E4:lI108|H39F2B0
+39F2B0:lI47|H39F36C
+39F36C:lI112|H39F430
+39F430:lI114|H39F4FC
+39F4FC:lI105|H39F5C0
+39F5C0:lI118|H39F694
+39F694:lI47|H39F768
+39F768:lI114|H39F83C
+39F83C:lI111|H39F920
+39F920:lI111|H39F9FC
+39F9FC:lI116|N
+39DB94:lH39DBD8|H39DBE4
+39DBD8:t2:AD:document_root,H39DC14
+39DC14:lI47|H39DC58
+39DC58:lI99|H39DC8C
+39DC8C:lI108|H39DCCC
+39DCCC:lI101|H39DD30
+39DD30:lI97|H39DD98
+39DD98:lI114|H39DE08
+39DE08:lI99|H39DE80
+39DE80:lI97|H39DF08
+39DF08:lI115|H39DF98
+39DF98:lI101|H39E040
+39E040:lI47|H39E0F0
+39E0F0:lI111|H39E1B4
+39E1B4:lI116|H39E290
+39E290:lI112|H39E384
+39E384:lI47|H39E480
+39E480:lI101|H39E588
+39E588:lI114|H39E6A4
+39E6A4:lI116|H39E7B8
+39E7B8:lI115|H39E8CC
+39E8CC:lI47|H39E9E0
+39E9E0:lI108|H39EAD4
+39EAD4:lI105|H39EBC8
+39EBC8:lI98|H39ECBC
+39ECBC:lI47|H39EDB0
+39EDB0:lI119|H39EE84
+39EE84:lI101|H39EF58
+39EF58:lI98|H39F034
+39F034:lI116|H39F118
+39F118:lI111|H39F1EC
+39F1EC:lI111|H39F2B8
+39F2B8:lI108|H39F374
+39F374:lI47|H39F438
+39F438:lI112|H39F504
+39F504:lI114|H39F5C8
+39F5C8:lI105|H39F69C
+39F69C:lI118|H39F770
+39F770:lI47|H39F844
+39F844:lI114|H39F928
+39F928:lI111|H39FA04
+39FA04:lI111|H39FAD8
+39FAD8:lI116|H39FBB4
+39FBB4:lI47|H39FC80
+39FC80:lI100|H39FD44
+39FD44:lI111|H39FE10
+39FE10:lI99|N
+39DBE4:lH39DC1C|H39DC28
+39DC1C:t2:AA:mime_types,H39DC60
+39DC60:lH39DC94|H39DCA0
+39DC94:t2:H39DCD4,H39DCDC
+39DCDC:lI120|H39DD40
+39DD40:lI45|H39DDA8
+39DDA8:lI119|H39DE10
+39DE10:lI111|H39DE88
+39DE88:lI114|H39DF10
+39DF10:lI108|H39DFA0
+39DFA0:lI100|H39E048
+39E048:lI47|H39E0F8
+39E0F8:lI120|H39E1BC
+39E1BC:lI45|H39E298
+39E298:lI118|H39E38C
+39E38C:lI114|H39E488
+39E488:lI109|H39E590
+39E590:lI108|N
+39DCD4:lI119|H39DD38
+39DD38:lI114|H39DDA0
+39DDA0:lI108|N
+39DCA0:lH39DCE4|H39DCF0
+39DCE4:t2:H39DD48,H39DD50
+39DD50:lI120|H39DDB8
+39DDB8:lI45|H39DE20
+39DE20:lI119|H39DE98
+39DE98:lI111|H39DF18
+39DF18:lI114|H39DFA8
+39DFA8:lI108|H39E050
+39E050:lI100|H39E100
+39E100:lI47|H39E1C4
+39E1C4:lI120|H39E2A0
+39E2A0:lI45|H39E394
+39E394:lI118|H39E490
+39E490:lI114|H39E598
+39E598:lI109|H39E6AC
+39E6AC:lI108|N
+39DD48:lI118|H39DDB0
+39DDB0:lI114|H39DE18
+39DE18:lI109|H39DE90
+39DE90:lI108|N
+39DCF0:lH39DD58|H39DD64
+39DD58:t2:H39DDC0,H39DDC8
+39DDC8:lI120|H39DE30
+39DE30:lI45|H39DEA8
+39DEA8:lI99|H39DF20
+39DF20:lI111|H39DFB0
+39DFB0:lI110|H39E058
+39E058:lI102|H39E108
+39E108:lI101|H39E1CC
+39E1CC:lI114|H39E2A8
+39E2A8:lI101|H39E39C
+39E39C:lI110|H39E498
+39E498:lI99|H39E5A0
+39E5A0:lI101|H39E6B4
+39E6B4:lI47|H39E7C0
+39E7C0:lI120|H39E8D4
+39E8D4:lI45|H39E9E8
+39E9E8:lI99|H39EADC
+39EADC:lI111|H39EBD0
+39EBD0:lI111|H39ECC4
+39ECC4:lI108|H39EDB8
+39EDB8:lI116|H39EE8C
+39EE8C:lI97|H39EF60
+39EF60:lI108|H39F03C
+39F03C:lI107|N
+39DDC0:lI105|H39DE28
+39DE28:lI99|H39DEA0
+39DEA0:lI101|N
+39DD64:lH39DDD0|H39DDDC
+39DDD0:t2:H39DE38,H39DE40
+39DE40:lI118|H39DEB8
+39DEB8:lI105|H39DF30
+39DF30:lI100|H39DFC0
+39DFC0:lI101|H39E068
+39E068:lI111|H39E110
+39E110:lI47|H39E1D4
+39E1D4:lI120|H39E2B0
+39E2B0:lI45|H39E3A4
+39E3A4:lI115|H39E4A0
+39E4A0:lI103|H39E5A8
+39E5A8:lI105|H39E6BC
+39E6BC:lI45|H39E7C8
+39E7C8:lI109|H39E8DC
+39E8DC:lI111|H39E9F0
+39E9F0:lI118|H39EAE4
+39EAE4:lI105|H39EBD8
+39EBD8:lI101|N
+39DE38:lI109|H39DEB0
+39DEB0:lI111|H39DF28
+39DF28:lI118|H39DFB8
+39DFB8:lI105|H39E060
+39E060:lI101|N
+39DDDC:lH39DE48|H39DE54
+39DE48:t2:H39DEC0,H39DEC8
+39DEC8:lI118|H39DF40
+39DF40:lI105|H39DFD0
+39DFD0:lI100|H39E070
+39E070:lI101|H39E118
+39E118:lI111|H39E1DC
+39E1DC:lI47|H39E2B8
+39E2B8:lI120|H39E3AC
+39E3AC:lI45|H39E4A8
+39E4A8:lI109|H39E5B0
+39E5B0:lI115|H39E6C4
+39E6C4:lI118|H39E7D0
+39E7D0:lI105|H39E8E4
+39E8E4:lI100|H39E9F8
+39E9F8:lI101|H39EAEC
+39EAEC:lI111|N
+39DEC0:lI97|H39DF38
+39DF38:lI118|H39DFC8
+39DFC8:lI105|N
+39DE54:lH39DED0|H39DEDC
+39DED0:t2:H39DF48,H39DF50
+39DF50:lI118|H39DFE0
+39DFE0:lI105|H39E078
+39E078:lI100|H39E120
+39E120:lI101|H39E1E4
+39E1E4:lI111|H39E2C0
+39E2C0:lI47|H39E3B4
+39E3B4:lI113|H39E4B0
+39E4B0:lI117|H39E5B8
+39E5B8:lI105|H39E6CC
+39E6CC:lI99|H39E7D8
+39E7D8:lI107|H39E8EC
+39E8EC:lI116|H39EA00
+39EA00:lI105|H39EAF4
+39EAF4:lI109|H39EBE0
+39EBE0:lI101|N
+39DF48:lI113|H39DFD8
+39DFD8:lI116|N
+39DEDC:lH39DF58|H39DF64
+39DF58:t2:H39DFE8,H39DFF0
+39DFF0:lI118|H39E088
+39E088:lI105|H39E130
+39E130:lI100|H39E1EC
+39E1EC:lI101|H39E2C8
+39E2C8:lI111|H39E3BC
+39E3BC:lI47|H39E4B8
+39E4B8:lI113|H39E5C0
+39E5C0:lI117|H39E6D4
+39E6D4:lI105|H39E7E0
+39E7E0:lI99|H39E8F4
+39E8F4:lI107|H39EA08
+39EA08:lI116|H39EAFC
+39EAFC:lI105|H39EBE8
+39EBE8:lI109|H39ECCC
+39ECCC:lI101|N
+39DFE8:lI109|H39E080
+39E080:lI111|H39E128
+39E128:lI118|N
+39DF64:lH39DFF8|H39E004
+39DFF8:t2:H39E090,H39E098
+39E098:lI118|H39E140
+39E140:lI105|H39E1FC
+39E1FC:lI100|H39E2D8
+39E2D8:lI101|H39E3C4
+39E3C4:lI111|H39E4C0
+39E4C0:lI47|H39E5C8
+39E5C8:lI109|H39E6DC
+39E6DC:lI112|H39E7E8
+39E7E8:lI101|H39E8FC
+39E8FC:lI103|N
+39E090:lI109|H39E138
+39E138:lI112|H39E1F4
+39E1F4:lI101|H39E2D0
+39E2D0:lI103|N
+39E004:lH39E0A0|H39E0AC
+39E0A0:t2:H39E148,H39E150
+39E150:lI118|H39E20C
+39E20C:lI105|H39E2E8
+39E2E8:lI100|H39E3CC
+39E3CC:lI101|H39E4C8
+39E4C8:lI111|H39E5D0
+39E5D0:lI47|H39E6E4
+39E6E4:lI109|H39E7F0
+39E7F0:lI112|H39E904
+39E904:lI101|H39EA10
+39EA10:lI103|N
+39E148:lI109|H39E204
+39E204:lI112|H39E2E0
+39E2E0:lI103|N
+39E0AC:lH39E158|H39E164
+39E158:t2:H39E214,H39E21C
+39E21C:lI118|H39E2F8
+39E2F8:lI105|H39E3DC
+39E3DC:lI100|H39E4D0
+39E4D0:lI101|H39E5D8
+39E5D8:lI111|H39E6EC
+39E6EC:lI47|H39E7F8
+39E7F8:lI109|H39E90C
+39E90C:lI112|H39EA18
+39EA18:lI101|H39EB04
+39EB04:lI103|N
+39E214:lI109|H39E2F0
+39E2F0:lI112|H39E3D4
+39E3D4:lI101|N
+39E164:lH39E224|H39E230
+39E224:t2:H39E300,H39E308
+39E308:lI116|H39E3EC
+39E3EC:lI101|H39E4E0
+39E4E0:lI120|H39E5E8
+39E5E8:lI116|H39E6F4
+39E6F4:lI47|H39E800
+39E800:lI120|H39E914
+39E914:lI45|H39EA20
+39EA20:lI115|H39EB0C
+39EB0C:lI103|H39EBF0
+39EBF0:lI109|H39ECD4
+39ECD4:lI108|N
+39E300:lI115|H39E3E4
+39E3E4:lI103|H39E4D8
+39E4D8:lI109|H39E5E0
+39E5E0:lI108|N
+39E230:lH39E310|H39E31C
+39E310:t2:H39E3F4,H39E3FC
+39E3FC:lI116|H39E4F0
+39E4F0:lI101|H39E5F8
+39E5F8:lI120|H39E6FC
+39E6FC:lI116|H39E808
+39E808:lI47|H39E91C
+39E91C:lI120|H39EA28
+39EA28:lI45|H39EB14
+39EB14:lI115|H39EBF8
+39EBF8:lI103|H39ECDC
+39ECDC:lI109|H39EDC0
+39EDC0:lI108|N
+39E3F4:lI115|H39E4E8
+39E4E8:lI103|H39E5F0
+39E5F0:lI109|N
+39E31C:lH39E404|H39E410
+39E404:t2:H39E4F8,H39E500
+39E500:lI116|H39E608
+39E608:lI101|H39E70C
+39E70C:lI120|H39E810
+39E810:lI116|H39E924
+39E924:lI47|H39EA30
+39EA30:lI120|H39EB1C
+39EB1C:lI45|H39EC00
+39EC00:lI115|H39ECE4
+39ECE4:lI101|H39EDC8
+39EDC8:lI116|H39EE94
+39EE94:lI101|H39EF68
+39EF68:lI120|H39F044
+39F044:lI116|N
+39E4F8:lI101|H39E600
+39E600:lI116|H39E704
+39E704:lI120|N
+39E410:lH39E508|H39E514
+39E508:t2:H39E610,H39E618
+39E618:lI116|H39E71C
+39E71C:lI101|H39E820
+39E820:lI120|H39E92C
+39E92C:lI116|H39EA38
+39EA38:lI47|H39EB24
+39EB24:lI116|H39EC08
+39EC08:lI97|H39ECEC
+39ECEC:lI98|H39EDD0
+39EDD0:lI45|H39EE9C
+39EE9C:lI115|H39EF70
+39EF70:lI101|H39F04C
+39F04C:lI112|H39F120
+39F120:lI97|H39F1F4
+39F1F4:lI114|H39F2C0
+39F2C0:lI97|H39F37C
+39F37C:lI116|H39F440
+39F440:lI101|H39F50C
+39F50C:lI100|H39F5D0
+39F5D0:lI45|H39F6A4
+39F6A4:lI118|H39F778
+39F778:lI97|H39F84C
+39F84C:lI108|H39F930
+39F930:lI117|H39FA0C
+39FA0C:lI101|H39FAE0
+39FAE0:lI115|N
+39E610:lI116|H39E714
+39E714:lI115|H39E818
+39E818:lI118|N
+39E514:lH39E620|H39E62C
+39E620:t2:H39E724,H39E72C
+39E72C:lI116|H39E830
+39E830:lI101|H39E93C
+39E93C:lI120|H39EA40
+39EA40:lI116|H39EB2C
+39EB2C:lI47|H39EC10
+39EC10:lI114|H39ECF4
+39ECF4:lI105|H39EDD8
+39EDD8:lI99|H39EEA4
+39EEA4:lI104|H39EF78
+39EF78:lI116|H39F054
+39F054:lI101|H39F128
+39F128:lI120|H39F1FC
+39F1FC:lI116|N
+39E724:lI114|H39E828
+39E828:lI116|H39E934
+39E934:lI120|N
+39E62C:lH39E734|H39E740
+39E734:t2:H39E838,H39E840
+39E840:lI116|H39E94C
+39E94C:lI101|H39EA50
+39EA50:lI120|H39EB34
+39EB34:lI116|H39EC18
+39EC18:lI47|H39ECFC
+39ECFC:lI112|H39EDE0
+39EDE0:lI108|H39EEAC
+39EEAC:lI97|H39EF80
+39EF80:lI105|H39F05C
+39F05C:lI110|N
+39E838:lI116|H39E944
+39E944:lI120|H39EA48
+39EA48:lI116|N
+39E740:lH39E848|H39E854
+39E848:t2:H39E954,H39E95C
+39E95C:lI116|H39EA60
+39EA60:lI101|H39EB44
+39EB44:lI120|H39EC28
+39EC28:lI116|H39ED0C
+39ED0C:lI47|H39EDE8
+39EDE8:lI120|H39EEB4
+39EEB4:lI45|H39EF88
+39EF88:lI115|H39F064
+39F064:lI101|H39F130
+39F130:lI114|H39F204
+39F204:lI118|H39F2C8
+39F2C8:lI101|H39F384
+39F384:lI114|H39F448
+39F448:lI45|H39F514
+39F514:lI112|H39F5D8
+39F5D8:lI97|H39F6AC
+39F6AC:lI114|H39F780
+39F780:lI115|H39F854
+39F854:lI101|H39F938
+39F938:lI100|H39FA14
+39FA14:lI45|H39FAE8
+39FAE8:lI104|H39FBBC
+39FBBC:lI116|H39FC88
+39FC88:lI109|H39FD4C
+39FD4C:lI108|N
+39E954:lI115|H39EA58
+39EA58:lI104|H39EB3C
+39EB3C:lI116|H39EC20
+39EC20:lI109|H39ED04
+39ED04:lI108|N
+39E854:lH39E964|H39E970
+39E964:t2:H39EA68,H39EA70
+39EA70:lI116|H39EB54
+39EB54:lI101|H39EC38
+39EC38:lI120|H39ED1C
+39ED1C:lI116|H39EDF0
+39EDF0:lI47|H39EEBC
+39EEBC:lI104|H39EF90
+39EF90:lI116|H39F06C
+39F06C:lI109|H39F138
+39F138:lI108|N
+39EA68:lI104|H39EB4C
+39EB4C:lI116|H39EC30
+39EC30:lI109|H39ED14
+39ED14:lI108|N
+39E970:lH39EA78|H39EA84
+39EA78:t2:H39EB5C,H39EB64
+39EB64:lI116|H39EC48
+39EC48:lI101|H39ED2C
+39ED2C:lI120|H39EDF8
+39EDF8:lI116|H39EEC4
+39EEC4:lI47|H39EF98
+39EF98:lI104|H39F074
+39F074:lI116|H39F140
+39F140:lI109|H39F20C
+39F20C:lI108|N
+39EB5C:lI104|H39EC40
+39EC40:lI116|H39ED24
+39ED24:lI109|N
+39EA84:lH39EB6C|H39EB78
+39EB6C:t2:H39EC50,H39EC58
+39EC58:lI105|H39ED3C
+39ED3C:lI109|H39EE08
+39EE08:lI97|H39EECC
+39EECC:lI103|H39EFA0
+39EFA0:lI101|H39F07C
+39F07C:lI47|H39F148
+39F148:lI120|H39F214
+39F214:lI45|H39F2D0
+39F2D0:lI120|H39F38C
+39F38C:lI119|H39F450
+39F450:lI105|H39F51C
+39F51C:lI110|H39F5E0
+39F5E0:lI100|H39F6B4
+39F6B4:lI111|H39F788
+39F788:lI119|H39F85C
+39F85C:lI100|H39F940
+39F940:lI117|H39FA1C
+39FA1C:lI109|H39FAF0
+39FAF0:lI112|N
+39EC50:lI120|H39ED34
+39ED34:lI119|H39EE00
+39EE00:lI100|N
+39EB78:lH39EC60|H39EC6C
+39EC60:t2:H39ED44,H39ED4C
+39ED4C:lI105|H39EE18
+39EE18:lI109|H39EEDC
+39EEDC:lI97|H39EFA8
+39EFA8:lI103|H39F084
+39F084:lI101|H39F150
+39F150:lI47|H39F21C
+39F21C:lI120|H39F2D8
+39F2D8:lI45|H39F394
+39F394:lI120|H39F458
+39F458:lI112|H39F524
+39F524:lI105|H39F5E8
+39F5E8:lI120|H39F6BC
+39F6BC:lI109|H39F790
+39F790:lI97|H39F864
+39F864:lI112|N
+39ED44:lI120|H39EE10
+39EE10:lI112|H39EED4
+39EED4:lI109|N
+39EC6C:lH39ED54|H39ED60
+39ED54:t2:H39EE20,H39EE28
+39EE28:lI105|H39EEEC
+39EEEC:lI109|H39EFB8
+39EFB8:lI97|H39F08C
+39F08C:lI103|H39F158
+39F158:lI101|H39F224
+39F224:lI47|H39F2E0
+39F2E0:lI120|H39F39C
+39F39C:lI45|H39F460
+39F460:lI120|H39F52C
+39F52C:lI98|H39F5F0
+39F5F0:lI105|H39F6C4
+39F6C4:lI116|H39F798
+39F798:lI109|H39F86C
+39F86C:lI97|H39F948
+39F948:lI112|N
+39EE20:lI120|H39EEE4
+39EEE4:lI98|H39EFB0
+39EFB0:lI109|N
+39ED60:lH39EE30|H39EE3C
+39EE30:t2:H39EEF4,H39EEFC
+39EEFC:lI105|H39EFC8
+39EFC8:lI109|H39F09C
+39F09C:lI97|H39F160
+39F160:lI103|H39F22C
+39F22C:lI101|H39F2E8
+39F2E8:lI47|H39F3A4
+39F3A4:lI120|H39F468
+39F468:lI45|H39F534
+39F534:lI114|H39F5F8
+39F5F8:lI103|H39F6CC
+39F6CC:lI98|N
+39EEF4:lI114|H39EFC0
+39EFC0:lI103|H39F094
+39F094:lI98|N
+39EE3C:lH39EF04|H39EF10
+39EF04:t2:H39EFD0,H39EFD8
+39EFD8:lI105|H39F0AC
+39F0AC:lI109|H39F170
+39F170:lI97|H39F234
+39F234:lI103|H39F2F0
+39F2F0:lI101|H39F3AC
+39F3AC:lI47|H39F470
+39F470:lI120|H39F53C
+39F53C:lI45|H39F600
+39F600:lI112|H39F6D4
+39F6D4:lI111|H39F7A0
+39F7A0:lI114|H39F874
+39F874:lI116|H39F950
+39F950:lI97|H39FA24
+39FA24:lI98|H39FAF8
+39FAF8:lI108|H39FBC4
+39FBC4:lI101|H39FC90
+39FC90:lI45|H39FD54
+39FD54:lI112|H39FE18
+39FE18:lI105|H39FECC
+39FECC:lI120|H39FF88
+39FF88:lI109|H3A003C
+3A003C:lI97|H3A00E8
+3A00E8:lI112|N
+39EFD0:lI112|H39F0A4
+39F0A4:lI112|H39F168
+39F168:lI109|N
+39EF10:lH39EFE0|H39EFEC
+39EFE0:t2:H39F0B4,H39F0BC
+39F0BC:lI105|H39F180
+39F180:lI109|H39F244
+39F244:lI97|H39F2F8
+39F2F8:lI103|H39F3B4
+39F3B4:lI101|H39F478
+39F478:lI47|H39F544
+39F544:lI120|H39F608
+39F608:lI45|H39F6DC
+39F6DC:lI112|H39F7A8
+39F7A8:lI111|H39F87C
+39F87C:lI114|H39F958
+39F958:lI116|H39FA2C
+39FA2C:lI97|H39FB00
+39FB00:lI98|H39FBCC
+39FBCC:lI108|H39FC98
+39FC98:lI101|H39FD5C
+39FD5C:lI45|H39FE20
+39FE20:lI103|H39FED4
+39FED4:lI114|H39FF90
+39FF90:lI97|H3A0044
+3A0044:lI121|H3A00F0
+3A00F0:lI109|H3A0194
+3A0194:lI97|H3A0248
+3A0248:lI112|N
+39F0B4:lI112|H39F178
+39F178:lI103|H39F23C
+39F23C:lI109|N
+39EFEC:lH39F0C4|H39F0D0
+39F0C4:t2:H39F188,H39F190
+39F190:lI105|H39F254
+39F254:lI109|H39F308
+39F308:lI97|H39F3BC
+39F3BC:lI103|H39F480
+39F480:lI101|H39F54C
+39F54C:lI47|H39F610
+39F610:lI120|H39F6E4
+39F6E4:lI45|H39F7B0
+39F7B0:lI112|H39F884
+39F884:lI111|H39F960
+39F960:lI114|H39FA34
+39FA34:lI116|H39FB08
+39FB08:lI97|H39FBD4
+39FBD4:lI98|H39FCA0
+39FCA0:lI108|H39FD64
+39FD64:lI101|H39FE28
+39FE28:lI45|H39FEDC
+39FEDC:lI98|H39FF98
+39FF98:lI105|H3A004C
+3A004C:lI116|H3A00F8
+3A00F8:lI109|H3A019C
+3A019C:lI97|H3A0250
+3A0250:lI112|N
+39F188:lI112|H39F24C
+39F24C:lI98|H39F300
+39F300:lI109|N
+39F0D0:lH39F198|H39F1A4
+39F198:t2:H39F25C,H39F264
+39F264:lI105|H39F318
+39F318:lI109|H39F3CC
+39F3CC:lI97|H39F488
+39F488:lI103|H39F554
+39F554:lI101|H39F618
+39F618:lI47|H39F6EC
+39F6EC:lI120|H39F7B8
+39F7B8:lI45|H39F88C
+39F88C:lI112|H39F968
+39F968:lI111|H39FA3C
+39FA3C:lI114|H39FB10
+39FB10:lI116|H39FBDC
+39FBDC:lI97|H39FCA8
+39FCA8:lI98|H39FD6C
+39FD6C:lI108|H39FE30
+39FE30:lI101|H39FEE4
+39FEE4:lI45|H39FFA0
+39FFA0:lI97|H3A0054
+3A0054:lI110|H3A0100
+3A0100:lI121|H3A01A4
+3A01A4:lI109|H3A0258
+3A0258:lI97|H3A0304
+3A0304:lI112|N
+39F25C:lI112|H39F310
+39F310:lI110|H39F3C4
+39F3C4:lI109|N
+39F1A4:lH39F26C|H39F278
+39F26C:t2:H39F320,H39F328
+39F328:lI105|H39F3DC
+39F3DC:lI109|H39F498
+39F498:lI97|H39F55C
+39F55C:lI103|H39F620
+39F620:lI101|H39F6F4
+39F6F4:lI47|H39F7C0
+39F7C0:lI120|H39F894
+39F894:lI45|H39F970
+39F970:lI99|H39FA44
+39FA44:lI109|H39FB18
+39FB18:lI117|H39FBE4
+39FBE4:lI45|H39FCB0
+39FCB0:lI114|H39FD74
+39FD74:lI97|H39FE38
+39FE38:lI115|H39FEEC
+39FEEC:lI116|H39FFA8
+39FFA8:lI101|H3A005C
+3A005C:lI114|N
+39F320:lI114|H39F3D4
+39F3D4:lI97|H39F490
+39F490:lI115|N
+39F278:lH39F330|H39F33C
+39F330:t2:H39F3E4,H39F3EC
+39F3EC:lI105|H39F4A8
+39F4A8:lI109|H39F56C
+39F56C:lI97|H39F630
+39F630:lI103|H39F6FC
+39F6FC:lI101|H39F7C8
+39F7C8:lI47|H39F89C
+39F89C:lI116|H39F978
+39F978:lI105|H39FA4C
+39FA4C:lI102|H39FB20
+39FB20:lI102|N
+39F3E4:lI116|H39F4A0
+39F4A0:lI105|H39F564
+39F564:lI102|H39F628
+39F628:lI102|N
+39F33C:lH39F3F4|H39F400
+39F3F4:t2:H39F4B0,H39F4B8
+39F4B8:lI105|H39F57C
+39F57C:lI109|H39F640
+39F640:lI97|H39F704
+39F704:lI103|H39F7D0
+39F7D0:lI101|H39F8A4
+39F8A4:lI47|H39F980
+39F980:lI116|H39FA54
+39FA54:lI105|H39FB28
+39FB28:lI102|H39FBEC
+39FBEC:lI102|N
+39F4B0:lI116|H39F574
+39F574:lI105|H39F638
+39F638:lI102|N
+39F400:lH39F4C0|H39F4CC
+39F4C0:t2:H39F584,H39F58C
+39F58C:lI105|H39F650
+39F650:lI109|H39F714
+39F714:lI97|H39F7D8
+39F7D8:lI103|H39F8AC
+39F8AC:lI101|H39F988
+39F988:lI47|H39FA5C
+39FA5C:lI112|H39FB30
+39FB30:lI110|H39FBF4
+39FBF4:lI103|N
+39F584:lI112|H39F648
+39F648:lI110|H39F70C
+39F70C:lI103|N
+39F4CC:lH39F594|H39F5A0
+39F594:t2:H39F658,H39F660
+39F660:lI105|H39F724
+39F724:lI109|H39F7E8
+39F7E8:lI97|H39F8BC
+39F8BC:lI103|H39F990
+39F990:lI101|H39FA64
+39FA64:lI47|H39FB38
+39FB38:lI106|H39FBFC
+39FBFC:lI112|H39FCB8
+39FCB8:lI101|H39FD7C
+39FD7C:lI103|N
+39F658:lI106|H39F71C
+39F71C:lI112|H39F7E0
+39F7E0:lI101|H39F8B4
+39F8B4:lI103|N
+39F5A0:lH39F668|H39F674
+39F668:t2:H39F72C,H39F734
+39F734:lI105|H39F7F8
+39F7F8:lI109|H39F8CC
+39F8CC:lI97|H39F998
+39F998:lI103|H39FA6C
+39FA6C:lI101|H39FB40
+39FB40:lI47|H39FC04
+39FC04:lI106|H39FCC0
+39FCC0:lI112|H39FD84
+39FD84:lI101|H39FE40
+39FE40:lI103|N
+39F72C:lI106|H39F7F0
+39F7F0:lI112|H39F8C4
+39F8C4:lI103|N
+39F674:lH39F73C|H39F748
+39F73C:t2:H39F800,H39F808
+39F808:lI105|H39F8DC
+39F8DC:lI109|H39F9A8
+39F9A8:lI97|H39FA74
+39FA74:lI103|H39FB48
+39FB48:lI101|H39FC0C
+39FC0C:lI47|H39FCC8
+39FCC8:lI106|H39FD8C
+39FD8C:lI112|H39FE48
+39FE48:lI101|H39FEF4
+39FEF4:lI103|N
+39F800:lI106|H39F8D4
+39F8D4:lI112|H39F9A0
+39F9A0:lI101|N
+39F748:lH39F810|H39F81C
+39F810:t2:H39F8E4,H39F8EC
+39F8EC:lI105|H39F9B8
+39F9B8:lI109|H39FA84
+39FA84:lI97|H39FB50
+39FB50:lI103|H39FC14
+39FC14:lI101|H39FCD0
+39FCD0:lI47|H39FD94
+39FD94:lI105|H39FE50
+39FE50:lI101|H39FEFC
+39FEFC:lI102|N
+39F8E4:lI105|H39F9B0
+39F9B0:lI101|H39FA7C
+39FA7C:lI102|N
+39F81C:lH39F8F4|H39F900
+39F8F4:t2:H39F9C0,H39F9C8
+39F9C8:lI105|H39FA94
+39FA94:lI109|H39FB60
+39FB60:lI97|H39FC1C
+39FC1C:lI103|H39FCD8
+39FCD8:lI101|H39FD9C
+39FD9C:lI47|H39FE58
+39FE58:lI103|H39FF04
+39FF04:lI105|H39FFB0
+39FFB0:lI102|N
+39F9C0:lI103|H39FA8C
+39FA8C:lI105|H39FB58
+39FB58:lI102|N
+39F900:lH39F9D0|H39F9DC
+39F9D0:t2:H39FA9C,H39FAA4
+39FAA4:lI99|H39FB70
+39FB70:lI104|H39FC2C
+39FC2C:lI101|H39FCE0
+39FCE0:lI109|H39FDA4
+39FDA4:lI105|H39FE60
+39FE60:lI99|H39FF0C
+39FF0C:lI97|H39FFB8
+39FFB8:lI108|H3A0064
+3A0064:lI47|H3A0108
+3A0108:lI120|H3A01AC
+3A01AC:lI45|H3A0260
+3A0260:lI112|H3A030C
+3A030C:lI100|H3A03B8
+3A03B8:lI98|N
+39FA9C:lI112|H39FB68
+39FB68:lI100|H39FC24
+39FC24:lI98|N
+39F9DC:lH39FAAC|H39FAB8
+39FAAC:t2:H39FB78,H39FB80
+39FB80:lI99|H39FC3C
+39FC3C:lI104|H39FCF0
+39FCF0:lI101|H39FDAC
+39FDAC:lI109|H39FE68
+39FE68:lI105|H39FF14
+39FF14:lI99|H39FFC0
+39FFC0:lI97|H3A006C
+3A006C:lI108|H3A0110
+3A0110:lI47|H3A01B4
+3A01B4:lI120|H3A0268
+3A0268:lI45|H3A0314
+3A0314:lI112|H3A03C0
+3A03C0:lI100|H3A0454
+3A0454:lI98|N
+39FB78:lI120|H39FC34
+39FC34:lI121|H39FCE8
+39FCE8:lI122|N
+39FAB8:lH39FB88|H39FB94
+39FB88:t2:H39FC44,H39FC4C
+39FC4C:lI97|H39FD00
+39FD00:lI117|H39FDBC
+39FDBC:lI100|H39FE70
+39FE70:lI105|H39FF1C
+39FF1C:lI111|H39FFC8
+39FFC8:lI47|H3A0074
+3A0074:lI120|H3A0118
+3A0118:lI45|H3A01BC
+3A01BC:lI119|H3A0270
+3A0270:lI97|H3A031C
+3A031C:lI118|N
+39FC44:lI119|H39FCF8
+39FCF8:lI97|H39FDB4
+39FDB4:lI118|N
+39FB94:lH39FC54|H39FC60
+39FC54:t2:H39FD08,H39FD10
+39FD10:lI97|H39FDCC
+39FDCC:lI117|H39FE78
+39FE78:lI100|H39FF24
+39FF24:lI105|H39FFD0
+39FFD0:lI111|H3A007C
+3A007C:lI47|H3A0120
+3A0120:lI120|H3A01C4
+3A01C4:lI45|H3A0278
+3A0278:lI114|H3A0324
+3A0324:lI101|H3A03C8
+3A03C8:lI97|H3A045C
+3A045C:lI108|H3A04F8
+3A04F8:lI97|H3A059C
+3A059C:lI117|H3A0648
+3A0648:lI100|H3A06F4
+3A06F4:lI105|H3A07A0
+3A07A0:lI111|N
+39FD08:lI114|H39FDC4
+39FDC4:lI97|N
+39FC60:lH39FD18|H39FD24
+39FD18:t2:H39FDD4,H39FDDC
+39FDDC:lI97|H39FE88
+39FE88:lI117|H39FF34
+39FF34:lI100|H39FFD8
+39FFD8:lI105|H3A0084
+3A0084:lI111|H3A0128
+3A0128:lI47|H3A01CC
+3A01CC:lI120|H3A0280
+3A0280:lI45|H3A032C
+3A032C:lI112|H3A03D0
+3A03D0:lI110|H3A0464
+3A0464:lI45|H3A0500
+3A0500:lI114|H3A05A4
+3A05A4:lI101|H3A0650
+3A0650:lI97|H3A06FC
+3A06FC:lI108|H3A07A8
+3A07A8:lI97|H3A0844
+3A0844:lI117|H3A08D0
+3A08D0:lI100|H3A0964
+3A0964:lI105|H3A09F8
+3A09F8:lI111|H3A0A94
+3A0A94:lI45|H3A0B40
+3A0B40:lI112|H3A0BEC
+3A0BEC:lI108|H3A0CA8
+3A0CA8:lI117|H3A0D64
+3A0D64:lI103|H3A0E18
+3A0E18:lI105|H3A0ECC
+3A0ECC:lI110|N
+39FDD4:lI114|H39FE80
+39FE80:lI112|H39FF2C
+39FF2C:lI109|N
+39FD24:lH39FDE4|H39FDF0
+39FDE4:t2:H39FE90,H39FE98
+39FE98:lI97|H39FF44
+39FF44:lI117|H39FFE8
+39FFE8:lI100|H3A008C
+3A008C:lI105|H3A0130
+3A0130:lI111|H3A01D4
+3A01D4:lI47|H3A0288
+3A0288:lI120|H3A0334
+3A0334:lI45|H3A03D8
+3A03D8:lI112|H3A046C
+3A046C:lI110|H3A0508
+3A0508:lI45|H3A05AC
+3A05AC:lI114|H3A0658
+3A0658:lI101|H3A0704
+3A0704:lI97|H3A07B0
+3A07B0:lI108|H3A084C
+3A084C:lI97|H3A08D8
+3A08D8:lI117|H3A096C
+3A096C:lI100|H3A0A00
+3A0A00:lI105|H3A0A9C
+3A0A9C:lI111|N
+39FE90:lI114|H39FF3C
+39FF3C:lI97|H39FFE0
+39FFE0:lI109|N
+39FDF0:lH39FEA0|H39FEAC
+39FEA0:t2:H39FF4C,H39FF54
+39FF54:lI97|H39FFF8
+39FFF8:lI117|H3A009C
+3A009C:lI100|H3A0138
+3A0138:lI105|H3A01DC
+3A01DC:lI111|H3A0290
+3A0290:lI47|H3A033C
+3A033C:lI120|H3A03E0
+3A03E0:lI45|H3A0474
+3A0474:lI97|H3A0510
+3A0510:lI105|H3A05B4
+3A05B4:lI102|H3A0660
+3A0660:lI102|N
+39FF4C:lI97|H39FFF0
+39FFF0:lI105|H3A0094
+3A0094:lI102|N
+39FEAC:lH39FF5C|H39FF68
+39FF5C:t2:H3A0000,H3A0008
+3A0008:lI97|H3A00AC
+3A00AC:lI117|H3A0148
+3A0148:lI100|H3A01EC
+3A01EC:lI105|H3A0298
+3A0298:lI111|H3A0344
+3A0344:lI47|H3A03E8
+3A03E8:lI120|H3A047C
+3A047C:lI45|H3A0518
+3A0518:lI97|H3A05BC
+3A05BC:lI105|H3A0668
+3A0668:lI102|H3A070C
+3A070C:lI102|N
+3A0000:lI97|H3A00A4
+3A00A4:lI105|H3A0140
+3A0140:lI102|H3A01E4
+3A01E4:lI102|N
+39FF68:lH3A0010|H3A001C
+3A0010:t2:H3A00B4,H3A00BC
+3A00BC:lI97|H3A0158
+3A0158:lI117|H3A01FC
+3A01FC:lI100|H3A02A8
+3A02A8:lI105|H3A034C
+3A034C:lI111|H3A03F0
+3A03F0:lI47|H3A0484
+3A0484:lI120|H3A0520
+3A0520:lI45|H3A05C4
+3A05C4:lI97|H3A0670
+3A0670:lI105|H3A0714
+3A0714:lI102|H3A07B8
+3A07B8:lI102|N
+3A00B4:lI97|H3A0150
+3A0150:lI105|H3A01F4
+3A01F4:lI102|H3A02A0
+3A02A0:lI99|N
+3A001C:lH3A00C4|H3A00D0
+3A00C4:t2:H3A0160,H3A0168
+3A0168:lI97|H3A020C
+3A020C:lI117|H3A02B8
+3A02B8:lI100|H3A035C
+3A035C:lI105|H3A03F8
+3A03F8:lI111|H3A048C
+3A048C:lI47|H3A0528
+3A0528:lI109|H3A05CC
+3A05CC:lI112|H3A0678
+3A0678:lI101|H3A071C
+3A071C:lI103|N
+3A0160:lI109|H3A0204
+3A0204:lI112|H3A02B0
+3A02B0:lI103|H3A0354
+3A0354:lI97|N
+3A00D0:lH3A0170|H3A017C
+3A0170:t2:H3A0214,H3A021C
+3A021C:lI97|H3A02C8
+3A02C8:lI117|H3A036C
+3A036C:lI100|H3A0400
+3A0400:lI105|H3A0494
+3A0494:lI111|H3A0530
+3A0530:lI47|H3A05D4
+3A05D4:lI109|H3A0680
+3A0680:lI112|H3A0724
+3A0724:lI101|H3A07C0
+3A07C0:lI103|N
+3A0214:lI109|H3A02C0
+3A02C0:lI112|H3A0364
+3A0364:lI50|N
+3A017C:lH3A0224|H3A0230
+3A0224:t2:H3A02D0,H3A02D8
+3A02D8:lI97|H3A037C
+3A037C:lI117|H3A0408
+3A0408:lI100|H3A049C
+3A049C:lI105|H3A0538
+3A0538:lI111|H3A05DC
+3A05DC:lI47|H3A0688
+3A0688:lI98|H3A072C
+3A072C:lI97|H3A07C8
+3A07C8:lI115|H3A0854
+3A0854:lI105|H3A08E0
+3A08E0:lI99|N
+3A02D0:lI97|H3A0374
+3A0374:lI117|N
+3A0230:lH3A02E0|H3A02EC
+3A02E0:t2:H3A0384,H3A038C
+3A038C:lI97|H3A0418
+3A0418:lI117|H3A04AC
+3A04AC:lI100|H3A0540
+3A0540:lI105|H3A05E4
+3A05E4:lI111|H3A0690
+3A0690:lI47|H3A0734
+3A0734:lI98|H3A07D0
+3A07D0:lI97|H3A085C
+3A085C:lI115|H3A08E8
+3A08E8:lI105|H3A0974
+3A0974:lI99|N
+3A0384:lI115|H3A0410
+3A0410:lI110|H3A04A4
+3A04A4:lI100|N
+3A02EC:lH3A0394|H3A03A0
+3A0394:t2:H3A0420,H3A0428
+3A0428:lI97|H3A04BC
+3A04BC:lI112|H3A0550
+3A0550:lI112|H3A05EC
+3A05EC:lI108|H3A0698
+3A0698:lI105|H3A073C
+3A073C:lI99|H3A07D8
+3A07D8:lI97|H3A0864
+3A0864:lI116|H3A08F0
+3A08F0:lI105|H3A097C
+3A097C:lI111|H3A0A08
+3A0A08:lI110|H3A0AA4
+3A0AA4:lI47|H3A0B48
+3A0B48:lI122|H3A0BF4
+3A0BF4:lI105|H3A0CB0
+3A0CB0:lI112|N
+3A0420:lI122|H3A04B4
+3A04B4:lI105|H3A0548
+3A0548:lI112|N
+3A03A0:lH3A0430|H3A043C
+3A0430:t2:H3A04C4,H3A04CC
+3A04CC:lI97|H3A0560
+3A0560:lI112|H3A05FC
+3A05FC:lI112|H3A06A0
+3A06A0:lI108|H3A0744
+3A0744:lI105|H3A07E0
+3A07E0:lI99|H3A086C
+3A086C:lI97|H3A08F8
+3A08F8:lI116|H3A0984
+3A0984:lI105|H3A0A10
+3A0A10:lI111|H3A0AAC
+3A0AAC:lI110|H3A0B50
+3A0B50:lI47|H3A0BFC
+3A0BFC:lI120|H3A0CB8
+3A0CB8:lI45|H3A0D6C
+3A0D6C:lI119|H3A0E20
+3A0E20:lI97|H3A0ED4
+3A0ED4:lI105|H3A0F90
+3A0F90:lI115|H3A105C
+3A105C:lI45|H3A1130
+3A1130:lI115|H3A1204
+3A1204:lI111|H3A12D0
+3A12D0:lI117|H3A13A4
+3A13A4:lI114|H3A1480
+3A1480:lI99|H3A1564
+3A1564:lI101|N
+3A04C4:lI115|H3A0558
+3A0558:lI114|H3A05F4
+3A05F4:lI99|N
+3A043C:lH3A04D4|H3A04E0
+3A04D4:t2:H3A0568,H3A0570
+3A0570:lI97|H3A060C
+3A060C:lI112|H3A06B0
+3A06B0:lI112|H3A0754
+3A0754:lI108|H3A07F0
+3A07F0:lI105|H3A0874
+3A0874:lI99|H3A0900
+3A0900:lI97|H3A098C
+3A098C:lI116|H3A0A18
+3A0A18:lI105|H3A0AB4
+3A0AB4:lI111|H3A0B58
+3A0B58:lI110|H3A0C04
+3A0C04:lI47|H3A0CC0
+3A0CC0:lI120|H3A0D74
+3A0D74:lI45|H3A0E28
+3A0E28:lI117|H3A0EDC
+3A0EDC:lI115|H3A0F98
+3A0F98:lI116|H3A1064
+3A1064:lI97|H3A1138
+3A1138:lI114|N
+3A0568:lI117|H3A0604
+3A0604:lI115|H3A06A8
+3A06A8:lI116|H3A074C
+3A074C:lI97|H3A07E8
+3A07E8:lI114|N
+3A04E0:lH3A0578|H3A0584
+3A0578:t2:H3A0614,H3A061C
+3A061C:lI97|H3A06C0
+3A06C0:lI112|H3A075C
+3A075C:lI112|H3A07F8
+3A07F8:lI108|H3A087C
+3A087C:lI105|H3A0908
+3A0908:lI99|H3A0994
+3A0994:lI97|H3A0A20
+3A0A20:lI116|H3A0ABC
+3A0ABC:lI105|H3A0B60
+3A0B60:lI111|H3A0C0C
+3A0C0C:lI110|H3A0CC8
+3A0CC8:lI47|H3A0D7C
+3A0D7C:lI120|H3A0E30
+3A0E30:lI45|H3A0EE4
+3A0EE4:lI116|H3A0FA0
+3A0FA0:lI114|H3A106C
+3A106C:lI111|H3A1140
+3A1140:lI102|H3A120C
+3A120C:lI102|H3A12D8
+3A12D8:lI45|H3A13AC
+3A13AC:lI109|H3A1488
+3A1488:lI115|N
+3A0614:lI109|H3A06B8
+3A06B8:lI115|N
+3A0584:lH3A0624|H3A0630
+3A0624:t2:H3A06C8,H3A06D0
+3A06D0:lI97|H3A076C
+3A076C:lI112|H3A0800
+3A0800:lI112|H3A0884
+3A0884:lI108|H3A0910
+3A0910:lI105|H3A099C
+3A099C:lI99|H3A0A28
+3A0A28:lI97|H3A0AC4
+3A0AC4:lI116|H3A0B68
+3A0B68:lI105|H3A0C14
+3A0C14:lI111|H3A0CD0
+3A0CD0:lI110|H3A0D84
+3A0D84:lI47|H3A0E38
+3A0E38:lI120|H3A0EEC
+3A0EEC:lI45|H3A0FA8
+3A0FA8:lI116|H3A1074
+3A1074:lI114|H3A1148
+3A1148:lI111|H3A1214
+3A1214:lI102|H3A12E0
+3A12E0:lI102|H3A13B4
+3A13B4:lI45|H3A1490
+3A1490:lI109|H3A156C
+3A156C:lI101|N
+3A06C8:lI109|H3A0764
+3A0764:lI101|N
+3A0630:lH3A06D8|H3A06E4
+3A06D8:t2:H3A0774,H3A077C
+3A077C:lI97|H3A0810
+3A0810:lI112|H3A0894
+3A0894:lI112|H3A0918
+3A0918:lI108|H3A09A4
+3A09A4:lI105|H3A0A30
+3A0A30:lI99|H3A0ACC
+3A0ACC:lI97|H3A0B70
+3A0B70:lI116|H3A0C1C
+3A0C1C:lI105|H3A0CD8
+3A0CD8:lI111|H3A0D8C
+3A0D8C:lI110|H3A0E40
+3A0E40:lI47|H3A0EF4
+3A0EF4:lI120|H3A0FB0
+3A0FB0:lI45|H3A107C
+3A107C:lI116|H3A1150
+3A1150:lI114|H3A121C
+3A121C:lI111|H3A12E8
+3A12E8:lI102|H3A13BC
+3A13BC:lI102|H3A1498
+3A1498:lI45|H3A1574
+3A1574:lI109|H3A1648
+3A1648:lI97|H3A171C
+3A171C:lI110|N
+3A0774:lI109|H3A0808
+3A0808:lI97|H3A088C
+3A088C:lI110|N
+3A06E4:lH3A0784|H3A0790
+3A0784:t2:H3A0818,H3A0820
+3A0820:lI97|H3A089C
+3A089C:lI112|H3A0920
+3A0920:lI112|H3A09AC
+3A09AC:lI108|H3A0A38
+3A0A38:lI105|H3A0AD4
+3A0AD4:lI99|H3A0B78
+3A0B78:lI97|H3A0C24
+3A0C24:lI116|H3A0CE0
+3A0CE0:lI105|H3A0D94
+3A0D94:lI111|H3A0E48
+3A0E48:lI110|H3A0EFC
+3A0EFC:lI47|H3A0FB8
+3A0FB8:lI120|H3A1084
+3A1084:lI45|H3A1158
+3A1158:lI116|H3A1224
+3A1224:lI114|H3A12F0
+3A12F0:lI111|H3A13C4
+3A13C4:lI102|H3A14A0
+3A14A0:lI102|N
+3A0818:lI116|N
+3A0790:lH3A0828|H3A0834
+3A0828:t2:H3A08A4,H3A08AC
+3A08AC:lI97|H3A0930
+3A0930:lI112|H3A09B4
+3A09B4:lI112|H3A0A40
+3A0A40:lI108|H3A0ADC
+3A0ADC:lI105|H3A0B80
+3A0B80:lI99|H3A0C2C
+3A0C2C:lI97|H3A0CE8
+3A0CE8:lI116|H3A0D9C
+3A0D9C:lI105|H3A0E50
+3A0E50:lI111|H3A0F04
+3A0F04:lI110|H3A0FC0
+3A0FC0:lI47|H3A108C
+3A108C:lI120|H3A1160
+3A1160:lI45|H3A122C
+3A122C:lI116|H3A12F8
+3A12F8:lI114|H3A13CC
+3A13CC:lI111|H3A14A8
+3A14A8:lI102|H3A157C
+3A157C:lI102|N
+3A08A4:lI116|H3A0928
+3A0928:lI114|N
+3A0834:lH3A08B4|H3A08C0
+3A08B4:t2:H3A0938,H3A0940
+3A0940:lI97|H3A09C4
+3A09C4:lI112|H3A0A50
+3A0A50:lI112|H3A0AEC
+3A0AEC:lI108|H3A0B88
+3A0B88:lI105|H3A0C34
+3A0C34:lI99|H3A0CF0
+3A0CF0:lI97|H3A0DA4
+3A0DA4:lI116|H3A0E58
+3A0E58:lI105|H3A0F0C
+3A0F0C:lI111|H3A0FC8
+3A0FC8:lI110|H3A1094
+3A1094:lI47|H3A1168
+3A1168:lI120|H3A1234
+3A1234:lI45|H3A1300
+3A1300:lI116|H3A13D4
+3A13D4:lI114|H3A14B0
+3A14B0:lI111|H3A1584
+3A1584:lI102|H3A1650
+3A1650:lI102|N
+3A0938:lI114|H3A09BC
+3A09BC:lI111|H3A0A48
+3A0A48:lI102|H3A0AE4
+3A0AE4:lI102|N
+3A08C0:lH3A0948|H3A0954
+3A0948:t2:H3A09CC,H3A09D4
+3A09D4:lI97|H3A0A60
+3A0A60:lI112|H3A0AFC
+3A0AFC:lI112|H3A0B98
+3A0B98:lI108|H3A0C44
+3A0C44:lI105|H3A0D00
+3A0D00:lI99|H3A0DB4
+3A0DB4:lI97|H3A0E60
+3A0E60:lI116|H3A0F14
+3A0F14:lI105|H3A0FD0
+3A0FD0:lI111|H3A109C
+3A109C:lI110|H3A1170
+3A1170:lI47|H3A123C
+3A123C:lI120|H3A1308
+3A1308:lI45|H3A13DC
+3A13DC:lI116|H3A14B8
+3A14B8:lI101|H3A158C
+3A158C:lI120|H3A1658
+3A1658:lI105|H3A1724
+3A1724:lI110|H3A17E8
+3A17E8:lI102|H3A18AC
+3A18AC:lI111|N
+3A09CC:lI116|H3A0A58
+3A0A58:lI101|H3A0AF4
+3A0AF4:lI120|H3A0B90
+3A0B90:lI105|H3A0C3C
+3A0C3C:lI110|H3A0CF8
+3A0CF8:lI102|H3A0DAC
+3A0DAC:lI111|N
+3A0954:lH3A09DC|H3A09E8
+3A09DC:t2:H3A0A68,H3A0A70
+3A0A70:lI97|H3A0B0C
+3A0B0C:lI112|H3A0BA8
+3A0BA8:lI112|H3A0C54
+3A0C54:lI108|H3A0D08
+3A0D08:lI105|H3A0DBC
+3A0DBC:lI99|H3A0E68
+3A0E68:lI97|H3A0F1C
+3A0F1C:lI116|H3A0FD8
+3A0FD8:lI105|H3A10A4
+3A10A4:lI111|H3A1178
+3A1178:lI110|H3A1244
+3A1244:lI47|H3A1310
+3A1310:lI120|H3A13E4
+3A13E4:lI45|H3A14C0
+3A14C0:lI116|H3A1594
+3A1594:lI101|H3A1660
+3A1660:lI120|H3A172C
+3A172C:lI105|H3A17F0
+3A17F0:lI110|H3A18B4
+3A18B4:lI102|H3A1970
+3A1970:lI111|N
+3A0A68:lI116|H3A0B04
+3A0B04:lI101|H3A0BA0
+3A0BA0:lI120|H3A0C4C
+3A0C4C:lI105|N
+3A09E8:lH3A0A78|H3A0A84
+3A0A78:t2:H3A0B14,H3A0B1C
+3A0B1C:lI97|H3A0BB8
+3A0BB8:lI112|H3A0C64
+3A0C64:lI112|H3A0D10
+3A0D10:lI108|H3A0DC4
+3A0DC4:lI105|H3A0E70
+3A0E70:lI99|H3A0F24
+3A0F24:lI97|H3A0FE0
+3A0FE0:lI116|H3A10AC
+3A10AC:lI105|H3A1180
+3A1180:lI111|H3A124C
+3A124C:lI110|H3A1318
+3A1318:lI47|H3A13EC
+3A13EC:lI120|H3A14C8
+3A14C8:lI45|H3A159C
+3A159C:lI116|H3A1668
+3A1668:lI101|H3A1734
+3A1734:lI120|N
+3A0B14:lI116|H3A0BB0
+3A0BB0:lI101|H3A0C5C
+3A0C5C:lI120|N
+3A0A84:lH3A0B24|H3A0B30
+3A0B24:t2:H3A0BC0,H3A0BC8
+3A0BC8:lI97|H3A0C74
+3A0C74:lI112|H3A0D20
+3A0D20:lI112|H3A0DCC
+3A0DCC:lI108|H3A0E78
+3A0E78:lI105|H3A0F2C
+3A0F2C:lI99|H3A0FE8
+3A0FE8:lI97|H3A10B4
+3A10B4:lI116|H3A1188
+3A1188:lI105|H3A1254
+3A1254:lI111|H3A1320
+3A1320:lI110|H3A13F4
+3A13F4:lI47|H3A14D0
+3A14D0:lI120|H3A15A4
+3A15A4:lI45|H3A1670
+3A1670:lI116|H3A173C
+3A173C:lI99|H3A17F8
+3A17F8:lI108|N
+3A0BC0:lI116|H3A0C6C
+3A0C6C:lI99|H3A0D18
+3A0D18:lI108|N
+3A0B30:lH3A0BD0|H3A0BDC
+3A0BD0:t2:H3A0C7C,H3A0C84
+3A0C84:lI97|H3A0D30
+3A0D30:lI112|H3A0DDC
+3A0DDC:lI112|H3A0E80
+3A0E80:lI108|H3A0F34
+3A0F34:lI105|H3A0FF0
+3A0FF0:lI99|H3A10BC
+3A10BC:lI97|H3A1190
+3A1190:lI116|H3A125C
+3A125C:lI105|H3A1328
+3A1328:lI111|H3A13FC
+3A13FC:lI110|H3A14D8
+3A14D8:lI47|H3A15AC
+3A15AC:lI120|H3A1678
+3A1678:lI45|H3A1744
+3A1744:lI116|H3A1800
+3A1800:lI97|H3A18BC
+3A18BC:lI114|N
+3A0C7C:lI116|H3A0D28
+3A0D28:lI97|H3A0DD4
+3A0DD4:lI114|N
+3A0BDC:lH3A0C8C|H3A0C98
+3A0C8C:t2:H3A0D38,H3A0D40
+3A0D40:lI97|H3A0DEC
+3A0DEC:lI112|H3A0E90
+3A0E90:lI112|H3A0F44
+3A0F44:lI108|H3A1000
+3A1000:lI105|H3A10CC
+3A10CC:lI99|H3A1198
+3A1198:lI97|H3A1264
+3A1264:lI116|H3A1330
+3A1330:lI105|H3A1404
+3A1404:lI111|H3A14E0
+3A14E0:lI110|H3A15B4
+3A15B4:lI47|H3A1680
+3A1680:lI120|H3A174C
+3A174C:lI45|H3A1808
+3A1808:lI115|H3A18C4
+3A18C4:lI118|H3A1978
+3A1978:lI52|H3A1A2C
+3A1A2C:lI99|H3A1AE0
+3A1AE0:lI114|H3A1BA4
+3A1BA4:lI99|N
+3A0D38:lI115|H3A0DE4
+3A0DE4:lI118|H3A0E88
+3A0E88:lI52|H3A0F3C
+3A0F3C:lI99|H3A0FF8
+3A0FF8:lI114|H3A10C4
+3A10C4:lI99|N
+3A0C98:lH3A0D48|H3A0D54
+3A0D48:t2:H3A0DF4,H3A0DFC
+3A0DFC:lI97|H3A0EA0
+3A0EA0:lI112|H3A0F54
+3A0F54:lI112|H3A1010
+3A1010:lI108|H3A10DC
+3A10DC:lI105|H3A11A8
+3A11A8:lI99|H3A1274
+3A1274:lI97|H3A1338
+3A1338:lI116|H3A140C
+3A140C:lI105|H3A14E8
+3A14E8:lI111|H3A15BC
+3A15BC:lI110|H3A1688
+3A1688:lI47|H3A1754
+3A1754:lI120|H3A1810
+3A1810:lI45|H3A18CC
+3A18CC:lI115|H3A1980
+3A1980:lI118|H3A1A34
+3A1A34:lI52|H3A1AE8
+3A1AE8:lI99|H3A1BAC
+3A1BAC:lI112|H3A1C78
+3A1C78:lI105|H3A1D3C
+3A1D3C:lI111|N
+3A0DF4:lI115|H3A0E98
+3A0E98:lI118|H3A0F4C
+3A0F4C:lI52|H3A1008
+3A1008:lI99|H3A10D4
+3A10D4:lI112|H3A11A0
+3A11A0:lI105|H3A126C
+3A126C:lI111|N
+3A0D54:lH3A0E04|H3A0E10
+3A0E04:t2:H3A0EA8,H3A0EB0
+3A0EB0:lI97|H3A0F64
+3A0F64:lI112|H3A1020
+3A1020:lI112|H3A10E4
+3A10E4:lI108|H3A11B0
+3A11B0:lI105|H3A127C
+3A127C:lI99|H3A1340
+3A1340:lI97|H3A1414
+3A1414:lI116|H3A14F0
+3A14F0:lI105|H3A15C4
+3A15C4:lI111|H3A1690
+3A1690:lI110|H3A175C
+3A175C:lI47|H3A1818
+3A1818:lI120|H3A18D4
+3A18D4:lI45|H3A1988
+3A1988:lI115|H3A1A3C
+3A1A3C:lI116|H3A1AF0
+3A1AF0:lI117|H3A1BB4
+3A1BB4:lI102|H3A1C80
+3A1C80:lI102|H3A1D44
+3A1D44:lI105|H3A1E00
+3A1E00:lI116|N
+3A0EA8:lI115|H3A0F5C
+3A0F5C:lI105|H3A1018
+3A1018:lI116|N
+3A0E10:lH3A0EB8|H3A0EC4
+3A0EB8:t2:H3A0F6C,H3A0F74
+3A0F74:lI97|H3A1030
+3A1030:lI112|H3A10F4
+3A10F4:lI112|H3A11C0
+3A11C0:lI108|H3A1284
+3A1284:lI105|H3A1348
+3A1348:lI99|H3A141C
+3A141C:lI97|H3A14F8
+3A14F8:lI116|H3A15CC
+3A15CC:lI105|H3A1698
+3A1698:lI111|H3A1764
+3A1764:lI110|H3A1820
+3A1820:lI47|H3A18DC
+3A18DC:lI120|H3A1990
+3A1990:lI45|H3A1A44
+3A1A44:lI115|H3A1AF8
+3A1AF8:lI104|H3A1BBC
+3A1BBC:lI97|H3A1C88
+3A1C88:lI114|N
+3A0F6C:lI115|H3A1028
+3A1028:lI104|H3A10EC
+3A10EC:lI97|H3A11B8
+3A11B8:lI114|N
+3A0EC4:lH3A0F7C|H3A0F88
+3A0F7C:t2:H3A1038,H3A1040
+3A1040:lI97|H3A1104
+3A1104:lI112|H3A11C8
+3A11C8:lI112|H3A128C
+3A128C:lI108|H3A1350
+3A1350:lI105|H3A1424
+3A1424:lI99|H3A1500
+3A1500:lI97|H3A15D4
+3A15D4:lI116|H3A16A0
+3A16A0:lI105|H3A176C
+3A176C:lI111|H3A1828
+3A1828:lI110|H3A18E4
+3A18E4:lI47|H3A1998
+3A1998:lI120|H3A1A4C
+3A1A4C:lI45|H3A1B00
+3A1B00:lI115|H3A1BC4
+3A1BC4:lI104|N
+3A1038:lI115|H3A10FC
+3A10FC:lI104|N
+3A0F88:lH3A1048|H3A1054
+3A1048:t2:H3A110C,H3A1114
+3A1114:lI97|H3A11D8
+3A11D8:lI112|H3A1294
+3A1294:lI112|H3A1358
+3A1358:lI108|H3A142C
+3A142C:lI105|H3A1508
+3A1508:lI99|H3A15DC
+3A15DC:lI97|H3A16A8
+3A16A8:lI116|H3A1774
+3A1774:lI105|H3A1830
+3A1830:lI111|H3A18EC
+3A18EC:lI110|H3A19A0
+3A19A0:lI47|H3A1A54
+3A1A54:lI120|H3A1B08
+3A1B08:lI45|H3A1BCC
+3A1BCC:lI110|H3A1C90
+3A1C90:lI101|H3A1D4C
+3A1D4C:lI116|H3A1E08
+3A1E08:lI99|H3A1EC4
+3A1EC4:lI100|H3A1F88
+3A1F88:lI102|N
+3A110C:lI110|H3A11D0
+3A11D0:lI99|N
+3A1054:lH3A111C|H3A1128
+3A111C:t2:H3A11E0,H3A11E8
+3A11E8:lI97|H3A12A4
+3A12A4:lI112|H3A1368
+3A1368:lI112|H3A1434
+3A1434:lI108|H3A1510
+3A1510:lI105|H3A15E4
+3A15E4:lI99|H3A16B0
+3A16B0:lI97|H3A177C
+3A177C:lI116|H3A1838
+3A1838:lI105|H3A18F4
+3A18F4:lI111|H3A19A8
+3A19A8:lI110|H3A1A5C
+3A1A5C:lI47|H3A1B10
+3A1B10:lI120|H3A1BD4
+3A1BD4:lI45|H3A1C98
+3A1C98:lI110|H3A1D54
+3A1D54:lI101|H3A1E10
+3A1E10:lI116|H3A1ECC
+3A1ECC:lI99|H3A1F90
+3A1F90:lI100|H3A2044
+3A2044:lI102|N
+3A11E0:lI99|H3A129C
+3A129C:lI100|H3A1360
+3A1360:lI102|N
+3A1128:lH3A11F0|H3A11FC
+3A11F0:t2:H3A12AC,H3A12B4
+3A12B4:lI97|H3A1378
+3A1378:lI112|H3A1444
+3A1444:lI112|H3A1518
+3A1518:lI108|H3A15EC
+3A15EC:lI105|H3A16B8
+3A16B8:lI99|H3A1784
+3A1784:lI97|H3A1840
+3A1840:lI116|H3A18FC
+3A18FC:lI105|H3A19B0
+3A19B0:lI111|H3A1A64
+3A1A64:lI110|H3A1B18
+3A1B18:lI47|H3A1BDC
+3A1BDC:lI120|H3A1CA0
+3A1CA0:lI45|H3A1D5C
+3A1D5C:lI109|H3A1E18
+3A1E18:lI105|H3A1ED4
+3A1ED4:lI102|N
+3A12AC:lI109|H3A1370
+3A1370:lI105|H3A143C
+3A143C:lI102|N
+3A11FC:lH3A12BC|H3A12C8
+3A12BC:t2:H3A1380,H3A1388
+3A1388:lI97|H3A1454
+3A1454:lI112|H3A1528
+3A1528:lI112|H3A15FC
+3A15FC:lI108|H3A16C8
+3A16C8:lI105|H3A178C
+3A178C:lI99|H3A1848
+3A1848:lI97|H3A1904
+3A1904:lI116|H3A19B8
+3A19B8:lI105|H3A1A6C
+3A1A6C:lI111|H3A1B20
+3A1B20:lI110|H3A1BE4
+3A1BE4:lI47|H3A1CA8
+3A1CA8:lI120|H3A1D64
+3A1D64:lI45|H3A1E20
+3A1E20:lI108|H3A1EDC
+3A1EDC:lI97|H3A1F98
+3A1F98:lI116|H3A204C
+3A204C:lI101|H3A2108
+3A2108:lI120|N
+3A1380:lI108|H3A144C
+3A144C:lI97|H3A1520
+3A1520:lI116|H3A15F4
+3A15F4:lI101|H3A16C0
+3A16C0:lI120|N
+3A12C8:lH3A1390|H3A139C
+3A1390:t2:H3A145C,H3A1464
+3A1464:lI97|H3A1538
+3A1538:lI112|H3A160C
+3A160C:lI112|H3A16D0
+3A16D0:lI108|H3A1794
+3A1794:lI105|H3A1850
+3A1850:lI99|H3A190C
+3A190C:lI97|H3A19C0
+3A19C0:lI116|H3A1A74
+3A1A74:lI105|H3A1B28
+3A1B28:lI111|H3A1BEC
+3A1BEC:lI110|H3A1CB0
+3A1CB0:lI47|H3A1D6C
+3A1D6C:lI120|H3A1E28
+3A1E28:lI45|H3A1EE4
+3A1EE4:lI107|H3A1FA0
+3A1FA0:lI111|H3A2054
+3A2054:lI97|H3A2110
+3A2110:lI110|N
+3A145C:lI115|H3A1530
+3A1530:lI107|H3A1604
+3A1604:lI112|N
+3A139C:lH3A146C|H3A1478
+3A146C:t2:H3A1540,H3A1548
+3A1548:lI97|H3A161C
+3A161C:lI112|H3A16E0
+3A16E0:lI112|H3A179C
+3A179C:lI108|H3A1858
+3A1858:lI105|H3A1914
+3A1914:lI99|H3A19C8
+3A19C8:lI97|H3A1A7C
+3A1A7C:lI116|H3A1B30
+3A1B30:lI105|H3A1BF4
+3A1BF4:lI111|H3A1CB8
+3A1CB8:lI110|H3A1D74
+3A1D74:lI47|H3A1E30
+3A1E30:lI120|H3A1EEC
+3A1EEC:lI45|H3A1FA8
+3A1FA8:lI107|H3A205C
+3A205C:lI111|H3A2118
+3A2118:lI97|H3A21CC
+3A21CC:lI110|N
+3A1540:lI115|H3A1614
+3A1614:lI107|H3A16D8
+3A16D8:lI100|N
+3A1478:lH3A1550|H3A155C
+3A1550:t2:H3A1624,H3A162C
+3A162C:lI97|H3A16F0
+3A16F0:lI112|H3A17AC
+3A17AC:lI112|H3A1860
+3A1860:lI108|H3A191C
+3A191C:lI105|H3A19D0
+3A19D0:lI99|H3A1A84
+3A1A84:lI97|H3A1B38
+3A1B38:lI116|H3A1BFC
+3A1BFC:lI105|H3A1CC0
+3A1CC0:lI111|H3A1D7C
+3A1D7C:lI110|H3A1E38
+3A1E38:lI47|H3A1EF4
+3A1EF4:lI120|H3A1FB0
+3A1FB0:lI45|H3A2064
+3A2064:lI107|H3A2120
+3A2120:lI111|H3A21D4
+3A21D4:lI97|H3A2288
+3A2288:lI110|N
+3A1624:lI115|H3A16E8
+3A16E8:lI107|H3A17A4
+3A17A4:lI116|N
+3A155C:lH3A1634|H3A1640
+3A1634:t2:H3A16F8,H3A1700
+3A1700:lI97|H3A17BC
+3A17BC:lI112|H3A1870
+3A1870:lI112|H3A1924
+3A1924:lI108|H3A19D8
+3A19D8:lI105|H3A1A8C
+3A1A8C:lI99|H3A1B40
+3A1B40:lI97|H3A1C04
+3A1C04:lI116|H3A1CC8
+3A1CC8:lI105|H3A1D84
+3A1D84:lI111|H3A1E40
+3A1E40:lI110|H3A1EFC
+3A1EFC:lI47|H3A1FB8
+3A1FB8:lI120|H3A206C
+3A206C:lI45|H3A2128
+3A2128:lI107|H3A21DC
+3A21DC:lI111|H3A2290
+3A2290:lI97|H3A234C
+3A234C:lI110|N
+3A16F8:lI115|H3A17B4
+3A17B4:lI107|H3A1868
+3A1868:lI109|N
+3A1640:lH3A1708|H3A1714
+3A1708:t2:H3A17C4,H3A17CC
+3A17CC:lI97|H3A1880
+3A1880:lI112|H3A1934
+3A1934:lI112|H3A19E0
+3A19E0:lI108|H3A1A94
+3A1A94:lI105|H3A1B48
+3A1B48:lI99|H3A1C0C
+3A1C0C:lI97|H3A1CD0
+3A1CD0:lI116|H3A1D8C
+3A1D8C:lI105|H3A1E48
+3A1E48:lI111|H3A1F04
+3A1F04:lI110|H3A1FC0
+3A1FC0:lI47|H3A2074
+3A2074:lI120|H3A2130
+3A2130:lI45|H3A21E4
+3A21E4:lI104|H3A2298
+3A2298:lI116|H3A2354
+3A2354:lI116|H3A2410
+3A2410:lI112|H3A24C4
+3A24C4:lI100|H3A2580
+3A2580:lI45|H3A263C
+3A263C:lI99|H3A2700
+3A2700:lI103|H3A27BC
+3A27BC:lI105|N
+3A17C4:lI99|H3A1878
+3A1878:lI103|H3A192C
+3A192C:lI105|N
+3A1714:lH3A17D4|H3A17E0
+3A17D4:t2:H3A1888,H3A1890
+3A1890:lI97|H3A1944
+3A1944:lI112|H3A19F0
+3A19F0:lI112|H3A1A9C
+3A1A9C:lI108|H3A1B50
+3A1B50:lI105|H3A1C14
+3A1C14:lI99|H3A1CD8
+3A1CD8:lI97|H3A1D94
+3A1D94:lI116|H3A1E50
+3A1E50:lI105|H3A1F0C
+3A1F0C:lI111|H3A1FC8
+3A1FC8:lI110|H3A207C
+3A207C:lI47|H3A2138
+3A2138:lI120|H3A21EC
+3A21EC:lI45|H3A22A0
+3A22A0:lI104|H3A235C
+3A235C:lI100|H3A2418
+3A2418:lI102|N
+3A1888:lI104|H3A193C
+3A193C:lI100|H3A19E8
+3A19E8:lI102|N
+3A17E0:lH3A1898|H3A18A4
+3A1898:t2:H3A194C,H3A1954
+3A1954:lI97|H3A1A00
+3A1A00:lI112|H3A1AA4
+3A1AA4:lI112|H3A1B58
+3A1B58:lI108|H3A1C1C
+3A1C1C:lI105|H3A1CE0
+3A1CE0:lI99|H3A1D9C
+3A1D9C:lI97|H3A1E58
+3A1E58:lI116|H3A1F14
+3A1F14:lI105|H3A1FD0
+3A1FD0:lI111|H3A2084
+3A2084:lI110|H3A2140
+3A2140:lI47|H3A21F4
+3A21F4:lI120|H3A22A8
+3A22A8:lI45|H3A2364
+3A2364:lI103|H3A2420
+3A2420:lI122|H3A24CC
+3A24CC:lI105|H3A2588
+3A2588:lI112|N
+3A194C:lI103|H3A19F8
+3A19F8:lI122|N
+3A18A4:lH3A195C|H3A1968
+3A195C:t2:H3A1A08,H3A1A10
+3A1A10:lI97|H3A1AB4
+3A1AB4:lI112|H3A1B68
+3A1B68:lI112|H3A1C2C
+3A1C2C:lI108|H3A1CE8
+3A1CE8:lI105|H3A1DA4
+3A1DA4:lI99|H3A1E60
+3A1E60:lI97|H3A1F1C
+3A1F1C:lI116|H3A1FD8
+3A1FD8:lI105|H3A208C
+3A208C:lI111|H3A2148
+3A2148:lI110|H3A21FC
+3A21FC:lI47|H3A22B0
+3A22B0:lI120|H3A236C
+3A236C:lI45|H3A2428
+3A2428:lI103|H3A24D4
+3A24D4:lI116|H3A2590
+3A2590:lI97|H3A2644
+3A2644:lI114|N
+3A1A08:lI103|H3A1AAC
+3A1AAC:lI116|H3A1B60
+3A1B60:lI97|H3A1C24
+3A1C24:lI114|N
+3A1968:lH3A1A18|H3A1A24
+3A1A18:t2:H3A1ABC,H3A1AC4
+3A1AC4:lI97|H3A1B78
+3A1B78:lI112|H3A1C3C
+3A1C3C:lI112|H3A1CF0
+3A1CF0:lI108|H3A1DAC
+3A1DAC:lI105|H3A1E68
+3A1E68:lI99|H3A1F24
+3A1F24:lI97|H3A1FE0
+3A1FE0:lI116|H3A2094
+3A2094:lI105|H3A2150
+3A2150:lI111|H3A2204
+3A2204:lI110|H3A22B8
+3A22B8:lI47|H3A2374
+3A2374:lI120|H3A2430
+3A2430:lI45|H3A24DC
+3A24DC:lI100|H3A2598
+3A2598:lI118|H3A264C
+3A264C:lI105|N
+3A1ABC:lI100|H3A1B70
+3A1B70:lI118|H3A1C34
+3A1C34:lI105|N
+3A1A24:lH3A1ACC|H3A1AD8
+3A1ACC:t2:H3A1B80,H3A1B88
+3A1B88:lI97|H3A1C4C
+3A1C4C:lI112|H3A1D00
+3A1D00:lI112|H3A1DB4
+3A1DB4:lI108|H3A1E70
+3A1E70:lI105|H3A1F2C
+3A1F2C:lI99|H3A1FE8
+3A1FE8:lI97|H3A209C
+3A209C:lI116|H3A2158
+3A2158:lI105|H3A220C
+3A220C:lI111|H3A22C0
+3A22C0:lI110|H3A237C
+3A237C:lI47|H3A2438
+3A2438:lI120|H3A24E4
+3A24E4:lI45|H3A25A0
+3A25A0:lI100|H3A2654
+3A2654:lI105|H3A2708
+3A2708:lI114|H3A27C4
+3A27C4:lI101|H3A2880
+3A2880:lI99|H3A2944
+3A2944:lI116|H3A2A10
+3A2A10:lI111|H3A2ADC
+3A2ADC:lI114|N
+3A1B80:lI100|H3A1C44
+3A1C44:lI99|H3A1CF8
+3A1CF8:lI114|N
+3A1AD8:lH3A1B90|H3A1B9C
+3A1B90:t2:H3A1C54,H3A1C5C
+3A1C5C:lI97|H3A1D10
+3A1D10:lI112|H3A1DC4
+3A1DC4:lI112|H3A1E78
+3A1E78:lI108|H3A1F34
+3A1F34:lI105|H3A1FF0
+3A1FF0:lI99|H3A20A4
+3A20A4:lI97|H3A2160
+3A2160:lI116|H3A2214
+3A2214:lI105|H3A22C8
+3A22C8:lI111|H3A2384
+3A2384:lI110|H3A2440
+3A2440:lI47|H3A24EC
+3A24EC:lI120|H3A25A8
+3A25A8:lI45|H3A265C
+3A265C:lI100|H3A2710
+3A2710:lI105|H3A27CC
+3A27CC:lI114|H3A2888
+3A2888:lI101|H3A294C
+3A294C:lI99|H3A2A18
+3A2A18:lI116|H3A2AE4
+3A2AE4:lI111|H3A2BB0
+3A2BB0:lI114|N
+3A1C54:lI100|H3A1D08
+3A1D08:lI105|H3A1DBC
+3A1DBC:lI114|N
+3A1B9C:lH3A1C64|H3A1C70
+3A1C64:t2:H3A1D18,H3A1D20
+3A1D20:lI97|H3A1DD4
+3A1DD4:lI112|H3A1E88
+3A1E88:lI112|H3A1F3C
+3A1F3C:lI108|H3A1FF8
+3A1FF8:lI105|H3A20AC
+3A20AC:lI99|H3A2168
+3A2168:lI97|H3A221C
+3A221C:lI116|H3A22D0
+3A22D0:lI105|H3A238C
+3A238C:lI111|H3A2448
+3A2448:lI110|H3A24F4
+3A24F4:lI47|H3A25B0
+3A25B0:lI120|H3A2664
+3A2664:lI45|H3A2718
+3A2718:lI100|H3A27D4
+3A27D4:lI105|H3A2890
+3A2890:lI114|H3A2954
+3A2954:lI101|H3A2A20
+3A2A20:lI99|H3A2AEC
+3A2AEC:lI116|H3A2BB8
+3A2BB8:lI111|H3A2C74
+3A2C74:lI114|N
+3A1D18:lI100|H3A1DCC
+3A1DCC:lI120|H3A1E80
+3A1E80:lI114|N
+3A1C70:lH3A1D28|H3A1D34
+3A1D28:t2:H3A1DDC,H3A1DE4
+3A1DE4:lI97|H3A1E98
+3A1E98:lI112|H3A1F4C
+3A1F4C:lI112|H3A2000
+3A2000:lI108|H3A20B4
+3A20B4:lI105|H3A2170
+3A2170:lI99|H3A2224
+3A2224:lI97|H3A22D8
+3A22D8:lI116|H3A2394
+3A2394:lI105|H3A2450
+3A2450:lI111|H3A24FC
+3A24FC:lI110|H3A25B8
+3A25B8:lI47|H3A266C
+3A266C:lI120|H3A2720
+3A2720:lI45|H3A27DC
+3A27DC:lI99|H3A2898
+3A2898:lI115|H3A295C
+3A295C:lI104|N
+3A1DDC:lI99|H3A1E90
+3A1E90:lI115|H3A1F44
+3A1F44:lI104|N
+3A1D34:lH3A1DEC|H3A1DF8
+3A1DEC:t2:H3A1EA0,H3A1EA8
+3A1EA8:lI97|H3A1F5C
+3A1F5C:lI112|H3A2010
+3A2010:lI112|H3A20C4
+3A20C4:lI108|H3A2178
+3A2178:lI105|H3A222C
+3A222C:lI99|H3A22E0
+3A22E0:lI97|H3A239C
+3A239C:lI116|H3A2458
+3A2458:lI105|H3A2504
+3A2504:lI111|H3A25C0
+3A25C0:lI110|H3A2674
+3A2674:lI47|H3A2728
+3A2728:lI120|H3A27E4
+3A27E4:lI45|H3A28A0
+3A28A0:lI99|H3A2964
+3A2964:lI112|H3A2A28
+3A2A28:lI105|H3A2AF4
+3A2AF4:lI111|N
+3A1EA0:lI99|H3A1F54
+3A1F54:lI112|H3A2008
+3A2008:lI105|H3A20BC
+3A20BC:lI111|N
+3A1DF8:lH3A1EB0|H3A1EBC
+3A1EB0:t2:H3A1F64,H3A1F6C
+3A1F6C:lI97|H3A2018
+3A2018:lI112|H3A20CC
+3A20CC:lI112|H3A2180
+3A2180:lI108|H3A2234
+3A2234:lI105|H3A22E8
+3A22E8:lI99|H3A23A4
+3A23A4:lI97|H3A2460
+3A2460:lI116|H3A250C
+3A250C:lI105|H3A25C8
+3A25C8:lI111|H3A267C
+3A267C:lI110|H3A2730
+3A2730:lI47|H3A27EC
+3A27EC:lI120|H3A28A8
+3A28A8:lI45|H3A296C
+3A296C:lI99|H3A2A30
+3A2A30:lI111|H3A2AFC
+3A2AFC:lI109|H3A2BC0
+3A2BC0:lI112|H3A2C7C
+3A2C7C:lI114|H3A2D2C
+3A2D2C:lI101|H3A2DD4
+3A2DD4:lI115|H3A2E6C
+3A2E6C:lI115|N
+3A1F64:lI90|N
+3A1EBC:lH3A1F74|H3A1F80
+3A1F74:t2:H3A2020,H3A2028
+3A2028:lI97|H3A20DC
+3A20DC:lI112|H3A2190
+3A2190:lI112|H3A223C
+3A223C:lI108|H3A22F0
+3A22F0:lI105|H3A23AC
+3A23AC:lI99|H3A2468
+3A2468:lI97|H3A2514
+3A2514:lI116|H3A25D0
+3A25D0:lI105|H3A2684
+3A2684:lI111|H3A2738
+3A2738:lI110|H3A27F4
+3A27F4:lI47|H3A28B0
+3A28B0:lI120|H3A2974
+3A2974:lI45|H3A2A38
+3A2A38:lI99|H3A2B04
+3A2B04:lI100|H3A2BC8
+3A2BC8:lI108|H3A2C84
+3A2C84:lI105|H3A2D34
+3A2D34:lI110|H3A2DDC
+3A2DDC:lI107|N
+3A2020:lI118|H3A20D4
+3A20D4:lI99|H3A2188
+3A2188:lI100|N
+3A1F80:lH3A2030|H3A203C
+3A2030:t2:H3A20E4,H3A20EC
+3A20EC:lI97|H3A21A0
+3A21A0:lI112|H3A224C
+3A224C:lI112|H3A2300
+3A2300:lI108|H3A23BC
+3A23BC:lI105|H3A2470
+3A2470:lI99|H3A251C
+3A251C:lI97|H3A25D8
+3A25D8:lI116|H3A268C
+3A268C:lI105|H3A2740
+3A2740:lI111|H3A27FC
+3A27FC:lI110|H3A28B8
+3A28B8:lI47|H3A297C
+3A297C:lI120|H3A2A40
+3A2A40:lI45|H3A2B0C
+3A2B0C:lI98|H3A2BD0
+3A2BD0:lI99|H3A2C8C
+3A2C8C:lI112|H3A2D3C
+3A2D3C:lI105|H3A2DE4
+3A2DE4:lI111|N
+3A20E4:lI98|H3A2198
+3A2198:lI99|H3A2244
+3A2244:lI112|H3A22F8
+3A22F8:lI105|H3A23B4
+3A23B4:lI111|N
+3A203C:lH3A20F4|H3A2100
+3A20F4:t2:H3A21A8,H3A21B0
+3A21B0:lI97|H3A225C
+3A225C:lI112|H3A2310
+3A2310:lI112|H3A23C4
+3A23C4:lI108|H3A2478
+3A2478:lI105|H3A2524
+3A2524:lI99|H3A25E0
+3A25E0:lI97|H3A2694
+3A2694:lI116|H3A2748
+3A2748:lI105|H3A2804
+3A2804:lI111|H3A28C0
+3A28C0:lI110|H3A2984
+3A2984:lI47|H3A2A48
+3A2A48:lI114|H3A2B14
+3A2B14:lI116|H3A2BD8
+3A2BD8:lI102|N
+3A21A8:lI114|H3A2254
+3A2254:lI116|H3A2308
+3A2308:lI102|N
+3A2100:lH3A21B8|H3A21C4
+3A21B8:t2:H3A2264,H3A226C
+3A226C:lI97|H3A2320
+3A2320:lI112|H3A23D4
+3A23D4:lI112|H3A2480
+3A2480:lI108|H3A252C
+3A252C:lI105|H3A25E8
+3A25E8:lI99|H3A269C
+3A269C:lI97|H3A2750
+3A2750:lI116|H3A280C
+3A280C:lI105|H3A28C8
+3A28C8:lI111|H3A298C
+3A298C:lI110|H3A2A50
+3A2A50:lI47|H3A2B1C
+3A2B1C:lI112|H3A2BE0
+3A2BE0:lI111|H3A2C94
+3A2C94:lI119|H3A2D44
+3A2D44:lI101|H3A2DEC
+3A2DEC:lI114|H3A2E74
+3A2E74:lI112|H3A2EEC
+3A2EEC:lI111|H3A2F64
+3A2F64:lI105|H3A2FD4
+3A2FD4:lI110|H3A303C
+3A303C:lI116|N
+3A2264:lI112|H3A2318
+3A2318:lI112|H3A23CC
+3A23CC:lI116|N
+3A21C4:lH3A2274|H3A2280
+3A2274:t2:H3A2328,H3A2330
+3A2330:lI97|H3A23E4
+3A23E4:lI112|H3A2488
+3A2488:lI112|H3A2534
+3A2534:lI108|H3A25F0
+3A25F0:lI105|H3A26A4
+3A26A4:lI99|H3A2758
+3A2758:lI97|H3A2814
+3A2814:lI116|H3A28D0
+3A28D0:lI105|H3A2994
+3A2994:lI111|H3A2A58
+3A2A58:lI110|H3A2B24
+3A2B24:lI47|H3A2BE8
+3A2BE8:lI112|H3A2C9C
+3A2C9C:lI111|H3A2D4C
+3A2D4C:lI115|H3A2DF4
+3A2DF4:lI116|H3A2E7C
+3A2E7C:lI115|H3A2EF4
+3A2EF4:lI99|H3A2F6C
+3A2F6C:lI114|H3A2FDC
+3A2FDC:lI105|H3A3044
+3A3044:lI112|H3A30A4
+3A30A4:lI116|N
+3A2328:lI97|H3A23DC
+3A23DC:lI105|N
+3A2280:lH3A2338|H3A2344
+3A2338:t2:H3A23EC,H3A23F4
+3A23F4:lI97|H3A2498
+3A2498:lI112|H3A2544
+3A2544:lI112|H3A25F8
+3A25F8:lI108|H3A26AC
+3A26AC:lI105|H3A2760
+3A2760:lI99|H3A281C
+3A281C:lI97|H3A28D8
+3A28D8:lI116|H3A299C
+3A299C:lI105|H3A2A60
+3A2A60:lI111|H3A2B2C
+3A2B2C:lI110|H3A2BF0
+3A2BF0:lI47|H3A2CA4
+3A2CA4:lI112|H3A2D54
+3A2D54:lI111|H3A2DFC
+3A2DFC:lI115|H3A2E84
+3A2E84:lI116|H3A2EFC
+3A2EFC:lI115|H3A2F74
+3A2F74:lI99|H3A2FE4
+3A2FE4:lI114|H3A304C
+3A304C:lI105|H3A30AC
+3A30AC:lI112|H3A3104
+3A3104:lI116|N
+3A23EC:lI101|H3A2490
+3A2490:lI112|H3A253C
+3A253C:lI115|N
+3A2344:lH3A23FC|H3A2408
+3A23FC:t2:H3A24A0,H3A24A8
+3A24A8:lI97|H3A2554
+3A2554:lI112|H3A2600
+3A2600:lI112|H3A26B4
+3A26B4:lI108|H3A2768
+3A2768:lI105|H3A2824
+3A2824:lI99|H3A28E0
+3A28E0:lI97|H3A29A4
+3A29A4:lI116|H3A2A68
+3A2A68:lI105|H3A2B34
+3A2B34:lI111|H3A2BF8
+3A2BF8:lI110|H3A2CAC
+3A2CAC:lI47|H3A2D5C
+3A2D5C:lI112|H3A2E04
+3A2E04:lI111|H3A2E8C
+3A2E8C:lI115|H3A2F04
+3A2F04:lI116|H3A2F7C
+3A2F7C:lI115|H3A2FEC
+3A2FEC:lI99|H3A3054
+3A3054:lI114|H3A30B4
+3A30B4:lI105|H3A310C
+3A310C:lI112|H3A315C
+3A315C:lI116|N
+3A24A0:lI112|H3A254C
+3A254C:lI115|N
+3A2408:lH3A24B0|H3A24BC
+3A24B0:t2:H3A255C,H3A2564
+3A2564:lI97|H3A2610
+3A2610:lI112|H3A26C4
+3A26C4:lI112|H3A2770
+3A2770:lI108|H3A282C
+3A282C:lI105|H3A28E8
+3A28E8:lI99|H3A29AC
+3A29AC:lI97|H3A2A70
+3A2A70:lI116|H3A2B3C
+3A2B3C:lI105|H3A2C00
+3A2C00:lI111|H3A2CB4
+3A2CB4:lI110|H3A2D64
+3A2D64:lI47|H3A2E0C
+3A2E0C:lI112|H3A2E94
+3A2E94:lI100|H3A2F0C
+3A2F0C:lI102|N
+3A255C:lI112|H3A2608
+3A2608:lI100|H3A26BC
+3A26BC:lI102|N
+3A24BC:lH3A256C|H3A2578
+3A256C:t2:H3A2618,H3A2620
+3A2620:lI97|H3A26D4
+3A26D4:lI112|H3A2780
+3A2780:lI112|H3A2834
+3A2834:lI108|H3A28F0
+3A28F0:lI105|H3A29B4
+3A29B4:lI99|H3A2A78
+3A2A78:lI97|H3A2B44
+3A2B44:lI116|H3A2C08
+3A2C08:lI105|H3A2CBC
+3A2CBC:lI111|H3A2D6C
+3A2D6C:lI110|H3A2E14
+3A2E14:lI47|H3A2E9C
+3A2E9C:lI111|H3A2F14
+3A2F14:lI100|H3A2F84
+3A2F84:lI97|N
+3A2618:lI111|H3A26CC
+3A26CC:lI100|H3A2778
+3A2778:lI97|N
+3A2578:lH3A2628|H3A2634
+3A2628:t2:H3A26DC,H3A26E4
+3A26E4:lI97|H3A2790
+3A2790:lI112|H3A2844
+3A2844:lI112|H3A28F8
+3A28F8:lI108|H3A29BC
+3A29BC:lI105|H3A2A80
+3A2A80:lI99|H3A2B4C
+3A2B4C:lI97|H3A2C10
+3A2C10:lI116|H3A2CC4
+3A2CC4:lI105|H3A2D74
+3A2D74:lI111|H3A2E1C
+3A2E1C:lI110|H3A2EA4
+3A2EA4:lI47|H3A2F1C
+3A2F1C:lI111|H3A2F8C
+3A2F8C:lI99|H3A2FF4
+3A2FF4:lI116|H3A305C
+3A305C:lI101|H3A30BC
+3A30BC:lI116|H3A3114
+3A3114:lI45|H3A3164
+3A3164:lI115|H3A31AC
+3A31AC:lI116|H3A31F4
+3A31F4:lI114|H3A323C
+3A323C:lI101|H3A3284
+3A3284:lI97|H3A32CC
+3A32CC:lI109|N
+3A26DC:lI98|H3A2788
+3A2788:lI105|H3A283C
+3A283C:lI110|N
+3A2634:lH3A26EC|H3A26F8
+3A26EC:t2:H3A2798,H3A27A0
+3A27A0:lI97|H3A2854
+3A2854:lI112|H3A2908
+3A2908:lI112|H3A29C4
+3A29C4:lI108|H3A2A88
+3A2A88:lI105|H3A2B54
+3A2B54:lI99|H3A2C18
+3A2C18:lI97|H3A2CCC
+3A2CCC:lI116|H3A2D7C
+3A2D7C:lI105|H3A2E24
+3A2E24:lI111|H3A2EAC
+3A2EAC:lI110|H3A2F24
+3A2F24:lI47|H3A2F94
+3A2F94:lI111|H3A2FFC
+3A2FFC:lI99|H3A3064
+3A3064:lI116|H3A30C4
+3A30C4:lI101|H3A311C
+3A311C:lI116|H3A316C
+3A316C:lI45|H3A31B4
+3A31B4:lI115|H3A31FC
+3A31FC:lI116|H3A3244
+3A3244:lI114|H3A328C
+3A328C:lI101|H3A32D4
+3A32D4:lI97|H3A3314
+3A3314:lI109|N
+3A2798:lI100|H3A284C
+3A284C:lI109|H3A2900
+3A2900:lI115|N
+3A26F8:lH3A27A8|H3A27B4
+3A27A8:t2:H3A285C,H3A2864
+3A2864:lI97|H3A2918
+3A2918:lI112|H3A29D4
+3A29D4:lI112|H3A2A90
+3A2A90:lI108|H3A2B5C
+3A2B5C:lI105|H3A2C20
+3A2C20:lI99|H3A2CD4
+3A2CD4:lI97|H3A2D84
+3A2D84:lI116|H3A2E2C
+3A2E2C:lI105|H3A2EB4
+3A2EB4:lI111|H3A2F2C
+3A2F2C:lI110|H3A2F9C
+3A2F9C:lI47|H3A3004
+3A3004:lI111|H3A306C
+3A306C:lI99|H3A30CC
+3A30CC:lI116|H3A3124
+3A3124:lI101|H3A3174
+3A3174:lI116|H3A31BC
+3A31BC:lI45|H3A3204
+3A3204:lI115|H3A324C
+3A324C:lI116|H3A3294
+3A3294:lI114|H3A32DC
+3A32DC:lI101|H3A331C
+3A331C:lI97|H3A334C
+3A334C:lI109|N
+3A285C:lI108|H3A2910
+3A2910:lI104|H3A29CC
+3A29CC:lI97|N
+3A27B4:lH3A286C|H3A2878
+3A286C:t2:H3A2920,H3A2928
+3A2928:lI97|H3A29E4
+3A29E4:lI112|H3A2AA0
+3A2AA0:lI112|H3A2B64
+3A2B64:lI108|H3A2C28
+3A2C28:lI105|H3A2CDC
+3A2CDC:lI99|H3A2D8C
+3A2D8C:lI97|H3A2E34
+3A2E34:lI116|H3A2EBC
+3A2EBC:lI105|H3A2F34
+3A2F34:lI111|H3A2FA4
+3A2FA4:lI110|H3A300C
+3A300C:lI47|H3A3074
+3A3074:lI111|H3A30D4
+3A30D4:lI99|H3A312C
+3A312C:lI116|H3A317C
+3A317C:lI101|H3A31C4
+3A31C4:lI116|H3A320C
+3A320C:lI45|H3A3254
+3A3254:lI115|H3A329C
+3A329C:lI116|H3A32E4
+3A32E4:lI114|H3A3324
+3A3324:lI101|H3A3354
+3A3354:lI97|H3A337C
+3A337C:lI109|N
+3A2920:lI108|H3A29DC
+3A29DC:lI122|H3A2A98
+3A2A98:lI104|N
+3A2878:lH3A2930|H3A293C
+3A2930:t2:H3A29EC,H3A29F4
+3A29F4:lI97|H3A2AB0
+3A2AB0:lI112|H3A2B74
+3A2B74:lI112|H3A2C30
+3A2C30:lI108|H3A2CE4
+3A2CE4:lI105|H3A2D94
+3A2D94:lI99|H3A2E3C
+3A2E3C:lI97|H3A2EC4
+3A2EC4:lI116|H3A2F3C
+3A2F3C:lI105|H3A2FAC
+3A2FAC:lI111|H3A3014
+3A3014:lI110|H3A307C
+3A307C:lI47|H3A30DC
+3A30DC:lI111|H3A3134
+3A3134:lI99|H3A3184
+3A3184:lI116|H3A31CC
+3A31CC:lI101|H3A3214
+3A3214:lI116|H3A325C
+3A325C:lI45|H3A32A4
+3A32A4:lI115|H3A32EC
+3A32EC:lI116|H3A332C
+3A332C:lI114|H3A335C
+3A335C:lI101|H3A3384
+3A3384:lI97|H3A33A4
+3A33A4:lI109|N
+3A29EC:lI101|H3A2AA8
+3A2AA8:lI120|H3A2B6C
+3A2B6C:lI101|N
+3A293C:lH3A29FC|H3A2A08
+3A29FC:t2:H3A2AB8,H3A2AC0
+3A2AC0:lI97|H3A2B84
+3A2B84:lI112|H3A2C40
+3A2C40:lI112|H3A2CF4
+3A2CF4:lI108|H3A2DA4
+3A2DA4:lI105|H3A2E44
+3A2E44:lI99|H3A2ECC
+3A2ECC:lI97|H3A2F44
+3A2F44:lI116|H3A2FB4
+3A2FB4:lI105|H3A301C
+3A301C:lI111|H3A3084
+3A3084:lI110|H3A30E4
+3A30E4:lI47|H3A313C
+3A313C:lI111|H3A318C
+3A318C:lI99|H3A31D4
+3A31D4:lI116|H3A321C
+3A321C:lI101|H3A3264
+3A3264:lI116|H3A32AC
+3A32AC:lI45|H3A32F4
+3A32F4:lI115|H3A3334
+3A3334:lI116|H3A3364
+3A3364:lI114|H3A338C
+3A338C:lI101|H3A33AC
+3A33AC:lI97|H3A33C4
+3A33C4:lI109|N
+3A2AB8:lI99|H3A2B7C
+3A2B7C:lI108|H3A2C38
+3A2C38:lI97|H3A2CEC
+3A2CEC:lI115|H3A2D9C
+3A2D9C:lI115|N
+3A2A08:lH3A2AC8|H3A2AD4
+3A2AC8:t2:H3A2B8C,H3A2B94
+3A2B94:lI97|H3A2C50
+3A2C50:lI112|H3A2D04
+3A2D04:lI112|H3A2DAC
+3A2DAC:lI108|H3A2E4C
+3A2E4C:lI105|H3A2ED4
+3A2ED4:lI99|H3A2F4C
+3A2F4C:lI97|H3A2FBC
+3A2FBC:lI116|H3A3024
+3A3024:lI105|H3A308C
+3A308C:lI111|H3A30EC
+3A30EC:lI110|H3A3144
+3A3144:lI47|H3A3194
+3A3194:lI109|H3A31DC
+3A31DC:lI115|H3A3224
+3A3224:lI119|H3A326C
+3A326C:lI111|H3A32B4
+3A32B4:lI114|H3A32FC
+3A32FC:lI100|N
+3A2B8C:lI100|H3A2C48
+3A2C48:lI111|H3A2CFC
+3A2CFC:lI99|N
+3A2AD4:lH3A2B9C|H3A2BA8
+3A2B9C:t2:H3A2C58,H3A2C60
+3A2C60:lI97|H3A2D14
+3A2D14:lI112|H3A2DBC
+3A2DBC:lI112|H3A2E54
+3A2E54:lI108|H3A2EDC
+3A2EDC:lI105|H3A2F54
+3A2F54:lI99|H3A2FC4
+3A2FC4:lI97|H3A302C
+3A302C:lI116|H3A3094
+3A3094:lI105|H3A30F4
+3A30F4:lI111|H3A314C
+3A314C:lI110|H3A319C
+3A319C:lI47|H3A31E4
+3A31E4:lI109|H3A322C
+3A322C:lI97|H3A3274
+3A3274:lI99|H3A32BC
+3A32BC:lI45|H3A3304
+3A3304:lI99|H3A333C
+3A333C:lI111|H3A336C
+3A336C:lI109|H3A3394
+3A3394:lI112|H3A33B4
+3A33B4:lI97|H3A33CC
+3A33CC:lI99|H3A33DC
+3A33DC:lI116|H3A33EC
+3A33EC:lI112|H3A33FC
+3A33FC:lI114|H3A340C
+3A340C:lI111|N
+3A2C58:lI99|H3A2D0C
+3A2D0C:lI112|H3A2DB4
+3A2DB4:lI116|N
+3A2BA8:lH3A2C68|N
+3A2C68:t2:H3A2D1C,H3A2D24
+3A2D24:lI97|H3A2DCC
+3A2DCC:lI112|H3A2E64
+3A2E64:lI112|H3A2EE4
+3A2EE4:lI108|H3A2F5C
+3A2F5C:lI105|H3A2FCC
+3A2FCC:lI99|H3A3034
+3A3034:lI97|H3A309C
+3A309C:lI116|H3A30FC
+3A30FC:lI105|H3A3154
+3A3154:lI111|H3A31A4
+3A31A4:lI110|H3A31EC
+3A31EC:lI47|H3A3234
+3A3234:lI109|H3A327C
+3A327C:lI97|H3A32C4
+3A32C4:lI99|H3A330C
+3A330C:lI45|H3A3344
+3A3344:lI98|H3A3374
+3A3374:lI105|H3A339C
+3A339C:lI110|H3A33BC
+3A33BC:lI104|H3A33D4
+3A33D4:lI101|H3A33E4
+3A33E4:lI120|H3A33F4
+3A33F4:lI52|H3A3404
+3A3404:lI48|N
+3A2D1C:lI104|H3A2DC4
+3A2DC4:lI113|H3A2E5C
+3A2E5C:lI120|N
+39DC28:lH39DC68|H39DC74
+39DC68:t2:A4:port,I8888
+39DC74:lH39DCA8|H39DCB4
+39DCA8:t2:AC:bind_address,H39DCF8
+39DCF8:t4:I127,I0,I0,I1
+39DCB4:lH39DD0C|H39DD18
+39DD0C:t2:AB:server_name,H39DD6C
+39DD6C:lI108|H39DDE4
+39DDE4:lI111|H39DE5C
+39DE5C:lI99|H39DEE4
+39DEE4:lI97|H39DF6C
+39DF6C:lI108|H39E00C
+39E00C:lI104|H39E0B4
+39E0B4:lI111|H39E16C
+39E16C:lI115|H39E238
+39E238:lI116|N
+39DD18:lH39DD74|H39DD80
+39DD74:t2:AE:max_header_siz,I1024
+39DD80:lH39DDEC|H39DDF8
+39DDEC:t2:A11:max_header_action,A8:reply414
+39DDF8:lH39DE64|H39DE70
+39DE64:t2:A8:com_type,A7:ip_comm
+39DE70:lH39DEEC|H39DEF8
+39DEEC:t2:A7:modules,H39DF74
+39DF74:lA9:mod_alias|H39E014
+39E014:lA8:mod_auth|H39E0BC
+39E0BC:lA7:mod_esi|H39E174
+39E174:lAB:mod_actions|H39E240
+39E240:lA7:mod_cgi|H39E324
+39E324:lAB:mod_include|H39E418
+39E418:lA7:mod_dir|H39E51C
+39E51C:lA7:mod_get|H39E634
+39E634:lA8:mod_head|H39E748
+39E748:lA7:mod_log|H39E85C
+39E85C:lAC:mod_disk_log|N
+39DEF8:lH39DF7C|H39DF88
+39DF7C:t2:AF:directory_index,H39E01C
+39E01C:lH39E0C4|N
+39E0C4:lI105|H39E17C
+39E17C:lI110|H39E248
+39E248:lI100|H39E32C
+39E32C:lI101|H39E420
+39E420:lI120|H39E524
+39E524:lI46|H39E63C
+39E63C:lI104|H39E750
+39E750:lI116|H39E864
+39E864:lI109|H39E978
+39E978:lI108|N
+39DF88:lH39E024|H39E030
+39E024:t2:AC:default_type,H39E0CC
+39E0CC:lI116|H39E184
+39E184:lI101|H39E250
+39E250:lI120|H39E334
+39E334:lI116|H39E428
+39E428:lI47|H39E52C
+39E52C:lI112|H39E644
+39E644:lI108|H39E758
+39E758:lI97|H39E86C
+39E86C:lI105|H39E980
+39E980:lI110|N
+39E030:lH39E0D4|H39E0E0
+39E0D4:t2:A10:erl_script_alias,H39E18C
+39E18C:t2:H39E258,H39E260
+39E260:lH39E344|N
+39E344:lI119|H39E438
+39E438:lI101|H39E53C
+39E53C:lI98|H39E654
+39E654:lI116|H39E768
+39E768:lI111|H39E87C
+39E87C:lI111|H39E990
+39E990:lI108|N
+39E258:lI47|H39E33C
+39E33C:lI119|H39E430
+39E430:lI101|H39E534
+39E534:lI98|H39E64C
+39E64C:lI116|H39E760
+39E760:lI111|H39E874
+39E874:lI111|H39E988
+39E988:lI108|N
+39E0E0:lH39E198|H39E1A4
+39E198:t2:A5:alias,H39E268
+39E268:t2:H39E34C,H39E354
+39E354:lI47|H39E448
+39E448:lI99|H39E54C
+39E54C:lI108|H39E664
+39E664:lI101|H39E778
+39E778:lI97|H39E88C
+39E88C:lI114|H39E9A0
+39E9A0:lI99|H39EA94
+39EA94:lI97|H39EB88
+39EB88:lI115|H39EC7C
+39EC7C:lI101|H39ED70
+39ED70:lI47|H39EE4C
+39EE4C:lI111|H39EF20
+39EF20:lI116|H39EFFC
+39EFFC:lI112|H39F0E0
+39F0E0:lI47|H39F1B4
+39F1B4:lI101|H39F288
+39F288:lI114|H39F344
+39F344:lI116|H39F408
+39F408:lI115|H39F4D4
+39F4D4:lI47|H39F5A8
+39F5A8:lI108|H39F67C
+39F67C:lI105|H39F750
+39F750:lI98|H39F824
+39F824:lI47|H39F908
+39F908:lI111|H39F9E4
+39F9E4:lI98|H39FAC0
+39FAC0:lI115|H39FB9C
+39FB9C:lI101|H39FC68
+39FC68:lI114|H39FD2C
+39FD2C:lI118|H39FDF8
+39FDF8:lI101|H39FEB4
+39FEB4:lI114|H39FF70
+39FF70:lI47|H3A0024
+3A0024:lI112|H3A00D8
+3A00D8:lI114|H3A0184
+3A0184:lI105|H3A0238
+3A0238:lI118|H3A02F4
+3A02F4:lI47|H3A03A8
+3A03A8:lI99|H3A0444
+3A0444:lI114|H3A04E8
+3A04E8:lI97|H3A058C
+3A058C:lI115|H3A0638
+3A0638:lI104|H3A06EC
+3A06EC:lI100|H3A0798
+3A0798:lI117|H3A083C
+3A083C:lI109|H3A08C8
+3A08C8:lI112|H3A095C
+3A095C:lI95|H3A09F0
+3A09F0:lI118|H3A0A8C
+3A0A8C:lI105|H3A0B38
+3A0B38:lI101|H3A0BE4
+3A0BE4:lI119|H3A0CA0
+3A0CA0:lI101|H3A0D5C
+3A0D5C:lI114|N
+39E34C:lI47|H39E440
+39E440:lI99|H39E544
+39E544:lI114|H39E65C
+39E65C:lI97|H39E770
+39E770:lI115|H39E884
+39E884:lI104|H39E998
+39E998:lI100|H39EA8C
+39EA8C:lI117|H39EB80
+39EB80:lI109|H39EC74
+39EC74:lI112|H39ED68
+39ED68:lI95|H39EE44
+39EE44:lI118|H39EF18
+39EF18:lI105|H39EFF4
+39EFF4:lI101|H39F0D8
+39F0D8:lI119|H39F1AC
+39F1AC:lI101|H39F280
+39F280:lI114|N
+39E1A4:lH39E274|H39E280
+39E274:t2:A5:alias,H39E35C
+39E35C:t2:H39E450,H39E458
+39E458:lI47|H39E55C
+39E55C:lI99|H39E674
+39E674:lI108|H39E788
+39E788:lI101|H39E89C
+39E89C:lI97|H39E9B0
+39E9B0:lI114|H39EAA4
+39EAA4:lI99|H39EB98
+39EB98:lI97|H39EC8C
+39EC8C:lI115|H39ED80
+39ED80:lI101|H39EE5C
+39EE5C:lI47|H39EF30
+39EF30:lI111|H39F00C
+39F00C:lI116|H39F0F0
+39F0F0:lI112|H39F1C4
+39F1C4:lI47|H39F298
+39F298:lI101|H39F354
+39F354:lI114|H39F418
+39F418:lI116|H39F4E4
+39F4E4:lI115|H39F5B0
+39F5B0:lI47|H39F684
+39F684:lI101|H39F758
+39F758:lI114|H39F82C
+39F82C:lI116|H39F910
+39F910:lI115|H39F9EC
+39F9EC:lI47|H39FAC8
+39FAC8:lI100|H39FBA4
+39FBA4:lI111|H39FC70
+39FC70:lI99|H39FD34
+39FD34:lI47|H39FE00
+39FE00:lI104|H39FEBC
+39FEBC:lI116|H39FF78
+39FF78:lI109|H3A002C
+3A002C:lI108|N
+39E450:lI47|H39E554
+39E554:lI99|H39E66C
+39E66C:lI114|H39E780
+39E780:lI97|H39E894
+39E894:lI115|H39E9A8
+39E9A8:lI104|H39EA9C
+39EA9C:lI100|H39EB90
+39EB90:lI117|H39EC84
+39EC84:lI109|H39ED78
+39ED78:lI112|H39EE54
+39EE54:lI95|H39EF28
+39EF28:lI101|H39F004
+39F004:lI114|H39F0E8
+39F0E8:lI116|H39F1BC
+39F1BC:lI115|H39F290
+39F290:lI95|H39F34C
+39F34C:lI100|H39F410
+39F410:lI111|H39F4DC
+39F4DC:lI99|N
+39E280:lH39E368|H39E374
+39E368:t2:A5:alias,H39E460
+39E460:t2:H39E564,H39E56C
+39E56C:lI47|H39E684
+39E684:lI99|H39E798
+39E798:lI108|H39E8AC
+39E8AC:lI101|H39E9C0
+39E9C0:lI97|H39EAB4
+39EAB4:lI114|H39EBA8
+39EBA8:lI99|H39EC9C
+39EC9C:lI97|H39ED90
+39ED90:lI115|H39EE6C
+39EE6C:lI101|H39EF40
+39EF40:lI47|H39F01C
+39F01C:lI111|H39F100
+39F100:lI116|H39F1D4
+39F1D4:lI112|H39F2A0
+39F2A0:lI47|H39F35C
+39F35C:lI101|H39F420
+39F420:lI114|H39F4EC
+39F4EC:lI116|H39F5B8
+39F5B8:lI115|H39F68C
+39F68C:lI47|H39F760
+39F760:lI108|H39F834
+39F834:lI105|H39F918
+39F918:lI98|H39F9F4
+39F9F4:lI47|H39FAD0
+39FAD0:lI111|H39FBAC
+39FBAC:lI98|H39FC78
+39FC78:lI115|H39FD3C
+39FD3C:lI101|H39FE08
+39FE08:lI114|H39FEC4
+39FEC4:lI118|H39FF80
+39FF80:lI101|H3A0034
+3A0034:lI114|H3A00E0
+3A00E0:lI47|H3A018C
+3A018C:lI100|H3A0240
+3A0240:lI111|H3A02FC
+3A02FC:lI99|H3A03B0
+3A03B0:lI47|H3A044C
+3A044C:lI104|H3A04F0
+3A04F0:lI116|H3A0594
+3A0594:lI109|H3A0640
+3A0640:lI108|N
+39E564:lI47|H39E67C
+39E67C:lI99|H39E790
+39E790:lI114|H39E8A4
+39E8A4:lI97|H39E9B8
+39E9B8:lI115|H39EAAC
+39EAAC:lI104|H39EBA0
+39EBA0:lI100|H39EC94
+39EC94:lI117|H39ED88
+39ED88:lI109|H39EE64
+39EE64:lI112|H39EF38
+39EF38:lI95|H39F014
+39F014:lI100|H39F0F8
+39F0F8:lI111|H39F1CC
+39F1CC:lI99|N
+39E374:lH39E46C|N
+39E46C:t2:A10:erl_script_alias,H39E574
+39E574:t2:H39E68C,H39E694
+39E694:lH39E7A8|N
+39E7A8:lI99|H39E8BC
+39E8BC:lI114|H39E9D0
+39E9D0:lI97|H39EAC4
+39EAC4:lI115|H39EBB8
+39EBB8:lI104|H39ECAC
+39ECAC:lI100|H39EDA0
+39EDA0:lI117|H39EE74
+39EE74:lI109|H39EF48
+39EF48:lI112|H39F024
+39F024:lI95|H39F108
+39F108:lI118|H39F1DC
+39F1DC:lI105|H39F2A8
+39F2A8:lI101|H39F364
+39F364:lI119|H39F428
+39F428:lI101|H39F4F4
+39F4F4:lI114|N
+39E68C:lI47|H39E7A0
+39E7A0:lI99|H39E8B4
+39E8B4:lI100|H39E9C8
+39E9C8:lI118|H39EABC
+39EABC:lI95|H39EBB0
+39EBB0:lI101|H39ECA4
+39ECA4:lI114|H39ED98
+39ED98:lI108|N
+39DB58:lN|H39DB9C
+39DB9C:lH39D9FC|H39DBEC
+39D9FC:t4:I127,I0,I0,I1
+39DBEC:lI8888|N
+3A3E20:lH3A3DFC|H3A3704
+3A3DFC:t8:A5:child,P<0.46.0>,H39DAC8,H39DAD8,A9:permanent,I2000,A6:worker,H39DAE8
+39DAE8:lAD:httpd_manager|H39DB38
+39DB38:lAA:gen_server|N
+39DAD8:t3:AD:httpd_manager,AA:start_link,H39DB30
+39DB30:lA9:undefined|H39DB78
+39DB78:lH39DB50|H39DBC0
+39DBC0:lN|N
+39DAC8:t3:AD:httpd_manager,H39D9FC,I8888
+3A3704:lH3A36E0|H39D998
+3A36E0:t8:A5:child,P<0.45.0>,H39DA18,H39DA28,A9:permanent,I2000,AA:supervisor,H39DA38
+39DA38:lAE:httpd_misc_sup|H39DAC0
+39DAC0:lAA:supervisor|N
+39DA28:t3:AE:httpd_misc_sup,A5:start,H39D958
+39D958:lH39D9FC|H39DA10
+39DA10:lI8888|H39DAB8
+39DAB8:lA7:silence|N
+39DA18:t3:AE:httpd_misc_sup,H39D9FC,I8888
+39D998:lH39DA64|N
+39DA64:t8:A5:child,P<0.44.0>,H39DAF0,H39DB00,A9:permanent,I2000,AA:supervisor,H39DB10
+39DB10:lA12:httpd_acceptor_sup|H39DB48
+39DB48:lAA:supervisor|N
+39DB00:t3:A12:httpd_acceptor_sup,A5:start,H39DB40
+39DB40:lH39D9FC|H39DB80
+39DB80:lI8888|H39DBC8
+39DBC8:lA7:silence|N
+39DAF0:t3:A12:httpd_acceptor_sup,H39D9FC,I8888
+39D960:t2:A5:local,A1A:httpd_sup__127_0_0_1__8888
+39D9CC:lAA:gen_server|H39DA90
+39DA90:lP<0.33.0>|H39DB20
+39DB20:lP<0.33.0>|H39DB60
+39DB60:lH39DBA4|H39DBB0
+39DBA4:t2:A5:local,A1A:httpd_sup__127_0_0_1__8888
+39DBB0:lAA:supervisor|H39DBF4
+39DBF4:lH39DC30|H39DC40
+39DC30:t3:H39D960,A9:httpd_sup,H39DA88
+39DC40:lN|N
+39D940:t2:AD:$initial_call,H39D9E4
+39D9E4:t3:A3:gen,A7:init_it,H39D9CC
+39D94C:t2:AA:$ancestors,H39D9F4
+39D9F4:lA8:web_tool|H39DAB0
+39DAB0:lP<0.27.0>|N
+=proc_dictionary:<0.44.0>
+H3756A8
+H3756B4
+H3756C0
+H3756CC
+=proc_stack:<0.44.0>
+36c194:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AA:supervisor
+y3:H36C030
+y4:A1E:httpd_acc_sup__127_0_0_1__8888
+y5:P<0.43.0>
+36c1b0:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H375710
+=proc_heap:<0.44.0>
+36C030:tA:A5:state,H3756D8,AB:one_for_one,H36C028,N,I500,I100,N,A12:httpd_acceptor_sup,H375730
+375730:lA7:silence|N
+36C028:lH36C004|N
+36C004:t8:A5:child,P<0.47.0>,H36BE80,H36BE90,A9:permanent,I1000,A6:worker,H36BEA0
+36BEA0:lAE:httpd_acceptor|N
+36BE90:t3:AE:httpd_acceptor,AA:start_link,H36BEE8
+36BEE8:lP<0.46.0>|H36BEF0
+36BEF0:lA7:ip_comm|H36BEF8
+36BEF8:lH36BF00|H36BF14
+36BF00:t4:I127,I0,I0,I1
+36BF14:lI8888|H36BF1C
+36BF1C:lA1B:httpd_conf__127_0_0_1__8888|H36BF24
+36BF24:lA7:silence|N
+36BE80:t3:AE:httpd_acceptor,H36BED4,I8888
+36BED4:t4:I127,I0,I0,I1
+3756D8:t2:A5:local,A1E:httpd_acc_sup__127_0_0_1__8888
+375710:lAA:gen_server|H375738
+375738:lP<0.43.0>|H375748
+375748:lP<0.43.0>|H375758
+375758:lH375760|H37576C
+375760:t2:A5:local,A1E:httpd_acc_sup__127_0_0_1__8888
+37576C:lAA:supervisor|H375774
+375774:lH37577C|H37578C
+37577C:t3:H3756D8,A12:httpd_acceptor_sup,H375730
+37578C:lN|N
+3756A8:t2:AD:$initial_call,H375718
+375718:t3:A3:gen,A7:init_it,H375710
+3756B4:t2:A9:verbosity,A7:silence
+3756C0:t2:AA:$ancestors,H375728
+375728:lA1A:httpd_sup__127_0_0_1__8888|H375740
+375740:lA8:web_tool|H375750
+375750:lP<0.27.0>|N
+3756CC:t2:A5:sname,A7:acc_sup
+=proc_dictionary:<0.45.0>
+H36F484
+H36F4F4
+H36F468
+H36F500
+=proc_stack:<0.45.0>
+36f734:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AA:supervisor
+y3:H36F5D0
+y4:A1F:httpd_misc_sup__127_0_0_1__8888
+y5:P<0.43.0>
+36f750:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H36F430
+=proc_heap:<0.45.0>
+36F5D0:tA:A5:state,H36F3FC,AB:one_for_one,N,N,I0,I1,N,AE:httpd_misc_sup,H36F408
+36F408:lA7:silence|N
+36F3FC:t2:A5:local,A1F:httpd_misc_sup__127_0_0_1__8888
+36F430:lAA:gen_server|H36F428
+36F428:lP<0.43.0>|H36F420
+36F420:lP<0.43.0>|H36F3D0
+36F3D0:lH36F3E0|H36F418
+36F3E0:t2:A5:local,A1F:httpd_misc_sup__127_0_0_1__8888
+36F418:lAA:supervisor|H36F3D8
+36F3D8:lH36F3EC|H36F410
+36F3EC:t3:H36F3FC,AE:httpd_misc_sup,H36F408
+36F410:lN|N
+36F484:t2:AD:$initial_call,H36F474
+36F474:t3:A3:gen,A7:init_it,H36F430
+36F4F4:t2:A9:verbosity,A7:silence
+36F468:t2:AA:$ancestors,H36F460
+36F460:lA1A:httpd_sup__127_0_0_1__8888|H36F440
+36F440:lA8:web_tool|H36F438
+36F438:lP<0.27.0>|N
+36F500:t2:A5:sname,A8:misc_sup
+=proc_dictionary:<0.46.0>
+H3BDA50
+H3BDA5C
+H3BDAC8
+H3BDB28
+H3BDB9C
+H3BDC00
+H3BDADC
+H3BDB3C
+=proc_stack:<0.46.0>
+39d8f4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AD:httpd_manager
+y3:H39D5A4
+y4:A16:httpd__127_0_0_1__8888
+y5:P<0.43.0>
+39d910:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H3BDAB0
+=proc_heap:<0.46.0>
+39D5A4:t9:A5:state,A7:ip_comm,A9:undefined,A1B:httpd_conf__127_0_0_1__8888,N,A9:unblocked,A9:undefined,A9:undefined,H39D430
+39D430:lH39BF40|H39D428
+39BF40:t2:A8:max_conn,I1
+39D428:lH39BC80|H39D420
+39BC80:t2:AF:last_heavy_load,A5:never
+39D420:lH39D414|N
+39D414:t2:AF:last_connection,H39D408
+39D408:t2:H39D3E8,H39D3F8
+39D3F8:t3:I11,I22,I34
+39D3E8:t3:I2004,I4,I21
+3BDAB0:lAA:gen_server|H3BDB20
+3BDB20:lP<0.43.0>|H3BDB94
+3BDB94:lP<0.43.0>|H3BDBF8
+3BDBF8:lH3BDC48|H3BDC54
+3BDC48:t2:A5:local,A16:httpd__127_0_0_1__8888
+3BDC54:lAD:httpd_manager|H3BDCAC
+3BDCAC:lH3BDD14|H3BDD1C
+3BDD14:lA9:undefined|H3BDD9C
+3BDD9C:lH3BDA84|H3BDE2C
+3BDA84:lH3BDAF0|H3BDAFC
+3BDAF0:t2:AB:server_root,H3BDB48
+3BDB48:lI47|H3BDBB0
+3BDBB0:lI99|H3BDC0C
+3BDC0C:lI108|H3BDC64
+3BDC64:lI101|H3BDCBC
+3BDCBC:lI97|H3BDD2C
+3BDD2C:lI114|H3BDDA4
+3BDDA4:lI99|H3BDE34
+3BDE34:lI97|H3BDED4
+3BDED4:lI115|H3BDF90
+3BDF90:lI101|H3BE054
+3BE054:lI47|H3BE128
+3BE128:lI111|H3BE204
+3BE204:lI116|H3BE2EC
+3BE2EC:lI112|H3BE3E0
+3BE3E0:lI47|H3BE4E4
+3BE4E4:lI101|H3BE5E8
+3BE5E8:lI114|H3BE6EC
+3BE6EC:lI116|H3BE7E0
+3BE7E0:lI115|H3BE8CC
+3BE8CC:lI47|H3BE9B8
+3BE9B8:lI108|H3BEAAC
+3BEAAC:lI105|H3BEB98
+3BEB98:lI98|H3BEC84
+3BEC84:lI47|H3BED70
+3BED70:lI119|H3BEE5C
+3BEE5C:lI101|H3BEF30
+3BEF30:lI98|H3BEFFC
+3BEFFC:lI116|H3BF0C8
+3BF0C8:lI111|H3BF19C
+3BF19C:lI111|H3BF260
+3BF260:lI108|H3BF314
+3BF314:lI47|H3BF3C0
+3BF3C0:lI112|H3BF474
+3BF474:lI114|H3BF530
+3BF530:lI105|H3BF5F4
+3BF5F4:lI118|H3BF6C8
+3BF6C8:lI47|H3BF79C
+3BF79C:lI114|H3BF870
+3BF870:lI111|H3BF954
+3BF954:lI111|H3BFA30
+3BFA30:lI116|N
+3BDAFC:lH3BDB50|H3BDB5C
+3BDB50:t2:AD:document_root,H3BDBB8
+3BDBB8:lI47|H3BDC14
+3BDC14:lI99|H3BDC6C
+3BDC6C:lI108|H3BDCC4
+3BDCC4:lI101|H3BDD34
+3BDD34:lI97|H3BDDAC
+3BDDAC:lI114|H3BDE3C
+3BDE3C:lI99|H3BDEDC
+3BDEDC:lI97|H3BDF98
+3BDF98:lI115|H3BE05C
+3BE05C:lI101|H3BE130
+3BE130:lI47|H3BE20C
+3BE20C:lI111|H3BE2F4
+3BE2F4:lI116|H3BE3E8
+3BE3E8:lI112|H3BE4EC
+3BE4EC:lI47|H3BE5F0
+3BE5F0:lI101|H3BE6F4
+3BE6F4:lI114|H3BE7E8
+3BE7E8:lI116|H3BE8D4
+3BE8D4:lI115|H3BE9C0
+3BE9C0:lI47|H3BEAB4
+3BEAB4:lI108|H3BEBA0
+3BEBA0:lI105|H3BEC8C
+3BEC8C:lI98|H3BED78
+3BED78:lI47|H3BEE64
+3BEE64:lI119|H3BEF38
+3BEF38:lI101|H3BF004
+3BF004:lI98|H3BF0D0
+3BF0D0:lI116|H3BF1A4
+3BF1A4:lI111|H3BF268
+3BF268:lI111|H3BF31C
+3BF31C:lI108|H3BF3C8
+3BF3C8:lI47|H3BF47C
+3BF47C:lI112|H3BF538
+3BF538:lI114|H3BF5FC
+3BF5FC:lI105|H3BF6D0
+3BF6D0:lI118|H3BF7A4
+3BF7A4:lI47|H3BF878
+3BF878:lI114|H3BF95C
+3BF95C:lI111|H3BFA38
+3BFA38:lI111|H3BFB0C
+3BFB0C:lI116|H3BFBE8
+3BFBE8:lI47|H3BFCB4
+3BFCB4:lI100|H3BFD78
+3BFD78:lI111|H3BFE3C
+3BFE3C:lI99|N
+3BDB5C:lH3BDBC0|H3BDBCC
+3BDBC0:t2:AA:mime_types,H3BDC1C
+3BDC1C:lH3BDC74|H3BDC80
+3BDC74:t2:H3BDCCC,H3BDCD4
+3BDCD4:lI120|H3BDD44
+3BDD44:lI45|H3BDDBC
+3BDDBC:lI119|H3BDE44
+3BDE44:lI111|H3BDEE4
+3BDEE4:lI114|H3BDFA0
+3BDFA0:lI108|H3BE064
+3BE064:lI100|H3BE138
+3BE138:lI47|H3BE214
+3BE214:lI120|H3BE2FC
+3BE2FC:lI45|H3BE3F0
+3BE3F0:lI118|H3BE4F4
+3BE4F4:lI114|H3BE5F8
+3BE5F8:lI109|H3BE6FC
+3BE6FC:lI108|N
+3BDCCC:lI119|H3BDD3C
+3BDD3C:lI114|H3BDDB4
+3BDDB4:lI108|N
+3BDC80:lH3BDCDC|H3BDCE8
+3BDCDC:t2:H3BDD4C,H3BDD54
+3BDD54:lI120|H3BDDCC
+3BDDCC:lI45|H3BDE54
+3BDE54:lI119|H3BDEF4
+3BDEF4:lI111|H3BDFA8
+3BDFA8:lI114|H3BE06C
+3BE06C:lI108|H3BE140
+3BE140:lI100|H3BE21C
+3BE21C:lI47|H3BE304
+3BE304:lI120|H3BE3F8
+3BE3F8:lI45|H3BE4FC
+3BE4FC:lI118|H3BE600
+3BE600:lI114|H3BE704
+3BE704:lI109|H3BE7F0
+3BE7F0:lI108|N
+3BDD4C:lI118|H3BDDC4
+3BDDC4:lI114|H3BDE4C
+3BDE4C:lI109|H3BDEEC
+3BDEEC:lI108|N
+3BDCE8:lH3BDD5C|H3BDD68
+3BDD5C:t2:H3BDDD4,H3BDDDC
+3BDDDC:lI120|H3BDE64
+3BDE64:lI45|H3BDF04
+3BDF04:lI99|H3BDFB0
+3BDFB0:lI111|H3BE074
+3BE074:lI110|H3BE148
+3BE148:lI102|H3BE224
+3BE224:lI101|H3BE30C
+3BE30C:lI114|H3BE400
+3BE400:lI101|H3BE504
+3BE504:lI110|H3BE608
+3BE608:lI99|H3BE70C
+3BE70C:lI101|H3BE7F8
+3BE7F8:lI47|H3BE8DC
+3BE8DC:lI120|H3BE9C8
+3BE9C8:lI45|H3BEABC
+3BEABC:lI99|H3BEBA8
+3BEBA8:lI111|H3BEC94
+3BEC94:lI111|H3BED80
+3BED80:lI108|H3BEE6C
+3BEE6C:lI116|H3BEF40
+3BEF40:lI97|H3BF00C
+3BF00C:lI108|H3BF0D8
+3BF0D8:lI107|N
+3BDDD4:lI105|H3BDE5C
+3BDE5C:lI99|H3BDEFC
+3BDEFC:lI101|N
+3BDD68:lH3BDDE4|H3BDDF0
+3BDDE4:t2:H3BDE6C,H3BDE74
+3BDE74:lI118|H3BDF14
+3BDF14:lI105|H3BDFC0
+3BDFC0:lI100|H3BE084
+3BE084:lI101|H3BE158
+3BE158:lI111|H3BE22C
+3BE22C:lI47|H3BE314
+3BE314:lI120|H3BE408
+3BE408:lI45|H3BE50C
+3BE50C:lI115|H3BE610
+3BE610:lI103|H3BE714
+3BE714:lI105|H3BE800
+3BE800:lI45|H3BE8E4
+3BE8E4:lI109|H3BE9D0
+3BE9D0:lI111|H3BEAC4
+3BEAC4:lI118|H3BEBB0
+3BEBB0:lI105|H3BEC9C
+3BEC9C:lI101|N
+3BDE6C:lI109|H3BDF0C
+3BDF0C:lI111|H3BDFB8
+3BDFB8:lI118|H3BE07C
+3BE07C:lI105|H3BE150
+3BE150:lI101|N
+3BDDF0:lH3BDE7C|H3BDE88
+3BDE7C:t2:H3BDF1C,H3BDF24
+3BDF24:lI118|H3BDFD0
+3BDFD0:lI105|H3BE094
+3BE094:lI100|H3BE160
+3BE160:lI101|H3BE234
+3BE234:lI111|H3BE31C
+3BE31C:lI47|H3BE410
+3BE410:lI120|H3BE514
+3BE514:lI45|H3BE618
+3BE618:lI109|H3BE71C
+3BE71C:lI115|H3BE808
+3BE808:lI118|H3BE8EC
+3BE8EC:lI105|H3BE9D8
+3BE9D8:lI100|H3BEACC
+3BEACC:lI101|H3BEBB8
+3BEBB8:lI111|N
+3BDF1C:lI97|H3BDFC8
+3BDFC8:lI118|H3BE08C
+3BE08C:lI105|N
+3BDE88:lH3BDF2C|H3BDF38
+3BDF2C:t2:H3BDFD8,H3BDFE0
+3BDFE0:lI118|H3BE0A4
+3BE0A4:lI105|H3BE168
+3BE168:lI100|H3BE23C
+3BE23C:lI101|H3BE324
+3BE324:lI111|H3BE418
+3BE418:lI47|H3BE51C
+3BE51C:lI113|H3BE620
+3BE620:lI117|H3BE724
+3BE724:lI105|H3BE810
+3BE810:lI99|H3BE8F4
+3BE8F4:lI107|H3BE9E0
+3BE9E0:lI116|H3BEAD4
+3BEAD4:lI105|H3BEBC0
+3BEBC0:lI109|H3BECA4
+3BECA4:lI101|N
+3BDFD8:lI113|H3BE09C
+3BE09C:lI116|N
+3BDF38:lH3BDFE8|H3BDFF4
+3BDFE8:t2:H3BE0AC,H3BE0B4
+3BE0B4:lI118|H3BE178
+3BE178:lI105|H3BE24C
+3BE24C:lI100|H3BE32C
+3BE32C:lI101|H3BE420
+3BE420:lI111|H3BE524
+3BE524:lI47|H3BE628
+3BE628:lI113|H3BE72C
+3BE72C:lI117|H3BE818
+3BE818:lI105|H3BE8FC
+3BE8FC:lI99|H3BE9E8
+3BE9E8:lI107|H3BEADC
+3BEADC:lI116|H3BEBC8
+3BEBC8:lI105|H3BECAC
+3BECAC:lI109|H3BED88
+3BED88:lI101|N
+3BE0AC:lI109|H3BE170
+3BE170:lI111|H3BE244
+3BE244:lI118|N
+3BDFF4:lH3BE0BC|H3BE0C8
+3BE0BC:t2:H3BE180,H3BE188
+3BE188:lI118|H3BE25C
+3BE25C:lI105|H3BE33C
+3BE33C:lI100|H3BE430
+3BE430:lI101|H3BE52C
+3BE52C:lI111|H3BE630
+3BE630:lI47|H3BE734
+3BE734:lI109|H3BE820
+3BE820:lI112|H3BE904
+3BE904:lI101|H3BE9F0
+3BE9F0:lI103|N
+3BE180:lI109|H3BE254
+3BE254:lI112|H3BE334
+3BE334:lI101|H3BE428
+3BE428:lI103|N
+3BE0C8:lH3BE190|H3BE19C
+3BE190:t2:H3BE264,H3BE26C
+3BE26C:lI118|H3BE34C
+3BE34C:lI105|H3BE440
+3BE440:lI100|H3BE534
+3BE534:lI101|H3BE638
+3BE638:lI111|H3BE73C
+3BE73C:lI47|H3BE828
+3BE828:lI109|H3BE90C
+3BE90C:lI112|H3BE9F8
+3BE9F8:lI101|H3BEAE4
+3BEAE4:lI103|N
+3BE264:lI109|H3BE344
+3BE344:lI112|H3BE438
+3BE438:lI103|N
+3BE19C:lH3BE274|H3BE280
+3BE274:t2:H3BE354,H3BE35C
+3BE35C:lI118|H3BE450
+3BE450:lI105|H3BE544
+3BE544:lI100|H3BE640
+3BE640:lI101|H3BE744
+3BE744:lI111|H3BE830
+3BE830:lI47|H3BE914
+3BE914:lI109|H3BEA00
+3BEA00:lI112|H3BEAEC
+3BEAEC:lI101|H3BEBD0
+3BEBD0:lI103|N
+3BE354:lI109|H3BE448
+3BE448:lI112|H3BE53C
+3BE53C:lI101|N
+3BE280:lH3BE364|H3BE370
+3BE364:t2:H3BE458,H3BE460
+3BE460:lI116|H3BE554
+3BE554:lI101|H3BE650
+3BE650:lI120|H3BE754
+3BE754:lI116|H3BE838
+3BE838:lI47|H3BE91C
+3BE91C:lI120|H3BEA08
+3BEA08:lI45|H3BEAF4
+3BEAF4:lI115|H3BEBD8
+3BEBD8:lI103|H3BECB4
+3BECB4:lI109|H3BED90
+3BED90:lI108|N
+3BE458:lI115|H3BE54C
+3BE54C:lI103|H3BE648
+3BE648:lI109|H3BE74C
+3BE74C:lI108|N
+3BE370:lH3BE468|H3BE474
+3BE468:t2:H3BE55C,H3BE564
+3BE564:lI116|H3BE660
+3BE660:lI101|H3BE764
+3BE764:lI120|H3BE840
+3BE840:lI116|H3BE924
+3BE924:lI47|H3BEA10
+3BEA10:lI120|H3BEAFC
+3BEAFC:lI45|H3BEBE0
+3BEBE0:lI115|H3BECBC
+3BECBC:lI103|H3BED98
+3BED98:lI109|H3BEE74
+3BEE74:lI108|N
+3BE55C:lI115|H3BE658
+3BE658:lI103|H3BE75C
+3BE75C:lI109|N
+3BE474:lH3BE56C|H3BE578
+3BE56C:t2:H3BE668,H3BE670
+3BE670:lI116|H3BE774
+3BE774:lI101|H3BE850
+3BE850:lI120|H3BE92C
+3BE92C:lI116|H3BEA18
+3BEA18:lI47|H3BEB04
+3BEB04:lI120|H3BEBE8
+3BEBE8:lI45|H3BECC4
+3BECC4:lI115|H3BEDA0
+3BEDA0:lI101|H3BEE7C
+3BEE7C:lI116|H3BEF48
+3BEF48:lI101|H3BF014
+3BF014:lI120|H3BF0E0
+3BF0E0:lI116|N
+3BE668:lI101|H3BE76C
+3BE76C:lI116|H3BE848
+3BE848:lI120|N
+3BE578:lH3BE678|H3BE684
+3BE678:t2:H3BE77C,H3BE784
+3BE784:lI116|H3BE860
+3BE860:lI101|H3BE93C
+3BE93C:lI120|H3BEA20
+3BEA20:lI116|H3BEB0C
+3BEB0C:lI47|H3BEBF0
+3BEBF0:lI116|H3BECCC
+3BECCC:lI97|H3BEDA8
+3BEDA8:lI98|H3BEE84
+3BEE84:lI45|H3BEF50
+3BEF50:lI115|H3BF01C
+3BF01C:lI101|H3BF0E8
+3BF0E8:lI112|H3BF1AC
+3BF1AC:lI97|H3BF270
+3BF270:lI114|H3BF324
+3BF324:lI97|H3BF3D0
+3BF3D0:lI116|H3BF484
+3BF484:lI101|H3BF540
+3BF540:lI100|H3BF604
+3BF604:lI45|H3BF6D8
+3BF6D8:lI118|H3BF7AC
+3BF7AC:lI97|H3BF880
+3BF880:lI108|H3BF964
+3BF964:lI117|H3BFA40
+3BFA40:lI101|H3BFB14
+3BFB14:lI115|N
+3BE77C:lI116|H3BE858
+3BE858:lI115|H3BE934
+3BE934:lI118|N
+3BE684:lH3BE78C|H3BE798
+3BE78C:t2:H3BE868,H3BE870
+3BE870:lI116|H3BE94C
+3BE94C:lI101|H3BEA30
+3BEA30:lI120|H3BEB14
+3BEB14:lI116|H3BEBF8
+3BEBF8:lI47|H3BECD4
+3BECD4:lI114|H3BEDB0
+3BEDB0:lI105|H3BEE8C
+3BEE8C:lI99|H3BEF58
+3BEF58:lI104|H3BF024
+3BF024:lI116|H3BF0F0
+3BF0F0:lI101|H3BF1B4
+3BF1B4:lI120|H3BF278
+3BF278:lI116|N
+3BE868:lI114|H3BE944
+3BE944:lI116|H3BEA28
+3BEA28:lI120|N
+3BE798:lH3BE878|H3BE884
+3BE878:t2:H3BE954,H3BE95C
+3BE95C:lI116|H3BEA40
+3BEA40:lI101|H3BEB24
+3BEB24:lI120|H3BEC00
+3BEC00:lI116|H3BECDC
+3BECDC:lI47|H3BEDB8
+3BEDB8:lI112|H3BEE94
+3BEE94:lI108|H3BEF60
+3BEF60:lI97|H3BF02C
+3BF02C:lI105|H3BF0F8
+3BF0F8:lI110|N
+3BE954:lI116|H3BEA38
+3BEA38:lI120|H3BEB1C
+3BEB1C:lI116|N
+3BE884:lH3BE964|H3BE970
+3BE964:t2:H3BEA48,H3BEA50
+3BEA50:lI116|H3BEB34
+3BEB34:lI101|H3BEC10
+3BEC10:lI120|H3BECEC
+3BECEC:lI116|H3BEDC8
+3BEDC8:lI47|H3BEE9C
+3BEE9C:lI120|H3BEF68
+3BEF68:lI45|H3BF034
+3BF034:lI115|H3BF100
+3BF100:lI101|H3BF1BC
+3BF1BC:lI114|H3BF280
+3BF280:lI118|H3BF32C
+3BF32C:lI101|H3BF3D8
+3BF3D8:lI114|H3BF48C
+3BF48C:lI45|H3BF548
+3BF548:lI112|H3BF60C
+3BF60C:lI97|H3BF6E0
+3BF6E0:lI114|H3BF7B4
+3BF7B4:lI115|H3BF888
+3BF888:lI101|H3BF96C
+3BF96C:lI100|H3BFA48
+3BFA48:lI45|H3BFB1C
+3BFB1C:lI104|H3BFBF0
+3BFBF0:lI116|H3BFCBC
+3BFCBC:lI109|H3BFD80
+3BFD80:lI108|N
+3BEA48:lI115|H3BEB2C
+3BEB2C:lI104|H3BEC08
+3BEC08:lI116|H3BECE4
+3BECE4:lI109|H3BEDC0
+3BEDC0:lI108|N
+3BE970:lH3BEA58|H3BEA64
+3BEA58:t2:H3BEB3C,H3BEB44
+3BEB44:lI116|H3BEC20
+3BEC20:lI101|H3BECFC
+3BECFC:lI120|H3BEDD8
+3BEDD8:lI116|H3BEEA4
+3BEEA4:lI47|H3BEF70
+3BEF70:lI104|H3BF03C
+3BF03C:lI116|H3BF108
+3BF108:lI109|H3BF1C4
+3BF1C4:lI108|N
+3BEB3C:lI104|H3BEC18
+3BEC18:lI116|H3BECF4
+3BECF4:lI109|H3BEDD0
+3BEDD0:lI108|N
+3BEA64:lH3BEB4C|H3BEB58
+3BEB4C:t2:H3BEC28,H3BEC30
+3BEC30:lI116|H3BED0C
+3BED0C:lI101|H3BEDE8
+3BEDE8:lI120|H3BEEAC
+3BEEAC:lI116|H3BEF78
+3BEF78:lI47|H3BF044
+3BF044:lI104|H3BF110
+3BF110:lI116|H3BF1CC
+3BF1CC:lI109|H3BF288
+3BF288:lI108|N
+3BEC28:lI104|H3BED04
+3BED04:lI116|H3BEDE0
+3BEDE0:lI109|N
+3BEB58:lH3BEC38|H3BEC44
+3BEC38:t2:H3BED14,H3BED1C
+3BED1C:lI105|H3BEDF8
+3BEDF8:lI109|H3BEEBC
+3BEEBC:lI97|H3BEF80
+3BEF80:lI103|H3BF04C
+3BF04C:lI101|H3BF118
+3BF118:lI47|H3BF1D4
+3BF1D4:lI120|H3BF290
+3BF290:lI45|H3BF334
+3BF334:lI120|H3BF3E0
+3BF3E0:lI119|H3BF494
+3BF494:lI105|H3BF550
+3BF550:lI110|H3BF614
+3BF614:lI100|H3BF6E8
+3BF6E8:lI111|H3BF7BC
+3BF7BC:lI119|H3BF890
+3BF890:lI100|H3BF974
+3BF974:lI117|H3BFA50
+3BFA50:lI109|H3BFB24
+3BFB24:lI112|N
+3BED14:lI120|H3BEDF0
+3BEDF0:lI119|H3BEEB4
+3BEEB4:lI100|N
+3BEC44:lH3BED24|H3BED30
+3BED24:t2:H3BEE00,H3BEE08
+3BEE08:lI105|H3BEECC
+3BEECC:lI109|H3BEF90
+3BEF90:lI97|H3BF054
+3BF054:lI103|H3BF120
+3BF120:lI101|H3BF1DC
+3BF1DC:lI47|H3BF298
+3BF298:lI120|H3BF33C
+3BF33C:lI45|H3BF3E8
+3BF3E8:lI120|H3BF49C
+3BF49C:lI112|H3BF558
+3BF558:lI105|H3BF61C
+3BF61C:lI120|H3BF6F0
+3BF6F0:lI109|H3BF7C4
+3BF7C4:lI97|H3BF898
+3BF898:lI112|N
+3BEE00:lI120|H3BEEC4
+3BEEC4:lI112|H3BEF88
+3BEF88:lI109|N
+3BED30:lH3BEE10|H3BEE1C
+3BEE10:t2:H3BEED4,H3BEEDC
+3BEEDC:lI105|H3BEFA0
+3BEFA0:lI109|H3BF064
+3BF064:lI97|H3BF128
+3BF128:lI103|H3BF1E4
+3BF1E4:lI101|H3BF2A0
+3BF2A0:lI47|H3BF344
+3BF344:lI120|H3BF3F0
+3BF3F0:lI45|H3BF4A4
+3BF4A4:lI120|H3BF560
+3BF560:lI98|H3BF624
+3BF624:lI105|H3BF6F8
+3BF6F8:lI116|H3BF7CC
+3BF7CC:lI109|H3BF8A0
+3BF8A0:lI97|H3BF97C
+3BF97C:lI112|N
+3BEED4:lI120|H3BEF98
+3BEF98:lI98|H3BF05C
+3BF05C:lI109|N
+3BEE1C:lH3BEEE4|H3BEEF0
+3BEEE4:t2:H3BEFA8,H3BEFB0
+3BEFB0:lI105|H3BF074
+3BF074:lI109|H3BF138
+3BF138:lI97|H3BF1EC
+3BF1EC:lI103|H3BF2A8
+3BF2A8:lI101|H3BF34C
+3BF34C:lI47|H3BF3F8
+3BF3F8:lI120|H3BF4AC
+3BF4AC:lI45|H3BF568
+3BF568:lI114|H3BF62C
+3BF62C:lI103|H3BF700
+3BF700:lI98|N
+3BEFA8:lI114|H3BF06C
+3BF06C:lI103|H3BF130
+3BF130:lI98|N
+3BEEF0:lH3BEFB8|H3BEFC4
+3BEFB8:t2:H3BF07C,H3BF084
+3BF084:lI105|H3BF148
+3BF148:lI109|H3BF1FC
+3BF1FC:lI97|H3BF2B0
+3BF2B0:lI103|H3BF354
+3BF354:lI101|H3BF400
+3BF400:lI47|H3BF4B4
+3BF4B4:lI120|H3BF570
+3BF570:lI45|H3BF634
+3BF634:lI112|H3BF708
+3BF708:lI111|H3BF7D4
+3BF7D4:lI114|H3BF8A8
+3BF8A8:lI116|H3BF984
+3BF984:lI97|H3BFA58
+3BFA58:lI98|H3BFB2C
+3BFB2C:lI108|H3BFBF8
+3BFBF8:lI101|H3BFCC4
+3BFCC4:lI45|H3BFD88
+3BFD88:lI112|H3BFE44
+3BFE44:lI105|H3BFEF0
+3BFEF0:lI120|H3BFFA4
+3BFFA4:lI109|H3C0050
+3C0050:lI97|H3C00FC
+3C00FC:lI112|N
+3BF07C:lI112|H3BF140
+3BF140:lI112|H3BF1F4
+3BF1F4:lI109|N
+3BEFC4:lH3BF08C|H3BF098
+3BF08C:t2:H3BF150,H3BF158
+3BF158:lI105|H3BF20C
+3BF20C:lI109|H3BF2C0
+3BF2C0:lI97|H3BF35C
+3BF35C:lI103|H3BF408
+3BF408:lI101|H3BF4BC
+3BF4BC:lI47|H3BF578
+3BF578:lI120|H3BF63C
+3BF63C:lI45|H3BF710
+3BF710:lI112|H3BF7DC
+3BF7DC:lI111|H3BF8B0
+3BF8B0:lI114|H3BF98C
+3BF98C:lI116|H3BFA60
+3BFA60:lI97|H3BFB34
+3BFB34:lI98|H3BFC00
+3BFC00:lI108|H3BFCCC
+3BFCCC:lI101|H3BFD90
+3BFD90:lI45|H3BFE4C
+3BFE4C:lI103|H3BFEF8
+3BFEF8:lI114|H3BFFAC
+3BFFAC:lI97|H3C0058
+3C0058:lI121|H3C0104
+3C0104:lI109|H3C01A8
+3C01A8:lI97|H3C025C
+3C025C:lI112|N
+3BF150:lI112|H3BF204
+3BF204:lI103|H3BF2B8
+3BF2B8:lI109|N
+3BF098:lH3BF160|H3BF16C
+3BF160:t2:H3BF214,H3BF21C
+3BF21C:lI105|H3BF2D0
+3BF2D0:lI109|H3BF36C
+3BF36C:lI97|H3BF410
+3BF410:lI103|H3BF4C4
+3BF4C4:lI101|H3BF580
+3BF580:lI47|H3BF644
+3BF644:lI120|H3BF718
+3BF718:lI45|H3BF7E4
+3BF7E4:lI112|H3BF8B8
+3BF8B8:lI111|H3BF994
+3BF994:lI114|H3BFA68
+3BFA68:lI116|H3BFB3C
+3BFB3C:lI97|H3BFC08
+3BFC08:lI98|H3BFCD4
+3BFCD4:lI108|H3BFD98
+3BFD98:lI101|H3BFE54
+3BFE54:lI45|H3BFF00
+3BFF00:lI98|H3BFFB4
+3BFFB4:lI105|H3C0060
+3C0060:lI116|H3C010C
+3C010C:lI109|H3C01B0
+3C01B0:lI97|H3C0264
+3C0264:lI112|N
+3BF214:lI112|H3BF2C8
+3BF2C8:lI98|H3BF364
+3BF364:lI109|N
+3BF16C:lH3BF224|H3BF230
+3BF224:t2:H3BF2D8,H3BF2E0
+3BF2E0:lI105|H3BF37C
+3BF37C:lI109|H3BF420
+3BF420:lI97|H3BF4CC
+3BF4CC:lI103|H3BF588
+3BF588:lI101|H3BF64C
+3BF64C:lI47|H3BF720
+3BF720:lI120|H3BF7EC
+3BF7EC:lI45|H3BF8C0
+3BF8C0:lI112|H3BF99C
+3BF99C:lI111|H3BFA70
+3BFA70:lI114|H3BFB44
+3BFB44:lI116|H3BFC10
+3BFC10:lI97|H3BFCDC
+3BFCDC:lI98|H3BFDA0
+3BFDA0:lI108|H3BFE5C
+3BFE5C:lI101|H3BFF08
+3BFF08:lI45|H3BFFBC
+3BFFBC:lI97|H3C0068
+3C0068:lI110|H3C0114
+3C0114:lI121|H3C01B8
+3C01B8:lI109|H3C026C
+3C026C:lI97|H3C0318
+3C0318:lI112|N
+3BF2D8:lI112|H3BF374
+3BF374:lI110|H3BF418
+3BF418:lI109|N
+3BF230:lH3BF2E8|H3BF2F4
+3BF2E8:t2:H3BF384,H3BF38C
+3BF38C:lI105|H3BF430
+3BF430:lI109|H3BF4DC
+3BF4DC:lI97|H3BF590
+3BF590:lI103|H3BF654
+3BF654:lI101|H3BF728
+3BF728:lI47|H3BF7F4
+3BF7F4:lI120|H3BF8C8
+3BF8C8:lI45|H3BF9A4
+3BF9A4:lI99|H3BFA78
+3BFA78:lI109|H3BFB4C
+3BFB4C:lI117|H3BFC18
+3BFC18:lI45|H3BFCE4
+3BFCE4:lI114|H3BFDA8
+3BFDA8:lI97|H3BFE64
+3BFE64:lI115|H3BFF10
+3BFF10:lI116|H3BFFC4
+3BFFC4:lI101|H3C0070
+3C0070:lI114|N
+3BF384:lI114|H3BF428
+3BF428:lI97|H3BF4D4
+3BF4D4:lI115|N
+3BF2F4:lH3BF394|H3BF3A0
+3BF394:t2:H3BF438,H3BF440
+3BF440:lI105|H3BF4EC
+3BF4EC:lI109|H3BF5A0
+3BF5A0:lI97|H3BF664
+3BF664:lI103|H3BF730
+3BF730:lI101|H3BF7FC
+3BF7FC:lI47|H3BF8D0
+3BF8D0:lI116|H3BF9AC
+3BF9AC:lI105|H3BFA80
+3BFA80:lI102|H3BFB54
+3BFB54:lI102|N
+3BF438:lI116|H3BF4E4
+3BF4E4:lI105|H3BF598
+3BF598:lI102|H3BF65C
+3BF65C:lI102|N
+3BF3A0:lH3BF448|H3BF454
+3BF448:t2:H3BF4F4,H3BF4FC
+3BF4FC:lI105|H3BF5B0
+3BF5B0:lI109|H3BF674
+3BF674:lI97|H3BF738
+3BF738:lI103|H3BF804
+3BF804:lI101|H3BF8D8
+3BF8D8:lI47|H3BF9B4
+3BF9B4:lI116|H3BFA88
+3BFA88:lI105|H3BFB5C
+3BFB5C:lI102|H3BFC20
+3BFC20:lI102|N
+3BF4F4:lI116|H3BF5A8
+3BF5A8:lI105|H3BF66C
+3BF66C:lI102|N
+3BF454:lH3BF504|H3BF510
+3BF504:t2:H3BF5B8,H3BF5C0
+3BF5C0:lI105|H3BF684
+3BF684:lI109|H3BF748
+3BF748:lI97|H3BF80C
+3BF80C:lI103|H3BF8E0
+3BF8E0:lI101|H3BF9BC
+3BF9BC:lI47|H3BFA90
+3BFA90:lI112|H3BFB64
+3BFB64:lI110|H3BFC28
+3BFC28:lI103|N
+3BF5B8:lI112|H3BF67C
+3BF67C:lI110|H3BF740
+3BF740:lI103|N
+3BF510:lH3BF5C8|H3BF5D4
+3BF5C8:t2:H3BF68C,H3BF694
+3BF694:lI105|H3BF758
+3BF758:lI109|H3BF81C
+3BF81C:lI97|H3BF8F0
+3BF8F0:lI103|H3BF9C4
+3BF9C4:lI101|H3BFA98
+3BFA98:lI47|H3BFB6C
+3BFB6C:lI106|H3BFC30
+3BFC30:lI112|H3BFCEC
+3BFCEC:lI101|H3BFDB0
+3BFDB0:lI103|N
+3BF68C:lI106|H3BF750
+3BF750:lI112|H3BF814
+3BF814:lI101|H3BF8E8
+3BF8E8:lI103|N
+3BF5D4:lH3BF69C|H3BF6A8
+3BF69C:t2:H3BF760,H3BF768
+3BF768:lI105|H3BF82C
+3BF82C:lI109|H3BF900
+3BF900:lI97|H3BF9CC
+3BF9CC:lI103|H3BFAA0
+3BFAA0:lI101|H3BFB74
+3BFB74:lI47|H3BFC38
+3BFC38:lI106|H3BFCF4
+3BFCF4:lI112|H3BFDB8
+3BFDB8:lI101|H3BFE6C
+3BFE6C:lI103|N
+3BF760:lI106|H3BF824
+3BF824:lI112|H3BF8F8
+3BF8F8:lI103|N
+3BF6A8:lH3BF770|H3BF77C
+3BF770:t2:H3BF834,H3BF83C
+3BF83C:lI105|H3BF910
+3BF910:lI109|H3BF9DC
+3BF9DC:lI97|H3BFAA8
+3BFAA8:lI103|H3BFB7C
+3BFB7C:lI101|H3BFC40
+3BFC40:lI47|H3BFCFC
+3BFCFC:lI106|H3BFDC0
+3BFDC0:lI112|H3BFE74
+3BFE74:lI101|H3BFF18
+3BFF18:lI103|N
+3BF834:lI106|H3BF908
+3BF908:lI112|H3BF9D4
+3BF9D4:lI101|N
+3BF77C:lH3BF844|H3BF850
+3BF844:t2:H3BF918,H3BF920
+3BF920:lI105|H3BF9EC
+3BF9EC:lI109|H3BFAB8
+3BFAB8:lI97|H3BFB84
+3BFB84:lI103|H3BFC48
+3BFC48:lI101|H3BFD04
+3BFD04:lI47|H3BFDC8
+3BFDC8:lI105|H3BFE7C
+3BFE7C:lI101|H3BFF20
+3BFF20:lI102|N
+3BF918:lI105|H3BF9E4
+3BF9E4:lI101|H3BFAB0
+3BFAB0:lI102|N
+3BF850:lH3BF928|H3BF934
+3BF928:t2:H3BF9F4,H3BF9FC
+3BF9FC:lI105|H3BFAC8
+3BFAC8:lI109|H3BFB94
+3BFB94:lI97|H3BFC50
+3BFC50:lI103|H3BFD0C
+3BFD0C:lI101|H3BFDD0
+3BFDD0:lI47|H3BFE84
+3BFE84:lI103|H3BFF28
+3BFF28:lI105|H3BFFCC
+3BFFCC:lI102|N
+3BF9F4:lI103|H3BFAC0
+3BFAC0:lI105|H3BFB8C
+3BFB8C:lI102|N
+3BF934:lH3BFA04|H3BFA10
+3BFA04:t2:H3BFAD0,H3BFAD8
+3BFAD8:lI99|H3BFBA4
+3BFBA4:lI104|H3BFC60
+3BFC60:lI101|H3BFD14
+3BFD14:lI109|H3BFDD8
+3BFDD8:lI105|H3BFE8C
+3BFE8C:lI99|H3BFF30
+3BFF30:lI97|H3BFFD4
+3BFFD4:lI108|H3C0078
+3C0078:lI47|H3C011C
+3C011C:lI120|H3C01C0
+3C01C0:lI45|H3C0274
+3C0274:lI112|H3C0320
+3C0320:lI100|H3C03CC
+3C03CC:lI98|N
+3BFAD0:lI112|H3BFB9C
+3BFB9C:lI100|H3BFC58
+3BFC58:lI98|N
+3BFA10:lH3BFAE0|H3BFAEC
+3BFAE0:t2:H3BFBAC,H3BFBB4
+3BFBB4:lI99|H3BFC70
+3BFC70:lI104|H3BFD24
+3BFD24:lI101|H3BFDE0
+3BFDE0:lI109|H3BFE94
+3BFE94:lI105|H3BFF38
+3BFF38:lI99|H3BFFDC
+3BFFDC:lI97|H3C0080
+3C0080:lI108|H3C0124
+3C0124:lI47|H3C01C8
+3C01C8:lI120|H3C027C
+3C027C:lI45|H3C0328
+3C0328:lI112|H3C03D4
+3C03D4:lI100|H3C0460
+3C0460:lI98|N
+3BFBAC:lI120|H3BFC68
+3BFC68:lI121|H3BFD1C
+3BFD1C:lI122|N
+3BFAEC:lH3BFBBC|H3BFBC8
+3BFBBC:t2:H3BFC78,H3BFC80
+3BFC80:lI97|H3BFD34
+3BFD34:lI117|H3BFDF0
+3BFDF0:lI100|H3BFE9C
+3BFE9C:lI105|H3BFF40
+3BFF40:lI111|H3BFFE4
+3BFFE4:lI47|H3C0088
+3C0088:lI120|H3C012C
+3C012C:lI45|H3C01D0
+3C01D0:lI119|H3C0284
+3C0284:lI97|H3C0330
+3C0330:lI118|N
+3BFC78:lI119|H3BFD2C
+3BFD2C:lI97|H3BFDE8
+3BFDE8:lI118|N
+3BFBC8:lH3BFC88|H3BFC94
+3BFC88:t2:H3BFD3C,H3BFD44
+3BFD44:lI97|H3BFE00
+3BFE00:lI117|H3BFEA4
+3BFEA4:lI100|H3BFF48
+3BFF48:lI105|H3BFFEC
+3BFFEC:lI111|H3C0090
+3C0090:lI47|H3C0134
+3C0134:lI120|H3C01D8
+3C01D8:lI45|H3C028C
+3C028C:lI114|H3C0338
+3C0338:lI101|H3C03DC
+3C03DC:lI97|H3C0468
+3C0468:lI108|H3C04FC
+3C04FC:lI97|H3C0598
+3C0598:lI117|H3C063C
+3C063C:lI100|H3C06E8
+3C06E8:lI105|H3C0794
+3C0794:lI111|N
+3BFD3C:lI114|H3BFDF8
+3BFDF8:lI97|N
+3BFC94:lH3BFD4C|H3BFD58
+3BFD4C:t2:H3BFE08,H3BFE10
+3BFE10:lI97|H3BFEB4
+3BFEB4:lI117|H3BFF58
+3BFF58:lI100|H3BFFF4
+3BFFF4:lI105|H3C0098
+3C0098:lI111|H3C013C
+3C013C:lI47|H3C01E0
+3C01E0:lI120|H3C0294
+3C0294:lI45|H3C0340
+3C0340:lI112|H3C03E4
+3C03E4:lI110|H3C0470
+3C0470:lI45|H3C0504
+3C0504:lI114|H3C05A0
+3C05A0:lI101|H3C0644
+3C0644:lI97|H3C06F0
+3C06F0:lI108|H3C079C
+3C079C:lI97|H3C0838
+3C0838:lI117|H3C08C4
+3C08C4:lI100|H3C0958
+3C0958:lI105|H3C09EC
+3C09EC:lI111|H3C0A88
+3C0A88:lI45|H3C0B2C
+3C0B2C:lI112|H3C0BD0
+3C0BD0:lI108|H3C0C84
+3C0C84:lI117|H3C0D38
+3C0D38:lI103|H3C0DEC
+3C0DEC:lI105|H3C0EA0
+3C0EA0:lI110|N
+3BFE08:lI114|H3BFEAC
+3BFEAC:lI112|H3BFF50
+3BFF50:lI109|N
+3BFD58:lH3BFE18|H3BFE24
+3BFE18:t2:H3BFEBC,H3BFEC4
+3BFEC4:lI97|H3BFF68
+3BFF68:lI117|H3C0004
+3C0004:lI100|H3C00A0
+3C00A0:lI105|H3C0144
+3C0144:lI111|H3C01E8
+3C01E8:lI47|H3C029C
+3C029C:lI120|H3C0348
+3C0348:lI45|H3C03EC
+3C03EC:lI112|H3C0478
+3C0478:lI110|H3C050C
+3C050C:lI45|H3C05A8
+3C05A8:lI114|H3C064C
+3C064C:lI101|H3C06F8
+3C06F8:lI97|H3C07A4
+3C07A4:lI108|H3C0840
+3C0840:lI97|H3C08CC
+3C08CC:lI117|H3C0960
+3C0960:lI100|H3C09F4
+3C09F4:lI105|H3C0A90
+3C0A90:lI111|N
+3BFEBC:lI114|H3BFF60
+3BFF60:lI97|H3BFFFC
+3BFFFC:lI109|N
+3BFE24:lH3BFECC|H3BFED8
+3BFECC:t2:H3BFF70,H3BFF78
+3BFF78:lI97|H3C0014
+3C0014:lI117|H3C00B0
+3C00B0:lI100|H3C014C
+3C014C:lI105|H3C01F0
+3C01F0:lI111|H3C02A4
+3C02A4:lI47|H3C0350
+3C0350:lI120|H3C03F4
+3C03F4:lI45|H3C0480
+3C0480:lI97|H3C0514
+3C0514:lI105|H3C05B0
+3C05B0:lI102|H3C0654
+3C0654:lI102|N
+3BFF70:lI97|H3C000C
+3C000C:lI105|H3C00A8
+3C00A8:lI102|N
+3BFED8:lH3BFF80|H3BFF8C
+3BFF80:t2:H3C001C,H3C0024
+3C0024:lI97|H3C00C0
+3C00C0:lI117|H3C015C
+3C015C:lI100|H3C0200
+3C0200:lI105|H3C02AC
+3C02AC:lI111|H3C0358
+3C0358:lI47|H3C03FC
+3C03FC:lI120|H3C0488
+3C0488:lI45|H3C051C
+3C051C:lI97|H3C05B8
+3C05B8:lI105|H3C065C
+3C065C:lI102|H3C0700
+3C0700:lI102|N
+3C001C:lI97|H3C00B8
+3C00B8:lI105|H3C0154
+3C0154:lI102|H3C01F8
+3C01F8:lI102|N
+3BFF8C:lH3C002C|H3C0038
+3C002C:t2:H3C00C8,H3C00D0
+3C00D0:lI97|H3C016C
+3C016C:lI117|H3C0210
+3C0210:lI100|H3C02BC
+3C02BC:lI105|H3C0360
+3C0360:lI111|H3C0404
+3C0404:lI47|H3C0490
+3C0490:lI120|H3C0524
+3C0524:lI45|H3C05C0
+3C05C0:lI97|H3C0664
+3C0664:lI105|H3C0708
+3C0708:lI102|H3C07AC
+3C07AC:lI102|N
+3C00C8:lI97|H3C0164
+3C0164:lI105|H3C0208
+3C0208:lI102|H3C02B4
+3C02B4:lI99|N
+3C0038:lH3C00D8|H3C00E4
+3C00D8:t2:H3C0174,H3C017C
+3C017C:lI97|H3C0220
+3C0220:lI117|H3C02CC
+3C02CC:lI100|H3C0370
+3C0370:lI105|H3C040C
+3C040C:lI111|H3C0498
+3C0498:lI47|H3C052C
+3C052C:lI109|H3C05C8
+3C05C8:lI112|H3C066C
+3C066C:lI101|H3C0710
+3C0710:lI103|N
+3C0174:lI109|H3C0218
+3C0218:lI112|H3C02C4
+3C02C4:lI103|H3C0368
+3C0368:lI97|N
+3C00E4:lH3C0184|H3C0190
+3C0184:t2:H3C0228,H3C0230
+3C0230:lI97|H3C02DC
+3C02DC:lI117|H3C0380
+3C0380:lI100|H3C0414
+3C0414:lI105|H3C04A0
+3C04A0:lI111|H3C0534
+3C0534:lI47|H3C05D0
+3C05D0:lI109|H3C0674
+3C0674:lI112|H3C0718
+3C0718:lI101|H3C07B4
+3C07B4:lI103|N
+3C0228:lI109|H3C02D4
+3C02D4:lI112|H3C0378
+3C0378:lI50|N
+3C0190:lH3C0238|H3C0244
+3C0238:t2:H3C02E4,H3C02EC
+3C02EC:lI97|H3C0390
+3C0390:lI117|H3C041C
+3C041C:lI100|H3C04A8
+3C04A8:lI105|H3C053C
+3C053C:lI111|H3C05D8
+3C05D8:lI47|H3C067C
+3C067C:lI98|H3C0720
+3C0720:lI97|H3C07BC
+3C07BC:lI115|H3C0848
+3C0848:lI105|H3C08D4
+3C08D4:lI99|N
+3C02E4:lI97|H3C0388
+3C0388:lI117|N
+3C0244:lH3C02F4|H3C0300
+3C02F4:t2:H3C0398,H3C03A0
+3C03A0:lI97|H3C042C
+3C042C:lI117|H3C04B8
+3C04B8:lI100|H3C0544
+3C0544:lI105|H3C05E0
+3C05E0:lI111|H3C0684
+3C0684:lI47|H3C0728
+3C0728:lI98|H3C07C4
+3C07C4:lI97|H3C0850
+3C0850:lI115|H3C08DC
+3C08DC:lI105|H3C0968
+3C0968:lI99|N
+3C0398:lI115|H3C0424
+3C0424:lI110|H3C04B0
+3C04B0:lI100|N
+3C0300:lH3C03A8|H3C03B4
+3C03A8:t2:H3C0434,H3C043C
+3C043C:lI97|H3C04C8
+3C04C8:lI112|H3C0554
+3C0554:lI112|H3C05E8
+3C05E8:lI108|H3C068C
+3C068C:lI105|H3C0730
+3C0730:lI99|H3C07CC
+3C07CC:lI97|H3C0858
+3C0858:lI116|H3C08E4
+3C08E4:lI105|H3C0970
+3C0970:lI111|H3C09FC
+3C09FC:lI110|H3C0A98
+3C0A98:lI47|H3C0B34
+3C0B34:lI122|H3C0BD8
+3C0BD8:lI105|H3C0C8C
+3C0C8C:lI112|N
+3C0434:lI122|H3C04C0
+3C04C0:lI105|H3C054C
+3C054C:lI112|N
+3C03B4:lH3C0444|H3C0450
+3C0444:t2:H3C04D0,H3C04D8
+3C04D8:lI97|H3C0564
+3C0564:lI112|H3C05F8
+3C05F8:lI112|H3C0694
+3C0694:lI108|H3C0738
+3C0738:lI105|H3C07D4
+3C07D4:lI99|H3C0860
+3C0860:lI97|H3C08EC
+3C08EC:lI116|H3C0978
+3C0978:lI105|H3C0A04
+3C0A04:lI111|H3C0AA0
+3C0AA0:lI110|H3C0B3C
+3C0B3C:lI47|H3C0BE0
+3C0BE0:lI120|H3C0C94
+3C0C94:lI45|H3C0D40
+3C0D40:lI119|H3C0DF4
+3C0DF4:lI97|H3C0EA8
+3C0EA8:lI105|H3C0F64
+3C0F64:lI115|H3C1030
+3C1030:lI45|H3C1104
+3C1104:lI115|H3C11D8
+3C11D8:lI111|H3C12A4
+3C12A4:lI117|H3C1378
+3C1378:lI114|H3C1454
+3C1454:lI99|H3C1538
+3C1538:lI101|N
+3C04D0:lI115|H3C055C
+3C055C:lI114|H3C05F0
+3C05F0:lI99|N
+3C0450:lH3C04E0|H3C04EC
+3C04E0:t2:H3C056C,H3C0574
+3C0574:lI97|H3C0608
+3C0608:lI112|H3C06A4
+3C06A4:lI112|H3C0748
+3C0748:lI108|H3C07E4
+3C07E4:lI105|H3C0868
+3C0868:lI99|H3C08F4
+3C08F4:lI97|H3C0980
+3C0980:lI116|H3C0A0C
+3C0A0C:lI105|H3C0AA8
+3C0AA8:lI111|H3C0B44
+3C0B44:lI110|H3C0BE8
+3C0BE8:lI47|H3C0C9C
+3C0C9C:lI120|H3C0D48
+3C0D48:lI45|H3C0DFC
+3C0DFC:lI117|H3C0EB0
+3C0EB0:lI115|H3C0F6C
+3C0F6C:lI116|H3C1038
+3C1038:lI97|H3C110C
+3C110C:lI114|N
+3C056C:lI117|H3C0600
+3C0600:lI115|H3C069C
+3C069C:lI116|H3C0740
+3C0740:lI97|H3C07DC
+3C07DC:lI114|N
+3C04EC:lH3C057C|H3C0588
+3C057C:t2:H3C0610,H3C0618
+3C0618:lI97|H3C06B4
+3C06B4:lI112|H3C0750
+3C0750:lI112|H3C07EC
+3C07EC:lI108|H3C0870
+3C0870:lI105|H3C08FC
+3C08FC:lI99|H3C0988
+3C0988:lI97|H3C0A14
+3C0A14:lI116|H3C0AB0
+3C0AB0:lI105|H3C0B4C
+3C0B4C:lI111|H3C0BF0
+3C0BF0:lI110|H3C0CA4
+3C0CA4:lI47|H3C0D50
+3C0D50:lI120|H3C0E04
+3C0E04:lI45|H3C0EB8
+3C0EB8:lI116|H3C0F74
+3C0F74:lI114|H3C1040
+3C1040:lI111|H3C1114
+3C1114:lI102|H3C11E0
+3C11E0:lI102|H3C12AC
+3C12AC:lI45|H3C1380
+3C1380:lI109|H3C145C
+3C145C:lI115|N
+3C0610:lI109|H3C06AC
+3C06AC:lI115|N
+3C0588:lH3C0620|H3C062C
+3C0620:t2:H3C06BC,H3C06C4
+3C06C4:lI97|H3C0760
+3C0760:lI112|H3C07F4
+3C07F4:lI112|H3C0878
+3C0878:lI108|H3C0904
+3C0904:lI105|H3C0990
+3C0990:lI99|H3C0A1C
+3C0A1C:lI97|H3C0AB8
+3C0AB8:lI116|H3C0B54
+3C0B54:lI105|H3C0BF8
+3C0BF8:lI111|H3C0CAC
+3C0CAC:lI110|H3C0D58
+3C0D58:lI47|H3C0E0C
+3C0E0C:lI120|H3C0EC0
+3C0EC0:lI45|H3C0F7C
+3C0F7C:lI116|H3C1048
+3C1048:lI114|H3C111C
+3C111C:lI111|H3C11E8
+3C11E8:lI102|H3C12B4
+3C12B4:lI102|H3C1388
+3C1388:lI45|H3C1464
+3C1464:lI109|H3C1540
+3C1540:lI101|N
+3C06BC:lI109|H3C0758
+3C0758:lI101|N
+3C062C:lH3C06CC|H3C06D8
+3C06CC:t2:H3C0768,H3C0770
+3C0770:lI97|H3C0804
+3C0804:lI112|H3C0888
+3C0888:lI112|H3C090C
+3C090C:lI108|H3C0998
+3C0998:lI105|H3C0A24
+3C0A24:lI99|H3C0AC0
+3C0AC0:lI97|H3C0B5C
+3C0B5C:lI116|H3C0C00
+3C0C00:lI105|H3C0CB4
+3C0CB4:lI111|H3C0D60
+3C0D60:lI110|H3C0E14
+3C0E14:lI47|H3C0EC8
+3C0EC8:lI120|H3C0F84
+3C0F84:lI45|H3C1050
+3C1050:lI116|H3C1124
+3C1124:lI114|H3C11F0
+3C11F0:lI111|H3C12BC
+3C12BC:lI102|H3C1390
+3C1390:lI102|H3C146C
+3C146C:lI45|H3C1548
+3C1548:lI109|H3C161C
+3C161C:lI97|H3C16F0
+3C16F0:lI110|N
+3C0768:lI109|H3C07FC
+3C07FC:lI97|H3C0880
+3C0880:lI110|N
+3C06D8:lH3C0778|H3C0784
+3C0778:t2:H3C080C,H3C0814
+3C0814:lI97|H3C0890
+3C0890:lI112|H3C0914
+3C0914:lI112|H3C09A0
+3C09A0:lI108|H3C0A2C
+3C0A2C:lI105|H3C0AC8
+3C0AC8:lI99|H3C0B64
+3C0B64:lI97|H3C0C08
+3C0C08:lI116|H3C0CBC
+3C0CBC:lI105|H3C0D68
+3C0D68:lI111|H3C0E1C
+3C0E1C:lI110|H3C0ED0
+3C0ED0:lI47|H3C0F8C
+3C0F8C:lI120|H3C1058
+3C1058:lI45|H3C112C
+3C112C:lI116|H3C11F8
+3C11F8:lI114|H3C12C4
+3C12C4:lI111|H3C1398
+3C1398:lI102|H3C1474
+3C1474:lI102|N
+3C080C:lI116|N
+3C0784:lH3C081C|H3C0828
+3C081C:t2:H3C0898,H3C08A0
+3C08A0:lI97|H3C0924
+3C0924:lI112|H3C09A8
+3C09A8:lI112|H3C0A34
+3C0A34:lI108|H3C0AD0
+3C0AD0:lI105|H3C0B6C
+3C0B6C:lI99|H3C0C10
+3C0C10:lI97|H3C0CC4
+3C0CC4:lI116|H3C0D70
+3C0D70:lI105|H3C0E24
+3C0E24:lI111|H3C0ED8
+3C0ED8:lI110|H3C0F94
+3C0F94:lI47|H3C1060
+3C1060:lI120|H3C1134
+3C1134:lI45|H3C1200
+3C1200:lI116|H3C12CC
+3C12CC:lI114|H3C13A0
+3C13A0:lI111|H3C147C
+3C147C:lI102|H3C1550
+3C1550:lI102|N
+3C0898:lI116|H3C091C
+3C091C:lI114|N
+3C0828:lH3C08A8|H3C08B4
+3C08A8:t2:H3C092C,H3C0934
+3C0934:lI97|H3C09B8
+3C09B8:lI112|H3C0A44
+3C0A44:lI112|H3C0AE0
+3C0AE0:lI108|H3C0B74
+3C0B74:lI105|H3C0C18
+3C0C18:lI99|H3C0CCC
+3C0CCC:lI97|H3C0D78
+3C0D78:lI116|H3C0E2C
+3C0E2C:lI105|H3C0EE0
+3C0EE0:lI111|H3C0F9C
+3C0F9C:lI110|H3C1068
+3C1068:lI47|H3C113C
+3C113C:lI120|H3C1208
+3C1208:lI45|H3C12D4
+3C12D4:lI116|H3C13A8
+3C13A8:lI114|H3C1484
+3C1484:lI111|H3C1558
+3C1558:lI102|H3C1624
+3C1624:lI102|N
+3C092C:lI114|H3C09B0
+3C09B0:lI111|H3C0A3C
+3C0A3C:lI102|H3C0AD8
+3C0AD8:lI102|N
+3C08B4:lH3C093C|H3C0948
+3C093C:t2:H3C09C0,H3C09C8
+3C09C8:lI97|H3C0A54
+3C0A54:lI112|H3C0AF0
+3C0AF0:lI112|H3C0B84
+3C0B84:lI108|H3C0C28
+3C0C28:lI105|H3C0CDC
+3C0CDC:lI99|H3C0D88
+3C0D88:lI97|H3C0E34
+3C0E34:lI116|H3C0EE8
+3C0EE8:lI105|H3C0FA4
+3C0FA4:lI111|H3C1070
+3C1070:lI110|H3C1144
+3C1144:lI47|H3C1210
+3C1210:lI120|H3C12DC
+3C12DC:lI45|H3C13B0
+3C13B0:lI116|H3C148C
+3C148C:lI101|H3C1560
+3C1560:lI120|H3C162C
+3C162C:lI105|H3C16F8
+3C16F8:lI110|H3C17BC
+3C17BC:lI102|H3C1880
+3C1880:lI111|N
+3C09C0:lI116|H3C0A4C
+3C0A4C:lI101|H3C0AE8
+3C0AE8:lI120|H3C0B7C
+3C0B7C:lI105|H3C0C20
+3C0C20:lI110|H3C0CD4
+3C0CD4:lI102|H3C0D80
+3C0D80:lI111|N
+3C0948:lH3C09D0|H3C09DC
+3C09D0:t2:H3C0A5C,H3C0A64
+3C0A64:lI97|H3C0B00
+3C0B00:lI112|H3C0B94
+3C0B94:lI112|H3C0C38
+3C0C38:lI108|H3C0CE4
+3C0CE4:lI105|H3C0D90
+3C0D90:lI99|H3C0E3C
+3C0E3C:lI97|H3C0EF0
+3C0EF0:lI116|H3C0FAC
+3C0FAC:lI105|H3C1078
+3C1078:lI111|H3C114C
+3C114C:lI110|H3C1218
+3C1218:lI47|H3C12E4
+3C12E4:lI120|H3C13B8
+3C13B8:lI45|H3C1494
+3C1494:lI116|H3C1568
+3C1568:lI101|H3C1634
+3C1634:lI120|H3C1700
+3C1700:lI105|H3C17C4
+3C17C4:lI110|H3C1888
+3C1888:lI102|H3C1944
+3C1944:lI111|N
+3C0A5C:lI116|H3C0AF8
+3C0AF8:lI101|H3C0B8C
+3C0B8C:lI120|H3C0C30
+3C0C30:lI105|N
+3C09DC:lH3C0A6C|H3C0A78
+3C0A6C:t2:H3C0B08,H3C0B10
+3C0B10:lI97|H3C0BA4
+3C0BA4:lI112|H3C0C48
+3C0C48:lI112|H3C0CEC
+3C0CEC:lI108|H3C0D98
+3C0D98:lI105|H3C0E44
+3C0E44:lI99|H3C0EF8
+3C0EF8:lI97|H3C0FB4
+3C0FB4:lI116|H3C1080
+3C1080:lI105|H3C1154
+3C1154:lI111|H3C1220
+3C1220:lI110|H3C12EC
+3C12EC:lI47|H3C13C0
+3C13C0:lI120|H3C149C
+3C149C:lI45|H3C1570
+3C1570:lI116|H3C163C
+3C163C:lI101|H3C1708
+3C1708:lI120|N
+3C0B08:lI116|H3C0B9C
+3C0B9C:lI101|H3C0C40
+3C0C40:lI120|N
+3C0A78:lH3C0B18|H3C0B24
+3C0B18:t2:H3C0BAC,H3C0BB4
+3C0BB4:lI97|H3C0C58
+3C0C58:lI112|H3C0CFC
+3C0CFC:lI112|H3C0DA0
+3C0DA0:lI108|H3C0E4C
+3C0E4C:lI105|H3C0F00
+3C0F00:lI99|H3C0FBC
+3C0FBC:lI97|H3C1088
+3C1088:lI116|H3C115C
+3C115C:lI105|H3C1228
+3C1228:lI111|H3C12F4
+3C12F4:lI110|H3C13C8
+3C13C8:lI47|H3C14A4
+3C14A4:lI120|H3C1578
+3C1578:lI45|H3C1644
+3C1644:lI116|H3C1710
+3C1710:lI99|H3C17CC
+3C17CC:lI108|N
+3C0BAC:lI116|H3C0C50
+3C0C50:lI99|H3C0CF4
+3C0CF4:lI108|N
+3C0B24:lH3C0BBC|H3C0BC8
+3C0BBC:t2:H3C0C60,H3C0C68
+3C0C68:lI97|H3C0D0C
+3C0D0C:lI112|H3C0DB0
+3C0DB0:lI112|H3C0E54
+3C0E54:lI108|H3C0F08
+3C0F08:lI105|H3C0FC4
+3C0FC4:lI99|H3C1090
+3C1090:lI97|H3C1164
+3C1164:lI116|H3C1230
+3C1230:lI105|H3C12FC
+3C12FC:lI111|H3C13D0
+3C13D0:lI110|H3C14AC
+3C14AC:lI47|H3C1580
+3C1580:lI120|H3C164C
+3C164C:lI45|H3C1718
+3C1718:lI116|H3C17D4
+3C17D4:lI97|H3C1890
+3C1890:lI114|N
+3C0C60:lI116|H3C0D04
+3C0D04:lI97|H3C0DA8
+3C0DA8:lI114|N
+3C0BC8:lH3C0C70|H3C0C7C
+3C0C70:t2:H3C0D14,H3C0D1C
+3C0D1C:lI97|H3C0DC0
+3C0DC0:lI112|H3C0E64
+3C0E64:lI112|H3C0F18
+3C0F18:lI108|H3C0FD4
+3C0FD4:lI105|H3C10A0
+3C10A0:lI99|H3C116C
+3C116C:lI97|H3C1238
+3C1238:lI116|H3C1304
+3C1304:lI105|H3C13D8
+3C13D8:lI111|H3C14B4
+3C14B4:lI110|H3C1588
+3C1588:lI47|H3C1654
+3C1654:lI120|H3C1720
+3C1720:lI45|H3C17DC
+3C17DC:lI115|H3C1898
+3C1898:lI118|H3C194C
+3C194C:lI52|H3C1A00
+3C1A00:lI99|H3C1AB4
+3C1AB4:lI114|H3C1B78
+3C1B78:lI99|N
+3C0D14:lI115|H3C0DB8
+3C0DB8:lI118|H3C0E5C
+3C0E5C:lI52|H3C0F10
+3C0F10:lI99|H3C0FCC
+3C0FCC:lI114|H3C1098
+3C1098:lI99|N
+3C0C7C:lH3C0D24|H3C0D30
+3C0D24:t2:H3C0DC8,H3C0DD0
+3C0DD0:lI97|H3C0E74
+3C0E74:lI112|H3C0F28
+3C0F28:lI112|H3C0FE4
+3C0FE4:lI108|H3C10B0
+3C10B0:lI105|H3C117C
+3C117C:lI99|H3C1248
+3C1248:lI97|H3C130C
+3C130C:lI116|H3C13E0
+3C13E0:lI105|H3C14BC
+3C14BC:lI111|H3C1590
+3C1590:lI110|H3C165C
+3C165C:lI47|H3C1728
+3C1728:lI120|H3C17E4
+3C17E4:lI45|H3C18A0
+3C18A0:lI115|H3C1954
+3C1954:lI118|H3C1A08
+3C1A08:lI52|H3C1ABC
+3C1ABC:lI99|H3C1B80
+3C1B80:lI112|H3C1C4C
+3C1C4C:lI105|H3C1D10
+3C1D10:lI111|N
+3C0DC8:lI115|H3C0E6C
+3C0E6C:lI118|H3C0F20
+3C0F20:lI52|H3C0FDC
+3C0FDC:lI99|H3C10A8
+3C10A8:lI112|H3C1174
+3C1174:lI105|H3C1240
+3C1240:lI111|N
+3C0D30:lH3C0DD8|H3C0DE4
+3C0DD8:t2:H3C0E7C,H3C0E84
+3C0E84:lI97|H3C0F38
+3C0F38:lI112|H3C0FF4
+3C0FF4:lI112|H3C10B8
+3C10B8:lI108|H3C1184
+3C1184:lI105|H3C1250
+3C1250:lI99|H3C1314
+3C1314:lI97|H3C13E8
+3C13E8:lI116|H3C14C4
+3C14C4:lI105|H3C1598
+3C1598:lI111|H3C1664
+3C1664:lI110|H3C1730
+3C1730:lI47|H3C17EC
+3C17EC:lI120|H3C18A8
+3C18A8:lI45|H3C195C
+3C195C:lI115|H3C1A10
+3C1A10:lI116|H3C1AC4
+3C1AC4:lI117|H3C1B88
+3C1B88:lI102|H3C1C54
+3C1C54:lI102|H3C1D18
+3C1D18:lI105|H3C1DD4
+3C1DD4:lI116|N
+3C0E7C:lI115|H3C0F30
+3C0F30:lI105|H3C0FEC
+3C0FEC:lI116|N
+3C0DE4:lH3C0E8C|H3C0E98
+3C0E8C:t2:H3C0F40,H3C0F48
+3C0F48:lI97|H3C1004
+3C1004:lI112|H3C10C8
+3C10C8:lI112|H3C1194
+3C1194:lI108|H3C1258
+3C1258:lI105|H3C131C
+3C131C:lI99|H3C13F0
+3C13F0:lI97|H3C14CC
+3C14CC:lI116|H3C15A0
+3C15A0:lI105|H3C166C
+3C166C:lI111|H3C1738
+3C1738:lI110|H3C17F4
+3C17F4:lI47|H3C18B0
+3C18B0:lI120|H3C1964
+3C1964:lI45|H3C1A18
+3C1A18:lI115|H3C1ACC
+3C1ACC:lI104|H3C1B90
+3C1B90:lI97|H3C1C5C
+3C1C5C:lI114|N
+3C0F40:lI115|H3C0FFC
+3C0FFC:lI104|H3C10C0
+3C10C0:lI97|H3C118C
+3C118C:lI114|N
+3C0E98:lH3C0F50|H3C0F5C
+3C0F50:t2:H3C100C,H3C1014
+3C1014:lI97|H3C10D8
+3C10D8:lI112|H3C119C
+3C119C:lI112|H3C1260
+3C1260:lI108|H3C1324
+3C1324:lI105|H3C13F8
+3C13F8:lI99|H3C14D4
+3C14D4:lI97|H3C15A8
+3C15A8:lI116|H3C1674
+3C1674:lI105|H3C1740
+3C1740:lI111|H3C17FC
+3C17FC:lI110|H3C18B8
+3C18B8:lI47|H3C196C
+3C196C:lI120|H3C1A20
+3C1A20:lI45|H3C1AD4
+3C1AD4:lI115|H3C1B98
+3C1B98:lI104|N
+3C100C:lI115|H3C10D0
+3C10D0:lI104|N
+3C0F5C:lH3C101C|H3C1028
+3C101C:t2:H3C10E0,H3C10E8
+3C10E8:lI97|H3C11AC
+3C11AC:lI112|H3C1268
+3C1268:lI112|H3C132C
+3C132C:lI108|H3C1400
+3C1400:lI105|H3C14DC
+3C14DC:lI99|H3C15B0
+3C15B0:lI97|H3C167C
+3C167C:lI116|H3C1748
+3C1748:lI105|H3C1804
+3C1804:lI111|H3C18C0
+3C18C0:lI110|H3C1974
+3C1974:lI47|H3C1A28
+3C1A28:lI120|H3C1ADC
+3C1ADC:lI45|H3C1BA0
+3C1BA0:lI110|H3C1C64
+3C1C64:lI101|H3C1D20
+3C1D20:lI116|H3C1DDC
+3C1DDC:lI99|H3C1E98
+3C1E98:lI100|H3C1F5C
+3C1F5C:lI102|N
+3C10E0:lI110|H3C11A4
+3C11A4:lI99|N
+3C1028:lH3C10F0|H3C10FC
+3C10F0:t2:H3C11B4,H3C11BC
+3C11BC:lI97|H3C1278
+3C1278:lI112|H3C133C
+3C133C:lI112|H3C1408
+3C1408:lI108|H3C14E4
+3C14E4:lI105|H3C15B8
+3C15B8:lI99|H3C1684
+3C1684:lI97|H3C1750
+3C1750:lI116|H3C180C
+3C180C:lI105|H3C18C8
+3C18C8:lI111|H3C197C
+3C197C:lI110|H3C1A30
+3C1A30:lI47|H3C1AE4
+3C1AE4:lI120|H3C1BA8
+3C1BA8:lI45|H3C1C6C
+3C1C6C:lI110|H3C1D28
+3C1D28:lI101|H3C1DE4
+3C1DE4:lI116|H3C1EA0
+3C1EA0:lI99|H3C1F64
+3C1F64:lI100|H3C2018
+3C2018:lI102|N
+3C11B4:lI99|H3C1270
+3C1270:lI100|H3C1334
+3C1334:lI102|N
+3C10FC:lH3C11C4|H3C11D0
+3C11C4:t2:H3C1280,H3C1288
+3C1288:lI97|H3C134C
+3C134C:lI112|H3C1418
+3C1418:lI112|H3C14EC
+3C14EC:lI108|H3C15C0
+3C15C0:lI105|H3C168C
+3C168C:lI99|H3C1758
+3C1758:lI97|H3C1814
+3C1814:lI116|H3C18D0
+3C18D0:lI105|H3C1984
+3C1984:lI111|H3C1A38
+3C1A38:lI110|H3C1AEC
+3C1AEC:lI47|H3C1BB0
+3C1BB0:lI120|H3C1C74
+3C1C74:lI45|H3C1D30
+3C1D30:lI109|H3C1DEC
+3C1DEC:lI105|H3C1EA8
+3C1EA8:lI102|N
+3C1280:lI109|H3C1344
+3C1344:lI105|H3C1410
+3C1410:lI102|N
+3C11D0:lH3C1290|H3C129C
+3C1290:t2:H3C1354,H3C135C
+3C135C:lI97|H3C1428
+3C1428:lI112|H3C14FC
+3C14FC:lI112|H3C15D0
+3C15D0:lI108|H3C169C
+3C169C:lI105|H3C1760
+3C1760:lI99|H3C181C
+3C181C:lI97|H3C18D8
+3C18D8:lI116|H3C198C
+3C198C:lI105|H3C1A40
+3C1A40:lI111|H3C1AF4
+3C1AF4:lI110|H3C1BB8
+3C1BB8:lI47|H3C1C7C
+3C1C7C:lI120|H3C1D38
+3C1D38:lI45|H3C1DF4
+3C1DF4:lI108|H3C1EB0
+3C1EB0:lI97|H3C1F6C
+3C1F6C:lI116|H3C2020
+3C2020:lI101|H3C20DC
+3C20DC:lI120|N
+3C1354:lI108|H3C1420
+3C1420:lI97|H3C14F4
+3C14F4:lI116|H3C15C8
+3C15C8:lI101|H3C1694
+3C1694:lI120|N
+3C129C:lH3C1364|H3C1370
+3C1364:t2:H3C1430,H3C1438
+3C1438:lI97|H3C150C
+3C150C:lI112|H3C15E0
+3C15E0:lI112|H3C16A4
+3C16A4:lI108|H3C1768
+3C1768:lI105|H3C1824
+3C1824:lI99|H3C18E0
+3C18E0:lI97|H3C1994
+3C1994:lI116|H3C1A48
+3C1A48:lI105|H3C1AFC
+3C1AFC:lI111|H3C1BC0
+3C1BC0:lI110|H3C1C84
+3C1C84:lI47|H3C1D40
+3C1D40:lI120|H3C1DFC
+3C1DFC:lI45|H3C1EB8
+3C1EB8:lI107|H3C1F74
+3C1F74:lI111|H3C2028
+3C2028:lI97|H3C20E4
+3C20E4:lI110|N
+3C1430:lI115|H3C1504
+3C1504:lI107|H3C15D8
+3C15D8:lI112|N
+3C1370:lH3C1440|H3C144C
+3C1440:t2:H3C1514,H3C151C
+3C151C:lI97|H3C15F0
+3C15F0:lI112|H3C16B4
+3C16B4:lI112|H3C1770
+3C1770:lI108|H3C182C
+3C182C:lI105|H3C18E8
+3C18E8:lI99|H3C199C
+3C199C:lI97|H3C1A50
+3C1A50:lI116|H3C1B04
+3C1B04:lI105|H3C1BC8
+3C1BC8:lI111|H3C1C8C
+3C1C8C:lI110|H3C1D48
+3C1D48:lI47|H3C1E04
+3C1E04:lI120|H3C1EC0
+3C1EC0:lI45|H3C1F7C
+3C1F7C:lI107|H3C2030
+3C2030:lI111|H3C20EC
+3C20EC:lI97|H3C21A0
+3C21A0:lI110|N
+3C1514:lI115|H3C15E8
+3C15E8:lI107|H3C16AC
+3C16AC:lI100|N
+3C144C:lH3C1524|H3C1530
+3C1524:t2:H3C15F8,H3C1600
+3C1600:lI97|H3C16C4
+3C16C4:lI112|H3C1780
+3C1780:lI112|H3C1834
+3C1834:lI108|H3C18F0
+3C18F0:lI105|H3C19A4
+3C19A4:lI99|H3C1A58
+3C1A58:lI97|H3C1B0C
+3C1B0C:lI116|H3C1BD0
+3C1BD0:lI105|H3C1C94
+3C1C94:lI111|H3C1D50
+3C1D50:lI110|H3C1E0C
+3C1E0C:lI47|H3C1EC8
+3C1EC8:lI120|H3C1F84
+3C1F84:lI45|H3C2038
+3C2038:lI107|H3C20F4
+3C20F4:lI111|H3C21A8
+3C21A8:lI97|H3C225C
+3C225C:lI110|N
+3C15F8:lI115|H3C16BC
+3C16BC:lI107|H3C1778
+3C1778:lI116|N
+3C1530:lH3C1608|H3C1614
+3C1608:t2:H3C16CC,H3C16D4
+3C16D4:lI97|H3C1790
+3C1790:lI112|H3C1844
+3C1844:lI112|H3C18F8
+3C18F8:lI108|H3C19AC
+3C19AC:lI105|H3C1A60
+3C1A60:lI99|H3C1B14
+3C1B14:lI97|H3C1BD8
+3C1BD8:lI116|H3C1C9C
+3C1C9C:lI105|H3C1D58
+3C1D58:lI111|H3C1E14
+3C1E14:lI110|H3C1ED0
+3C1ED0:lI47|H3C1F8C
+3C1F8C:lI120|H3C2040
+3C2040:lI45|H3C20FC
+3C20FC:lI107|H3C21B0
+3C21B0:lI111|H3C2264
+3C2264:lI97|H3C2320
+3C2320:lI110|N
+3C16CC:lI115|H3C1788
+3C1788:lI107|H3C183C
+3C183C:lI109|N
+3C1614:lH3C16DC|H3C16E8
+3C16DC:t2:H3C1798,H3C17A0
+3C17A0:lI97|H3C1854
+3C1854:lI112|H3C1908
+3C1908:lI112|H3C19B4
+3C19B4:lI108|H3C1A68
+3C1A68:lI105|H3C1B1C
+3C1B1C:lI99|H3C1BE0
+3C1BE0:lI97|H3C1CA4
+3C1CA4:lI116|H3C1D60
+3C1D60:lI105|H3C1E1C
+3C1E1C:lI111|H3C1ED8
+3C1ED8:lI110|H3C1F94
+3C1F94:lI47|H3C2048
+3C2048:lI120|H3C2104
+3C2104:lI45|H3C21B8
+3C21B8:lI104|H3C226C
+3C226C:lI116|H3C2328
+3C2328:lI116|H3C23E4
+3C23E4:lI112|H3C2498
+3C2498:lI100|H3C2554
+3C2554:lI45|H3C2610
+3C2610:lI99|H3C26D4
+3C26D4:lI103|H3C2790
+3C2790:lI105|N
+3C1798:lI99|H3C184C
+3C184C:lI103|H3C1900
+3C1900:lI105|N
+3C16E8:lH3C17A8|H3C17B4
+3C17A8:t2:H3C185C,H3C1864
+3C1864:lI97|H3C1918
+3C1918:lI112|H3C19C4
+3C19C4:lI112|H3C1A70
+3C1A70:lI108|H3C1B24
+3C1B24:lI105|H3C1BE8
+3C1BE8:lI99|H3C1CAC
+3C1CAC:lI97|H3C1D68
+3C1D68:lI116|H3C1E24
+3C1E24:lI105|H3C1EE0
+3C1EE0:lI111|H3C1F9C
+3C1F9C:lI110|H3C2050
+3C2050:lI47|H3C210C
+3C210C:lI120|H3C21C0
+3C21C0:lI45|H3C2274
+3C2274:lI104|H3C2330
+3C2330:lI100|H3C23EC
+3C23EC:lI102|N
+3C185C:lI104|H3C1910
+3C1910:lI100|H3C19BC
+3C19BC:lI102|N
+3C17B4:lH3C186C|H3C1878
+3C186C:t2:H3C1920,H3C1928
+3C1928:lI97|H3C19D4
+3C19D4:lI112|H3C1A78
+3C1A78:lI112|H3C1B2C
+3C1B2C:lI108|H3C1BF0
+3C1BF0:lI105|H3C1CB4
+3C1CB4:lI99|H3C1D70
+3C1D70:lI97|H3C1E2C
+3C1E2C:lI116|H3C1EE8
+3C1EE8:lI105|H3C1FA4
+3C1FA4:lI111|H3C2058
+3C2058:lI110|H3C2114
+3C2114:lI47|H3C21C8
+3C21C8:lI120|H3C227C
+3C227C:lI45|H3C2338
+3C2338:lI103|H3C23F4
+3C23F4:lI122|H3C24A0
+3C24A0:lI105|H3C255C
+3C255C:lI112|N
+3C1920:lI103|H3C19CC
+3C19CC:lI122|N
+3C1878:lH3C1930|H3C193C
+3C1930:t2:H3C19DC,H3C19E4
+3C19E4:lI97|H3C1A88
+3C1A88:lI112|H3C1B3C
+3C1B3C:lI112|H3C1C00
+3C1C00:lI108|H3C1CBC
+3C1CBC:lI105|H3C1D78
+3C1D78:lI99|H3C1E34
+3C1E34:lI97|H3C1EF0
+3C1EF0:lI116|H3C1FAC
+3C1FAC:lI105|H3C2060
+3C2060:lI111|H3C211C
+3C211C:lI110|H3C21D0
+3C21D0:lI47|H3C2284
+3C2284:lI120|H3C2340
+3C2340:lI45|H3C23FC
+3C23FC:lI103|H3C24A8
+3C24A8:lI116|H3C2564
+3C2564:lI97|H3C2618
+3C2618:lI114|N
+3C19DC:lI103|H3C1A80
+3C1A80:lI116|H3C1B34
+3C1B34:lI97|H3C1BF8
+3C1BF8:lI114|N
+3C193C:lH3C19EC|H3C19F8
+3C19EC:t2:H3C1A90,H3C1A98
+3C1A98:lI97|H3C1B4C
+3C1B4C:lI112|H3C1C10
+3C1C10:lI112|H3C1CC4
+3C1CC4:lI108|H3C1D80
+3C1D80:lI105|H3C1E3C
+3C1E3C:lI99|H3C1EF8
+3C1EF8:lI97|H3C1FB4
+3C1FB4:lI116|H3C2068
+3C2068:lI105|H3C2124
+3C2124:lI111|H3C21D8
+3C21D8:lI110|H3C228C
+3C228C:lI47|H3C2348
+3C2348:lI120|H3C2404
+3C2404:lI45|H3C24B0
+3C24B0:lI100|H3C256C
+3C256C:lI118|H3C2620
+3C2620:lI105|N
+3C1A90:lI100|H3C1B44
+3C1B44:lI118|H3C1C08
+3C1C08:lI105|N
+3C19F8:lH3C1AA0|H3C1AAC
+3C1AA0:t2:H3C1B54,H3C1B5C
+3C1B5C:lI97|H3C1C20
+3C1C20:lI112|H3C1CD4
+3C1CD4:lI112|H3C1D88
+3C1D88:lI108|H3C1E44
+3C1E44:lI105|H3C1F00
+3C1F00:lI99|H3C1FBC
+3C1FBC:lI97|H3C2070
+3C2070:lI116|H3C212C
+3C212C:lI105|H3C21E0
+3C21E0:lI111|H3C2294
+3C2294:lI110|H3C2350
+3C2350:lI47|H3C240C
+3C240C:lI120|H3C24B8
+3C24B8:lI45|H3C2574
+3C2574:lI100|H3C2628
+3C2628:lI105|H3C26DC
+3C26DC:lI114|H3C2798
+3C2798:lI101|H3C2854
+3C2854:lI99|H3C2918
+3C2918:lI116|H3C29E4
+3C29E4:lI111|H3C2AB0
+3C2AB0:lI114|N
+3C1B54:lI100|H3C1C18
+3C1C18:lI99|H3C1CCC
+3C1CCC:lI114|N
+3C1AAC:lH3C1B64|H3C1B70
+3C1B64:t2:H3C1C28,H3C1C30
+3C1C30:lI97|H3C1CE4
+3C1CE4:lI112|H3C1D98
+3C1D98:lI112|H3C1E4C
+3C1E4C:lI108|H3C1F08
+3C1F08:lI105|H3C1FC4
+3C1FC4:lI99|H3C2078
+3C2078:lI97|H3C2134
+3C2134:lI116|H3C21E8
+3C21E8:lI105|H3C229C
+3C229C:lI111|H3C2358
+3C2358:lI110|H3C2414
+3C2414:lI47|H3C24C0
+3C24C0:lI120|H3C257C
+3C257C:lI45|H3C2630
+3C2630:lI100|H3C26E4
+3C26E4:lI105|H3C27A0
+3C27A0:lI114|H3C285C
+3C285C:lI101|H3C2920
+3C2920:lI99|H3C29EC
+3C29EC:lI116|H3C2AB8
+3C2AB8:lI111|H3C2B84
+3C2B84:lI114|N
+3C1C28:lI100|H3C1CDC
+3C1CDC:lI105|H3C1D90
+3C1D90:lI114|N
+3C1B70:lH3C1C38|H3C1C44
+3C1C38:t2:H3C1CEC,H3C1CF4
+3C1CF4:lI97|H3C1DA8
+3C1DA8:lI112|H3C1E5C
+3C1E5C:lI112|H3C1F10
+3C1F10:lI108|H3C1FCC
+3C1FCC:lI105|H3C2080
+3C2080:lI99|H3C213C
+3C213C:lI97|H3C21F0
+3C21F0:lI116|H3C22A4
+3C22A4:lI105|H3C2360
+3C2360:lI111|H3C241C
+3C241C:lI110|H3C24C8
+3C24C8:lI47|H3C2584
+3C2584:lI120|H3C2638
+3C2638:lI45|H3C26EC
+3C26EC:lI100|H3C27A8
+3C27A8:lI105|H3C2864
+3C2864:lI114|H3C2928
+3C2928:lI101|H3C29F4
+3C29F4:lI99|H3C2AC0
+3C2AC0:lI116|H3C2B8C
+3C2B8C:lI111|H3C2C48
+3C2C48:lI114|N
+3C1CEC:lI100|H3C1DA0
+3C1DA0:lI120|H3C1E54
+3C1E54:lI114|N
+3C1C44:lH3C1CFC|H3C1D08
+3C1CFC:t2:H3C1DB0,H3C1DB8
+3C1DB8:lI97|H3C1E6C
+3C1E6C:lI112|H3C1F20
+3C1F20:lI112|H3C1FD4
+3C1FD4:lI108|H3C2088
+3C2088:lI105|H3C2144
+3C2144:lI99|H3C21F8
+3C21F8:lI97|H3C22AC
+3C22AC:lI116|H3C2368
+3C2368:lI105|H3C2424
+3C2424:lI111|H3C24D0
+3C24D0:lI110|H3C258C
+3C258C:lI47|H3C2640
+3C2640:lI120|H3C26F4
+3C26F4:lI45|H3C27B0
+3C27B0:lI99|H3C286C
+3C286C:lI115|H3C2930
+3C2930:lI104|N
+3C1DB0:lI99|H3C1E64
+3C1E64:lI115|H3C1F18
+3C1F18:lI104|N
+3C1D08:lH3C1DC0|H3C1DCC
+3C1DC0:t2:H3C1E74,H3C1E7C
+3C1E7C:lI97|H3C1F30
+3C1F30:lI112|H3C1FE4
+3C1FE4:lI112|H3C2098
+3C2098:lI108|H3C214C
+3C214C:lI105|H3C2200
+3C2200:lI99|H3C22B4
+3C22B4:lI97|H3C2370
+3C2370:lI116|H3C242C
+3C242C:lI105|H3C24D8
+3C24D8:lI111|H3C2594
+3C2594:lI110|H3C2648
+3C2648:lI47|H3C26FC
+3C26FC:lI120|H3C27B8
+3C27B8:lI45|H3C2874
+3C2874:lI99|H3C2938
+3C2938:lI112|H3C29FC
+3C29FC:lI105|H3C2AC8
+3C2AC8:lI111|N
+3C1E74:lI99|H3C1F28
+3C1F28:lI112|H3C1FDC
+3C1FDC:lI105|H3C2090
+3C2090:lI111|N
+3C1DCC:lH3C1E84|H3C1E90
+3C1E84:t2:H3C1F38,H3C1F40
+3C1F40:lI97|H3C1FEC
+3C1FEC:lI112|H3C20A0
+3C20A0:lI112|H3C2154
+3C2154:lI108|H3C2208
+3C2208:lI105|H3C22BC
+3C22BC:lI99|H3C2378
+3C2378:lI97|H3C2434
+3C2434:lI116|H3C24E0
+3C24E0:lI105|H3C259C
+3C259C:lI111|H3C2650
+3C2650:lI110|H3C2704
+3C2704:lI47|H3C27C0
+3C27C0:lI120|H3C287C
+3C287C:lI45|H3C2940
+3C2940:lI99|H3C2A04
+3C2A04:lI111|H3C2AD0
+3C2AD0:lI109|H3C2B94
+3C2B94:lI112|H3C2C50
+3C2C50:lI114|H3C2D00
+3C2D00:lI101|H3C2DA8
+3C2DA8:lI115|H3C2E40
+3C2E40:lI115|N
+3C1F38:lI90|N
+3C1E90:lH3C1F48|H3C1F54
+3C1F48:t2:H3C1FF4,H3C1FFC
+3C1FFC:lI97|H3C20B0
+3C20B0:lI112|H3C2164
+3C2164:lI112|H3C2210
+3C2210:lI108|H3C22C4
+3C22C4:lI105|H3C2380
+3C2380:lI99|H3C243C
+3C243C:lI97|H3C24E8
+3C24E8:lI116|H3C25A4
+3C25A4:lI105|H3C2658
+3C2658:lI111|H3C270C
+3C270C:lI110|H3C27C8
+3C27C8:lI47|H3C2884
+3C2884:lI120|H3C2948
+3C2948:lI45|H3C2A0C
+3C2A0C:lI99|H3C2AD8
+3C2AD8:lI100|H3C2B9C
+3C2B9C:lI108|H3C2C58
+3C2C58:lI105|H3C2D08
+3C2D08:lI110|H3C2DB0
+3C2DB0:lI107|N
+3C1FF4:lI118|H3C20A8
+3C20A8:lI99|H3C215C
+3C215C:lI100|N
+3C1F54:lH3C2004|H3C2010
+3C2004:t2:H3C20B8,H3C20C0
+3C20C0:lI97|H3C2174
+3C2174:lI112|H3C2220
+3C2220:lI112|H3C22D4
+3C22D4:lI108|H3C2390
+3C2390:lI105|H3C2444
+3C2444:lI99|H3C24F0
+3C24F0:lI97|H3C25AC
+3C25AC:lI116|H3C2660
+3C2660:lI105|H3C2714
+3C2714:lI111|H3C27D0
+3C27D0:lI110|H3C288C
+3C288C:lI47|H3C2950
+3C2950:lI120|H3C2A14
+3C2A14:lI45|H3C2AE0
+3C2AE0:lI98|H3C2BA4
+3C2BA4:lI99|H3C2C60
+3C2C60:lI112|H3C2D10
+3C2D10:lI105|H3C2DB8
+3C2DB8:lI111|N
+3C20B8:lI98|H3C216C
+3C216C:lI99|H3C2218
+3C2218:lI112|H3C22CC
+3C22CC:lI105|H3C2388
+3C2388:lI111|N
+3C2010:lH3C20C8|H3C20D4
+3C20C8:t2:H3C217C,H3C2184
+3C2184:lI97|H3C2230
+3C2230:lI112|H3C22E4
+3C22E4:lI112|H3C2398
+3C2398:lI108|H3C244C
+3C244C:lI105|H3C24F8
+3C24F8:lI99|H3C25B4
+3C25B4:lI97|H3C2668
+3C2668:lI116|H3C271C
+3C271C:lI105|H3C27D8
+3C27D8:lI111|H3C2894
+3C2894:lI110|H3C2958
+3C2958:lI47|H3C2A1C
+3C2A1C:lI114|H3C2AE8
+3C2AE8:lI116|H3C2BAC
+3C2BAC:lI102|N
+3C217C:lI114|H3C2228
+3C2228:lI116|H3C22DC
+3C22DC:lI102|N
+3C20D4:lH3C218C|H3C2198
+3C218C:t2:H3C2238,H3C2240
+3C2240:lI97|H3C22F4
+3C22F4:lI112|H3C23A8
+3C23A8:lI112|H3C2454
+3C2454:lI108|H3C2500
+3C2500:lI105|H3C25BC
+3C25BC:lI99|H3C2670
+3C2670:lI97|H3C2724
+3C2724:lI116|H3C27E0
+3C27E0:lI105|H3C289C
+3C289C:lI111|H3C2960
+3C2960:lI110|H3C2A24
+3C2A24:lI47|H3C2AF0
+3C2AF0:lI112|H3C2BB4
+3C2BB4:lI111|H3C2C68
+3C2C68:lI119|H3C2D18
+3C2D18:lI101|H3C2DC0
+3C2DC0:lI114|H3C2E48
+3C2E48:lI112|H3C2EC0
+3C2EC0:lI111|H3C2F38
+3C2F38:lI105|H3C2FA8
+3C2FA8:lI110|H3C3010
+3C3010:lI116|N
+3C2238:lI112|H3C22EC
+3C22EC:lI112|H3C23A0
+3C23A0:lI116|N
+3C2198:lH3C2248|H3C2254
+3C2248:t2:H3C22FC,H3C2304
+3C2304:lI97|H3C23B8
+3C23B8:lI112|H3C245C
+3C245C:lI112|H3C2508
+3C2508:lI108|H3C25C4
+3C25C4:lI105|H3C2678
+3C2678:lI99|H3C272C
+3C272C:lI97|H3C27E8
+3C27E8:lI116|H3C28A4
+3C28A4:lI105|H3C2968
+3C2968:lI111|H3C2A2C
+3C2A2C:lI110|H3C2AF8
+3C2AF8:lI47|H3C2BBC
+3C2BBC:lI112|H3C2C70
+3C2C70:lI111|H3C2D20
+3C2D20:lI115|H3C2DC8
+3C2DC8:lI116|H3C2E50
+3C2E50:lI115|H3C2EC8
+3C2EC8:lI99|H3C2F40
+3C2F40:lI114|H3C2FB0
+3C2FB0:lI105|H3C3018
+3C3018:lI112|H3C3078
+3C3078:lI116|N
+3C22FC:lI97|H3C23B0
+3C23B0:lI105|N
+3C2254:lH3C230C|H3C2318
+3C230C:t2:H3C23C0,H3C23C8
+3C23C8:lI97|H3C246C
+3C246C:lI112|H3C2518
+3C2518:lI112|H3C25CC
+3C25CC:lI108|H3C2680
+3C2680:lI105|H3C2734
+3C2734:lI99|H3C27F0
+3C27F0:lI97|H3C28AC
+3C28AC:lI116|H3C2970
+3C2970:lI105|H3C2A34
+3C2A34:lI111|H3C2B00
+3C2B00:lI110|H3C2BC4
+3C2BC4:lI47|H3C2C78
+3C2C78:lI112|H3C2D28
+3C2D28:lI111|H3C2DD0
+3C2DD0:lI115|H3C2E58
+3C2E58:lI116|H3C2ED0
+3C2ED0:lI115|H3C2F48
+3C2F48:lI99|H3C2FB8
+3C2FB8:lI114|H3C3020
+3C3020:lI105|H3C3080
+3C3080:lI112|H3C30D8
+3C30D8:lI116|N
+3C23C0:lI101|H3C2464
+3C2464:lI112|H3C2510
+3C2510:lI115|N
+3C2318:lH3C23D0|H3C23DC
+3C23D0:t2:H3C2474,H3C247C
+3C247C:lI97|H3C2528
+3C2528:lI112|H3C25D4
+3C25D4:lI112|H3C2688
+3C2688:lI108|H3C273C
+3C273C:lI105|H3C27F8
+3C27F8:lI99|H3C28B4
+3C28B4:lI97|H3C2978
+3C2978:lI116|H3C2A3C
+3C2A3C:lI105|H3C2B08
+3C2B08:lI111|H3C2BCC
+3C2BCC:lI110|H3C2C80
+3C2C80:lI47|H3C2D30
+3C2D30:lI112|H3C2DD8
+3C2DD8:lI111|H3C2E60
+3C2E60:lI115|H3C2ED8
+3C2ED8:lI116|H3C2F50
+3C2F50:lI115|H3C2FC0
+3C2FC0:lI99|H3C3028
+3C3028:lI114|H3C3088
+3C3088:lI105|H3C30E0
+3C30E0:lI112|H3C3130
+3C3130:lI116|N
+3C2474:lI112|H3C2520
+3C2520:lI115|N
+3C23DC:lH3C2484|H3C2490
+3C2484:t2:H3C2530,H3C2538
+3C2538:lI97|H3C25E4
+3C25E4:lI112|H3C2698
+3C2698:lI112|H3C2744
+3C2744:lI108|H3C2800
+3C2800:lI105|H3C28BC
+3C28BC:lI99|H3C2980
+3C2980:lI97|H3C2A44
+3C2A44:lI116|H3C2B10
+3C2B10:lI105|H3C2BD4
+3C2BD4:lI111|H3C2C88
+3C2C88:lI110|H3C2D38
+3C2D38:lI47|H3C2DE0
+3C2DE0:lI112|H3C2E68
+3C2E68:lI100|H3C2EE0
+3C2EE0:lI102|N
+3C2530:lI112|H3C25DC
+3C25DC:lI100|H3C2690
+3C2690:lI102|N
+3C2490:lH3C2540|H3C254C
+3C2540:t2:H3C25EC,H3C25F4
+3C25F4:lI97|H3C26A8
+3C26A8:lI112|H3C2754
+3C2754:lI112|H3C2808
+3C2808:lI108|H3C28C4
+3C28C4:lI105|H3C2988
+3C2988:lI99|H3C2A4C
+3C2A4C:lI97|H3C2B18
+3C2B18:lI116|H3C2BDC
+3C2BDC:lI105|H3C2C90
+3C2C90:lI111|H3C2D40
+3C2D40:lI110|H3C2DE8
+3C2DE8:lI47|H3C2E70
+3C2E70:lI111|H3C2EE8
+3C2EE8:lI100|H3C2F58
+3C2F58:lI97|N
+3C25EC:lI111|H3C26A0
+3C26A0:lI100|H3C274C
+3C274C:lI97|N
+3C254C:lH3C25FC|H3C2608
+3C25FC:t2:H3C26B0,H3C26B8
+3C26B8:lI97|H3C2764
+3C2764:lI112|H3C2818
+3C2818:lI112|H3C28CC
+3C28CC:lI108|H3C2990
+3C2990:lI105|H3C2A54
+3C2A54:lI99|H3C2B20
+3C2B20:lI97|H3C2BE4
+3C2BE4:lI116|H3C2C98
+3C2C98:lI105|H3C2D48
+3C2D48:lI111|H3C2DF0
+3C2DF0:lI110|H3C2E78
+3C2E78:lI47|H3C2EF0
+3C2EF0:lI111|H3C2F60
+3C2F60:lI99|H3C2FC8
+3C2FC8:lI116|H3C3030
+3C3030:lI101|H3C3090
+3C3090:lI116|H3C30E8
+3C30E8:lI45|H3C3138
+3C3138:lI115|H3C3180
+3C3180:lI116|H3C31C8
+3C31C8:lI114|H3C3210
+3C3210:lI101|H3C3258
+3C3258:lI97|H3C32A0
+3C32A0:lI109|N
+3C26B0:lI98|H3C275C
+3C275C:lI105|H3C2810
+3C2810:lI110|N
+3C2608:lH3C26C0|H3C26CC
+3C26C0:t2:H3C276C,H3C2774
+3C2774:lI97|H3C2828
+3C2828:lI112|H3C28DC
+3C28DC:lI112|H3C2998
+3C2998:lI108|H3C2A5C
+3C2A5C:lI105|H3C2B28
+3C2B28:lI99|H3C2BEC
+3C2BEC:lI97|H3C2CA0
+3C2CA0:lI116|H3C2D50
+3C2D50:lI105|H3C2DF8
+3C2DF8:lI111|H3C2E80
+3C2E80:lI110|H3C2EF8
+3C2EF8:lI47|H3C2F68
+3C2F68:lI111|H3C2FD0
+3C2FD0:lI99|H3C3038
+3C3038:lI116|H3C3098
+3C3098:lI101|H3C30F0
+3C30F0:lI116|H3C3140
+3C3140:lI45|H3C3188
+3C3188:lI115|H3C31D0
+3C31D0:lI116|H3C3218
+3C3218:lI114|H3C3260
+3C3260:lI101|H3C32A8
+3C32A8:lI97|H3C32E8
+3C32E8:lI109|N
+3C276C:lI100|H3C2820
+3C2820:lI109|H3C28D4
+3C28D4:lI115|N
+3C26CC:lH3C277C|H3C2788
+3C277C:t2:H3C2830,H3C2838
+3C2838:lI97|H3C28EC
+3C28EC:lI112|H3C29A8
+3C29A8:lI112|H3C2A64
+3C2A64:lI108|H3C2B30
+3C2B30:lI105|H3C2BF4
+3C2BF4:lI99|H3C2CA8
+3C2CA8:lI97|H3C2D58
+3C2D58:lI116|H3C2E00
+3C2E00:lI105|H3C2E88
+3C2E88:lI111|H3C2F00
+3C2F00:lI110|H3C2F70
+3C2F70:lI47|H3C2FD8
+3C2FD8:lI111|H3C3040
+3C3040:lI99|H3C30A0
+3C30A0:lI116|H3C30F8
+3C30F8:lI101|H3C3148
+3C3148:lI116|H3C3190
+3C3190:lI45|H3C31D8
+3C31D8:lI115|H3C3220
+3C3220:lI116|H3C3268
+3C3268:lI114|H3C32B0
+3C32B0:lI101|H3C32F0
+3C32F0:lI97|H3C3320
+3C3320:lI109|N
+3C2830:lI108|H3C28E4
+3C28E4:lI104|H3C29A0
+3C29A0:lI97|N
+3C2788:lH3C2840|H3C284C
+3C2840:t2:H3C28F4,H3C28FC
+3C28FC:lI97|H3C29B8
+3C29B8:lI112|H3C2A74
+3C2A74:lI112|H3C2B38
+3C2B38:lI108|H3C2BFC
+3C2BFC:lI105|H3C2CB0
+3C2CB0:lI99|H3C2D60
+3C2D60:lI97|H3C2E08
+3C2E08:lI116|H3C2E90
+3C2E90:lI105|H3C2F08
+3C2F08:lI111|H3C2F78
+3C2F78:lI110|H3C2FE0
+3C2FE0:lI47|H3C3048
+3C3048:lI111|H3C30A8
+3C30A8:lI99|H3C3100
+3C3100:lI116|H3C3150
+3C3150:lI101|H3C3198
+3C3198:lI116|H3C31E0
+3C31E0:lI45|H3C3228
+3C3228:lI115|H3C3270
+3C3270:lI116|H3C32B8
+3C32B8:lI114|H3C32F8
+3C32F8:lI101|H3C3328
+3C3328:lI97|H3C3350
+3C3350:lI109|N
+3C28F4:lI108|H3C29B0
+3C29B0:lI122|H3C2A6C
+3C2A6C:lI104|N
+3C284C:lH3C2904|H3C2910
+3C2904:t2:H3C29C0,H3C29C8
+3C29C8:lI97|H3C2A84
+3C2A84:lI112|H3C2B48
+3C2B48:lI112|H3C2C04
+3C2C04:lI108|H3C2CB8
+3C2CB8:lI105|H3C2D68
+3C2D68:lI99|H3C2E10
+3C2E10:lI97|H3C2E98
+3C2E98:lI116|H3C2F10
+3C2F10:lI105|H3C2F80
+3C2F80:lI111|H3C2FE8
+3C2FE8:lI110|H3C3050
+3C3050:lI47|H3C30B0
+3C30B0:lI111|H3C3108
+3C3108:lI99|H3C3158
+3C3158:lI116|H3C31A0
+3C31A0:lI101|H3C31E8
+3C31E8:lI116|H3C3230
+3C3230:lI45|H3C3278
+3C3278:lI115|H3C32C0
+3C32C0:lI116|H3C3300
+3C3300:lI114|H3C3330
+3C3330:lI101|H3C3358
+3C3358:lI97|H3C3378
+3C3378:lI109|N
+3C29C0:lI101|H3C2A7C
+3C2A7C:lI120|H3C2B40
+3C2B40:lI101|N
+3C2910:lH3C29D0|H3C29DC
+3C29D0:t2:H3C2A8C,H3C2A94
+3C2A94:lI97|H3C2B58
+3C2B58:lI112|H3C2C14
+3C2C14:lI112|H3C2CC8
+3C2CC8:lI108|H3C2D78
+3C2D78:lI105|H3C2E18
+3C2E18:lI99|H3C2EA0
+3C2EA0:lI97|H3C2F18
+3C2F18:lI116|H3C2F88
+3C2F88:lI105|H3C2FF0
+3C2FF0:lI111|H3C3058
+3C3058:lI110|H3C30B8
+3C30B8:lI47|H3C3110
+3C3110:lI111|H3C3160
+3C3160:lI99|H3C31A8
+3C31A8:lI116|H3C31F0
+3C31F0:lI101|H3C3238
+3C3238:lI116|H3C3280
+3C3280:lI45|H3C32C8
+3C32C8:lI115|H3C3308
+3C3308:lI116|H3C3338
+3C3338:lI114|H3C3360
+3C3360:lI101|H3C3380
+3C3380:lI97|H3C3398
+3C3398:lI109|N
+3C2A8C:lI99|H3C2B50
+3C2B50:lI108|H3C2C0C
+3C2C0C:lI97|H3C2CC0
+3C2CC0:lI115|H3C2D70
+3C2D70:lI115|N
+3C29DC:lH3C2A9C|H3C2AA8
+3C2A9C:t2:H3C2B60,H3C2B68
+3C2B68:lI97|H3C2C24
+3C2C24:lI112|H3C2CD8
+3C2CD8:lI112|H3C2D80
+3C2D80:lI108|H3C2E20
+3C2E20:lI105|H3C2EA8
+3C2EA8:lI99|H3C2F20
+3C2F20:lI97|H3C2F90
+3C2F90:lI116|H3C2FF8
+3C2FF8:lI105|H3C3060
+3C3060:lI111|H3C30C0
+3C30C0:lI110|H3C3118
+3C3118:lI47|H3C3168
+3C3168:lI109|H3C31B0
+3C31B0:lI115|H3C31F8
+3C31F8:lI119|H3C3240
+3C3240:lI111|H3C3288
+3C3288:lI114|H3C32D0
+3C32D0:lI100|N
+3C2B60:lI100|H3C2C1C
+3C2C1C:lI111|H3C2CD0
+3C2CD0:lI99|N
+3C2AA8:lH3C2B70|H3C2B7C
+3C2B70:t2:H3C2C2C,H3C2C34
+3C2C34:lI97|H3C2CE8
+3C2CE8:lI112|H3C2D90
+3C2D90:lI112|H3C2E28
+3C2E28:lI108|H3C2EB0
+3C2EB0:lI105|H3C2F28
+3C2F28:lI99|H3C2F98
+3C2F98:lI97|H3C3000
+3C3000:lI116|H3C3068
+3C3068:lI105|H3C30C8
+3C30C8:lI111|H3C3120
+3C3120:lI110|H3C3170
+3C3170:lI47|H3C31B8
+3C31B8:lI109|H3C3200
+3C3200:lI97|H3C3248
+3C3248:lI99|H3C3290
+3C3290:lI45|H3C32D8
+3C32D8:lI99|H3C3310
+3C3310:lI111|H3C3340
+3C3340:lI109|H3C3368
+3C3368:lI112|H3C3388
+3C3388:lI97|H3C33A0
+3C33A0:lI99|H3C33B0
+3C33B0:lI116|H3C33C0
+3C33C0:lI112|H3C33D0
+3C33D0:lI114|H3C33E0
+3C33E0:lI111|N
+3C2C2C:lI99|H3C2CE0
+3C2CE0:lI112|H3C2D88
+3C2D88:lI116|N
+3C2B7C:lH3C2C3C|N
+3C2C3C:t2:H3C2CF0,H3C2CF8
+3C2CF8:lI97|H3C2DA0
+3C2DA0:lI112|H3C2E38
+3C2E38:lI112|H3C2EB8
+3C2EB8:lI108|H3C2F30
+3C2F30:lI105|H3C2FA0
+3C2FA0:lI99|H3C3008
+3C3008:lI97|H3C3070
+3C3070:lI116|H3C30D0
+3C30D0:lI105|H3C3128
+3C3128:lI111|H3C3178
+3C3178:lI110|H3C31C0
+3C31C0:lI47|H3C3208
+3C3208:lI109|H3C3250
+3C3250:lI97|H3C3298
+3C3298:lI99|H3C32E0
+3C32E0:lI45|H3C3318
+3C3318:lI98|H3C3348
+3C3348:lI105|H3C3370
+3C3370:lI110|H3C3390
+3C3390:lI104|H3C33A8
+3C33A8:lI101|H3C33B8
+3C33B8:lI120|H3C33C8
+3C33C8:lI52|H3C33D8
+3C33D8:lI48|N
+3C2CF0:lI104|H3C2D98
+3C2D98:lI113|H3C2E30
+3C2E30:lI120|N
+3BDBCC:lH3BDA78|H3BDA8C
+3BDA78:t2:A4:port,I8888
+3BDA8C:lH3BDB04|H3BDB10
+3BDB04:t2:AC:bind_address,H3BDB64
+3BDB64:t4:I127,I0,I0,I1
+3BDB10:lH3BDB78|H3BDB84
+3BDB78:t2:AB:server_name,H3BDBD4
+3BDBD4:lI108|H3BDC24
+3BDC24:lI111|H3BDC88
+3BDC88:lI99|H3BDCF0
+3BDCF0:lI97|H3BDD70
+3BDD70:lI108|H3BDDF8
+3BDDF8:lI104|H3BDE90
+3BDE90:lI111|H3BDF40
+3BDF40:lI115|H3BDFFC
+3BDFFC:lI116|N
+3BDB84:lH3BDBDC|H3BDBE8
+3BDBDC:t2:AE:max_header_siz,I1024
+3BDBE8:lH3BDC2C|H3BDC38
+3BDC2C:t2:A11:max_header_action,A8:reply414
+3BDC38:lH3BDC90|H3BDC9C
+3BDC90:t2:A8:com_type,A7:ip_comm
+3BDC9C:lH3BDCF8|H3BDD04
+3BDCF8:t2:A7:modules,H3BDD78
+3BDD78:lA9:mod_alias|H3BDE00
+3BDE00:lA8:mod_auth|H3BDE98
+3BDE98:lA7:mod_esi|H3BDF48
+3BDF48:lAB:mod_actions|H3BE004
+3BE004:lA7:mod_cgi|H3BE0D0
+3BE0D0:lAB:mod_include|H3BE1A4
+3BE1A4:lA7:mod_dir|H3BE288
+3BE288:lA7:mod_get|H3BE378
+3BE378:lA8:mod_head|H3BE47C
+3BE47C:lA7:mod_log|H3BE580
+3BE580:lAC:mod_disk_log|N
+3BDD04:lH3BDD80|H3BDD8C
+3BDD80:t2:AF:directory_index,H3BDE08
+3BDE08:lH3BDEA0|N
+3BDEA0:lI105|H3BDF50
+3BDF50:lI110|H3BE00C
+3BE00C:lI100|H3BE0D8
+3BE0D8:lI101|H3BE1AC
+3BE1AC:lI120|H3BE290
+3BE290:lI46|H3BE380
+3BE380:lI104|H3BE484
+3BE484:lI116|H3BE588
+3BE588:lI109|H3BE68C
+3BE68C:lI108|N
+3BDD8C:lH3BDE10|H3BDE1C
+3BDE10:t2:AC:default_type,H3BDEA8
+3BDEA8:lI116|H3BDF58
+3BDF58:lI101|H3BE014
+3BE014:lI120|H3BE0E0
+3BE0E0:lI116|H3BE1B4
+3BE1B4:lI47|H3BE298
+3BE298:lI112|H3BE388
+3BE388:lI108|H3BE48C
+3BE48C:lI97|H3BE590
+3BE590:lI105|H3BE694
+3BE694:lI110|N
+3BDE1C:lH3BDEB0|H3BDEBC
+3BDEB0:t2:A10:erl_script_alias,H3BDF60
+3BDF60:t2:H3BE01C,H3BE024
+3BE024:lH3BE0F0|N
+3BE0F0:lI119|H3BE1C4
+3BE1C4:lI101|H3BE2A8
+3BE2A8:lI98|H3BE398
+3BE398:lI116|H3BE49C
+3BE49C:lI111|H3BE5A0
+3BE5A0:lI111|H3BE6A4
+3BE6A4:lI108|N
+3BE01C:lI47|H3BE0E8
+3BE0E8:lI119|H3BE1BC
+3BE1BC:lI101|H3BE2A0
+3BE2A0:lI98|H3BE390
+3BE390:lI116|H3BE494
+3BE494:lI111|H3BE598
+3BE598:lI111|H3BE69C
+3BE69C:lI108|N
+3BDEBC:lH3BDF6C|H3BDF78
+3BDF6C:t2:A5:alias,H3BE02C
+3BE02C:t2:H3BE0F8,H3BE100
+3BE100:lI47|H3BE1D4
+3BE1D4:lI99|H3BE2B8
+3BE2B8:lI108|H3BE3A8
+3BE3A8:lI101|H3BE4AC
+3BE4AC:lI97|H3BE5B0
+3BE5B0:lI114|H3BE6B4
+3BE6B4:lI99|H3BE7A8
+3BE7A8:lI97|H3BE894
+3BE894:lI115|H3BE980
+3BE980:lI101|H3BEA74
+3BEA74:lI47|H3BEB68
+3BEB68:lI111|H3BEC54
+3BEC54:lI116|H3BED40
+3BED40:lI112|H3BEE2C
+3BEE2C:lI47|H3BEF00
+3BEF00:lI101|H3BEFD4
+3BEFD4:lI114|H3BF0A0
+3BF0A0:lI116|H3BF174
+3BF174:lI115|H3BF238
+3BF238:lI47|H3BF2FC
+3BF2FC:lI108|H3BF3A8
+3BF3A8:lI105|H3BF45C
+3BF45C:lI98|H3BF518
+3BF518:lI47|H3BF5DC
+3BF5DC:lI111|H3BF6B0
+3BF6B0:lI98|H3BF784
+3BF784:lI115|H3BF858
+3BF858:lI101|H3BF93C
+3BF93C:lI114|H3BFA18
+3BFA18:lI118|H3BFAF4
+3BFAF4:lI101|H3BFBD0
+3BFBD0:lI114|H3BFC9C
+3BFC9C:lI47|H3BFD60
+3BFD60:lI112|H3BFE2C
+3BFE2C:lI114|H3BFEE0
+3BFEE0:lI105|H3BFF94
+3BFF94:lI118|H3C0040
+3C0040:lI47|H3C00EC
+3C00EC:lI99|H3C0198
+3C0198:lI114|H3C024C
+3C024C:lI97|H3C0308
+3C0308:lI115|H3C03BC
+3C03BC:lI104|H3C0458
+3C0458:lI100|H3C04F4
+3C04F4:lI117|H3C0590
+3C0590:lI109|H3C0634
+3C0634:lI112|H3C06E0
+3C06E0:lI95|H3C078C
+3C078C:lI118|H3C0830
+3C0830:lI105|H3C08BC
+3C08BC:lI101|H3C0950
+3C0950:lI119|H3C09E4
+3C09E4:lI101|H3C0A80
+3C0A80:lI114|N
+3BE0F8:lI47|H3BE1CC
+3BE1CC:lI99|H3BE2B0
+3BE2B0:lI114|H3BE3A0
+3BE3A0:lI97|H3BE4A4
+3BE4A4:lI115|H3BE5A8
+3BE5A8:lI104|H3BE6AC
+3BE6AC:lI100|H3BE7A0
+3BE7A0:lI117|H3BE88C
+3BE88C:lI109|H3BE978
+3BE978:lI112|H3BEA6C
+3BEA6C:lI95|H3BEB60
+3BEB60:lI118|H3BEC4C
+3BEC4C:lI105|H3BED38
+3BED38:lI101|H3BEE24
+3BEE24:lI119|H3BEEF8
+3BEEF8:lI101|H3BEFCC
+3BEFCC:lI114|N
+3BDF78:lH3BE038|H3BE044
+3BE038:t2:A5:alias,H3BE108
+3BE108:t2:H3BE1DC,H3BE1E4
+3BE1E4:lI47|H3BE2C8
+3BE2C8:lI99|H3BE3B8
+3BE3B8:lI108|H3BE4BC
+3BE4BC:lI101|H3BE5C0
+3BE5C0:lI97|H3BE6C4
+3BE6C4:lI114|H3BE7B8
+3BE7B8:lI99|H3BE8A4
+3BE8A4:lI97|H3BE990
+3BE990:lI115|H3BEA84
+3BEA84:lI101|H3BEB78
+3BEB78:lI47|H3BEC64
+3BEC64:lI111|H3BED50
+3BED50:lI116|H3BEE3C
+3BEE3C:lI112|H3BEF10
+3BEF10:lI47|H3BEFE4
+3BEFE4:lI101|H3BF0B0
+3BF0B0:lI114|H3BF184
+3BF184:lI116|H3BF248
+3BF248:lI115|H3BF304
+3BF304:lI47|H3BF3B0
+3BF3B0:lI101|H3BF464
+3BF464:lI114|H3BF520
+3BF520:lI116|H3BF5E4
+3BF5E4:lI115|H3BF6B8
+3BF6B8:lI47|H3BF78C
+3BF78C:lI100|H3BF860
+3BF860:lI111|H3BF944
+3BF944:lI99|H3BFA20
+3BFA20:lI47|H3BFAFC
+3BFAFC:lI104|H3BFBD8
+3BFBD8:lI116|H3BFCA4
+3BFCA4:lI109|H3BFD68
+3BFD68:lI108|N
+3BE1DC:lI47|H3BE2C0
+3BE2C0:lI99|H3BE3B0
+3BE3B0:lI114|H3BE4B4
+3BE4B4:lI97|H3BE5B8
+3BE5B8:lI115|H3BE6BC
+3BE6BC:lI104|H3BE7B0
+3BE7B0:lI100|H3BE89C
+3BE89C:lI117|H3BE988
+3BE988:lI109|H3BEA7C
+3BEA7C:lI112|H3BEB70
+3BEB70:lI95|H3BEC5C
+3BEC5C:lI101|H3BED48
+3BED48:lI114|H3BEE34
+3BEE34:lI116|H3BEF08
+3BEF08:lI115|H3BEFDC
+3BEFDC:lI95|H3BF0A8
+3BF0A8:lI100|H3BF17C
+3BF17C:lI111|H3BF240
+3BF240:lI99|N
+3BE044:lH3BE114|H3BE120
+3BE114:t2:A5:alias,H3BE1EC
+3BE1EC:t2:H3BE2D0,H3BE2D8
+3BE2D8:lI47|H3BE3C8
+3BE3C8:lI99|H3BE4CC
+3BE4CC:lI108|H3BE5D0
+3BE5D0:lI101|H3BE6D4
+3BE6D4:lI97|H3BE7C8
+3BE7C8:lI114|H3BE8B4
+3BE8B4:lI99|H3BE9A0
+3BE9A0:lI97|H3BEA94
+3BEA94:lI115|H3BEB88
+3BEB88:lI101|H3BEC74
+3BEC74:lI47|H3BED60
+3BED60:lI111|H3BEE4C
+3BEE4C:lI116|H3BEF20
+3BEF20:lI112|H3BEFEC
+3BEFEC:lI47|H3BF0B8
+3BF0B8:lI101|H3BF18C
+3BF18C:lI114|H3BF250
+3BF250:lI116|H3BF30C
+3BF30C:lI115|H3BF3B8
+3BF3B8:lI47|H3BF46C
+3BF46C:lI108|H3BF528
+3BF528:lI105|H3BF5EC
+3BF5EC:lI98|H3BF6C0
+3BF6C0:lI47|H3BF794
+3BF794:lI111|H3BF868
+3BF868:lI98|H3BF94C
+3BF94C:lI115|H3BFA28
+3BFA28:lI101|H3BFB04
+3BFB04:lI114|H3BFBE0
+3BFBE0:lI118|H3BFCAC
+3BFCAC:lI101|H3BFD70
+3BFD70:lI114|H3BFE34
+3BFE34:lI47|H3BFEE8
+3BFEE8:lI100|H3BFF9C
+3BFF9C:lI111|H3C0048
+3C0048:lI99|H3C00F4
+3C00F4:lI47|H3C01A0
+3C01A0:lI104|H3C0254
+3C0254:lI116|H3C0310
+3C0310:lI109|H3C03C4
+3C03C4:lI108|N
+3BE2D0:lI47|H3BE3C0
+3BE3C0:lI99|H3BE4C4
+3BE4C4:lI114|H3BE5C8
+3BE5C8:lI97|H3BE6CC
+3BE6CC:lI115|H3BE7C0
+3BE7C0:lI104|H3BE8AC
+3BE8AC:lI100|H3BE998
+3BE998:lI117|H3BEA8C
+3BEA8C:lI109|H3BEB80
+3BEB80:lI112|H3BEC6C
+3BEC6C:lI95|H3BED58
+3BED58:lI100|H3BEE44
+3BEE44:lI111|H3BEF18
+3BEF18:lI99|N
+3BE120:lH3BE1F8|N
+3BE1F8:t2:A10:erl_script_alias,H3BE2E0
+3BE2E0:t2:H3BE3D0,H3BE3D8
+3BE3D8:lH3BE4DC|N
+3BE4DC:lI99|H3BE5E0
+3BE5E0:lI114|H3BE6E4
+3BE6E4:lI97|H3BE7D8
+3BE7D8:lI115|H3BE8C4
+3BE8C4:lI104|H3BE9B0
+3BE9B0:lI100|H3BEAA4
+3BEAA4:lI117|H3BEB90
+3BEB90:lI109|H3BEC7C
+3BEC7C:lI112|H3BED68
+3BED68:lI95|H3BEE54
+3BEE54:lI118|H3BEF28
+3BEF28:lI105|H3BEFF4
+3BEFF4:lI101|H3BF0C0
+3BF0C0:lI119|H3BF194
+3BF194:lI101|H3BF258
+3BF258:lI114|N
+3BE3D0:lI47|H3BE4D4
+3BE4D4:lI99|H3BE5D8
+3BE5D8:lI100|H3BE6DC
+3BE6DC:lI118|H3BE7D0
+3BE7D0:lI95|H3BE8BC
+3BE8BC:lI101|H3BE9A8
+3BE9A8:lI114|H3BEA9C
+3BEA9C:lI108|N
+3BDE2C:lH3BDA9C|H3BDECC
+3BDA9C:t4:I127,I0,I0,I1
+3BDECC:lI8888|H3BDF88
+3BDF88:lN|N
+3BDD1C:lN|N
+3BDA50:t2:AD:$initial_call,H3BDAB8
+3BDAB8:t3:A3:gen,A7:init_it,H3BDAB0
+3BDA5C:t2:A9:verbosity,A7:silence
+3BDAC8:t2:AE:auth_verbosity,A7:silence
+3BDB28:t2:A12:security_verbosity,A7:silence
+3BDB9C:t2:A12:acceptor_verbosity,A7:silence
+3BDC00:t2:AA:$ancestors,H3BDC5C
+3BDC5C:lA1A:httpd_sup__127_0_0_1__8888|H3BDCB4
+3BDCB4:lA8:web_tool|H3BDD24
+3BDD24:lP<0.27.0>|N
+3BDADC:t2:A19:request_handler_verbosity,A7:silence
+3BDB3C:t2:A5:sname,A3:man
+=proc_dictionary:<0.47.0>
+H36E688
+H36E694
+H36E6A0
+H36E6AC
+=proc_stack:<0.47.0>
+36c520:SReturn addr 0x362C9C (inet_tcp:accept/2 + 20)
+y0:I5
+y1:p<0.161>
+y2:p<0.141>
+36c530:SReturn addr 0x500C5C (httpd_socket:accept/3 + 280)
+y0:N
+36c538:SReturn addr 0x502BFC (httpd_acceptor:acceptor/4 + 164)
+y0:N
+36c540:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:SCatch 0x502BFC (httpd_acceptor:acceptor/4 + 164)
+y1:P<0.46.0>
+y2:A7:ip_comm
+y3:p<0.141>
+y4:A1B:httpd_conf__127_0_0_1__8888
+36c558:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:AE:httpd_acceptor
+y2:A8:acceptor
+y3:H36E6C8
+=proc_heap:<0.47.0>
+36E6C8:lP<0.44.0>|H36E724
+36E724:lP<0.46.0>|H36E748
+36E748:lA7:ip_comm|H36E760
+36E760:lH36E6D0|H36E778
+36E6D0:t4:I127,I0,I0,I1
+36E778:lI8888|H36E788
+36E788:lA1B:httpd_conf__127_0_0_1__8888|H36E798
+36E798:lA7:silence|N
+36E688:t2:AD:$initial_call,H36E6F0
+36E6F0:t3:AE:httpd_acceptor,A8:acceptor,H36E6C8
+36E694:t2:A9:verbosity,A7:silence
+36E6A0:t2:AA:$ancestors,H36E700
+36E700:lA1E:httpd_acc_sup__127_0_0_1__8888|H36E72C
+36E72C:lA1A:httpd_sup__127_0_0_1__8888|H36E750
+36E750:lA8:web_tool|H36E768
+36E768:lP<0.27.0>|N
+36E6AC:t2:A5:sname,A3:acc
+=proc_dictionary:<0.48.0>
+H385E48
+H385E54
+=proc_stack:<0.48.0>
+3ac1bc:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A10:crashdump_viewer
+y3:H3AB280
+y4:A17:crashdump_viewer_server
+y5:P<0.41.0>
+3ac1d8:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H385E90
+=proc_heap:<0.48.0>
+3AB280:t8:A5:state,A9:undefined,A9:undefined,A9:undefined,A5:false,I4,A9:undefined,P<0.56.0>
+385E90:lAA:gen_server|H385ED8
+385ED8:lP<0.41.0>|H385F10
+385F10:lP<0.41.0>|H385F58
+385F58:lH385FA8|H385FB4
+385FA8:t2:A5:local,A17:crashdump_viewer_server
+385FB4:lA10:crashdump_viewer|H386014
+386014:lN|H38606C
+38606C:lN|N
+385E48:t2:AD:$initial_call,H385EB0
+385EB0:t3:A3:gen,A7:init_it,H385E90
+385E54:t2:AA:$ancestors,H385EC0
+385EC0:lA6:websup|H385F08
+385F08:lA8:web_tool|H385F50
+385F50:lP<0.27.0>|N
+=proc_stack:<0.49.0>
+36a114:SReturn addr 0x30174C (io:parse_erl_exprs/3 + 92)
+y0:H369E10
+y1:P<0.22.0>
+36a120:SReturn addr 0x2E5360 (shell:'-get_command/4-fun-0-'/1 + 20)
+y0:N
+36a128:SReturn addr 0x156F90 (<terminate process normally>)
+=proc_heap:<0.49.0>
+369E10:E21:8372000364000D6E6F6E6F6465406E6F686F737400000001330000000000000000
+=atoms
+http_cache_control
+copy_word
+drop_line
+copy_line
+write_rest_of_line
+drop_to_empty_line
+read_to_empty_line_reverse
+set_pos
+read_line_backwards
+jumped
+jump_to_empty_line_or_eof
+get_pos
+translate_atoms
+translate_fun
+translate_funs
+translate_loaded_modules2
+translate_loaded_modules_totals
+translate_loaded_modules
+translate_links
+get_all_creations
+translate_node_info2
+translate_node_info
+translate_dist_info2
+translate_dist_info
+get_msg
+translate_timers
+translate_ets
+translate_ets_tables
+do_translate_sl_alloc_r7_r8
+translate_sl_alloc_r7_r8
+translate_sl_alloc_line
+do_translate_sl_alloc
+translate_sl_alloc
+translate_memory_and_allocated_area_r9b
+translate_allocated_areas
+translate_internal_table_line
+translate_index_table
+translate_hash_table
+translate_internal_tables
+translate_ports
+write_last_calls
+write_msg_q_stuff
+translate_process
+translate_processes
+erts_vsn
+translate_summary
+'Send'
+erl_crash_dump
+internal_tables
+mods
+zombies
+http_content_length
+http_content_type
+'-procs_summary_body/5-fun-0-'
+'-expanded_memory_body/2-fun-0-'
+'-expanded_memory_body/2-fun-1-'
+'-expanded_memory_body/2-fun-2-'
+'-ports_body/3-fun-0-'
+'-ets_tables_body/4-fun-0-'
+'-internal_ets_tables_table/1-fun-0-'
+'-timers_body/3-fun-0-'
+'-make_nodes_table/2-fun-0-'
+'-loaded_mods_body/5-fun-0-'
+'-funs_body/3-fun-0-'
+'-memory_body/3-fun-0-'
+'-allocated_areas_body/3-fun-0-'
+'-allocator_info_body/3-fun-0-'
+'-allocator_info_body/3-fun-1-'
+'-allocator_info_body/3-fun-2-'
+'-hash_tables_body/3-fun-0-'
+'-index_tables_body/3-fun-0-'
+enter_write_file
+replace_insrt
+'$insrt'
+special
+initial
+pretty_format
+heading
+to_gt_noreverse
+to_gt
+href_proc_port
+br
+font
+h2
+h1
+img
+href
+pre
+em
+td
+th
+tr
+frame
+frameset
+html_header
+index_tables_table
+index_tables_body
+hash_tables_table
+hash_tables_body
+allocator_info_body \ No newline at end of file
diff --git a/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.250atoms b/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.250atoms
new file mode 100644
index 0000000000..ce3e5d8228
--- /dev/null
+++ b/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.250atoms
@@ -0,0 +1,13285 @@
+=erl_crash_dump:0.1
+Wed Apr 21 13:22:44 2004
+Slogan: eheap_alloc: Cannot allocate 785672 bytes of memory (of type "heap").
+System version: Erlang (BEAM) emulator version 5.4 [source] [hipe] [threads:0]
+Compiled: Thu Dec 18 14:07:45 2003
+Atoms: 5614
+=memory
+total: 653336887
+processes: 1768396
+processes_used: 1765460
+system: 651568491
+atom: 244837
+atom_used: 237116
+binary: 648618369
+code: 2158413
+ets: 225620
+=hash_table:atom_tab
+size: 4813
+used: 3304
+objs: 5614
+depth: 7
+=index_table:atom_tab
+size: 5700
+limit: 1048576
+used: 5614
+rate: 100
+=hash_table:module_code
+size: 97
+used: 69
+objs: 107
+depth: 5
+=index_table:module_code
+size: 110
+limit: 65536
+used: 107
+rate: 10
+=hash_table:export_list
+size: 2411
+used: 1674
+objs: 2843
+depth: 6
+=index_table:export_list
+size: 2900
+limit: 65536
+used: 2843
+rate: 100
+=hash_table:process_reg
+size: 47
+used: 16
+objs: 23
+depth: 3
+=hash_table:fun_table
+size: 397
+used: 261
+objs: 400
+depth: 4
+=hash_table:node_table
+size: 11
+used: 1
+objs: 1
+depth: 1
+=hash_table:dist_table
+size: 11
+used: 1
+objs: 1
+depth: 1
+=allocated_areas
+processes: 1765460 1768396
+ets: 225620
+sys_misc: 24634
+static: 295033
+atom_space: 65544 57967
+binary: 648618369
+atom_table: 42141
+module_table: 920
+export_table: 21336
+register_table: 252
+fun_table: 1650
+module_refs: 1024
+loaded_code: 1968915
+dist_table: 159
+node_table: 131
+bits_bufs_size: 19
+bif_timer: 13392
+link_lh: 0
+dist_buf: 0
+proc: 15080 13576
+atom_entry: 137152 137008
+export_entry: 138448 137632
+module_entry: 4872 4352
+reg_proc: 1000 592
+link_nh: 2464 2080
+link_sh: 832 192
+proc_list: 24 24
+fun_entry: 22584 22584
+db_tab: 1632 1632
+=allocator:sys_alloc
+option e: true
+option m: libc
+=allocator:temp_alloc
+versions: 0.9 2.1
+option e: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 90
+option rsbcmt: 80
+option mmbcs: 65536
+option mmsbc: 256
+option mmmbc: 10
+option lmbcs: 5242880
+option smbcs: 1048576
+option mbcgs: 10
+option as: af
+mbcs blocks: 0 9 9
+mbcs blocks size: 0 35376 35376
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 65568 65568 65568
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 65568
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+temp_alloc calls: 6155
+temp_free calls: 6155
+temp_realloc calls: 29
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:sl_alloc
+option e: false
+=allocator:std_alloc
+option e: false
+=allocator:ll_alloc
+versions: 0.9 2.1
+option e: true
+option sbct: 4294967295
+option asbcst: 0
+option rsbcst: 0
+option rsbcmt: 0
+option mmbcs: 2097152
+option mmsbc: 0
+option mmmbc: 0
+option lmbcs: 5242880
+option smbcs: 1048576
+option mbcgs: 10
+option as: aobf
+mbcs blocks: 592 592 592
+mbcs blocks size: 2838520 2863304 2863304
+mbcs carriers: 2 2 2
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 2
+mbcs carriers size: 3145760 3145760 3145760
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 3145760
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ll_alloc calls: 592
+ll_free calls: 0
+ll_realloc calls: 235
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 2
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:eheap_alloc
+versions: 2.1 2.1
+option e: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 50
+option rsbcmt: 80
+option mmbcs: 524288
+option mmsbc: 256
+option mmmbc: 10
+option lmbcs: 5242880
+option smbcs: 1048576
+option mbcgs: 10
+option mbsd: 3
+option as: gf
+mbcs blocks: 56 102 102
+mbcs blocks size: 833280 1638920 1638920
+mbcs carriers: 2 3 3
+mbcs mseg carriers: 1
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 1998880 3047456 3047456
+mbcs mseg carriers size: 1474560
+mbcs sys_alloc carriers size: 524320
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+eheap_alloc calls: 6971
+eheap_free calls: 6914
+eheap_realloc calls: 461
+mseg_alloc calls: 16
+mseg_dealloc calls: 14
+mseg_realloc calls: 0
+sys_alloc calls: 3
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:binary_alloc
+option e: false
+=allocator:ets_alloc
+option e: false
+=allocator:fix_alloc
+option e: true
+proc: 15080 13576
+atom_entry: 137152 137008
+export_entry: 138448 137632
+module_entry: 4872 4352
+reg_proc: 1000 592
+link_nh: 2464 2080
+link_sh: 832 192
+proc_list: 24 24
+fun_entry: 22584 22584
+db_tab: 1632 1632
+=allocator:mseg_alloc
+version: 0.9
+option amcbf: 4194304
+option rmcbf: 20
+option mcs: 5
+option cci: 1000
+cached_segments: 0
+cache_hits: 13
+segments: 2
+segments_watermark: 2
+mseg_alloc calls: 16
+mseg_dealloc calls: 14
+mseg_realloc calls: 0
+mseg_create calls: 4
+mseg_destroy calls: 1
+mseg_clear_cache calls: 6
+mseg_check_cache calls: 2
+=allocator:alloc_util
+option mmc: 1024
+option ycs: 1048576
+=allocator:instr
+option m: false
+option s: false
+option t: false
+=proc:<0.0.0>
+State: Waiting
+Name: init
+Spawned as: otp_ring0:start/2
+Spawned by: []
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.5.0>,<0.4.0>,<0.2.0>]
+Reductions: 3851
+Stack+heap: 377
+OldHeap: 610
+Heap unused: 53
+OldHeap unused: 610
+Program counter: 0x1f496c (init:loop/1 + 20)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.2.0>
+State: Waiting
+Name: erl_prim_loader
+Spawned as: erlang:apply/2
+Spawned by: <0.1.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.0.0>,#Port<0.2>]
+Reductions: 201036
+Stack+heap: 987
+OldHeap: 987
+Heap unused: 923
+OldHeap unused: 987
+Program counter: 0x20cc94 (erl_prim_loader:loop/3 + 52)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.4.0>
+State: Waiting
+Name: error_logger
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.1.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.21.0>,<0.0.0>]
+Reductions: 296
+Stack+heap: 6765
+OldHeap: 0
+Heap unused: 851
+OldHeap unused: 0
+Program counter: 0x21f5b8 (gen_event:loop/4 + 40)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.5.0>
+State: Waiting
+Name: application_controller
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.1.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.7.0>,<0.0.0>]
+Reductions: 1508
+Stack+heap: 1597
+OldHeap: 0
+Heap unused: 835
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.7.0>
+State: Waiting
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.6.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.8.0>,<0.5.0>]
+Reductions: 23
+Stack+heap: 377
+OldHeap: 0
+Heap unused: 79
+OldHeap unused: 0
+Program counter: 0x248d04 (application_master:main_loop/2 + 28)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.8.0>
+State: Waiting
+Spawned as: application_master:start_it/4
+Spawned by: <0.7.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>,<0.7.0>]
+Reductions: 91
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 177
+OldHeap unused: 0
+Program counter: 0x24a26c (application_master:loop_it/4 + 40)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.9.0>
+State: Waiting
+Name: kernel_sup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.8.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.24.0>,<0.23.0>,<0.19.0>,<0.18.0>,<0.17.0>,<0.16.0>,<0.15.0>,<0.14.0>,<0.11.0>,<0.10.0>,<0.8.0>]
+Reductions: 7402
+Stack+heap: 610
+OldHeap: 987
+Heap unused: 311
+OldHeap unused: 987
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.10.0>
+State: Waiting
+Name: rex
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>]
+Reductions: 44
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 144
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.11.0>
+State: Waiting
+Name: global_name_server
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.13.0>,<0.12.0>,<0.9.0>]
+Reductions: 47
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 98
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.12.0>
+State: Waiting
+Spawned as: global:init_the_locker/1
+Spawned by: <0.11.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.11.0>]
+Reductions: 3
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 227
+OldHeap unused: 0
+Program counter: 0x261340 (global:loop_the_locker/2 + 92)
+CP: 0x261184 (global:init_the_locker/1 + 112)
+arity = 0
+=proc:<0.13.0>
+State: Waiting
+Spawned as: erlang:apply/2
+Spawned by: <0.11.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.11.0>]
+Reductions: 4
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 221
+OldHeap unused: 0
+Program counter: 0x265288 (global:collect_deletions/2 + 76)
+CP: 0x2651ac (global:loop_the_deleter/1 + 36)
+arity = 0
+=proc:<0.14.0>
+State: Waiting
+Name: inet_db
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>]
+Reductions: 376
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 30
+OldHeap unused: 233
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.15.0>
+State: Waiting
+Name: global_group
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>]
+Reductions: 71
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 92
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.16.0>
+State: Waiting
+Name: file_server_2
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 1
+Heap fragment data: 119
+Link list: [{from,<0.17.0>,#Ref<0.0.0.22>},#Port<0.4>,<0.9.0>]
+Reductions: 83605
+Stack+heap: 4181
+OldHeap: 4181
+Heap unused: 1720
+OldHeap unused: 4181
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.17.0>
+State: Waiting
+Name: file_server
+Spawned as: erlang:apply/2
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [{to,<0.16.0>,#Ref<0.0.0.22>},<0.9.0>]
+Reductions: 12
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 207
+OldHeap unused: 0
+Program counter: 0x2a18e8 (old_file_server:relay_loop/3 + 32)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.18.0>
+State: Waiting
+Name: code_server
+Spawned as: erlang:apply/2
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>]
+Reductions: 108900
+Stack+heap: 6765
+OldHeap: 6765
+Heap unused: 4389
+OldHeap unused: 6765
+Program counter: 0x2a6e64 (code_server:loop/1 + 64)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.19.0>
+State: Waiting
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.21.0>,<0.9.0>]
+Reductions: 74
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 180
+OldHeap unused: 233
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.20.0>
+State: Waiting
+Spawned as: user_drv:server/2
+Spawned by: <0.19.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.22.0>,<0.21.0>,#Port<0.72>]
+Reductions: 596
+Stack+heap: 233
+OldHeap: 377
+Heap unused: 214
+OldHeap unused: 377
+Program counter: 0x2ca4e0 (user_drv:server_loop/5 + 56)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.21.0>
+State: Waiting
+Name: user
+Spawned as: group:server/2
+Spawned by: <0.20.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.4.0>,<0.19.0>,<0.20.0>]
+Reductions: 26
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 202
+OldHeap unused: 0
+Program counter: 0x2cd9d8 (group:server_loop/3 + 32)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.22.0>
+State: Waiting
+Spawned as: group:server/2
+Spawned by: <0.20.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [{from,<0.49.0>,#Ref<0.0.0.307>},<0.25.0>,<0.20.0>]
+Reductions: 1244
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 40
+OldHeap unused: 233
+Program counter: 0x2cf238 (group:get_line1/3 + 1652)
+CP: 0x2cf230 (group:get_line1/3 + 1644)
+arity = 0
+=proc:<0.23.0>
+State: Waiting
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>]
+Reductions: 45
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 63
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.24.0>
+State: Waiting
+Name: kernel_safe_sup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.31.0>,<0.9.0>]
+Reductions: 133
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 198
+OldHeap unused: 233
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.25.0>
+State: Waiting
+Spawned as: erlang:apply/2
+Spawned by: <0.22.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.49.0>,<0.27.0>,<0.22.0>]
+Reductions: 161
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 169
+OldHeap unused: 0
+Program counter: 0x2e0d00 (shell:get_command1/4 + 40)
+CP: 0x2e06fc (shell:server_loop/6 + 140)
+arity = 0
+=proc:<0.27.0>
+State: Waiting
+Spawned as: erlang:apply/2
+Spawned by: <0.25.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.25.0>]
+Reductions: 506
+Stack+heap: 4181
+OldHeap: 0
+Heap unused: 1131
+OldHeap unused: 0
+Program counter: 0x2e2bbc (shell:eval_loop/2 + 32)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.31.0>
+State: Waiting
+Name: inet_gethost_native_sup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.24.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.32.0>,<0.24.0>]
+Reductions: 49
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 87
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.32.0>
+State: Waiting
+Name: inet_gethost_native
+Spawned as: inet_gethost_native:server_init/2
+Spawned by: <0.31.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 1
+Heap fragment data: 118
+Link list: [#Port<0.105>,<0.31.0>]
+Reductions: 65
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 13
+OldHeap unused: 0
+Program counter: 0x4ad840 (inet_gethost_native:main_loop/1 + 20)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.33.0>
+State: Waiting
+Name: web_tool
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.27.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.41.0>]
+Reductions: 131773
+Stack+heap: 6765
+OldHeap: 6765
+Heap unused: 2941
+OldHeap unused: 6765
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.41.0>
+State: Waiting
+Name: websup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.33.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.48.0>,<0.33.0>]
+Reductions: 118
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 205
+OldHeap unused: 233
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.43.0>
+State: Waiting
+Name: httpd_sup__127_0_0_1__8888
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.33.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.46.0>,<0.45.0>,<0.44.0>]
+Reductions: 1220
+Stack+heap: 6765
+OldHeap: 0
+Heap unused: 277
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.44.0>
+State: Waiting
+Name: httpd_acc_sup__127_0_0_1__8888
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.43.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.47.0>,<0.43.0>]
+Reductions: 147
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 77
+OldHeap unused: 233
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.45.0>
+State: Waiting
+Name: httpd_misc_sup__127_0_0_1__8888
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.43.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.43.0>]
+Reductions: 52
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 80
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.46.0>
+State: Waiting
+Name: httpd__127_0_0_1__8888
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.43.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.43.0>]
+Reductions: 2905
+Stack+heap: 6765
+OldHeap: 10946
+Heap unused: 138
+OldHeap unused: 10946
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.47.0>
+State: Waiting
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.44.0>
+Started: Wed Apr 21 13:22:18 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [#Port<0.161>,#Port<0.141>,<0.44.0>]
+Reductions: 874
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 190
+OldHeap unused: 233
+Program counter: 0x1fe798 (prim_inet:accept0/2 + 96)
+CP: 0x1feb04 (prim_inet:async_accept/2 + 380)
+arity = 0
+=proc:<0.48.0>
+State: Waiting
+Name: crashdump_viewer_server
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.41.0>
+Started: Wed Apr 21 13:22:18 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.56.0>,<0.41.0>]
+Reductions: 1913
+Stack+heap: 987
+OldHeap: 987
+Heap unused: 524
+OldHeap unused: 987
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.49.0>
+State: Waiting
+Spawned as: erlang:apply/2
+Spawned by: <0.25.0>
+Started: Wed Apr 21 13:22:18 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [{to,<0.22.0>,#Ref<0.0.0.307>},<0.25.0>]
+Reductions: 15
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 190
+OldHeap unused: 0
+Program counter: 0x301d58 (io:wait_io_mon_reply/2 + 28)
+CP: 0x30174c (io:parse_erl_exprs/3 + 92)
+arity = 0
+=proc:<0.56.0>
+State: Garbing
+Spawned as: erlang:apply/2
+Last scheduled in for: erlang:garbage_collect/0
+Spawned by: <0.48.0>
+Started: Wed Apr 21 13:22:27 2004
+Message queue length: 0
+Number of heap fragments: 1
+Heap fragment data: 121
+Link list: [#Port<0.158>,#Port<0.157>,<0.48.0>]
+Reductions: 2420470
+Stack+heap: 121393
+OldHeap: 0
+Heap unused: 22172
+OldHeap unused: 0
+New heap start: FE5768E0
+New heap top: FE5D7734
+Stack top: FE5ED130
+Stack end: FE5ED1A4
+Old heap start: 0
+Old heap top: 0
+Old heap end: 0
+Program counter: 0x1a4980 (unknown function)
+CP: 0x20710c (prim_file:read/2 + 436)
+=port:#Port<0.1>
+Slot: 1
+Connected: #Port<0.0>
+Port controls linked-in driver: async
+=port:#Port<0.2>
+Slot: 2
+Connected: <0.2.0>
+Links: <0.2.0>
+Port controls linked-in driver: efile
+=port:#Port<0.4>
+Slot: 4
+Connected: <0.16.0>
+Links: <0.16.0>
+Port controls linked-in driver: efile
+=port:#Port<0.72>
+Slot: 72
+Connected: <0.20.0>
+Links: <0.20.0>
+Port controls linked-in driver: tty_sl -c -e
+=port:#Port<0.105>
+Slot: 105
+Connected: <0.32.0>
+Links: <0.32.0>
+Port controls external process: inet_gethost 4
+=port:#Port<0.141>
+Slot: 141
+Connected: <0.47.0>
+Links: <0.47.0>
+Port controls linked-in driver: tcp_inet
+=port:#Port<0.157>
+Slot: 157
+Connected: <0.56.0>
+Links: <0.56.0>
+Port controls linked-in driver: efile
+=port:#Port<0.158>
+Slot: 158
+Connected: <0.56.0>
+Links: <0.56.0>
+Port controls linked-in driver: efile
+=port:#Port<0.161>
+Slot: 161
+Connected: <0.47.0>
+Links: <0.47.0>
+Port controls linked-in driver: tcp_inet
+=ets:<0.18.0>
+Slot: 9
+Table: 9
+Name: code
+Buckets: 256
+Objects: 289
+Words: 14108
+=ets:<0.18.0>
+Slot: 10
+Table: 10
+Name: code_names
+Buckets: 256
+Objects: 47
+Words: 4334
+=ets:<0.32.0>
+Slot: 11
+Table: 11
+Name: ign_requests
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.32.0>
+Slot: 12
+Table: 12
+Name: ign_req_index
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.33.0>
+Slot: 13
+Table: 13
+Name: app_data
+Buckets: 256
+Objects: 7
+Words: 952
+=ets:<0.46.0>
+Slot: 15
+Table: 15
+Name: httpd_mime__127_0_0_1__8888
+Buckets: 256
+Objects: 105
+Words: 5742
+=ets:<0.11.0>
+Slot: 84
+Table: global_names
+Name: global_names
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.11.0>
+Slot: 95
+Table: global_locks
+Name: global_locks
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.11.0>
+Slot: 96
+Table: global_names_ext
+Name: global_names_ext
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.14.0>
+Slot: 316
+Table: inet_cache
+Name: inet_cache
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.48.0>
+Slot: 340
+Table: cdv_menu_table
+Name: cdv_menu_table
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.48.0>
+Slot: 341
+Table: cdv_dump_index_table
+Name: cdv_dump_index_table
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.48.0>
+Slot: 342
+Table: cdv_decode_heap_table
+Name: cdv_decode_heap_table
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.16.0>
+Slot: 780
+Table: file_io_servers
+Name: file_io_servers
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.46.0>
+Slot: 984
+Table: httpd_conf__127_0_0_1__8888
+Name: httpd_conf__127_0_0_1__8888
+Buckets: 256
+Objects: 17
+Words: 1176
+=ets:<0.14.0>
+Slot: 1342
+Table: inet_hosts
+Name: inet_hosts
+Buckets: 256
+Objects: 4
+Words: 421
+=ets:<0.14.0>
+Slot: 1362
+Table: inet_db
+Name: inet_db
+Buckets: 256
+Objects: 20
+Words: 671
+=ets:<0.5.0>
+Slot: 1655
+Table: ac_tab
+Name: ac_tab
+Buckets: 256
+Objects: 6
+Words: 843
+=timer:<0.14.0>
+Message: refresh_timeout
+Time left: 3565692 ms
+=node:'nonode@nohost'
+=no_distribution
+=loaded_modules
+Current code: 1968915
+Old code: 0
+=mod:otp_ring0
+Current size: 489
+=mod:init
+Current size: 30110
+=mod:prim_inet
+Current size: 35532
+=mod:prim_file
+Current size: 24965
+=mod:erl_prim_loader
+Current size: 19607
+=mod:erlang
+Current size: 11137
+=mod:error_handler
+Current size: 2389
+Current attributes: 836C00000001680264000376736E6C000000016E100030769A34345F26EF6D3433254FF2AE576A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161216802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6572726F725F68616E646C65722E65726C6A
+=mod:heart
+Current size: 6687
+Current attributes: 836C00000001680264000376736E6C000000016E10003094F7BECF345494DDBB4D7186E694186A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261086802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F68656172742E65726C6A
+=mod:error_logger
+Current size: 7051
+Current attributes: 836C00000001680264000376736E6C000000016E10004E3347F841DEAE2EB6A74389E6E127146A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161246802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6572726F725F6C6F676765722E65726C6A
+=mod:gen_event
+Current size: 18288
+Current attributes: 836C00000001680264000376736E6C000000016E1000336F22DF1EA75E0EA4AE65D3B8C34F946A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61346802640006736F757263656B00302F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E5F6576656E742E65726C6A
+=mod:gen
+Current size: 7129
+Current attributes: 836C00000001680264000376736E6C000000016E10007BE6AEB66EF48D8B33323C89C9936A526A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61316802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E2E65726C6A
+=mod:proc_lib
+Current size: 11658
+Current attributes: 836C00000001680264000376736E6C000000016E10005C589A8C9BD2E1F2E895E765CAE983406A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E612D6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F70726F635F6C69622E65726C6A
+=mod:application_controller
+Current size: 55249
+Current attributes: 836C00000002680264000376736E6C000000016E10003372E1AB0410565065FA086086A721316A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061246802640006736F757263656B003D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F636F6E74726F6C6C65722E65726C6A
+=mod:gen_server
+Current size: 18728
+Current attributes: 836C00000001680264000376736E6C000000016E10004C5E93533036DAC7698FC4112F59CF236A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61396802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E5F7365727665722E65726C6A
+=mod:sys
+Current size: 11589
+Current attributes: 836C00000001680264000376736E6C000000016E1000E12B0E8267551204BD5924BAB9629ADF6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61176802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7379732E65726C6A
+=mod:lists
+Current size: 18638
+Current attributes: 836C00000002680264000376736E6C000000016E10001E95B32C30E4CDAF0BDD1ABA58CBB5F36A680264000A646570726563617465646C0000000B68026400066B65796D617061046802640003616C6C61036802640003616E79610368026400036D617061036802640007666C61746D617061036802640005666F6C646C61046802640005666F6C64726104680264000666696C746572610368026400086D6170666F6C646C610468026400086D6170666F6C647261046802640007666F726561636861036A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61116802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6C697374732E65726C6A
+=mod:application
+Current size: 2666
+Current attributes: 836C00000001680264000376736E6C000000016E1000C0C5A7B67B306300FEFF9D91AA50ECB36A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6130611F6802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E2E65726C6A
+=mod:application_master
+Current size: 10912
+Current attributes: 836C00000001680264000376736E6C000000016E1000360420F5CEB80AD7DD51B3A8A0E2AFA26A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061266802640006736F757263656B00392F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F6D61737465722E65726C6A
+=mod:kernel
+Current size: 7639
+Current attributes: 836C00000002680264000376736E6C000000016E10004D418ACCB0F948D4D3CA6B9A81B462746A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261336802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6B65726E656C2E65726C6A
+=mod:supervisor
+Current size: 24469
+Current attributes: 836C00000002680264000376736E6C000000016E1000979F65727577135484BE0892A35087CC6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61126802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F73757065727669736F722E65726C6A
+=mod:rpc
+Current size: 14539
+Current attributes: 836C00000002680264000376736E6C000000016E10008C5D6242D36B3201E3B11E82D5E1581E6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6133610F6802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F7270632E65726C6A
+=mod:gb_trees
+Current size: 8274
+Current attributes: 836C00000001680264000376736E6C000000016E1000094BEFDE7B866EF2CB6FCD895AC2EE056A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D612B6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67625F74726565732E65726C6A
+=mod:global
+Current size: 40753
+Current attributes: 836C00000002680264000376736E6C000000016E10001D02C89BDE6CB2052F099894683C14CA6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161386802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F676C6F62616C2E65726C6A
+=mod:inet_db
+Current size: 34555
+Current attributes: 836C00000001680264000376736E6C000000016E1000C1CF6A6F2E83D4EBC23D2CCECBF376226A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132611A6802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F64622E65726C6A
+=mod:inet_config
+Current size: 13575
+Current attributes: 836C00000001680264000376736E6C000000016E1000650F6571C03BC9C16BB7973A747565066A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261166802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F636F6E6669672E65726C6A
+=mod:os
+Current size: 5997
+Current attributes: 836C00000001680264000376736E6C000000016E100017144CD766A604A9DFBA0B58C8FCA78B6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361056802640006736F757263656B00292F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6F732E65726C6A
+=mod:inet_udp
+Current size: 2451
+Current attributes: 836C00000001680264000376736E6C000000016E1000ACB163E87A687A6683B50B331C6E289B6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261306802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F7564702E65726C6A
+=mod:inet
+Current size: 28288
+Current attributes: 836C00000001680264000376736E6C000000016E10009B9AD400F0BAF6AAF17A4788A4EFF11E6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132610C6802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65742E65726C6A
+=mod:inet_parse
+Current size: 21928
+Current attributes: 836C00000001680264000376736E6C000000016E1000E0E65454C096847749930EDC1C53C80B6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261266802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F70617273652E65726C6A
+=mod:filename
+Current size: 17411
+Current attributes: 836C00000001680264000376736E6C000000016E100068085214F459D51A3E08819BF8D7698A6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61296802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F66696C656E616D652E65726C6A
+=mod:inet_hosts
+Current size: 3745
+Current attributes: 836C00000001680264000376736E6C000000016E1000E7430304E86230057150DEE5D279881F6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261226802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F686F7374732E65726C6A
+=mod:erl_distribution
+Current size: 2512
+Current attributes: 836C00000002680264000376736E6C000000016E1000CDE49D63ACA767E0D49679657E99D2046A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161186802640006736F757263656B00372F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F65726C5F646973747269627574696F6E2E65726C6A
+=mod:global_group
+Current size: 30960
+Current attributes: 836C00000002680264000376736E6C000000016E10008ECE759E5920988CA3ACFF34B32F86736A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131613B6802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F676C6F62616C5F67726F75702E65726C6A
+=mod:net_kernel
+Current size: 37648
+Current attributes: 836C00000002680264000376736E6C000000016E1000967CE7DE41F9B39906CCCF3225E6E5286A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361026802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6E65745F6B65726E656C2E65726C6A
+=mod:file_server
+Current size: 8372
+Current attributes: 836C00000002680264000376736E6C000000016E1000EF90906EC6204204AC0A77C4A25B65236A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612D6802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C655F7365727665722E65726C6A
+=mod:old_file_server
+Current size: 3074
+Current attributes: 836C00000001680264000376736E6C000000016E1000C802085DD76D4EFBA6A8F528FECB94B36A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612F6802640006736F757263656B00362F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6F6C645F66696C655F7365727665722E65726C6A
+=mod:code
+Current size: 7419
+Current attributes: 836C00000001680264000376736E6C000000016E1000AE618E3041C8E3807A3719CD5140DF5E6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6130612E6802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64652E65726C6A
+=mod:code_server
+Current size: 30811
+Current attributes: 836C00000001680264000376736E6C000000016E0F00BFB96248C2CA8601B4CB7F543F52E26A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061346802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64655F7365727665722E65726C6A
+=mod:code_aux
+Current size: 1736
+Current attributes: 836C00000001680264000376736E6C000000016E10007A90DB53FCCECD52504F20E7A3B6BAE26A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061316802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64655F6175782E65726C6A
+=mod:packages
+Current size: 3119
+Current attributes: 836C00000001680264000376736E6C000000016E1000044DC8EEB65F178AE23EF2465E1954496A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361076802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F7061636B616765732E65726C6A
+=mod:hipe_unified_loader
+Current size: 37330
+Current attributes: 836C00000001680264000376736E6C000000016E1000DABD57945702E56F4B3AA7B7B19C1D166A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361326802640006736F757263656B003A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F686970655F756E69666965645F6C6F616465722E65726C6A
+=mod:hipe_sparc_loader
+Current size: 1821
+Current attributes: 836C00000001680264000376736E6C000000016E1000582BC55E9FADFF879C2C45D25A6CB7E56A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F6D61696E6802640001696B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F72746C6802640001696B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F737061726364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6133612B6802640006736F757263656B00382F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F686970655F73706172635F6C6F616465722E65726C6A
+=mod:ets
+Current size: 16577
+Current attributes: 836C00000002680264000376736E6C000000016E100033D982AC91129E5FC35E0AC3337A4EB56A680264000A646570726563617465646C0000000168026400086669787461626C6561026A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D611C6802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6574732E65726C6A
+=mod:lists_sort
+Current size: 38692
+Current attributes: 836C00000001680264000376736E6C000000016E1000E17EC92FA9AA3199DD71701C215044616A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000B68026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736802640006696E6C696E656C0000000468026400096D65726765335F3132610768026400096D65726765335F32316107680264000A726D65726765335F31326107680264000A726D65726765335F323161076A6802640006696E6C696E656C00000004680264000A756D65726765335F31326108680264000A756D65726765335F32316108680264000C72756D65726765335F3132616107680264000C72756D65726765335F31326261086A6802640006696E6C696E656C00000004680264000C6B65796D65726765335F3132610C680264000C6B65796D65726765335F3231610C680264000D726B65796D65726765335F3132610C680264000D726B65796D65726765335F3231610C6A6802640006696E6C696E656C00000006680264000D756B65796D65726765335F3132610D680264000D756B65796D65726765335F3231610D680264000F72756B65796D65726765335F313261610B680264000F72756B65796D65726765335F323161610D680264000F72756B65796D65726765335F313262610D680264000F72756B65796D65726765335F323162610C6A6A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61166802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6C697374735F736F72742E65726C6A
+=mod:user_sup
+Current size: 2355
+Current attributes: 836C00000002680264000376736E6C000000016E100074BA860804CB4D60D6908C705E6544BD6A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361246802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F757365725F7375702E65726C6A
+=mod:supervisor_bridge
+Current size: 2944
+Current attributes: 836C00000002680264000376736E6C000000016E10001590DDC10CF8A9D09763CDB7479678ED6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61156802640006736F757263656B00382F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F73757065727669736F725F6272696467652E65726C6A
+=mod:user_drv
+Current size: 14630
+Current attributes: 836C00000001680264000376736E6C000000016E1000F29F3B193A1EB1ADA9975D97E51BF0E86A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361216802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F757365725F6472762E65726C6A
+=mod:group
+Current size: 10165
+Current attributes: 836C00000001680264000376736E6C000000016E1000F6427D0DA330BBFAD5D4C19058516FF36A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261066802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F67726F75702E65726C6A
+=mod:io_lib
+Current size: 12601
+Current attributes: 836C00000002680264000376736E6C000000016E10004160DD78F37EE7C72F7C5B6A751DB7F56A680264000A646570726563617465646C0000000468026400047363616E610168026400047363616E610268026400047363616E6103680264000D72657365727665645F776F726461016A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61036802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69622E65726C6A
+=mod:edlin
+Current size: 18178
+Current attributes: 836C00000001680264000376736E6C000000016E100035D752FCBA8ED7F4D26990EF3E6A1A526A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C61016802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65646C696E2E65726C6A
+=mod:io_lib_format
+Current size: 16189
+Current attributes: 836C00000001680264000376736E6C000000016E10004F382F327C456F83F33C3D5EBFBD87906A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61066802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69625F666F726D61742E65726C6A
+=mod:kernel_config
+Current size: 3295
+Current attributes: 836C00000002680264000376736E6C000000016E100077B8EE6C9E95FBBE5DB0371F6DB235226A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261356802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6B65726E656C5F636F6E6669672E65726C6A
+=mod:shell
+Current size: 22571
+Current attributes: 836C00000001680264000376736E6C000000016E10007D1354325618EB98A5BD4E8F41E6A0226A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61016802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7368656C6C2E65726C6A
+=mod:error_logger_tty_h
+Current size: 7773
+Current attributes: 836C00000002680264000376736E6C000000016E10001502D55D6C1777F07E2E05CDD91D16986A68026400096265686176696F75726C0000000164000967656E5F6576656E746A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61196802640006736F757263656B00392F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6572726F725F6C6F676765725F7474795F682E65726C6A
+=mod:erl_eval
+Current size: 33481
+Current attributes: 836C00000002680264000376736E6C000000016E1000D06903753C86BBC49A5CBD789CCB09B66A680264000A646570726563617465646C00000004680264000373657161026802640003736571610368026400086172675F6C697374610268026400086172675F6C69737461036A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C610D6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F6576616C2E65726C6A
+=mod:orddict
+Current size: 4872
+Current attributes: 836C00000002680264000376736E6C000000016E100078DCF69F3949D79BC54168266A3ABF566A680264000A646570726563617465646C00000002680264000C646963745F746F5F6C6973746101680264000C6C6973745F746F5F6469637461016A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61236802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F7264646963742E65726C6A
+=mod:c
+Current size: 19555
+Current attributes: 836C00000001680264000376736E6C000000016E10003FACCF5DE16ABBC988ABF0811980C33B6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61136802640006736F757263656B00282F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F632E65726C6A
+=mod:io
+Current size: 7417
+Current attributes: 836C00000002680264000376736E6C000000016E1000E2F2A6094B3C3D945865225D0620E7546A680264000A646570726563617465646C00000007680264000B70617273655F65787072736102680264000C7363616E5F65726C5F7365716101680264000C7363616E5F65726C5F7365716102680264000C7363616E5F65726C5F7365716103680264000D70617273655F65726C5F7365716101680264000D70617273655F65726C5F7365716102680264000D70617273655F65726C5F73657161036A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61006802640006736F757263656B00292F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F2E65726C6A
+=mod:file
+Current size: 20795
+Current attributes: 836C00000002680264000376736E6C000000016E1000D291AF77EE8B08B792B7FE99274504506A680264000A646570726563617465646C00000001680264000966696C655F696E666F61016A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161276802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C652E65726C6A
+=mod:file_io_server
+Current size: 12071
+Current attributes: 836C00000001680264000376736E6C000000016E1000A5A8C4E2B2646855AD5C617CB216CB966A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612A6802640006736F757263656B00352F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C655F696F5F7365727665722E65726C6A
+=mod:erl_scan
+Current size: 21891
+Current attributes: 836C00000001680264000376736E6C000000016E100094F386F0C378B258E5D9CEADD4F03B6A6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61116802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F7363616E2E65726C6A
+=mod:erl_parse
+Current size: 161233
+Current attributes: 836C00000001680264000376736E6C000000016E10000E8CBC32C293BFC1FBC721CE918062236A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000968026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F76617273640006696E6C696E656802640004686970656C000000016802640008726567616C6C6F6364000B6C696E6561725F7363616E6A6A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61076802640006736F757263656B00302F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F70617273652E65726C6A
+=mod:erl_lint
+Current size: 73159
+Current attributes: 836C00000001680264000376736E6C000000016E1000D1D2A7D6DDFD1195CB180993C76FD2CD6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C61156802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F6C696E742E65726C6A
+=mod:ordsets
+Current size: 3257
+Current attributes: 836C00000002680264000376736E6C000000016E1000FD39D8FD846511128F5670BA28600F676A680264000A646570726563617465646C0000000468026400076E65775F7365746100680264000B7365745F746F5F6C6973746101680264000B6C6973745F746F5F7365746101680264000673756273657461026A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61256802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F7264736574732E65726C6A
+=mod:dict
+Current size: 15637
+Current attributes: 836C00000002680264000376736E6C000000016E1000BC846E7EF85045A5D76190CE9B1AE97C6A680264000A646570726563617465646C00000002680264000C646963745F746F5F6C6973746101680264000C6C6973745F746F5F6469637461016A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61356802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F646963742E65726C6A
+=mod:otp_internal
+Current size: 7133
+Current attributes: 836C00000001680264000376736E6C000000016E1000DC494F64DE590AFC4919DFEB0EB026B66A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61206802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F74705F696E7465726E616C2E65726C6A
+=mod:user_default
+Current size: 1261
+Current attributes: 836C00000002680264000376736E6C000000016E1000505078ACD9B84D514FC6DA2BE249E6756A6802640006617574686F726C0000000164001765656973686E6E406565692E6572696373736F6E2E73656A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000368026400036377646B00112F686F6D652F736972692F65726C616E6768026400066F75746469726B00112F686F6D652F736972692F65726C616E676400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461036116610D612C61126802640006736F757263656B00222F686F6D652F736972692F65726C616E672F757365725F64656661756C742E65726C6A
+=mod:tt
+Current size: 2959
+Current attributes: 836C00000002680264000376736E6C000000016E10001D71FD5A55D3BCBF06BFEDF2426C3C386A6802640006617574686F726C0000000164001765656973686E6E406565692E6572696373736F6E2E73656A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000368026400036377646B00112F686F6D652F736972692F65726C616E6768026400066F75746469726B00112F686F6D652F736972692F65726C616E676400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461036116610D612B610C6802640006736F757263656B00182F686F6D652F736972692F65726C616E672F74742E65726C6A
+=mod:distel
+Current size: 18214
+Current attributes: 836C00000002680264000376736E6C000000016E1000CC9C9EF141459249C1CCA00993B2E29A6A6802640006617574686F726C000000016400116C756B6540626C75657461696C2E636F6D6A6A
+Current compilation info: 836C0000000368026400076F7074696F6E736C0000000664000276336400107761726E5F756E757365645F7661727364000A64656275675F696E666F68026400066F75746469726B00046562696E68026400036377646B001C2F6C6469736B2F736972692F746F6F6C732F64697374656C2D332E3164000A6578706F72745F616C6C6A680264000776657273696F6E6B0003342E31680264000474696D65680662000007D2610B6114610B610361336A
+=mod:crashdump_viewer
+Current size: 125756
+Current attributes: 836C00000001680264000376736E6C000000016E10002DC5D9D96190A2D5F27FAC3FA3D5C7956A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F76617273680264000F70617273655F7472616E73666F726D64000C6D735F7472616E73666F726D6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461146108611B61366802640006736F757263656B00362F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7669657765722E65726C6A
+=mod:webtool
+Current size: 29229
+Current attributes: 836C00000002680264000376736E6C000000016E10008AEEF06B60527A3390CBC2C98083CC0A6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00202F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F73726368026400066F75746469726B00282F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F2E2E2F6562696E64000A64656275675F696E666F6400107761726E5F756E757365645F76617273680264000F70617273655F7472616E73666F726D64000C6D735F7472616E73666F726D6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104610661086106612D6802640006736F757263656B002C2F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F776562746F6F6C2E65726C6A
+=mod:gen_tcp
+Current size: 3574
+Current attributes: 836C00000001680264000376736E6C000000016E1000C965E4EAFDAA94D7F21EDCBE30B21E7B6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161316802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F67656E5F7463702E65726C6A
+=mod:inet_tcp
+Current size: 2743
+Current attributes: 836C00000001680264000376736E6C000000016E1000C4AFE0B49768E4CF78B2C42EA1D3DB7F6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132612B6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F7463702E65726C6A
+=mod:inet_gethost_native
+Current size: 15611
+Current attributes: 836C00000002680264000376736E6C000000016E10005D8CD4277D0BD2425B9C26036AE314506A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261206802640006736F757263656B003A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F676574686F73745F6E61746976652E65726C6A
+=mod:filelib
+Current size: 7202
+Current attributes: 836C00000001680264000376736E6C000000016E10007B42AA23FF99DF2CD9D586635B77556A6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61266802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F66696C656C69622E65726C6A
+=mod:httpd_util
+Current size: 24068
+Current attributes: 836C00000002680264000376736E6C000000016E10008D99E096221B88D542E52CB9C8377F6D6A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128613B6802640006736F757263656B00312F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F7574696C2E65726C6A
+=mod:webtool_sup
+Current size: 695
+Current attributes: 836C00000002680264000376736E6C000000016E1000FA5449E12816CF3AD0A3085BB26CDB9B6A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400036377646B00202F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F73726368026400066F75746469726B00282F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F2E2E2F6562696E64000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461066108610761236802640006736F757263656B00302F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F776562746F6F6C5F7375702E65726C6A
+=mod:httpd_conf
+Current size: 33659
+Current attributes: 836C00000002680264000376736E6C000000016E1000E3198FBDC73BC48CB7D0C1C762B8F1AB6A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861116802640006736F757263656B00312F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F636F6E662E65726C6A
+=mod:regexp
+Current size: 13698
+Current attributes: 836C00000001680264000376736E6C000000016E10009DD44F3D02F8328BE3ABF4DDA89E0CAE6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61376802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7265676578702E65726C6A
+=mod:string
+Current size: 7740
+Current attributes: 836C00000002680264000376736E6C000000016E10005521DDF38903D46D7C53DB864266F7456A680264000A646570726563617465646C00000007680264000C72655F73685F746F5F61776B6101680264000872655F70617273656101680264000872655F6D617463686102680264000672655F7375626103680264000772655F677375626103680264000872655F73706C697461026802640005696E64657861026A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F610F6802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F737472696E672E65726C6A
+=mod:httpd
+Current size: 7563
+Current attributes: 836C00000002680264000376736E6C000000016E1000BFD190D951EB3CAD2CC72ADEF20886906A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861036802640006736F757263656B002C2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470642E65726C6A
+=mod:httpd_sup
+Current size: 4068
+Current attributes: 836C00000003680264000376736E6C000000016E10007FA5C790118F18F3D20A2BFAF0229F0A6A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861366802640006736F757263656B00302F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F7375702E65726C6A
+=mod:httpd_acceptor_sup
+Current size: 2161
+Current attributes: 836C00000003680264000376736E6C000000016E10003E6F9289B64C13F1EC8A1184BACF055F6A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128610C6802640006736F757263656B00392F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6163636570746F725F7375702E65726C6A
+=mod:httpd_verbosity
+Current size: 2672
+Current attributes: 836C00000002680264000376736E6C000000016E100018B6F407D391872421748F87877DAAF36A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961036802640006736F757263656B00362F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F766572626F736974792E65726C6A
+=mod:timer
+Current size: 8223
+Current attributes: 836C00000001680264000376736E6C000000016E10001D0D64DB1B923D1B3B9497655C43B4AD6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F611A6802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F74696D65722E65726C6A
+=mod:httpd_misc_sup
+Current size: 2066
+Current attributes: 836C00000003680264000376736E6C000000016E100092342F38AC16C074DDC21532FBFB52C26A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128611F6802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6D6973635F7375702E65726C6A
+=mod:httpd_manager
+Current size: 28916
+Current attributes: 836C00000003680264000376736E6C000000016E100013F7A1E6A4B6407A0A1892A794EE10A36A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128611B6802640006736F757263656B00342F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6D616E616765722E65726C6A
+=mod:mod_alias
+Current size: 6720
+Current attributes: 836C00000002680264000376736E6C000000016E10002F35C36060B4AC45474440381D146AB96A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961106802640006736F757263656B00302F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F616C6961732E65726C6A
+=mod:mod_auth
+Current size: 25168
+Current attributes: 836C00000002680264000376736E6C000000016E100083F3CA0C7A3E7B5E19A635A7F916595D6A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961166802640006736F757263656B002F2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F617574682E65726C6A
+=mod:mod_esi
+Current size: 22534
+Current attributes: 836C00000002680264000376736E6C000000016E1000513E3FF733E1E6592B86CB55B9C14E086A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61026802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6573692E65726C6A
+=mod:mod_actions
+Current size: 3625
+Current attributes: 836C00000002680264000376736E6C000000016E10008E5437921662830490CA76DFF88548966A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066129610C6802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F616374696F6E732E65726C6A
+=mod:mod_cgi
+Current size: 25891
+Current attributes: 836C00000002680264000376736E6C000000016E1000F91D405488188F1BD25110B4ED9EE8786A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961306802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6367692E65726C6A
+=mod:mod_include
+Current size: 34923
+Current attributes: 836C00000002680264000376736E6C000000016E1000B9CCE88D63DD6AC49D5DF533C46B97D56A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61176802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F696E636C7564652E65726C6A
+=mod:mod_dir
+Current size: 13488
+Current attributes: 836C00000002680264000376736E6C000000016E1000EF620CB4B5DE5586ED681347496DA1C86A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961356802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6469722E65726C6A
+=mod:mod_get
+Current size: 4672
+Current attributes: 836C00000002680264000376736E6C000000016E1000AD2730B6BE6AF875A500AF4857C4D7F86A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61076802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6765742E65726C6A
+=mod:mod_head
+Current size: 3074
+Current attributes: 836C00000002680264000376736E6C000000016E1000CAF803B9FA6A28D4153BC109B00D7DF96A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A610B6802640006736F757263656B002F2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F686561642E65726C6A
+=mod:mod_log
+Current size: 8546
+Current attributes: 836C00000002680264000376736E6C000000016E1000F9664B54861260DEA081249379219AF86A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A611B6802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6C6F672E65726C6A
+=mod:mod_disk_log
+Current size: 15160
+Current attributes: 836C00000002680264000376736E6C000000016E1000DDA1E88A9C423A2866B56425DF36F5C66A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961396802640006736F757263656B00332F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6469736B5F6C6F672E65726C6A
+=mod:httpd_socket
+Current size: 7426
+Current attributes: 836C00000002680264000376736E6C000000016E1000B831219096661E4D2E200A07C4A9A7776A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861326802640006736F757263656B00332F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F736F636B65742E65726C6A
+=mod:httpd_acceptor
+Current size: 4472
+Current attributes: 836C00000002680264000376736E6C000000016E1000A501686DF4E4053E7D978E0CA162BEC56A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861076802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6163636570746F722E65726C6A
+=mod:io_lib_pretty
+Current size: 8171
+Current attributes: 836C00000001680264000376736E6C000000016E1000CD397E11D2D380D02A4BC6EE309B98CB6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E610C6802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69625F7072657474792E65726C6A
+=mod:httpd_request_handler
+Current size: 26393
+Current attributes: 836C00000002680264000376736E6C000000016E100021C280A5EB5B9CCD00A2C418A341202A6A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861296802640006736F757263656B003C2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F726571756573745F68616E646C65722E65726C6A
+=mod:calendar
+Current size: 7158
+Current attributes: 836C00000002680264000376736E6C000000016E10008C44498546709037F8D72DA4AF8B7FB76A680264000A646570726563617465646C00000001680264001C6C6F63616C5F74696D655F746F5F756E6976657273616C5F74696D6561016A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61166802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F63616C656E6461722E65726C6A
+=mod:httpd_parse
+Current size: 9977
+Current attributes: 836C00000002680264000376736E6C000000016E1000174653BAA652261FEB44FFDED99E50B76A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861246802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F70617273652E65726C6A
+=mod:httpd_response
+Current size: 13535
+Current attributes: 836C00000002680264000376736E6C000000016E1000785B247D894BA08A40D814EF11F848976A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128612D6802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F726573706F6E73652E65726C6A
+=mod:crashdump_viewer_html
+Current size: 68343
+Current attributes: 836C00000001680264000376736E6C000000016E1000AE414770FDB0806C5583FF8D6D71DC766A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461146108611C61026802640006736F757263656B003B2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7669657765725F68746D6C2E65726C6A
+=mod:crashdump_translate
+Current size: 89840
+Current attributes: 836C00000001680264000376736E6C000000016E100038F332287181E933A76CEF4799BDB6416A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000668026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461046115610B611661106802640006736F757263656B00392F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7472616E736C6174652E65726C6A
+=fun
+Module: crashdump_viewer_html
+Uniq: 9122590
+Index: 0
+Address: 526308
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 77168418
+Index: 14
+Address: 26541c
+Native_address: bcf04
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 88083515
+Index: 9
+Address: 284c30
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 36747896
+Index: 4
+Address: 26df84
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 80395734
+Index: 8
+Address: 265838
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 103184573
+Index: 5
+Address: 2fa59c
+Native_address: bce80
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 88265811
+Index: 24
+Address: 34f6a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global_group
+Uniq: 9644262
+Index: 2
+Address: 292cec
+Native_address: bcef4
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 100885585
+Index: 0
+Address: 29eb2c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 128335479
+Index: 6
+Address: 26de84
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 42988083
+Index: 1
+Address: 210c14
+Native_address: bcf04
+Refc: 1
+=fun
+Module: dict
+Uniq: 7105125
+Index: 7
+Address: 354f84
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 29030584
+Index: 8
+Address: 234978
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 29214351
+Index: 2
+Address: 285660
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 5158633
+Index: 4
+Address: 274034
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 74624950
+Index: 25
+Address: 34f63c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 6477018
+Index: 3
+Address: 2adb6c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 117885138
+Index: 7
+Address: 2ffff8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: dict
+Uniq: 47566924
+Index: 6
+Address: 354fb8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 114637756
+Index: 12
+Address: 313c60
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 121316204
+Index: 31
+Address: 313a68
+Native_address: bced4
+Refc: 1
+=fun
+Module: code_server
+Uniq: 61363639
+Index: 12
+Address: 2ad6a4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 116208699
+Index: 3
+Address: 274094
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global_group
+Uniq: 113750737
+Index: 0
+Address: 292d54
+Native_address: bcefc
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 12853672
+Index: 0
+Address: 222e74
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 108046357
+Index: 12
+Address: 4ab0b0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 111569299
+Index: 47
+Address: 34e80c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 20108653
+Index: 15
+Address: 2f9f94
+Native_address: bcea4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 45252965
+Index: 15
+Address: 313c0c
+Native_address: bced4
+Refc: 1
+=fun
+Module: webtool
+Uniq: 12437425
+Index: 9
+Address: 4ab3e0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 30942993
+Index: 22
+Address: 34f6ec
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_parse
+Uniq: 93430337
+Index: 3
+Address: 33b100
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_parse
+Uniq: 6604883
+Index: 2
+Address: 33b16c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: rpc
+Uniq: 36867745
+Index: 5
+Address: 255e28
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 90563105
+Index: 1
+Address: 285708
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 18519297
+Index: 7
+Address: 26ddfc
+Native_address: bcef4
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 8058975
+Index: 16
+Address: 4a36b4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 30694569
+Index: 7
+Address: 27d018
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 76933943
+Index: 0
+Address: 2741b4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 9033258
+Index: 6
+Address: 4a4690
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 74851752
+Index: 5
+Address: 4a4798
+Native_address: bcef4
+Refc: 1
+=fun
+Module: global
+Uniq: 50855382
+Index: 4
+Address: 2659a8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 39211582
+Index: 52
+Address: 34e504
+Native_address: bceec
+Refc: 1
+=fun
+Module: file_server
+Uniq: 77665472
+Index: 0
+Address: 2a0dec
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 57487277
+Index: 8
+Address: 2fa3c4
+Native_address: bce94
+Refc: 1
+=fun
+Module: webtool
+Uniq: 87386575
+Index: 11
+Address: 4ab1c8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 58991950
+Index: 8
+Address: 4a4338
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 118859163
+Index: 17
+Address: 4a34d4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: dict
+Uniq: 38265609
+Index: 12
+Address: 354dec
+Native_address: bcefc
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 56903339
+Index: 1
+Address: 2527c4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_hosts
+Uniq: 129504763
+Index: 0
+Address: 28aae8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: dict
+Uniq: 44817307
+Index: 10
+Address: 354e3c
+Native_address: bceec
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 52856894
+Index: 41
+Address: 34eb70
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 22623360
+Index: 23
+Address: 34f5d4
+Native_address: bceec
+Refc: 1
+=fun
+Module: orddict
+Uniq: 34963136
+Index: 0
+Address: 2fbbbc
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erlang
+Uniq: 24496633
+Index: 0
+Address: 213744
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 99313855
+Index: 27
+Address: 2f9914
+Native_address: bcef4
+Refc: 1
+=fun
+Module: httpd_util
+Uniq: 99137703
+Index: 3
+Address: 4b5dfc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 124043500
+Index: 3
+Address: 222b84
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 102650878
+Index: 22
+Address: 313b48
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 13333720
+Index: 12
+Address: 34fb2c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: global_group
+Uniq: 133457
+Index: 5
+Address: 292a80
+Native_address: bcefc
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 64640983
+Index: 4
+Address: 29e944
+Native_address: bcefc
+Refc: 1
+=fun
+Module: rpc
+Uniq: 7580218
+Index: 2
+Address: 255f08
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 131850870
+Index: 59
+Address: 34e6b8
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 56617403
+Index: 10
+Address: 284b40
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 108680306
+Index: 4
+Address: 4ab5e0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 90880071
+Index: 2
+Address: 26e150
+Native_address: bcefc
+Refc: 1
+=fun
+Module: file_io_server
+Uniq: 23980778
+Index: 0
+Address: 30ac30
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 12006418
+Index: 19
+Address: 2f9d54
+Native_address: bce80
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 81701030
+Index: 8
+Address: 526228
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 71013875
+Index: 1
+Address: 4a4ddc
+Native_address: bcf04
+Refc: 1
+=fun
+Module: distel
+Uniq: 87740845
+Index: 2
+Address: 35c0e0
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 90782401
+Index: 17
+Address: 2f9e8c
+Native_address: bced4
+Refc: 1
+=fun
+Module: shell
+Uniq: 133882676
+Index: 6
+Address: 2e52ac
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 105698088
+Index: 3
+Address: 2855b4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 58370899
+Index: 0
+Address: 27d370
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 15274536
+Index: 25
+Address: 2f9a94
+Native_address: bcef4
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 94349557
+Index: 0
+Address: 252844
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_parse
+Uniq: 33328185
+Index: 1
+Address: 33b1d8
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 86971387
+Index: 16
+Address: 313db0
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 53364473
+Index: 38
+Address: 34ee84
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 128145687
+Index: 0
+Address: 4ab944
+Native_address: bcee4
+Refc: 1
+=fun
+Module: c
+Uniq: 98651404
+Index: 10
+Address: 2fff20
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 78224618
+Index: 0
+Address: 313dcc
+Native_address: bced4
+Refc: 1
+=fun
+Module: shell
+Uniq: 40779085
+Index: 11
+Address: 2e50c8
+Native_address: bcef4
+Refc: 1
+=fun
+Module: c
+Uniq: 93517350
+Index: 4
+Address: 300090
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 58551291
+Index: 0
+Address: 234f14
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 10055518
+Index: 17
+Address: 526170
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 15795706
+Index: 19
+Address: 313bd4
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 31129467
+Index: 13
+Address: 313c44
+Native_address: bced4
+Refc: 1
+=fun
+Module: old_file_server
+Uniq: 115635393
+Index: 0
+Address: 2a1a4c
+Native_address: bcf04
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 65839696
+Index: 22
+Address: 2f9c00
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 69275064
+Index: 28
+Address: 313aa0
+Native_address: bced4
+Refc: 1
+=fun
+Module: dict
+Uniq: 55938066
+Index: 11
+Address: 354d6c
+Native_address: bceec
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 22323433
+Index: 3
+Address: 252688
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 129726129
+Index: 29
+Address: 313abc
+Native_address: bced4
+Refc: 1
+=fun
+Module: dict
+Uniq: 84346832
+Index: 0
+Address: 3550fc
+Native_address: bceec
+Refc: 1
+=fun
+Module: shell
+Uniq: 102096820
+Index: 7
+Address: 2e5290
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 70385762
+Index: 11
+Address: 27cf44
+Native_address: bcefc
+Refc: 1
+=fun
+Module: mod_cgi
+Uniq: 1483038
+Index: 0
+Address: 4ec2e8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: dict
+Uniq: 3664813
+Index: 1
+Address: 3550b4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet
+Uniq: 131143671
+Index: 6
+Address: 27d08c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 46286977
+Index: 2
+Address: 2740b0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: mod_esi
+Uniq: 49099432
+Index: 0
+Address: 4e522c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_master
+Uniq: 95764905
+Index: 2
+Address: 24aaa8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: packages
+Uniq: 62890926
+Index: 0
+Address: 2ae814
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 41564771
+Index: 35
+Address: 3139f8
+Native_address: bced4
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 95490768
+Index: 0
+Address: 4a4dc0
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 121559432
+Index: 3
+Address: 313d78
+Native_address: bced4
+Refc: 1
+=fun
+Module: httpd_conf
+Uniq: 21152662
+Index: 0
+Address: 4be5a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 41630916
+Index: 5
+Address: 29e914
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 19747201
+Index: 5
+Address: 313d24
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 100584837
+Index: 36
+Address: 34f0f4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64635712
+Index: 15
+Address: 34f94c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 46398361
+Index: 3
+Address: 29e9a4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 86699817
+Index: 27
+Address: 313b2c
+Native_address: bced4
+Refc: 1
+=fun
+Module: distel
+Uniq: 40869731
+Index: 0
+Address: 35c12c
+Native_address: bcf04
+Refc: 1
+=fun
+Module: inet
+Uniq: 83701641
+Index: 1
+Address: 27d33c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: mod_auth
+Uniq: 85845790
+Index: 0
+Address: 4dfd84
+Native_address: bcefc
+Refc: 1
+=fun
+Module: shell
+Uniq: 101292714
+Index: 9
+Address: 2e519c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 134173702
+Index: 1
+Address: 265b68
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 92433687
+Index: 6
+Address: 2ad9f4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: dict
+Uniq: 62315241
+Index: 8
+Address: 354f38
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 11615541
+Index: 12
+Address: 265530
+Native_address: bcefc
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 11160090
+Index: 2
+Address: 2b6bb4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 12116524
+Index: 15
+Address: 2342c4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: mod_log
+Uniq: 61620901
+Index: 2
+Address: 4fc670
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 23665189
+Index: 12
+Address: 4a3b94
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 43844413
+Index: 0
+Address: 300100
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 100514258
+Index: 6
+Address: 313d08
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 54271286
+Index: 17
+Address: 34f8a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 47017252
+Index: 3
+Address: 26dfa0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 1228304
+Index: 7
+Address: 4a45a4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 127131470
+Index: 10
+Address: 2655a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: file_server
+Uniq: 22638227
+Index: 1
+Address: 2a0e20
+Native_address: bcf04
+Refc: 1
+=fun
+Module: code_server
+Uniq: 112704920
+Index: 15
+Address: 2ad488
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 88302875
+Index: 2
+Address: 2fa76c
+Native_address: bceb4
+Refc: 1
+=fun
+Module: inet_hosts
+Uniq: 85808984
+Index: 1
+Address: 28ab18
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_parse
+Uniq: 106391799
+Index: 0
+Address: 33b22c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 25830519
+Index: 5
+Address: 27d0c0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: shell
+Uniq: 110491036
+Index: 1
+Address: 2e5398
+Native_address: bcef4
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 13128736
+Index: 5
+Address: 52627c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 84644982
+Index: 21
+Address: 313b9c
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 120577486
+Index: 3
+Address: 34fffc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 4504456
+Index: 44
+Address: 34e938
+Native_address: bceec
+Refc: 1
+=fun
+Module: mod_disk_log
+Uniq: 28754183
+Index: 0
+Address: 500140
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 88043334
+Index: 14
+Address: 313c28
+Native_address: bced4
+Refc: 1
+=fun
+Module: code_server
+Uniq: 61592373
+Index: 0
+Address: 2adc28
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 74468346
+Index: 26
+Address: 313ad8
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 69896253
+Index: 21
+Address: 2f9c40
+Native_address: bce80
+Refc: 1
+=fun
+Module: global_group
+Uniq: 59656873
+Index: 4
+Address: 292ac0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 103891261
+Index: 2
+Address: 4a4d70
+Native_address: bcefc
+Refc: 1
+=fun
+Module: httpd_util
+Uniq: 89619733
+Index: 0
+Address: 4b5e64
+Native_address: bcefc
+Refc: 1
+=fun
+Module: shell
+Uniq: 133201466
+Index: 10
+Address: 2e5180
+Native_address: bceec
+Refc: 1
+=fun
+Module: webtool
+Uniq: 32159369
+Index: 2
+Address: 4ab820
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 76861396
+Index: 2
+Address: 2adbb0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: mod_log
+Uniq: 48206487
+Index: 0
+Address: 4fc6f0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 118996551
+Index: 28
+Address: 34f384
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 12593774
+Index: 50
+Address: 34e60c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: httpd_request_handler
+Uniq: 48542841
+Index: 1
+Address: 50e88c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 56178490
+Index: 9
+Address: 4a420c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: distel
+Uniq: 88212576
+Index: 4
+Address: 35bf44
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 79562132
+Index: 29
+Address: 34f368
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 129524917
+Index: 32
+Address: 34f2c0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 54029891
+Index: 23
+Address: 2f9af0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 108872092
+Index: 4
+Address: 27d0f0
+Native_address: bcef4
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 40905124
+Index: 6
+Address: 234ac0
+Native_address: bcef4
+Refc: 1
+=fun
+Module: code_server
+Uniq: 50124876
+Index: 10
+Address: 2ad760
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 791358
+Index: 48
+Address: 34e7b0
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 18404828
+Index: 24
+Address: 313af4
+Native_address: bced4
+Refc: 1
+=fun
+Module: httpd_util
+Uniq: 13278653
+Index: 1
+Address: 4b5e48
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 110307423
+Index: 13
+Address: 284a7c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: rpc
+Uniq: 99592247
+Index: 0
+Address: 256118
+Native_address: bcf04
+Refc: 1
+=fun
+Module: global
+Uniq: 99918211
+Index: 2
+Address: 265af4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 71442319
+Index: 27
+Address: 34f510
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 7612785
+Index: 13
+Address: 2fa0fc
+Native_address: bce80
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 56095795
+Index: 15
+Address: 4a38a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 23626796
+Index: 25
+Address: 313b10
+Native_address: bced4
+Refc: 1
+=fun
+Module: file_server
+Uniq: 126074974
+Index: 2
+Address: 2a0cac
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 104278122
+Index: 1
+Address: 274154
+Native_address: bcefc
+Refc: 1
+=fun
+Module: sys
+Uniq: 90854051
+Index: 0
+Address: 240344
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 113334594
+Index: 2
+Address: 313d5c
+Native_address: bced4
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 8832142
+Index: 7
+Address: 284e30
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 9159706
+Index: 42
+Address: 34eb54
+Native_address: bceec
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 123946665
+Index: 8
+Address: 26e494
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 3149789
+Index: 1
+Address: 5262d0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 48288621
+Index: 11
+Address: 2ffed8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 8953292
+Index: 20
+Address: 4a4d54
+Native_address: bcee4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 9632158
+Index: 4
+Address: 34ff88
+Native_address: bcefc
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 31111567
+Index: 7
+Address: 29e8c8
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 85307443
+Index: 10
+Address: 2fa29c
+Native_address: bcec4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 104417191
+Index: 7
+Address: 313cd0
+Native_address: bced4
+Refc: 1
+=fun
+Module: dict
+Uniq: 43625777
+Index: 5
+Address: 354fec
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 92698798
+Index: 3
+Address: 4ab780
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 39074546
+Index: 6
+Address: 2fa54c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 71451126
+Index: 5
+Address: 234b98
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 122084387
+Index: 6
+Address: 300038
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 9625924
+Index: 14
+Address: 284a60
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 128777368
+Index: 11
+Address: 313c7c
+Native_address: bced4
+Refc: 1
+=fun
+Module: webtool
+Uniq: 10203723
+Index: 7
+Address: 4ab4f8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 35032400
+Index: 10
+Address: 313c98
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 17252586
+Index: 34
+Address: 313a14
+Native_address: bced4
+Refc: 1
+=fun
+Module: code_server
+Uniq: 7177165
+Index: 11
+Address: 2ad734
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 115778175
+Index: 3
+Address: 4a4930
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 96440880
+Index: 51
+Address: 34e590
+Native_address: bcefc
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 68275407
+Index: 0
+Address: 2b7340
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 88854488
+Index: 16
+Address: 2f9f04
+Native_address: bcebc
+Refc: 1
+=fun
+Module: global
+Uniq: 26353848
+Index: 13
+Address: 2654e8
+Native_address: bcf04
+Refc: 3
+=fun
+Module: global
+Uniq: 93414722
+Index: 11
+Address: 265568
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 11194189
+Index: 60
+Address: 34fe0c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: c
+Uniq: 125189992
+Index: 8
+Address: 2fffdc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: dict
+Uniq: 112472016
+Index: 2
+Address: 355088
+Native_address: bceec
+Refc: 1
+=fun
+Module: shell
+Uniq: 104426442
+Index: 5
+Address: 2e52e0
+Native_address: bceec
+Refc: 1
+=fun
+Module: global
+Uniq: 17426458
+Index: 0
+Address: 265bc4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 81191039
+Index: 5
+Address: 2ada48
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 71765042
+Index: 5
+Address: 284f74
+Native_address: bcefc
+Refc: 1
+=fun
+Module: init
+Uniq: 85855821
+Index: 2
+Address: 1fa298
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 70586122
+Index: 10
+Address: 4a3fe4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 87067911
+Index: 49
+Address: 34e708
+Native_address: bcef4
+Refc: 1
+=fun
+Module: distel
+Uniq: 63126735
+Index: 1
+Address: 35c0fc
+Native_address: bcf04
+Refc: 1
+=fun
+Module: c
+Uniq: 58270309
+Index: 1
+Address: 3000e4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: ets
+Uniq: 80538457
+Index: 1
+Address: 2bc1a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 69827241
+Index: 9
+Address: 34fd70
+Native_address: bcef4
+Refc: 1
+=fun
+Module: dict
+Uniq: 103968752
+Index: 3
+Address: 355054
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 117175573
+Index: 21
+Address: 34f728
+Native_address: bcef4
+Refc: 1
+=fun
+Module: shell
+Uniq: 57865450
+Index: 2
+Address: 2e537c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 14705965
+Index: 20
+Address: 313b80
+Native_address: bced4
+Refc: 1
+=fun
+Module: webtool
+Uniq: 85360931
+Index: 6
+Address: 4ab56c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: kernel_config
+Uniq: 41755598
+Index: 0
+Address: 2d9e20
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 7110547
+Index: 37
+Address: 34ef14
+Native_address: bcef4
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 28091577
+Index: 16
+Address: 234244
+Native_address: bcef4
+Refc: 2
+=fun
+Module: code_server
+Uniq: 96448152
+Index: 14
+Address: 2ad4e4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 40177568
+Index: 13
+Address: 4a39a4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 31948320
+Index: 58
+Address: 34dfdc
+Native_address: bcef4
+Refc: 1
+=fun
+Module: global
+Uniq: 54153760
+Index: 7
+Address: 265854
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 60156260
+Index: 3
+Address: 5262b4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 1010616
+Index: 2
+Address: 350064
+Native_address: bcef4
+Refc: 1
+=fun
+Module: init
+Uniq: 96784459
+Index: 1
+Address: 1fa2b4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 48691771
+Index: 18
+Address: 313bb8
+Native_address: bced4
+Refc: 1
+=fun
+Module: global
+Uniq: 26895060
+Index: 9
+Address: 265710
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 109625093
+Index: 7
+Address: 2ad8fc
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 59436171
+Index: 1
+Address: 3500dc
+Native_address: bcef4
+Refc: 1
+=fun
+Module: dict
+Uniq: 92768306
+Index: 9
+Address: 354f04
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global_group
+Uniq: 106430008
+Index: 3
+Address: 292b38
+Native_address: bcefc
+Refc: 1
+=fun
+Module: init
+Uniq: 79749196
+Index: 6
+Address: 1fa01c
+Native_address: bceec
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 6014929
+Index: 9
+Address: 2fa324
+Native_address: bceac
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 57051922
+Index: 7
+Address: 234a28
+Native_address: bcef4
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 77043468
+Index: 6
+Address: 29e8e4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 36176045
+Index: 9
+Address: 52620c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: rpc
+Uniq: 35862809
+Index: 3
+Address: 255edc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113649451
+Index: 4
+Address: 2850a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 67943969
+Index: 5
+Address: 2658f4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 109003032
+Index: 16
+Address: 5260d0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 104711447
+Index: 13
+Address: 525f5c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 107666872
+Index: 9
+Address: 27cfb0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 89410000
+Index: 10
+Address: 5261f0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 47356870
+Index: 11
+Address: 284ab4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 17873449
+Index: 56
+Address: 34e1e8
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 8839441
+Index: 33
+Address: 34f25c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 82513204
+Index: 2
+Address: 222c18
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_master
+Uniq: 5973059
+Index: 0
+Address: 24ab7c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_gethost_native
+Uniq: 127832132
+Index: 0
+Address: 4b065c
+Native_address: bcefc
+Refc: 2
+=fun
+Module: crashdump_viewer_html
+Uniq: 39322658
+Index: 14
+Address: 525f40
+Native_address: bcefc
+Refc: 1
+=fun
+Module: gen_server
+Uniq: 100284021
+Index: 0
+Address: 23d288
+Native_address: bcf04
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 17430070
+Index: 12
+Address: 284a98
+Native_address: bcefc
+Refc: 1
+=fun
+Module: init
+Uniq: 97509773
+Index: 3
+Address: 1fa27c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: distel
+Uniq: 32364818
+Index: 3
+Address: 35c050
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 58576084
+Index: 32
+Address: 313a4c
+Native_address: bced4
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 38384851
+Index: 14
+Address: 4a3988
+Native_address: bceec
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 14139883
+Index: 4
+Address: 234d78
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 122590256
+Index: 0
+Address: 2fa8b4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 14705629
+Index: 11
+Address: 2fa22c
+Native_address: bcedc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 9273769
+Index: 4
+Address: 2fa684
+Native_address: bcee4
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 87950142
+Index: 11
+Address: 5261d4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: mod_log
+Uniq: 54913678
+Index: 1
+Address: 4fc6b0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 28370334
+Index: 0
+Address: 26e4b0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 24927227
+Index: 40
+Address: 34ed4c
+Native_address: bceec
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 105437500
+Index: 33
+Address: 313a30
+Native_address: bced4
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 10921695
+Index: 1
+Address: 234eac
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 112431564
+Index: 55
+Address: 34e22c
+Native_address: bceec
+Refc: 1
+=fun
+Module: webtool
+Uniq: 129460863
+Index: 5
+Address: 4ab5c4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 89001648
+Index: 3
+Address: 27d2ec
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 36199507
+Index: 8
+Address: 27cfe4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 35620771
+Index: 2
+Address: 5262ec
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 83214871
+Index: 18
+Address: 2f9e34
+Native_address: bceec
+Refc: 1
+=fun
+Module: code_server
+Uniq: 122455383
+Index: 1
+Address: 2adc0c
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 22389488
+Index: 31
+Address: 34f1b8
+Native_address: bceec
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 41869059
+Index: 12
+Address: 2fa1d4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 18130505
+Index: 45
+Address: 34e904
+Native_address: bcefc
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 107414126
+Index: 1
+Address: 2b706c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 116638945
+Index: 28
+Address: 2f98f8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 48465762
+Index: 9
+Address: 2348c8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: httpd_request_handler
+Uniq: 87633852
+Index: 0
+Address: 50e97c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 28213098
+Index: 8
+Address: 4ab42c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 123630574
+Index: 4
+Address: 222b58
+Native_address: bcefc
+Refc: 1
+=fun
+Module: dict
+Uniq: 127425508
+Index: 13
+Address: 354eb4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 95048118
+Index: 16
+Address: 2ad46c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 108661978
+Index: 19
+Address: 34f75c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 21272619
+Index: 13
+Address: 34fad8
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 29943747
+Index: 17
+Address: 313bf0
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 120240397
+Index: 4
+Address: 313d94
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 124060676
+Index: 0
+Address: 350124
+Native_address: bcef4
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 100975346
+Index: 6
+Address: 526260
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 61421476
+Index: 4
+Address: 2ada9c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 45197232
+Index: 7
+Address: 34fe5c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 3151900
+Index: 15
+Address: 525f24
+Native_address: bcefc
+Refc: 1
+=fun
+Module: httpd_util
+Uniq: 77509245
+Index: 2
+Address: 4b5e2c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 94110229
+Index: 8
+Address: 2ad7e4
+Native_address: bcef4
+Refc: 3
+=fun
+Module: rpc
+Uniq: 101217130
+Index: 1
+Address: 2560c4
+Native_address: bcf04
+Refc: 1
+=fun
+Module: lists
+Uniq: 103647452
+Index: 0
+Address: 244b7c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 37841211
+Index: 9
+Address: 2ad77c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 40109251
+Index: 54
+Address: 34e2b4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: init
+Uniq: 98012300
+Index: 0
+Address: 1fa2d0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 73604759
+Index: 10
+Address: 4ab270
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 12042434
+Index: 1
+Address: 313d40
+Native_address: bced4
+Refc: 1
+=fun
+Module: shell
+Uniq: 127137775
+Index: 4
+Address: 2e531c
+Native_address: bcf04
+Refc: 1
+=fun
+Module: inet
+Uniq: 45498037
+Index: 12
+Address: 27cec0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 122441107
+Index: 34
+Address: 34f1d4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 70933889
+Index: 46
+Address: 34e8d0
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet
+Uniq: 69850797
+Index: 2
+Address: 27d308
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 103965539
+Index: 13
+Address: 234684
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 29979659
+Index: 30
+Address: 313a84
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 17148721
+Index: 20
+Address: 34f778
+Native_address: bcefc
+Refc: 1
+=fun
+Module: httpd_response
+Uniq: 100673049
+Index: 0
+Address: 5165dc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_gethost_native
+Uniq: 10508176
+Index: 1
+Address: 4b04dc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 32476064
+Index: 57
+Address: 34e1c4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 74835078
+Index: 9
+Address: 313cec
+Native_address: bced4
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 60689814
+Index: 19
+Address: 4a3b78
+Native_address: bceec
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 39269715
+Index: 5
+Address: 34ff14
+Native_address: bcef4
+Refc: 1
+=fun
+Module: shell
+Uniq: 112923172
+Index: 0
+Address: 2e5404
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 43010824
+Index: 14
+Address: 2fa03c
+Native_address: bce8c
+Refc: 1
+=fun
+Module: global
+Uniq: 82495254
+Index: 3
+Address: 265ac8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: shell
+Uniq: 48568081
+Index: 8
+Address: 2e5220
+Native_address: bcefc
+Refc: 1
+=fun
+Module: init
+Uniq: 77236637
+Index: 7
+Address: 1fa000
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 109386574
+Index: 1
+Address: 2fa804
+Native_address: bce9c
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 42613220
+Index: 14
+Address: 34f980
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 67093144
+Index: 23
+Address: 313b64
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 86833790
+Index: 11
+Address: 34fbe8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 6344855
+Index: 1
+Address: 29eabc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 5149749
+Index: 35
+Address: 34f220
+Native_address: bcefc
+Refc: 1
+=fun
+Module: init
+Uniq: 93451769
+Index: 5
+Address: 1fa120
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 117428568
+Index: 11
+Address: 234758
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 15225890
+Index: 4
+Address: 526298
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 120760477
+Index: 2
+Address: 234cdc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 88561919
+Index: 3
+Address: 3000ac
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 108931174
+Index: 8
+Address: 313cb4
+Native_address: bced4
+Refc: 1
+=fun
+Module: rpc
+Uniq: 122901192
+Index: 4
+Address: 255e44
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 32985930
+Index: 10
+Address: 34fc40
+Native_address: bcef4
+Refc: 1
+=fun
+Module: global_group
+Uniq: 97968498
+Index: 1
+Address: 292b7c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 45671671
+Index: 18
+Address: 4a32d0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 117968056
+Index: 3
+Address: 2fa6ec
+Native_address: bcecc
+Refc: 1
+=fun
+Module: init
+Uniq: 108717591
+Index: 4
+Address: 1fa194
+Native_address: bcf04
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 15091954
+Index: 2
+Address: 2526dc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 65707495
+Index: 6
+Address: 2658a4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 34473969
+Index: 17
+Address: 2ad450
+Native_address: bcef4
+Refc: 2
+=fun
+Module: crashdump_viewer_html
+Uniq: 124296602
+Index: 7
+Address: 526244
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 23074707
+Index: 15
+Address: 265460
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 25972856
+Index: 10
+Address: 27cf74
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 43110452
+Index: 24
+Address: 2f9ad4
+Native_address: bceec
+Refc: 1
+=fun
+Module: code_server
+Uniq: 106445918
+Index: 13
+Address: 2ad660
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 116071286
+Index: 12
+Address: 5261b8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 130814477
+Index: 8
+Address: 284cfc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 121017037
+Index: 39
+Address: 34ed80
+Native_address: bcef4
+Refc: 1
+=fun
+Module: ets
+Uniq: 104895267
+Index: 0
+Address: 2bc1bc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 104682437
+Index: 11
+Address: 4a3de0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 70248777
+Index: 30
+Address: 34f30c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 13274975
+Index: 5
+Address: 300074
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 98442771
+Index: 53
+Address: 34e2d0
+Native_address: bceec
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 69829006
+Index: 7
+Address: 2fa47c
+Native_address: bce80
+Refc: 1
+=fun
+Module: old_file_server
+Uniq: 36444943
+Index: 1
+Address: 2a1a80
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 58719455
+Index: 26
+Address: 34f5f0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: timer
+Uniq: 42505885
+Index: 0
+Address: 4cd62c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 54682479
+Index: 20
+Address: 2f9d08
+Native_address: bcf04
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 86070332
+Index: 1
+Address: 222d7c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 54728136
+Index: 9
+Address: 2fff68
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 16474219
+Index: 3
+Address: 234c60
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 108831556
+Index: 10
+Address: 234810
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 72053761
+Index: 16
+Address: 34f8ec
+Native_address: bcef4
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 65127616
+Index: 2
+Address: 29ea04
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 126167637
+Index: 14
+Address: 234640
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113704917
+Index: 0
+Address: 285788
+Native_address: bcefc
+Refc: 1
+=fun
+Module: mod_disk_log
+Uniq: 75279647
+Index: 1
+Address: 500100
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 119218247
+Index: 5
+Address: 26df68
+Native_address: bcef4
+Refc: 1
+=fun
+Module: httpd_util
+Uniq: 85690044
+Index: 4
+Address: 4b5d6c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 53075592
+Index: 1
+Address: 26e16c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 39490182
+Index: 2
+Address: 3000c8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 75189006
+Index: 12
+Address: 234714
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 14980808
+Index: 43
+Address: 34eb38
+Native_address: bceec
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 16463468
+Index: 4
+Address: 4a4914
+Native_address: bcee4
+Refc: 1
+=fun
+Module: dict
+Uniq: 99965326
+Index: 4
+Address: 355020
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 36900786
+Index: 6
+Address: 284f3c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 45447147
+Index: 18
+Address: 34f794
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 32353825
+Index: 6
+Address: 34fe78
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 134052338
+Index: 8
+Address: 34fdc0
+Native_address: bceec
+Refc: 1
+=fun
+Module: application_master
+Uniq: 23840924
+Index: 1
+Address: 24aae0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 108282500
+Index: 1
+Address: 4ab918
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 31081110
+Index: 0
+Address: 210c68
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 54275742
+Index: 26
+Address: 2f9a4c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: shell
+Uniq: 45083091
+Index: 3
+Address: 2e5350
+Native_address: bcf04
+Refc: 3
+=proc_stack:<0.0.0>
+3a48bc:SReturn addr 0x156F90 (<terminate process normally>)
+y0:H371264
+=proc_heap:<0.0.0>
+371264:t9:A5:state,H3710D8,N,N,H3710F4,P<0.1.0>,H37128C,H3710FC,N
+3710FC:t2:H371138,H371140
+371140:lI80|H371194
+371194:lI49|H3711E0
+3711E0:lI48|H371204
+371204:lI66|N
+371138:lI79|H37118C
+37118C:lI84|H3711D8
+3711D8:lI80|H3711FC
+3711FC:lI32|H37120C
+37120C:lI32|H371214
+371214:lI65|H37121C
+37121C:lI80|H371224
+371224:lI78|H37122C
+37122C:lI32|H371234
+371234:lI49|H37123C
+37123C:lI56|H371244
+371244:lI49|H37124C
+37124C:lI32|H371254
+371254:lI48|H37125C
+37125C:lI49|N
+37128C:t2:A7:started,A7:started
+3710F4:lH371124|H371130
+371124:t2:A16:application_controller,P<0.5.0>
+371130:lH371178|H371184
+371178:t2:AC:error_logger,P<0.4.0>
+371184:lH3711CC|N
+3711CC:t2:AF:erl_prim_loader,P<0.2.0>
+3710D8:lH3710E0|H3710EC
+3710E0:t2:A5:-root,H371108
+371108:lH371148|N
+371148:Yh13:2F636C656172636173652F6F74702F65727473
+3710EC:lH371110|H37111C
+371110:t2:A9:-progname,H371164
+371164:lH37119C|N
+37119C:Yh1D:2F636C656172636173652F6F74702F657274732F62696E2F6365726C20
+37111C:lH37116C|N
+37116C:t2:A5:-home,H3711C4
+3711C4:lH3711E8|N
+3711E8:YhA:2F686F6D652F73697269
+=proc_stack:<0.2.0>
+38eca8:SReturn addr 0x156F90 (<terminate process normally>)
+y0:H367D20
+y1:P<0.1.0>
+y2:H367D28
+y3:A8:infinity
+=proc_heap:<0.2.0>
+367D20:lH367D48|H367D50
+367D48:lI47|H367D58
+367D58:lI99|H367D68
+367D68:lI108|H367D78
+367D78:lI101|H367D88
+367D88:lI97|H367D98
+367D98:lI114|H367DA8
+367DA8:lI99|H367DB8
+367DB8:lI97|H367DC8
+367DC8:lI115|H367DD8
+367DD8:lI101|H367DE8
+367DE8:lI47|H367DF8
+367DF8:lI111|H367E08
+367E08:lI116|H367E18
+367E18:lI112|H367E28
+367E28:lI47|H367E38
+367E38:lI101|H367E48
+367E48:lI114|H367E58
+367E58:lI116|H367E68
+367E68:lI115|H367E78
+367E78:lI47|H367E88
+367E88:lI108|H367E98
+367E98:lI105|H367EA8
+367EA8:lI98|H367EB8
+367EB8:lI47|H367EC8
+367EC8:lI107|H367ED8
+367ED8:lI101|H367EE8
+367EE8:lI114|H367EF8
+367EF8:lI110|H367F08
+367F08:lI101|H367F18
+367F18:lI108|H367F28
+367F28:lI47|H367F38
+367F38:lI101|H367F48
+367F48:lI98|H367F58
+367F58:lI105|H367F68
+367F68:lI110|N
+367D50:lH367D60|N
+367D60:lI47|H367D70
+367D70:lI99|H367D80
+367D80:lI108|H367D90
+367D90:lI101|H367DA0
+367DA0:lI97|H367DB0
+367DB0:lI114|H367DC0
+367DC0:lI99|H367DD0
+367DD0:lI97|H367DE0
+367DE0:lI115|H367DF0
+367DF0:lI101|H367E00
+367E00:lI47|H367E10
+367E10:lI111|H367E20
+367E20:lI116|H367E30
+367E30:lI112|H367E40
+367E40:lI47|H367E50
+367E50:lI101|H367E60
+367E60:lI114|H367E70
+367E70:lI116|H367E80
+367E80:lI115|H367E90
+367E90:lI47|H367EA0
+367EA0:lI108|H367EB0
+367EB0:lI105|H367EC0
+367EC0:lI98|H367ED0
+367ED0:lI47|H367EE0
+367EE0:lI115|H367EF0
+367EF0:lI116|H367F00
+367F00:lI100|H367F10
+367F10:lI108|H367F20
+367F20:lI105|H367F30
+367F30:lI98|H367F40
+367F40:lI47|H367F50
+367F50:lI101|H367F60
+367F60:lI98|H367F70
+367F70:lI105|H367F78
+367F78:lI110|N
+367D28:t7:A5:state,A5:efile,N,A4:none,p<0.2>,A8:infinity,A5:false
+=proc_dictionary:<0.4.0>
+H3AC588
+H3AC594
+=proc_stack:<0.4.0>
+3b2f14:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:H3B21E8
+y2:AC:error_logger
+y3:P<0.1.0>
+3b2f28:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H3AC5A8
+=proc_heap:<0.4.0>
+3B21E8:lH3B2144|H3B21E0
+3B2144:t5:A7:handler,AC:error_logger,A5:false,N,A5:false
+3B21E0:lH3B21BC|N
+3B21BC:t5:A7:handler,A12:error_logger_tty_h,A5:false,H3AC610,A5:false
+3AC610:t2:P<0.21.0>,AC:error_logger
+3AC5A8:lA9:gen_event|H3AC5E8
+3AC5E8:lP<0.1.0>|H3AC608
+3AC608:lP<0.1.0>|H3AC61C
+3AC61C:lH3AC624|H3AC630
+3AC624:t2:A5:local,AC:error_logger
+3AC630:lN|H3AC638
+3AC638:lN|H3AC640
+3AC640:lN|N
+3AC588:t2:AD:$initial_call,H3AC5B0
+3AC5B0:t3:A3:gen,A7:init_it,H3AC5A8
+3AC594:t2:AA:$ancestors,H3AC5C0
+3AC5C0:lP<0.1.0>|N
+=proc_dictionary:<0.5.0>
+H372E4C
+H372E58
+=proc_stack:<0.5.0>
+374704:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A16:application_controller
+y3:H3739F4
+y4:A16:application_controller
+y5:P<0.1.0>
+374720:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H372ED0
+=proc_heap:<0.5.0>
+3739F4:t9:A5:state,N,N,N,H373914,N,H373928,N,N
+373928:lH37391C|H372F54
+37391C:t2:A6:stdlib,A9:permanent
+372F54:lH372F90|N
+372F90:t2:A6:kernel,A9:permanent
+373914:lH373908|H372F4C
+373908:t2:A6:stdlib,A9:undefined
+372F4C:lH372F84|N
+372F84:t2:A6:kernel,P<0.7.0>
+372ED0:lAA:gen_server|H372F5C
+372F5C:lP<0.1.0>|H372F9C
+372F9C:lP<0.1.0>|H372FC4
+372FC4:lH372FEC|H372FF8
+372FEC:t2:A5:local,A16:application_controller
+372FF8:lA16:application_controller|H373018
+373018:lH373038|H373048
+373038:t3:AB:application,A6:kernel,H373060
+373060:lH373078|H373084
+373078:t2:AB:description,H37309C
+37309C:lI69|H3730C8
+3730C8:lI82|H3730FC
+3730FC:lI84|H373130
+373130:lI83|H37316C
+37316C:lI32|H3731A8
+3731A8:lI32|H3731E4
+3731E4:lI67|H373220
+373220:lI88|H37325C
+37325C:lI67|H37329C
+37329C:lI32|H3732D0
+3732D0:lI49|H3732FC
+3732FC:lI51|H373328
+373328:lI56|H373348
+373348:lI32|H373368
+373368:lI49|H373388
+373388:lI48|N
+373084:lH3730A4|H3730B0
+3730A4:t2:A3:vsn,H3730D0
+3730D0:lI50|H373104
+373104:lI46|H373138
+373138:lI57|N
+3730B0:lH3730D8|H3730E4
+3730D8:t2:A2:id,N
+3730E4:lH37310C|H373118
+37310C:t2:A7:modules,H373140
+373140:lAB:application|H373174
+373174:lA16:application_controller|H3731B0
+3731B0:lA12:application_master|H3731EC
+3731EC:lA13:application_starter|H373228
+373228:lA4:auth|H373264
+373264:lA4:code|H3732A4
+3732A4:lA8:code_aux|H3732D8
+3732D8:lA8:packages|H373304
+373304:lAB:code_server|H373330
+373330:lA9:dist_util|H373350
+373350:lAF:erl_boot_server|H373370
+373370:lA10:erl_distribution|H373390
+373390:lAF:erl_prim_loader|H3733A8
+3733A8:lA9:erl_reply|H3733C0
+3733C0:lA6:erlang|H3733D8
+3733D8:lAD:error_handler|H3733F0
+3733F0:lAC:error_logger|H373408
+373408:lA4:file|H373420
+373420:lAB:file_server|H373438
+373438:lAF:old_file_server|H373450
+373450:lAE:file_io_server|H373468
+373468:lA9:prim_file|H373480
+373480:lA6:global|H373498
+373498:lAC:global_group|H3734B0
+3734B0:lAD:global_search|H3734C8
+3734C8:lA5:group|H3734E0
+3734E0:lA5:heart|H3734F8
+3734F8:lA13:hipe_unified_loader|H373510
+373510:lA11:hipe_sparc_loader|H373520
+373520:lAF:hipe_x86_loader|H373530
+373530:lA9:inet6_tcp|H373540
+373540:lAE:inet6_tcp_dist|H373550
+373550:lA9:inet6_udp|H373560
+373560:lAB:inet_config|H373570
+373570:lAA:inet_hosts|H373580
+373580:lA13:inet_gethost_native|H373590
+373590:lAD:inet_tcp_dist|H3735A0
+3735A0:lA4:init|H3735B0
+3735B0:lA6:kernel|H3735C0
+3735C0:lAD:kernel_config|H3735D0
+3735D0:lA3:net|H3735E0
+3735E0:lA7:net_adm|H3735F0
+3735F0:lAA:net_kernel|H373600
+373600:lA2:os|H373610
+373610:lA8:ram_file|H373620
+373620:lA3:rpc|H373630
+373630:lA4:user|H373640
+373640:lA8:user_drv|H373650
+373650:lA8:user_sup|H373660
+373660:lA8:disk_log|H373670
+373670:lAA:disk_log_1|H373680
+373680:lAF:disk_log_server|H373690
+373690:lAC:disk_log_sup|H3736A0
+3736A0:lA7:dist_ac|H3736B0
+3736B0:lA8:erl_ddll|H3736C0
+3736C0:lA8:erl_epmd|H3736D0
+3736D0:lAA:erts_debug|H3736E0
+3736E0:lA7:gen_tcp|H3736F0
+3736F0:lA7:gen_udp|H373700
+373700:lA9:prim_inet|H373708
+373708:lA4:inet|H373710
+373710:lA7:inet_db|H373718
+373718:lA8:inet_dns|H373720
+373720:lAA:inet_parse|H373728
+373728:lA8:inet_res|H373730
+373730:lA8:inet_tcp|H373738
+373738:lA8:inet_udp|H373740
+373740:lA3:pg2|H373748
+373748:lA9:seq_trace|H373750
+373750:lA6:socks5|H373758
+373758:lAB:socks5_auth|H373760
+373760:lAA:socks5_tcp|H373768
+373768:lAA:socks5_udp|H373770
+373770:lAF:wrap_log_reader|H373778
+373778:lA4:zlib|H373780
+373780:lA9:otp_ring0|N
+373118:lH373148|H373154
+373148:t2:AA:registered,H37317C
+37317C:lA16:application_controller|H3731B8
+3731B8:lA9:erl_reply|H3731F4
+3731F4:lA4:auth|H373230
+373230:lAB:boot_server|H37326C
+37326C:lAB:code_server|H3732AC
+3732AC:lAF:disk_log_server|H3732E0
+3732E0:lAC:disk_log_sup|H37330C
+37330C:lAF:erl_prim_loader|H373338
+373338:lAC:error_logger|H373358
+373358:lAB:file_server|H373378
+373378:lAD:file_server_2|H373398
+373398:lAF:fixtable_server|H3733B0
+3733B0:lAC:global_group|H3733C8
+3733C8:lA12:global_name_server|H3733E0
+3733E0:lA5:heart|H3733F8
+3733F8:lA4:init|H373410
+373410:lAD:kernel_config|H373428
+373428:lAA:kernel_sup|H373440
+373440:lAA:net_kernel|H373458
+373458:lA7:net_sup|H373470
+373470:lA3:rex|H373488
+373488:lA4:user|H3734A0
+3734A0:lA9:os_server|H3734B8
+3734B8:lAB:ddll_server|H3734D0
+3734D0:lA8:erl_epmd|H3734E8
+3734E8:lA7:inet_db|H373500
+373500:lA3:pg2|N
+373154:lH373184|H373190
+373184:t2:AC:applications,N
+373190:lH3731C0|H3731CC
+3731C0:t2:A15:included_applications,N
+3731CC:lH3731FC|H373208
+3731FC:t2:A3:env,H373238
+373238:lH373274|N
+373274:t2:AC:error_logger,A3:tty
+373208:lH373240|H37324C
+373240:t2:AC:start_phases,A9:undefined
+37324C:lH373280|H37328C
+373280:t2:A4:maxT,A8:infinity
+37328C:lH3732B4|H3732C0
+3732B4:t2:A4:maxP,A8:infinity
+3732C0:lH3732E8|N
+3732E8:t2:A3:mod,H373314
+373314:t2:A6:kernel,N
+373048:lN|N
+372E4C:t2:AD:$initial_call,H372EE4
+372EE4:t3:A3:gen,A7:init_it,H372ED0
+372E58:t2:AA:$ancestors,H372EF4
+372EF4:lP<0.1.0>|N
+=proc_dictionary:<0.7.0>
+H369B78
+H369B5C
+=proc_stack:<0.7.0>
+369d64:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:H369C2C
+y1:P<0.5.0>
+369d70:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A12:application_master
+y2:A4:init
+y3:H369B2C
+=proc_heap:<0.7.0>
+369C2C:t6:A5:state,P<0.8.0>,H3697B0,N,I0,P<0.0.0>
+3697B0:t9:A9:appl_data,A6:kernel,H369B14,A9:undefined,H3697D8,H369A3C,N,A8:infinity,A8:infinity
+369A3C:lAB:application|H369A34
+369A34:lA16:application_controller|H369A2C
+369A2C:lA12:application_master|H369A24
+369A24:lA13:application_starter|H369A1C
+369A1C:lA4:auth|H369A14
+369A14:lA4:code|H369A0C
+369A0C:lA8:code_aux|H369A04
+369A04:lA8:packages|H3699FC
+3699FC:lAB:code_server|H3699F4
+3699F4:lA9:dist_util|H3699EC
+3699EC:lAF:erl_boot_server|H3699E4
+3699E4:lA10:erl_distribution|H3699DC
+3699DC:lAF:erl_prim_loader|H3699D4
+3699D4:lA9:erl_reply|H3699CC
+3699CC:lA6:erlang|H3699C4
+3699C4:lAD:error_handler|H3699BC
+3699BC:lAC:error_logger|H3699B4
+3699B4:lA4:file|H3699AC
+3699AC:lAB:file_server|H3699A4
+3699A4:lAF:old_file_server|H36999C
+36999C:lAE:file_io_server|H369994
+369994:lA9:prim_file|H36998C
+36998C:lA6:global|H369984
+369984:lAC:global_group|H36997C
+36997C:lAD:global_search|H369974
+369974:lA5:group|H36996C
+36996C:lA5:heart|H369964
+369964:lA13:hipe_unified_loader|H36995C
+36995C:lA11:hipe_sparc_loader|H369954
+369954:lAF:hipe_x86_loader|H36994C
+36994C:lA9:inet6_tcp|H369944
+369944:lAE:inet6_tcp_dist|H36993C
+36993C:lA9:inet6_udp|H369934
+369934:lAB:inet_config|H36992C
+36992C:lAA:inet_hosts|H369924
+369924:lA13:inet_gethost_native|H36991C
+36991C:lAD:inet_tcp_dist|H369914
+369914:lA4:init|H36990C
+36990C:lA6:kernel|H369904
+369904:lAD:kernel_config|H3698FC
+3698FC:lA3:net|H3698F4
+3698F4:lA7:net_adm|H3698EC
+3698EC:lAA:net_kernel|H3698E4
+3698E4:lA2:os|H3698DC
+3698DC:lA8:ram_file|H3698D4
+3698D4:lA3:rpc|H3698CC
+3698CC:lA4:user|H3698C4
+3698C4:lA8:user_drv|H3698BC
+3698BC:lA8:user_sup|H3698B4
+3698B4:lA8:disk_log|H3698AC
+3698AC:lAA:disk_log_1|H3698A4
+3698A4:lAF:disk_log_server|H36989C
+36989C:lAC:disk_log_sup|H369894
+369894:lA7:dist_ac|H36988C
+36988C:lA8:erl_ddll|H369884
+369884:lA8:erl_epmd|H36987C
+36987C:lAA:erts_debug|H369874
+369874:lA7:gen_tcp|H36986C
+36986C:lA7:gen_udp|H369864
+369864:lA9:prim_inet|H36985C
+36985C:lA4:inet|H369854
+369854:lA7:inet_db|H36984C
+36984C:lA8:inet_dns|H369844
+369844:lAA:inet_parse|H36983C
+36983C:lA8:inet_res|H369834
+369834:lA8:inet_tcp|H36982C
+36982C:lA8:inet_udp|H369824
+369824:lA3:pg2|H36981C
+36981C:lA9:seq_trace|H369814
+369814:lA6:socks5|H36980C
+36980C:lAB:socks5_auth|H369804
+369804:lAA:socks5_tcp|H3697FC
+3697FC:lAA:socks5_udp|H3697F4
+3697F4:lAF:wrap_log_reader|H3697EC
+3697EC:lA4:zlib|H3697E4
+3697E4:lA9:otp_ring0|N
+3697D8:t2:A6:kernel,N
+369B14:lA16:application_controller|H369B0C
+369B0C:lA9:erl_reply|H369B04
+369B04:lA4:auth|H369AFC
+369AFC:lAB:boot_server|H369AF4
+369AF4:lAB:code_server|H369AEC
+369AEC:lAF:disk_log_server|H369AE4
+369AE4:lAC:disk_log_sup|H369ADC
+369ADC:lAF:erl_prim_loader|H369AD4
+369AD4:lAC:error_logger|H369ACC
+369ACC:lAB:file_server|H369AC4
+369AC4:lAD:file_server_2|H369ABC
+369ABC:lAF:fixtable_server|H369AB4
+369AB4:lAC:global_group|H369AAC
+369AAC:lA12:global_name_server|H369AA4
+369AA4:lA5:heart|H369A9C
+369A9C:lA4:init|H369A94
+369A94:lAD:kernel_config|H369A8C
+369A8C:lAA:kernel_sup|H369A84
+369A84:lAA:net_kernel|H369A7C
+369A7C:lA7:net_sup|H369A74
+369A74:lA3:rex|H369A6C
+369A6C:lA4:user|H369A64
+369A64:lA9:os_server|H369A5C
+369A5C:lAB:ddll_server|H369A54
+369A54:lA8:erl_epmd|H369A4C
+369A4C:lA7:inet_db|H369A44
+369A44:lA3:pg2|N
+369B2C:lP<0.5.0>|H369B24
+369B24:lP<0.6.0>|H3697A8
+3697A8:lH3697B0|H369B1C
+369B1C:lA6:normal|N
+369B78:t2:AD:$initial_call,H369B68
+369B68:t3:A12:application_master,A4:init,H369B2C
+369B5C:t2:AA:$ancestors,H369B54
+369B54:lP<0.6.0>|N
+=proc_stack:<0.8.0>
+384ec0:SReturn addr 0x156F90 (<terminate process normally>)
+y0:H384BDC
+y1:A6:kernel
+y2:P<0.9.0>
+y3:P<0.7.0>
+=proc_heap:<0.8.0>
+384BDC:t2:A5:state,A3:tty
+=proc_dictionary:<0.9.0>
+H376850
+H37685C
+=proc_stack:<0.9.0>
+36bde8:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AA:supervisor
+y3:H36B8E8
+y4:AA:kernel_sup
+y5:P<0.8.0>
+36be04:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H3768D4
+=proc_heap:<0.9.0>
+36B8E8:tA:A5:state,H376868,AB:one_for_all,H36B8D4,N,I0,I1,N,A6:kernel,N
+36B8D4:lH36B8B0|H36B6E8
+36B8B0:t8:A5:child,P<0.24.0>,AF:kernel_safe_sup,H376BF0,A9:permanent,A8:infinity,AA:supervisor,H376C00
+376C00:lA6:kernel|N
+376BF0:t3:AA:supervisor,AA:start_link,H376C08
+376C08:lH376C10|H376C1C
+376C10:t2:A5:local,AF:kernel_safe_sup
+376C1C:lA6:kernel|H376C24
+376C24:lA4:safe|N
+36B6E8:lH36B6C4|H36B490
+36B6C4:t8:A5:child,P<0.23.0>,AD:kernel_config,H376BB4,A9:permanent,I2000,A6:worker,H376BC4
+376BC4:lAD:kernel_config|N
+376BB4:t3:AD:kernel_config,AA:start_link,N
+36B490:lH36B498|H36B4BC
+36B498:t8:A5:child,P<0.19.0>,A4:user,H376B70,A9:temporary,I2000,AA:supervisor,H376B80
+376B80:lA8:user_sup|N
+376B70:t3:A8:user_sup,A5:start,N
+36B4BC:lH36B4C4|H376CB0
+36B4C4:t8:A5:child,P<0.18.0>,AB:code_server,H376B0C,A9:permanent,I2000,A6:worker,H376B1C
+376B1C:lA4:code|N
+376B0C:t3:A4:code,AA:start_link,N
+376CB0:lH376CB8|H376CDC
+376CB8:t8:A5:child,P<0.17.0>,AB:file_server,H376AB8,A9:permanent,I2000,A6:worker,H376AC8
+376AC8:lAF:old_file_server|N
+376AB8:t3:AF:old_file_server,AA:start_link,N
+376CDC:lH376CE4|H376C2C
+376CE4:t8:A5:child,P<0.16.0>,AD:file_server_2,H376A58,A9:permanent,I2000,A6:worker,H376A68
+376A68:lA4:file|H376AB0
+376AB0:lAB:file_server|H376B04
+376B04:lAE:file_io_server|H376B68
+376B68:lA9:prim_file|N
+376A58:t3:AB:file_server,AA:start_link,N
+376C2C:lH376C34|H376C58
+376C34:t8:A5:child,P<0.15.0>,AC:global_group,H3769F4,A9:permanent,I2000,A6:worker,H376A04
+376A04:lAC:global_group|N
+3769F4:t3:AC:global_group,AA:start_link,N
+376C58:lH376C60|H376C84
+376C60:t8:A5:child,A9:undefined,A7:net_sup,H37696C,A9:permanent,A8:infinity,AA:supervisor,H37697C
+37697C:lA10:erl_distribution|N
+37696C:t3:A10:erl_distribution,AA:start_link,N
+376C84:lH376C8C|H3768A0
+376C8C:t8:A5:child,P<0.14.0>,A7:inet_db,H3768F4,A9:permanent,I2000,A6:worker,H376904
+376904:lA7:inet_db|N
+3768F4:t3:A7:inet_db,AA:start_link,N
+3768A0:lH376938|H37695C
+376938:t8:A5:child,P<0.11.0>,A12:global_name_server,H3769B0,A9:permanent,I2000,A6:worker,H3769C0
+3769C0:lA6:global|N
+3769B0:t3:A6:global,AA:start_link,N
+37695C:lH3769C8|N
+3769C8:t8:A5:child,P<0.10.0>,A3:rex,H376A38,A9:permanent,I2000,A6:worker,H376A48
+376A48:lA3:rpc|N
+376A38:t3:A3:rpc,AA:start_link,N
+376868:t2:A5:local,AA:kernel_sup
+3768D4:lAA:gen_server|H376964
+376964:lP<0.8.0>|H3769EC
+3769EC:lP<0.8.0>|H376A50
+376A50:lH376A9C|H376AA8
+376A9C:t2:A5:local,AA:kernel_sup
+376AA8:lAA:supervisor|H376AFC
+376AFC:lH376B50|H376B60
+376B50:t3:H376868,A6:kernel,N
+376B60:lN|N
+376850:t2:AD:$initial_call,H3768DC
+3768DC:t3:A3:gen,A7:init_it,H3768D4
+37685C:t2:AA:$ancestors,H3768EC
+3768EC:lP<0.8.0>|N
+=proc_dictionary:<0.10.0>
+H367A10
+H3679F4
+=proc_stack:<0.10.0>
+367cec:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A3:rpc
+y3:H367AA8
+y4:A3:rex
+y5:P<0.9.0>
+367d08:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H3679C4
+=proc_heap:<0.10.0>
+367AA8:t2:I0,A3:nil
+3679C4:lAA:gen_server|H3679BC
+3679BC:lP<0.9.0>|H3679B4
+3679B4:lP<0.9.0>|H367988
+367988:lH367990|H3679AC
+367990:t2:A5:local,A3:rex
+3679AC:lA3:rpc|H3679A4
+3679A4:lN|H36799C
+36799C:lN|N
+367A10:t2:AD:$initial_call,H367A00
+367A00:t3:A3:gen,A7:init_it,H3679C4
+3679F4:t2:AA:$ancestors,H3679EC
+3679EC:lAA:kernel_sup|H3679CC
+3679CC:lP<0.8.0>|N
+=proc_dictionary:<0.11.0>
+H36ADD8
+H36ADBC
+=proc_stack:<0.11.0>
+36b0b4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A6:global
+y3:H36AF0C
+y4:A12:global_name_server
+y5:P<0.9.0>
+36b0d0:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H36AD8C
+=proc_heap:<0.11.0>
+36AF0C:t9:A5:state,A4:true,N,N,N,N,AD:nonode@nohost,P<0.12.0>,P<0.13.0>
+36AD8C:lAA:gen_server|H36AD84
+36AD84:lP<0.9.0>|H36AD7C
+36AD7C:lP<0.9.0>|H36AD50
+36AD50:lH36AD58|H36AD74
+36AD58:t2:A5:local,A12:global_name_server
+36AD74:lA6:global|H36AD6C
+36AD6C:lN|H36AD64
+36AD64:lN|N
+36ADD8:t2:AD:$initial_call,H36ADC8
+36ADC8:t3:A3:gen,A7:init_it,H36AD8C
+36ADBC:t2:AA:$ancestors,H36ADB4
+36ADB4:lAA:kernel_sup|H36AD94
+36AD94:lP<0.8.0>|N
+=proc_stack:<0.12.0>
+36921c:SReturn addr 0x261184 (global:init_the_locker/1 + 112)
+y0:N
+y1:N
+y2:N
+y3:N
+y4:N
+y5:N
+y6:A8:infinity
+y7:H368EB0
+y8:P<0.11.0>
+369244:SReturn addr 0x156F90 (<terminate process normally>)
+y0:N
+=proc_heap:<0.12.0>
+368EB0:t3:A5:multi,A9:undefined,N
+=proc_stack:<0.13.0>
+3695d0:SReturn addr 0x2651AC (global:loop_the_deleter/1 + 36)
+y0:A8:infinity
+y1:N
+y2:P<0.11.0>
+3695e0:SReturn addr 0x2654F8 (global:'-start_the_deleter/1-fun-0-'/1 + 20)
+y0:N
+y1:N
+y2:P<0.11.0>
+3695f0:SReturn addr 0x156F90 (<terminate process normally>)
+=proc_heap:<0.13.0>
+=proc_dictionary:<0.14.0>
+H36A998
+H36A9A4
+=proc_stack:<0.14.0>
+372e0c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A7:inet_db
+y3:H36A9B0
+y4:A7:inet_db
+y5:P<0.9.0>
+372e28:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H36A9C8
+=proc_heap:<0.14.0>
+36A9B0:t5:A5:state,A7:inet_db,AA:inet_cache,AA:inet_hosts,H36A9E8
+36A9E8:E21:8372000364000D6E6F6E6F6465406E6F686F737400000000060000000000000000
+36A9C8:lAA:gen_server|H36A9F8
+36A9F8:lP<0.9.0>|H36AA08
+36AA08:lP<0.9.0>|H36AA10
+36AA10:lH36AA18|H36AA24
+36AA18:t2:A5:local,A7:inet_db
+36AA24:lA7:inet_db|H36AA2C
+36AA2C:lN|H36AA34
+36AA34:lN|N
+36A998:t2:AD:$initial_call,H36A9D0
+36A9D0:t3:A3:gen,A7:init_it,H36A9C8
+36A9A4:t2:AA:$ancestors,H36A9E0
+36A9E0:lAA:kernel_sup|H36AA00
+36AA00:lP<0.8.0>|N
+=proc_dictionary:<0.15.0>
+H372788
+H3727F8
+H37276C
+H37280C
+H372820
+=proc_stack:<0.15.0>
+372a64:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AC:global_group
+y3:H3728C8
+y4:AC:global_group
+y5:P<0.9.0>
+372a80:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H37273C
+=proc_heap:<0.15.0>
+3728C8:tC:A5:state,A7:no_conf,A4:true,N,N,N,N,N,AD:nonode@nohost,N,A6:normal,A6:normal
+37273C:lAA:gen_server|H372734
+372734:lP<0.9.0>|H37272C
+37272C:lP<0.9.0>|H372700
+372700:lH372708|H372724
+372708:t2:A5:local,AC:global_group
+372724:lAC:global_group|H37271C
+37271C:lN|H372714
+372714:lN|N
+372788:t2:AD:$initial_call,H372778
+372778:t3:A3:gen,A7:init_it,H37273C
+3727F8:t2:A10:registered_names,H3727F0
+3727F0:lA9:undefined|N
+37276C:t2:AA:$ancestors,H372764
+372764:lAA:kernel_sup|H372744
+372744:lP<0.8.0>|N
+37280C:t2:A4:send,H372804
+372804:lA9:undefined|N
+372820:t2:AC:whereis_name,H372818
+372818:lA9:undefined|N
+=proc_dictionary:<0.16.0>
+H37B918
+H37B924
+=proc_stack:<0.16.0>
+3d303c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AB:file_server
+y3:p<0.4>
+y4:AD:file_server_2
+y5:P<0.9.0>
+3d3058:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H37B930
+=proc_heap:<0.16.0>
+37B930:lAA:gen_server|H37B950
+37B950:lP<0.9.0>|H37B960
+37B960:lP<0.9.0>|H37B968
+37B968:lH37B970|H37B97C
+37B970:t2:A5:local,AD:file_server_2
+37B97C:lAB:file_server|H37B984
+37B984:lN|H37B98C
+37B98C:lN|N
+37B918:t2:AD:$initial_call,H37B938
+37B938:t3:A3:gen,A7:init_it,H37B930
+37B924:t2:AA:$ancestors,H37B948
+37B948:lAA:kernel_sup|H37B958
+37B958:lP<0.8.0>|N
+=proc_stack:<0.17.0>
+3763cc:SReturn addr 0x156F90 (<terminate process normally>)
+y0:H376084
+y1:P<0.16.0>
+y2:P<0.9.0>
+=proc_heap:<0.17.0>
+376084:E21:8372000364000D6E6F6E6F6465406E6F686F737400000000160000000000000000
+=proc_stack:<0.18.0>
+3b98e8:SReturn addr 0x156F90 (<terminate process normally>)
+y0:H38AE84
+y1:P<0.9.0>
+=proc_heap:<0.18.0>
+38AE84:t8:A5:state,P<0.9.0>,H3873BC,H38AEB8,I9,I10,A8:no_cache,AB:interactive
+38AEB8:lH3873D4|H38AEE0
+3873D4:lI46|N
+38AEE0:lH3873EC|H38AF10
+3873EC:lI47|H387404
+387404:lI99|H387424
+387424:lI108|H38744C
+38744C:lI101|H38747C
+38747C:lI97|H3874B4
+3874B4:lI114|H3874F4
+3874F4:lI99|H38753C
+38753C:lI97|H38758C
+38758C:lI115|H3875E4
+3875E4:lI101|H387644
+387644:lI47|H3876AC
+3876AC:lI111|H38771C
+38771C:lI116|H387794
+387794:lI112|H387814
+387814:lI47|H38789C
+38789C:lI101|H38792C
+38792C:lI114|H3879BC
+3879BC:lI116|H387A54
+387A54:lI115|H387AF4
+387AF4:lI47|H387B9C
+387B9C:lI108|H387C4C
+387C4C:lI105|H387D04
+387D04:lI98|H387DC4
+387DC4:lI47|H387E8C
+387E8C:lI107|H387F5C
+387F5C:lI101|H388034
+388034:lI114|H388114
+388114:lI110|H3881FC
+3881FC:lI101|H3882EC
+3882EC:lI108|H3883E4
+3883E4:lI47|H3884E4
+3884E4:lI101|H3885EC
+3885EC:lI98|H3886FC
+3886FC:lI105|H388814
+388814:lI110|N
+38AF10:lH38740C|H38AF48
+38740C:lI47|H38742C
+38742C:lI99|H387454
+387454:lI108|H387484
+387484:lI101|H3874BC
+3874BC:lI97|H3874FC
+3874FC:lI114|H387544
+387544:lI99|H387594
+387594:lI97|H3875EC
+3875EC:lI115|H38764C
+38764C:lI101|H3876B4
+3876B4:lI47|H387724
+387724:lI111|H38779C
+38779C:lI116|H38781C
+38781C:lI112|H3878A4
+3878A4:lI47|H387934
+387934:lI101|H3879C4
+3879C4:lI114|H387A5C
+387A5C:lI116|H387AFC
+387AFC:lI115|H387BA4
+387BA4:lI47|H387C54
+387C54:lI108|H387D0C
+387D0C:lI105|H387DCC
+387DCC:lI98|H387E94
+387E94:lI47|H387F64
+387F64:lI115|H38803C
+38803C:lI116|H38811C
+38811C:lI100|H388204
+388204:lI108|H3882F4
+3882F4:lI105|H3883EC
+3883EC:lI98|H3884EC
+3884EC:lI47|H3885F4
+3885F4:lI101|H388704
+388704:lI98|H38881C
+38881C:lI105|H38892C
+38892C:lI110|N
+38AF48:lH387434|H38AF70
+387434:lI47|H38745C
+38745C:lI99|H38748C
+38748C:lI108|H3874C4
+3874C4:lI101|H387504
+387504:lI97|H38754C
+38754C:lI114|H38759C
+38759C:lI99|H3875F4
+3875F4:lI97|H387654
+387654:lI115|H3876BC
+3876BC:lI101|H38772C
+38772C:lI47|H3877A4
+3877A4:lI111|H387824
+387824:lI116|H3878AC
+3878AC:lI112|H38793C
+38793C:lI47|H3879CC
+3879CC:lI101|H387A64
+387A64:lI114|H387B04
+387B04:lI116|H387BAC
+387BAC:lI115|H387C5C
+387C5C:lI47|H387D14
+387D14:lI108|H387DD4
+387DD4:lI105|H387E9C
+387E9C:lI98|H387F6C
+387F6C:lI47|H388044
+388044:lI119|H388124
+388124:lI101|H38820C
+38820C:lI98|H3882FC
+3882FC:lI116|H3883F4
+3883F4:lI111|H3884F4
+3884F4:lI111|H3885FC
+3885FC:lI108|H38870C
+38870C:lI47|H388824
+388824:lI101|H388934
+388934:lI98|H388A44
+388A44:lI105|H388B54
+388B54:lI110|N
+38AF70:lH387464|H38AF98
+387464:lI47|H387494
+387494:lI99|H3874CC
+3874CC:lI108|H38750C
+38750C:lI101|H387554
+387554:lI97|H3875A4
+3875A4:lI114|H3875FC
+3875FC:lI99|H38765C
+38765C:lI97|H3876C4
+3876C4:lI115|H387734
+387734:lI101|H3877AC
+3877AC:lI47|H38782C
+38782C:lI111|H3878B4
+3878B4:lI116|H387944
+387944:lI112|H3879D4
+3879D4:lI47|H387A6C
+387A6C:lI101|H387B0C
+387B0C:lI114|H387BB4
+387BB4:lI116|H387C64
+387C64:lI115|H387D1C
+387D1C:lI47|H387DDC
+387DDC:lI108|H387EA4
+387EA4:lI105|H387F74
+387F74:lI98|H38804C
+38804C:lI47|H38812C
+38812C:lI116|H388214
+388214:lI118|H388304
+388304:lI47|H3883FC
+3883FC:lI101|H3884FC
+3884FC:lI98|H388604
+388604:lI105|H388714
+388714:lI110|N
+38AF98:lH38749C|H38AFC0
+38749C:lI47|H3874D4
+3874D4:lI99|H387514
+387514:lI108|H38755C
+38755C:lI101|H3875AC
+3875AC:lI97|H387604
+387604:lI114|H387664
+387664:lI99|H3876CC
+3876CC:lI97|H38773C
+38773C:lI115|H3877B4
+3877B4:lI101|H387834
+387834:lI47|H3878BC
+3878BC:lI111|H38794C
+38794C:lI116|H3879DC
+3879DC:lI112|H387A74
+387A74:lI47|H387B14
+387B14:lI101|H387BBC
+387BBC:lI114|H387C6C
+387C6C:lI116|H387D24
+387D24:lI115|H387DE4
+387DE4:lI47|H387EAC
+387EAC:lI108|H387F7C
+387F7C:lI105|H388054
+388054:lI98|H388134
+388134:lI47|H38821C
+38821C:lI116|H38830C
+38830C:lI115|H388404
+388404:lI112|H388504
+388504:lI47|H38860C
+38860C:lI101|H38871C
+38871C:lI98|H38882C
+38882C:lI105|H38893C
+38893C:lI110|N
+38AFC0:lH3874DC|H38AFE8
+3874DC:lI47|H38751C
+38751C:lI99|H387564
+387564:lI108|H3875B4
+3875B4:lI101|H38760C
+38760C:lI97|H38766C
+38766C:lI114|H3876D4
+3876D4:lI99|H387744
+387744:lI97|H3877BC
+3877BC:lI115|H38783C
+38783C:lI101|H3878C4
+3878C4:lI47|H387954
+387954:lI111|H3879E4
+3879E4:lI116|H387A7C
+387A7C:lI112|H387B1C
+387B1C:lI47|H387BC4
+387BC4:lI101|H387C74
+387C74:lI114|H387D2C
+387D2C:lI116|H387DEC
+387DEC:lI115|H387EB4
+387EB4:lI47|H387F84
+387F84:lI108|H38805C
+38805C:lI105|H38813C
+38813C:lI98|H388224
+388224:lI47|H388314
+388314:lI116|H38840C
+38840C:lI111|H38850C
+38850C:lI111|H388614
+388614:lI108|H388724
+388724:lI115|H388834
+388834:lI47|H388944
+388944:lI101|H388A4C
+388A4C:lI98|H388B5C
+388B5C:lI105|H388C6C
+388C6C:lI110|N
+38AFE8:lH387524|H38B008
+387524:lI47|H38756C
+38756C:lI99|H3875BC
+3875BC:lI108|H387614
+387614:lI101|H387674
+387674:lI97|H3876DC
+3876DC:lI114|H38774C
+38774C:lI99|H3877C4
+3877C4:lI97|H387844
+387844:lI115|H3878CC
+3878CC:lI101|H38795C
+38795C:lI47|H3879EC
+3879EC:lI111|H387A84
+387A84:lI116|H387B24
+387B24:lI112|H387BCC
+387BCC:lI47|H387C7C
+387C7C:lI101|H387D34
+387D34:lI114|H387DF4
+387DF4:lI116|H387EBC
+387EBC:lI115|H387F8C
+387F8C:lI47|H388064
+388064:lI108|H388144
+388144:lI105|H38822C
+38822C:lI98|H38831C
+38831C:lI47|H388414
+388414:lI116|H388514
+388514:lI111|H38861C
+38861C:lI111|H38872C
+38872C:lI108|H38883C
+38883C:lI98|H38894C
+38894C:lI97|H388A54
+388A54:lI114|H388B64
+388B64:lI47|H388C74
+388C74:lI101|H388D84
+388D84:lI98|H388E9C
+388E9C:lI105|H388FB4
+388FB4:lI110|N
+38B008:lH387574|H38B018
+387574:lI47|H3875C4
+3875C4:lI99|H38761C
+38761C:lI108|H38767C
+38767C:lI101|H3876E4
+3876E4:lI97|H387754
+387754:lI114|H3877CC
+3877CC:lI99|H38784C
+38784C:lI97|H3878D4
+3878D4:lI115|H387964
+387964:lI101|H3879F4
+3879F4:lI47|H387A8C
+387A8C:lI111|H387B2C
+387B2C:lI116|H387BD4
+387BD4:lI112|H387C84
+387C84:lI47|H387D3C
+387D3C:lI101|H387DFC
+387DFC:lI114|H387EC4
+387EC4:lI116|H387F94
+387F94:lI115|H38806C
+38806C:lI47|H38814C
+38814C:lI108|H388234
+388234:lI105|H388324
+388324:lI98|H38841C
+38841C:lI47|H38851C
+38851C:lI116|H388624
+388624:lI101|H388734
+388734:lI115|H388844
+388844:lI116|H388954
+388954:lI95|H388A5C
+388A5C:lI115|H388B6C
+388B6C:lI101|H388C7C
+388C7C:lI114|H388D8C
+388D8C:lI118|H388EA4
+388EA4:lI101|H388FBC
+388FBC:lI114|H3890D4
+3890D4:lI47|H3891EC
+3891EC:lI101|H3892FC
+3892FC:lI98|H38940C
+38940C:lI105|H38951C
+38951C:lI110|N
+38B018:lH3875CC|H38AE7C
+3875CC:lI47|H387624
+387624:lI99|H387684
+387684:lI108|H3876EC
+3876EC:lI101|H38775C
+38775C:lI97|H3877D4
+3877D4:lI114|H387854
+387854:lI99|H3878DC
+3878DC:lI97|H38796C
+38796C:lI115|H3879FC
+3879FC:lI101|H387A94
+387A94:lI47|H387B34
+387B34:lI111|H387BDC
+387BDC:lI116|H387C8C
+387C8C:lI112|H387D44
+387D44:lI47|H387E04
+387E04:lI101|H387ECC
+387ECC:lI114|H387F9C
+387F9C:lI116|H388074
+388074:lI115|H388154
+388154:lI47|H38823C
+38823C:lI108|H38832C
+38832C:lI105|H388424
+388424:lI98|H388524
+388524:lI47|H38862C
+38862C:lI115|H38873C
+38873C:lI115|H38884C
+38884C:lI108|H38895C
+38895C:lI47|H388A64
+388A64:lI101|H388B74
+388B74:lI98|H388C84
+388C84:lI105|H388D94
+388D94:lI110|N
+38AE7C:lH38762C|H38AEB0
+38762C:lI47|H38768C
+38768C:lI99|H3876F4
+3876F4:lI108|H387764
+387764:lI101|H3877DC
+3877DC:lI97|H38785C
+38785C:lI114|H3878E4
+3878E4:lI99|H387974
+387974:lI97|H387A04
+387A04:lI115|H387A9C
+387A9C:lI101|H387B3C
+387B3C:lI47|H387BE4
+387BE4:lI111|H387C94
+387C94:lI116|H387D4C
+387D4C:lI112|H387E0C
+387E0C:lI47|H387ED4
+387ED4:lI101|H387FA4
+387FA4:lI114|H38807C
+38807C:lI116|H38815C
+38815C:lI115|H388244
+388244:lI47|H388334
+388334:lI108|H38842C
+38842C:lI105|H38852C
+38852C:lI98|H388634
+388634:lI47|H388744
+388744:lI115|H388854
+388854:lI110|H388964
+388964:lI109|H388A6C
+388A6C:lI112|H388B7C
+388B7C:lI47|H388C8C
+388C8C:lI101|H388D9C
+388D9C:lI98|H388EAC
+388EAC:lI105|H388FC4
+388FC4:lI110|N
+38AEB0:lH387694|H38AED8
+387694:lI47|H3876FC
+3876FC:lI99|H38776C
+38776C:lI108|H3877E4
+3877E4:lI101|H387864
+387864:lI97|H3878EC
+3878EC:lI114|H38797C
+38797C:lI99|H387A0C
+387A0C:lI97|H387AA4
+387AA4:lI115|H387B44
+387B44:lI101|H387BEC
+387BEC:lI47|H387C9C
+387C9C:lI111|H387D54
+387D54:lI116|H387E14
+387E14:lI112|H387EDC
+387EDC:lI47|H387FAC
+387FAC:lI101|H388084
+388084:lI114|H388164
+388164:lI116|H38824C
+38824C:lI115|H38833C
+38833C:lI47|H388434
+388434:lI108|H388534
+388534:lI105|H38863C
+38863C:lI98|H38874C
+38874C:lI47|H38885C
+38885C:lI115|H38896C
+38896C:lI97|H388A74
+388A74:lI115|H388B84
+388B84:lI108|H388C94
+388C94:lI47|H388DA4
+388DA4:lI101|H388EB4
+388EB4:lI98|H388FCC
+388FCC:lI105|H3890DC
+3890DC:lI110|N
+38AED8:lH387704|H38AF08
+387704:lI47|H387774
+387774:lI99|H3877EC
+3877EC:lI108|H38786C
+38786C:lI101|H3878F4
+3878F4:lI97|H387984
+387984:lI114|H387A14
+387A14:lI99|H387AAC
+387AAC:lI97|H387B4C
+387B4C:lI115|H387BF4
+387BF4:lI101|H387CA4
+387CA4:lI47|H387D5C
+387D5C:lI111|H387E1C
+387E1C:lI116|H387EE4
+387EE4:lI112|H387FB4
+387FB4:lI47|H38808C
+38808C:lI101|H38816C
+38816C:lI114|H388254
+388254:lI116|H388344
+388344:lI115|H38843C
+38843C:lI47|H38853C
+38853C:lI108|H388644
+388644:lI105|H388754
+388754:lI98|H388864
+388864:lI47|H388974
+388974:lI114|H388A7C
+388A7C:lI117|H388B8C
+388B8C:lI110|H388C9C
+388C9C:lI116|H388DAC
+388DAC:lI105|H388EBC
+388EBC:lI109|H388FD4
+388FD4:lI101|H3890E4
+3890E4:lI95|H3891F4
+3891F4:lI116|H389304
+389304:lI111|H389414
+389414:lI111|H389524
+389524:lI108|H389624
+389624:lI115|H38971C
+38971C:lI47|H389814
+389814:lI101|H38990C
+38990C:lI98|H389A04
+389A04:lI105|H389AE4
+389AE4:lI110|N
+38AF08:lH38777C|H38AF40
+38777C:lI47|H3877F4
+3877F4:lI99|H387874
+387874:lI108|H3878FC
+3878FC:lI101|H38798C
+38798C:lI97|H387A1C
+387A1C:lI114|H387AB4
+387AB4:lI99|H387B54
+387B54:lI97|H387BFC
+387BFC:lI115|H387CAC
+387CAC:lI101|H387D64
+387D64:lI47|H387E24
+387E24:lI111|H387EEC
+387EEC:lI116|H387FBC
+387FBC:lI112|H388094
+388094:lI47|H388174
+388174:lI101|H38825C
+38825C:lI114|H38834C
+38834C:lI116|H388444
+388444:lI115|H388544
+388544:lI47|H38864C
+38864C:lI108|H38875C
+38875C:lI105|H38886C
+38886C:lI98|H38897C
+38897C:lI47|H388A84
+388A84:lI114|H388B94
+388B94:lI115|H388CA4
+388CA4:lI104|H388DB4
+388DB4:lI101|H388EC4
+388EC4:lI108|H388FDC
+388FDC:lI108|H3890EC
+3890EC:lI47|H3891FC
+3891FC:lI101|H38930C
+38930C:lI98|H38941C
+38941C:lI105|H38952C
+38952C:lI110|N
+38AF40:lH3877FC|H38AF68
+3877FC:lI47|H38787C
+38787C:lI99|H387904
+387904:lI108|H387994
+387994:lI101|H387A24
+387A24:lI97|H387ABC
+387ABC:lI114|H387B5C
+387B5C:lI99|H387C04
+387C04:lI97|H387CB4
+387CB4:lI115|H387D6C
+387D6C:lI101|H387E2C
+387E2C:lI47|H387EF4
+387EF4:lI111|H387FC4
+387FC4:lI116|H38809C
+38809C:lI112|H38817C
+38817C:lI47|H388264
+388264:lI101|H388354
+388354:lI114|H38844C
+38844C:lI116|H38854C
+38854C:lI115|H388654
+388654:lI47|H388764
+388764:lI108|H388874
+388874:lI105|H388984
+388984:lI98|H388A8C
+388A8C:lI47|H388B9C
+388B9C:lI112|H388CAC
+388CAC:lI109|H388DBC
+388DBC:lI97|H388ECC
+388ECC:lI110|H388FE4
+388FE4:lI47|H3890F4
+3890F4:lI101|H389204
+389204:lI98|H389314
+389314:lI105|H389424
+389424:lI110|N
+38AF68:lH387884|H38AF90
+387884:lI47|H38790C
+38790C:lI99|H38799C
+38799C:lI108|H387A2C
+387A2C:lI101|H387AC4
+387AC4:lI97|H387B64
+387B64:lI114|H387C0C
+387C0C:lI99|H387CBC
+387CBC:lI97|H387D74
+387D74:lI115|H387E34
+387E34:lI101|H387EFC
+387EFC:lI47|H387FCC
+387FCC:lI111|H3880A4
+3880A4:lI116|H388184
+388184:lI112|H38826C
+38826C:lI47|H38835C
+38835C:lI101|H388454
+388454:lI114|H388554
+388554:lI116|H38865C
+38865C:lI115|H38876C
+38876C:lI47|H38887C
+38887C:lI108|H38898C
+38898C:lI105|H388A94
+388A94:lI98|H388BA4
+388BA4:lI47|H388CB4
+388CB4:lI112|H388DC4
+388DC4:lI97|H388ED4
+388ED4:lI114|H388FEC
+388FEC:lI115|H3890FC
+3890FC:lI101|H38920C
+38920C:lI116|H38931C
+38931C:lI111|H38942C
+38942C:lI111|H389534
+389534:lI108|H38962C
+38962C:lI115|H389724
+389724:lI47|H38981C
+38981C:lI101|H389914
+389914:lI98|H389A0C
+389A0C:lI105|H389AEC
+389AEC:lI110|N
+38AF90:lH387914|H38AFB8
+387914:lI47|H3879A4
+3879A4:lI99|H387A34
+387A34:lI108|H387ACC
+387ACC:lI101|H387B6C
+387B6C:lI97|H387C14
+387C14:lI114|H387CC4
+387CC4:lI99|H387D7C
+387D7C:lI97|H387E3C
+387E3C:lI115|H387F04
+387F04:lI101|H387FD4
+387FD4:lI47|H3880AC
+3880AC:lI111|H38818C
+38818C:lI116|H388274
+388274:lI112|H388364
+388364:lI47|H38845C
+38845C:lI101|H38855C
+38855C:lI114|H388664
+388664:lI116|H388774
+388774:lI115|H388884
+388884:lI47|H388994
+388994:lI108|H388A9C
+388A9C:lI105|H388BAC
+388BAC:lI98|H388CBC
+388CBC:lI47|H388DCC
+388DCC:lI111|H388EDC
+388EDC:lI116|H388FF4
+388FF4:lI112|H389104
+389104:lI95|H389214
+389214:lI109|H389324
+389324:lI105|H389434
+389434:lI98|H38953C
+38953C:lI115|H389634
+389634:lI47|H38972C
+38972C:lI101|H389824
+389824:lI98|H38991C
+38991C:lI105|H389A14
+389A14:lI110|N
+38AFB8:lH3879AC|H38AFE0
+3879AC:lI47|H387A3C
+387A3C:lI99|H387AD4
+387AD4:lI108|H387B74
+387B74:lI101|H387C1C
+387C1C:lI97|H387CCC
+387CCC:lI114|H387D84
+387D84:lI99|H387E44
+387E44:lI97|H387F0C
+387F0C:lI115|H387FDC
+387FDC:lI101|H3880B4
+3880B4:lI47|H388194
+388194:lI111|H38827C
+38827C:lI116|H38836C
+38836C:lI112|H388464
+388464:lI47|H388564
+388564:lI101|H38866C
+38866C:lI114|H38877C
+38877C:lI116|H38888C
+38888C:lI115|H38899C
+38899C:lI47|H388AA4
+388AA4:lI108|H388BB4
+388BB4:lI105|H388CC4
+388CC4:lI98|H388DD4
+388DD4:lI47|H388EE4
+388EE4:lI111|H388FFC
+388FFC:lI115|H38910C
+38910C:lI95|H38921C
+38921C:lI109|H38932C
+38932C:lI111|H38943C
+38943C:lI110|H389544
+389544:lI47|H38963C
+38963C:lI101|H389734
+389734:lI98|H38982C
+38982C:lI105|H389924
+389924:lI110|N
+38AFE0:lH387A44|H38B000
+387A44:lI47|H387ADC
+387ADC:lI99|H387B7C
+387B7C:lI108|H387C24
+387C24:lI101|H387CD4
+387CD4:lI97|H387D8C
+387D8C:lI114|H387E4C
+387E4C:lI99|H387F14
+387F14:lI97|H387FE4
+387FE4:lI115|H3880BC
+3880BC:lI101|H38819C
+38819C:lI47|H388284
+388284:lI111|H388374
+388374:lI116|H38846C
+38846C:lI112|H38856C
+38856C:lI47|H388674
+388674:lI101|H388784
+388784:lI114|H388894
+388894:lI116|H3889A4
+3889A4:lI115|H388AAC
+388AAC:lI47|H388BBC
+388BBC:lI108|H388CCC
+388CCC:lI105|H388DDC
+388DDC:lI98|H388EEC
+388EEC:lI47|H389004
+389004:lI111|H389114
+389114:lI114|H389224
+389224:lI98|H389334
+389334:lI101|H389444
+389444:lI114|H38954C
+38954C:lI47|H389644
+389644:lI101|H38973C
+38973C:lI98|H389834
+389834:lI105|H38992C
+38992C:lI110|N
+38B000:lH387AE4|H38B010
+387AE4:lI47|H387B84
+387B84:lI99|H387C2C
+387C2C:lI108|H387CDC
+387CDC:lI101|H387D94
+387D94:lI97|H387E54
+387E54:lI114|H387F1C
+387F1C:lI99|H387FEC
+387FEC:lI97|H3880C4
+3880C4:lI115|H3881A4
+3881A4:lI101|H38828C
+38828C:lI47|H38837C
+38837C:lI111|H388474
+388474:lI116|H388574
+388574:lI112|H38867C
+38867C:lI47|H38878C
+38878C:lI101|H38889C
+38889C:lI114|H3889AC
+3889AC:lI116|H388AB4
+388AB4:lI115|H388BC4
+388BC4:lI47|H388CD4
+388CD4:lI108|H388DE4
+388DE4:lI105|H388EF4
+388EF4:lI98|H38900C
+38900C:lI47|H38911C
+38911C:lI111|H38922C
+38922C:lI100|H38933C
+38933C:lI98|H38944C
+38944C:lI99|H389554
+389554:lI47|H38964C
+38964C:lI101|H389744
+389744:lI98|H38983C
+38983C:lI105|H389934
+389934:lI110|N
+38B010:lH387B8C|H38B020
+387B8C:lI47|H387C34
+387C34:lI99|H387CE4
+387CE4:lI108|H387D9C
+387D9C:lI101|H387E5C
+387E5C:lI97|H387F24
+387F24:lI114|H387FF4
+387FF4:lI99|H3880CC
+3880CC:lI97|H3881AC
+3881AC:lI115|H388294
+388294:lI101|H388384
+388384:lI47|H38847C
+38847C:lI111|H38857C
+38857C:lI116|H388684
+388684:lI112|H388794
+388794:lI47|H3888A4
+3888A4:lI101|H3889B4
+3889B4:lI114|H388ABC
+388ABC:lI116|H388BCC
+388BCC:lI115|H388CDC
+388CDC:lI47|H388DEC
+388DEC:lI108|H388EFC
+388EFC:lI105|H389014
+389014:lI98|H389124
+389124:lI47|H389234
+389234:lI111|H389344
+389344:lI98|H389454
+389454:lI115|H38955C
+38955C:lI101|H389654
+389654:lI114|H38974C
+38974C:lI118|H389844
+389844:lI101|H38993C
+38993C:lI114|H389A1C
+389A1C:lI47|H389AF4
+389AF4:lI101|H389BBC
+389BBC:lI98|H389C84
+389C84:lI105|H389D4C
+389D4C:lI110|N
+38B020:lH387C3C|H38B028
+387C3C:lI47|H387CEC
+387CEC:lI99|H387DA4
+387DA4:lI108|H387E64
+387E64:lI101|H387F2C
+387F2C:lI97|H387FFC
+387FFC:lI114|H3880D4
+3880D4:lI99|H3881B4
+3881B4:lI97|H38829C
+38829C:lI115|H38838C
+38838C:lI101|H388484
+388484:lI47|H388584
+388584:lI111|H38868C
+38868C:lI116|H38879C
+38879C:lI112|H3888AC
+3888AC:lI47|H3889BC
+3889BC:lI101|H388AC4
+388AC4:lI114|H388BD4
+388BD4:lI116|H388CE4
+388CE4:lI115|H388DF4
+388DF4:lI47|H388F04
+388F04:lI108|H38901C
+38901C:lI105|H38912C
+38912C:lI98|H38923C
+38923C:lI47|H38934C
+38934C:lI109|H38945C
+38945C:lI110|H389564
+389564:lI101|H38965C
+38965C:lI115|H389754
+389754:lI105|H38984C
+38984C:lI97|H389944
+389944:lI95|H389A24
+389A24:lI115|H389AFC
+389AFC:lI101|H389BC4
+389BC4:lI115|H389C8C
+389C8C:lI115|H389D54
+389D54:lI105|H389E14
+389E14:lI111|H389ECC
+389ECC:lI110|H389F7C
+389F7C:lI47|H38A01C
+38A01C:lI101|H38A0AC
+38A0AC:lI98|H38A12C
+38A12C:lI105|H38A19C
+38A19C:lI110|N
+38B028:lH387CF4|H38B030
+387CF4:lI47|H387DAC
+387DAC:lI99|H387E6C
+387E6C:lI108|H387F34
+387F34:lI101|H388004
+388004:lI97|H3880DC
+3880DC:lI114|H3881BC
+3881BC:lI99|H3882A4
+3882A4:lI97|H388394
+388394:lI115|H38848C
+38848C:lI101|H38858C
+38858C:lI47|H388694
+388694:lI111|H3887A4
+3887A4:lI116|H3888B4
+3888B4:lI112|H3889C4
+3889C4:lI47|H388ACC
+388ACC:lI101|H388BDC
+388BDC:lI114|H388CEC
+388CEC:lI116|H388DFC
+388DFC:lI115|H388F0C
+388F0C:lI47|H389024
+389024:lI108|H389134
+389134:lI105|H389244
+389244:lI98|H389354
+389354:lI47|H389464
+389464:lI109|H38956C
+38956C:lI110|H389664
+389664:lI101|H38975C
+38975C:lI115|H389854
+389854:lI105|H38994C
+38994C:lI97|H389A2C
+389A2C:lI47|H389B04
+389B04:lI101|H389BCC
+389BCC:lI98|H389C94
+389C94:lI105|H389D5C
+389D5C:lI110|N
+38B030:lH387DB4|H38B038
+387DB4:lI47|H387E74
+387E74:lI99|H387F3C
+387F3C:lI108|H38800C
+38800C:lI101|H3880E4
+3880E4:lI97|H3881C4
+3881C4:lI114|H3882AC
+3882AC:lI99|H38839C
+38839C:lI97|H388494
+388494:lI115|H388594
+388594:lI101|H38869C
+38869C:lI47|H3887AC
+3887AC:lI111|H3888BC
+3888BC:lI116|H3889CC
+3889CC:lI112|H388AD4
+388AD4:lI47|H388BE4
+388BE4:lI101|H388CF4
+388CF4:lI114|H388E04
+388E04:lI116|H388F14
+388F14:lI115|H38902C
+38902C:lI47|H38913C
+38913C:lI108|H38924C
+38924C:lI105|H38935C
+38935C:lI98|H38946C
+38946C:lI47|H389574
+389574:lI109|H38966C
+38966C:lI110|H389764
+389764:lI101|H38985C
+38985C:lI109|H389954
+389954:lI111|H389A34
+389A34:lI115|H389B0C
+389B0C:lI121|H389BD4
+389BD4:lI110|H389C9C
+389C9C:lI101|H389D64
+389D64:lI47|H389E1C
+389E1C:lI101|H389ED4
+389ED4:lI98|H389F84
+389F84:lI105|H38A024
+38A024:lI110|N
+38B038:lH387E7C|H38B040
+387E7C:lI47|H387F44
+387F44:lI99|H388014
+388014:lI108|H3880EC
+3880EC:lI101|H3881CC
+3881CC:lI97|H3882B4
+3882B4:lI114|H3883A4
+3883A4:lI99|H38849C
+38849C:lI97|H38859C
+38859C:lI115|H3886A4
+3886A4:lI101|H3887B4
+3887B4:lI47|H3888C4
+3888C4:lI111|H3889D4
+3889D4:lI116|H388ADC
+388ADC:lI112|H388BEC
+388BEC:lI47|H388CFC
+388CFC:lI101|H388E0C
+388E0C:lI114|H388F1C
+388F1C:lI116|H389034
+389034:lI115|H389144
+389144:lI47|H389254
+389254:lI108|H389364
+389364:lI105|H389474
+389474:lI98|H38957C
+38957C:lI47|H389674
+389674:lI109|H38976C
+38976C:lI101|H389864
+389864:lI103|H38995C
+38995C:lI97|H389A3C
+389A3C:lI99|H389B14
+389B14:lI111|H389BDC
+389BDC:lI47|H389CA4
+389CA4:lI101|H389D6C
+389D6C:lI98|H389E24
+389E24:lI105|H389EDC
+389EDC:lI110|N
+38B040:lH387F4C|H38B048
+387F4C:lI47|H38801C
+38801C:lI99|H3880F4
+3880F4:lI108|H3881D4
+3881D4:lI101|H3882BC
+3882BC:lI97|H3883AC
+3883AC:lI114|H3884A4
+3884A4:lI99|H3885A4
+3885A4:lI97|H3886AC
+3886AC:lI115|H3887BC
+3887BC:lI101|H3888CC
+3888CC:lI47|H3889DC
+3889DC:lI111|H388AE4
+388AE4:lI116|H388BF4
+388BF4:lI112|H388D04
+388D04:lI47|H388E14
+388E14:lI101|H388F24
+388F24:lI114|H38903C
+38903C:lI116|H38914C
+38914C:lI115|H38925C
+38925C:lI47|H38936C
+38936C:lI108|H38947C
+38947C:lI105|H389584
+389584:lI98|H38967C
+38967C:lI47|H389774
+389774:lI106|H38986C
+38986C:lI105|H389964
+389964:lI110|H389A44
+389A44:lI116|H389B1C
+389B1C:lI101|H389BE4
+389BE4:lI114|H389CAC
+389CAC:lI102|H389D74
+389D74:lI97|H389E2C
+389E2C:lI99|H389EE4
+389EE4:lI101|N
+38B048:lH388024|H38B050
+388024:lI47|H3880FC
+3880FC:lI99|H3881DC
+3881DC:lI108|H3882C4
+3882C4:lI101|H3883B4
+3883B4:lI97|H3884AC
+3884AC:lI114|H3885AC
+3885AC:lI99|H3886B4
+3886B4:lI97|H3887C4
+3887C4:lI115|H3888D4
+3888D4:lI101|H3889E4
+3889E4:lI47|H388AEC
+388AEC:lI111|H388BFC
+388BFC:lI116|H388D0C
+388D0C:lI112|H388E1C
+388E1C:lI47|H388F2C
+388F2C:lI101|H389044
+389044:lI114|H389154
+389154:lI116|H389264
+389264:lI115|H389374
+389374:lI47|H389484
+389484:lI108|H38958C
+38958C:lI105|H389684
+389684:lI98|H38977C
+38977C:lI47|H389874
+389874:lI105|H38996C
+38996C:lI110|H389A4C
+389A4C:lI101|H389B24
+389B24:lI116|H389BEC
+389BEC:lI115|H389CB4
+389CB4:lI47|H389D7C
+389D7C:lI101|H389E34
+389E34:lI98|H389EEC
+389EEC:lI105|H389F8C
+389F8C:lI110|N
+38B050:lH388104|H38B058
+388104:lI47|H3881E4
+3881E4:lI99|H3882CC
+3882CC:lI108|H3883BC
+3883BC:lI101|H3884B4
+3884B4:lI97|H3885B4
+3885B4:lI114|H3886BC
+3886BC:lI99|H3887CC
+3887CC:lI97|H3888DC
+3888DC:lI115|H3889EC
+3889EC:lI101|H388AF4
+388AF4:lI47|H388C04
+388C04:lI111|H388D14
+388D14:lI116|H388E24
+388E24:lI112|H388F34
+388F34:lI47|H38904C
+38904C:lI101|H38915C
+38915C:lI114|H38926C
+38926C:lI116|H38937C
+38937C:lI115|H38948C
+38948C:lI47|H389594
+389594:lI108|H38968C
+38968C:lI105|H389784
+389784:lI98|H38987C
+38987C:lI47|H389974
+389974:lI105|H389A54
+389A54:lI99|H389B2C
+389B2C:lI47|H389BF4
+389BF4:lI101|H389CBC
+389CBC:lI98|H389D84
+389D84:lI105|H389E3C
+389E3C:lI110|N
+38B058:lH3881EC|H38B060
+3881EC:lI47|H3882D4
+3882D4:lI99|H3883C4
+3883C4:lI108|H3884BC
+3884BC:lI101|H3885BC
+3885BC:lI97|H3886C4
+3886C4:lI114|H3887D4
+3887D4:lI99|H3888E4
+3888E4:lI97|H3889F4
+3889F4:lI115|H388AFC
+388AFC:lI101|H388C0C
+388C0C:lI47|H388D1C
+388D1C:lI111|H388E2C
+388E2C:lI116|H388F3C
+388F3C:lI112|H389054
+389054:lI47|H389164
+389164:lI101|H389274
+389274:lI114|H389384
+389384:lI116|H389494
+389494:lI115|H38959C
+38959C:lI47|H389694
+389694:lI108|H38978C
+38978C:lI105|H389884
+389884:lI98|H38997C
+38997C:lI47|H389A5C
+389A5C:lI104|H389B34
+389B34:lI105|H389BFC
+389BFC:lI112|H389CC4
+389CC4:lI101|H389D8C
+389D8C:lI47|H389E44
+389E44:lI101|H389EF4
+389EF4:lI98|H389F94
+389F94:lI105|H38A02C
+38A02C:lI110|N
+38B060:lH3882DC|H38B068
+3882DC:lI47|H3883CC
+3883CC:lI99|H3884C4
+3884C4:lI108|H3885C4
+3885C4:lI101|H3886CC
+3886CC:lI97|H3887DC
+3887DC:lI114|H3888EC
+3888EC:lI99|H3889FC
+3889FC:lI97|H388B04
+388B04:lI115|H388C14
+388C14:lI101|H388D24
+388D24:lI47|H388E34
+388E34:lI111|H388F44
+388F44:lI116|H38905C
+38905C:lI112|H38916C
+38916C:lI47|H38927C
+38927C:lI101|H38938C
+38938C:lI114|H38949C
+38949C:lI116|H3895A4
+3895A4:lI115|H38969C
+38969C:lI47|H389794
+389794:lI108|H38988C
+38988C:lI105|H389984
+389984:lI98|H389A64
+389A64:lI47|H389B3C
+389B3C:lI103|H389C04
+389C04:lI115|H389CCC
+389CCC:lI47|H389D94
+389D94:lI101|H389E4C
+389E4C:lI98|H389EFC
+389EFC:lI105|H389F9C
+389F9C:lI110|N
+38B068:lH3883D4|H38B070
+3883D4:lI47|H3884CC
+3884CC:lI99|H3885CC
+3885CC:lI108|H3886D4
+3886D4:lI101|H3887E4
+3887E4:lI97|H3888F4
+3888F4:lI114|H388A04
+388A04:lI99|H388B0C
+388B0C:lI97|H388C1C
+388C1C:lI115|H388D2C
+388D2C:lI101|H388E3C
+388E3C:lI47|H388F4C
+388F4C:lI111|H389064
+389064:lI116|H389174
+389174:lI112|H389284
+389284:lI47|H389394
+389394:lI101|H3894A4
+3894A4:lI114|H3895AC
+3895AC:lI116|H3896A4
+3896A4:lI115|H38979C
+38979C:lI47|H389894
+389894:lI108|H38998C
+38998C:lI105|H389A6C
+389A6C:lI98|H389B44
+389B44:lI47|H389C0C
+389C0C:lI101|H389CD4
+389CD4:lI118|H389D9C
+389D9C:lI97|H389E54
+389E54:lI47|H389F04
+389F04:lI101|H389FA4
+389FA4:lI98|H38A034
+38A034:lI105|H38A0B4
+38A0B4:lI110|N
+38B070:lH3884D4|H38B078
+3884D4:lI47|H3885D4
+3885D4:lI99|H3886DC
+3886DC:lI108|H3887EC
+3887EC:lI101|H3888FC
+3888FC:lI97|H388A0C
+388A0C:lI114|H388B14
+388B14:lI99|H388C24
+388C24:lI97|H388D34
+388D34:lI115|H388E44
+388E44:lI101|H388F54
+388F54:lI47|H38906C
+38906C:lI111|H38917C
+38917C:lI116|H38928C
+38928C:lI112|H38939C
+38939C:lI47|H3894AC
+3894AC:lI101|H3895B4
+3895B4:lI114|H3896AC
+3896AC:lI116|H3897A4
+3897A4:lI115|H38989C
+38989C:lI47|H389994
+389994:lI108|H389A74
+389A74:lI105|H389B4C
+389B4C:lI98|H389C14
+389C14:lI47|H389CDC
+389CDC:lI101|H389DA4
+389DA4:lI116|H389E5C
+389E5C:lI47|H389F0C
+389F0C:lI101|H389FAC
+389FAC:lI98|H38A03C
+38A03C:lI105|H38A0BC
+38A0BC:lI110|N
+38B078:lH3885DC|H38B080
+3885DC:lI47|H3886E4
+3886E4:lI99|H3887F4
+3887F4:lI108|H388904
+388904:lI101|H388A14
+388A14:lI97|H388B1C
+388B1C:lI114|H388C2C
+388C2C:lI99|H388D3C
+388D3C:lI97|H388E4C
+388E4C:lI115|H388F5C
+388F5C:lI101|H389074
+389074:lI47|H389184
+389184:lI111|H389294
+389294:lI116|H3893A4
+3893A4:lI112|H3894B4
+3894B4:lI47|H3895BC
+3895BC:lI101|H3896B4
+3896B4:lI114|H3897AC
+3897AC:lI116|H3898A4
+3898A4:lI115|H38999C
+38999C:lI47|H389A7C
+389A7C:lI108|H389B54
+389B54:lI105|H389C1C
+389C1C:lI98|H389CE4
+389CE4:lI47|H389DAC
+389DAC:lI101|H389E64
+389E64:lI114|H389F14
+389F14:lI108|H389FB4
+389FB4:lI95|H38A044
+38A044:lI105|H38A0C4
+38A0C4:lI110|H38A134
+38A134:lI116|H38A1A4
+38A1A4:lI101|H38A20C
+38A20C:lI114|H38A274
+38A274:lI102|H38A2DC
+38A2DC:lI97|H38A344
+38A344:lI99|H38A3AC
+38A3AC:lI101|N
+38B080:lH3886EC|H38B088
+3886EC:lI47|H3887FC
+3887FC:lI99|H38890C
+38890C:lI108|H388A1C
+388A1C:lI101|H388B24
+388B24:lI97|H388C34
+388C34:lI114|H388D44
+388D44:lI99|H388E54
+388E54:lI97|H388F64
+388F64:lI115|H38907C
+38907C:lI101|H38918C
+38918C:lI47|H38929C
+38929C:lI111|H3893AC
+3893AC:lI116|H3894BC
+3894BC:lI112|H3895C4
+3895C4:lI47|H3896BC
+3896BC:lI101|H3897B4
+3897B4:lI114|H3898AC
+3898AC:lI116|H3899A4
+3899A4:lI115|H389A84
+389A84:lI47|H389B5C
+389B5C:lI108|H389C24
+389C24:lI105|H389CEC
+389CEC:lI98|H389DB4
+389DB4:lI47|H389E6C
+389E6C:lI100|H389F1C
+389F1C:lI101|H389FBC
+389FBC:lI98|H38A04C
+38A04C:lI117|H38A0CC
+38A0CC:lI103|H38A13C
+38A13C:lI103|H38A1AC
+38A1AC:lI101|H38A214
+38A214:lI114|H38A27C
+38A27C:lI47|H38A2E4
+38A2E4:lI101|H38A34C
+38A34C:lI98|H38A3B4
+38A3B4:lI105|H38A414
+38A414:lI110|N
+38B088:lH388804|H38B090
+388804:lI47|H388914
+388914:lI99|H388A24
+388A24:lI108|H388B2C
+388B2C:lI101|H388C3C
+388C3C:lI97|H388D4C
+388D4C:lI114|H388E5C
+388E5C:lI99|H388F6C
+388F6C:lI97|H389084
+389084:lI115|H389194
+389194:lI101|H3892A4
+3892A4:lI47|H3893B4
+3893B4:lI111|H3894C4
+3894C4:lI116|H3895CC
+3895CC:lI112|H3896C4
+3896C4:lI47|H3897BC
+3897BC:lI101|H3898B4
+3898B4:lI114|H3899AC
+3899AC:lI116|H389A8C
+389A8C:lI115|H389B64
+389B64:lI47|H389C2C
+389C2C:lI108|H389CF4
+389CF4:lI105|H389DBC
+389DBC:lI98|H389E74
+389E74:lI47|H389F24
+389F24:lI99|H389FC4
+389FC4:lI114|H38A054
+38A054:lI121|H38A0D4
+38A0D4:lI112|H38A144
+38A144:lI116|H38A1B4
+38A1B4:lI111|H38A21C
+38A21C:lI47|H38A284
+38A284:lI101|H38A2EC
+38A2EC:lI98|H38A354
+38A354:lI105|H38A3BC
+38A3BC:lI110|N
+38B090:lH38891C|H38B098
+38891C:lI47|H388A2C
+388A2C:lI99|H388B34
+388B34:lI108|H388C44
+388C44:lI101|H388D54
+388D54:lI97|H388E64
+388E64:lI114|H388F74
+388F74:lI99|H38908C
+38908C:lI97|H38919C
+38919C:lI115|H3892AC
+3892AC:lI101|H3893BC
+3893BC:lI47|H3894CC
+3894CC:lI111|H3895D4
+3895D4:lI116|H3896CC
+3896CC:lI112|H3897C4
+3897C4:lI47|H3898BC
+3898BC:lI101|H3899B4
+3899B4:lI114|H389A94
+389A94:lI116|H389B6C
+389B6C:lI115|H389C34
+389C34:lI47|H389CFC
+389CFC:lI108|H389DC4
+389DC4:lI105|H389E7C
+389E7C:lI98|H389F2C
+389F2C:lI47|H389FCC
+389FCC:lI99|H38A05C
+38A05C:lI111|H38A0DC
+38A0DC:lI115|H38A14C
+38A14C:lI84|H38A1BC
+38A1BC:lI114|H38A224
+38A224:lI97|H38A28C
+38A28C:lI110|H38A2F4
+38A2F4:lI115|H38A35C
+38A35C:lI97|H38A3C4
+38A3C4:lI99|H38A41C
+38A41C:lI116|H38A46C
+38A46C:lI105|H38A4BC
+38A4BC:lI111|H38A50C
+38A50C:lI110|H38A554
+38A554:lI115|H38A59C
+38A59C:lI47|H38A5E4
+38A5E4:lI101|H38A62C
+38A62C:lI98|H38A66C
+38A66C:lI105|H38A6A4
+38A6A4:lI110|N
+38B098:lH388A34|H38B0A0
+388A34:lI47|H388B3C
+388B3C:lI99|H388C4C
+388C4C:lI108|H388D5C
+388D5C:lI101|H388E6C
+388E6C:lI97|H388F7C
+388F7C:lI114|H389094
+389094:lI99|H3891A4
+3891A4:lI97|H3892B4
+3892B4:lI115|H3893C4
+3893C4:lI101|H3894D4
+3894D4:lI47|H3895DC
+3895DC:lI111|H3896D4
+3896D4:lI116|H3897CC
+3897CC:lI112|H3898C4
+3898C4:lI47|H3899BC
+3899BC:lI101|H389A9C
+389A9C:lI114|H389B74
+389B74:lI116|H389C3C
+389C3C:lI115|H389D04
+389D04:lI47|H389DCC
+389DCC:lI108|H389E84
+389E84:lI105|H389F34
+389F34:lI98|H389FD4
+389FD4:lI47|H38A064
+38A064:lI99|H38A0E4
+38A0E4:lI111|H38A154
+38A154:lI115|H38A1C4
+38A1C4:lI84|H38A22C
+38A22C:lI105|H38A294
+38A294:lI109|H38A2FC
+38A2FC:lI101|H38A364
+38A364:lI47|H38A3CC
+38A3CC:lI101|H38A424
+38A424:lI98|H38A474
+38A474:lI105|H38A4C4
+38A4C4:lI110|N
+38B0A0:lH388B44|H38B0A8
+388B44:lI47|H388C54
+388C54:lI99|H388D64
+388D64:lI108|H388E74
+388E74:lI101|H388F84
+388F84:lI97|H38909C
+38909C:lI114|H3891AC
+3891AC:lI99|H3892BC
+3892BC:lI97|H3893CC
+3893CC:lI115|H3894DC
+3894DC:lI101|H3895E4
+3895E4:lI47|H3896DC
+3896DC:lI111|H3897D4
+3897D4:lI116|H3898CC
+3898CC:lI112|H3899C4
+3899C4:lI47|H389AA4
+389AA4:lI101|H389B7C
+389B7C:lI114|H389C44
+389C44:lI116|H389D0C
+389D0C:lI115|H389DD4
+389DD4:lI47|H389E8C
+389E8C:lI108|H389F3C
+389F3C:lI105|H389FDC
+389FDC:lI98|H38A06C
+38A06C:lI47|H38A0EC
+38A0EC:lI99|H38A15C
+38A15C:lI111|H38A1CC
+38A1CC:lI115|H38A234
+38A234:lI80|H38A29C
+38A29C:lI114|H38A304
+38A304:lI111|H38A36C
+38A36C:lI112|H38A3D4
+38A3D4:lI101|H38A42C
+38A42C:lI114|H38A47C
+38A47C:lI116|H38A4CC
+38A4CC:lI121|H38A514
+38A514:lI47|H38A55C
+38A55C:lI101|H38A5A4
+38A5A4:lI98|H38A5EC
+38A5EC:lI105|H38A634
+38A634:lI110|N
+38B0A8:lH388C5C|H38B0B0
+388C5C:lI47|H388D6C
+388D6C:lI99|H388E7C
+388E7C:lI108|H388F8C
+388F8C:lI101|H3890A4
+3890A4:lI97|H3891B4
+3891B4:lI114|H3892C4
+3892C4:lI99|H3893D4
+3893D4:lI97|H3894E4
+3894E4:lI115|H3895EC
+3895EC:lI101|H3896E4
+3896E4:lI47|H3897DC
+3897DC:lI111|H3898D4
+3898D4:lI116|H3899CC
+3899CC:lI112|H389AAC
+389AAC:lI47|H389B84
+389B84:lI101|H389C4C
+389C4C:lI114|H389D14
+389D14:lI116|H389DDC
+389DDC:lI115|H389E94
+389E94:lI47|H389F44
+389F44:lI108|H389FE4
+389FE4:lI105|H38A074
+38A074:lI98|H38A0F4
+38A0F4:lI47|H38A164
+38A164:lI99|H38A1D4
+38A1D4:lI111|H38A23C
+38A23C:lI115|H38A2A4
+38A2A4:lI78|H38A30C
+38A30C:lI111|H38A374
+38A374:lI116|H38A3DC
+38A3DC:lI105|H38A434
+38A434:lI102|H38A484
+38A484:lI105|H38A4D4
+38A4D4:lI99|H38A51C
+38A51C:lI97|H38A564
+38A564:lI116|H38A5AC
+38A5AC:lI105|H38A5F4
+38A5F4:lI111|H38A63C
+38A63C:lI110|H38A674
+38A674:lI47|H38A6AC
+38A6AC:lI101|H38A6D4
+38A6D4:lI98|H38A6EC
+38A6EC:lI105|H38A704
+38A704:lI110|N
+38B0B0:lH388D74|H38B0B8
+388D74:lI47|H388E84
+388E84:lI99|H388F94
+388F94:lI108|H3890AC
+3890AC:lI101|H3891BC
+3891BC:lI97|H3892CC
+3892CC:lI114|H3893DC
+3893DC:lI99|H3894EC
+3894EC:lI97|H3895F4
+3895F4:lI115|H3896EC
+3896EC:lI101|H3897E4
+3897E4:lI47|H3898DC
+3898DC:lI111|H3899D4
+3899D4:lI116|H389AB4
+389AB4:lI112|H389B8C
+389B8C:lI47|H389C54
+389C54:lI101|H389D1C
+389D1C:lI114|H389DE4
+389DE4:lI116|H389E9C
+389E9C:lI115|H389F4C
+389F4C:lI47|H389FEC
+389FEC:lI108|H38A07C
+38A07C:lI105|H38A0FC
+38A0FC:lI98|H38A16C
+38A16C:lI47|H38A1DC
+38A1DC:lI99|H38A244
+38A244:lI111|H38A2AC
+38A2AC:lI115|H38A314
+38A314:lI70|H38A37C
+38A37C:lI105|H38A3E4
+38A3E4:lI108|H38A43C
+38A43C:lI101|H38A48C
+38A48C:lI84|H38A4DC
+38A4DC:lI114|H38A524
+38A524:lI97|H38A56C
+38A56C:lI110|H38A5B4
+38A5B4:lI115|H38A5FC
+38A5FC:lI102|H38A644
+38A644:lI101|H38A67C
+38A67C:lI114|H38A6B4
+38A6B4:lI47|H38A6DC
+38A6DC:lI101|H38A6F4
+38A6F4:lI98|H38A70C
+38A70C:lI105|H38A71C
+38A71C:lI110|N
+38B0B8:lH388E8C|H38B0C0
+388E8C:lI47|H388F9C
+388F9C:lI99|H3890B4
+3890B4:lI108|H3891C4
+3891C4:lI101|H3892D4
+3892D4:lI97|H3893E4
+3893E4:lI114|H3894F4
+3894F4:lI99|H3895FC
+3895FC:lI97|H3896F4
+3896F4:lI115|H3897EC
+3897EC:lI101|H3898E4
+3898E4:lI47|H3899DC
+3899DC:lI111|H389ABC
+389ABC:lI116|H389B94
+389B94:lI112|H389C5C
+389C5C:lI47|H389D24
+389D24:lI101|H389DEC
+389DEC:lI114|H389EA4
+389EA4:lI116|H389F54
+389F54:lI115|H389FF4
+389FF4:lI47|H38A084
+38A084:lI108|H38A104
+38A104:lI105|H38A174
+38A174:lI98|H38A1E4
+38A1E4:lI47|H38A24C
+38A24C:lI99|H38A2B4
+38A2B4:lI111|H38A31C
+38A31C:lI115|H38A384
+38A384:lI69|H38A3EC
+38A3EC:lI118|H38A444
+38A444:lI101|H38A494
+38A494:lI110|H38A4E4
+38A4E4:lI116|H38A52C
+38A52C:lI68|H38A574
+38A574:lI111|H38A5BC
+38A5BC:lI109|H38A604
+38A604:lI97|H38A64C
+38A64C:lI105|H38A684
+38A684:lI110|H38A6BC
+38A6BC:lI47|H38A6E4
+38A6E4:lI101|H38A6FC
+38A6FC:lI98|H38A714
+38A714:lI105|H38A724
+38A724:lI110|N
+38B0C0:lH388FA4|H38B0C8
+388FA4:lI47|H3890BC
+3890BC:lI99|H3891CC
+3891CC:lI108|H3892DC
+3892DC:lI101|H3893EC
+3893EC:lI97|H3894FC
+3894FC:lI114|H389604
+389604:lI99|H3896FC
+3896FC:lI97|H3897F4
+3897F4:lI115|H3898EC
+3898EC:lI101|H3899E4
+3899E4:lI47|H389AC4
+389AC4:lI111|H389B9C
+389B9C:lI116|H389C64
+389C64:lI112|H389D2C
+389D2C:lI47|H389DF4
+389DF4:lI101|H389EAC
+389EAC:lI114|H389F5C
+389F5C:lI116|H389FFC
+389FFC:lI115|H38A08C
+38A08C:lI47|H38A10C
+38A10C:lI108|H38A17C
+38A17C:lI105|H38A1EC
+38A1EC:lI98|H38A254
+38A254:lI47|H38A2BC
+38A2BC:lI99|H38A324
+38A324:lI111|H38A38C
+38A38C:lI115|H38A3F4
+38A3F4:lI69|H38A44C
+38A44C:lI118|H38A49C
+38A49C:lI101|H38A4EC
+38A4EC:lI110|H38A534
+38A534:lI116|H38A57C
+38A57C:lI47|H38A5C4
+38A5C4:lI101|H38A60C
+38A60C:lI98|H38A654
+38A654:lI105|H38A68C
+38A68C:lI110|N
+38B0C8:lH3890C4|H38B0D0
+3890C4:lI47|H3891D4
+3891D4:lI99|H3892E4
+3892E4:lI108|H3893F4
+3893F4:lI101|H389504
+389504:lI97|H38960C
+38960C:lI114|H389704
+389704:lI99|H3897FC
+3897FC:lI97|H3898F4
+3898F4:lI115|H3899EC
+3899EC:lI101|H389ACC
+389ACC:lI47|H389BA4
+389BA4:lI111|H389C6C
+389C6C:lI116|H389D34
+389D34:lI112|H389DFC
+389DFC:lI47|H389EB4
+389EB4:lI101|H389F64
+389F64:lI114|H38A004
+38A004:lI116|H38A094
+38A094:lI115|H38A114
+38A114:lI47|H38A184
+38A184:lI108|H38A1F4
+38A1F4:lI105|H38A25C
+38A25C:lI98|H38A2C4
+38A2C4:lI47|H38A32C
+38A32C:lI99|H38A394
+38A394:lI111|H38A3FC
+38A3FC:lI109|H38A454
+38A454:lI112|H38A4A4
+38A4A4:lI105|H38A4F4
+38A4F4:lI108|H38A53C
+38A53C:lI101|H38A584
+38A584:lI114|H38A5CC
+38A5CC:lI47|H38A614
+38A614:lI101|H38A65C
+38A65C:lI98|H38A694
+38A694:lI105|H38A6C4
+38A6C4:lI110|N
+38B0D0:lH3891DC|H38B0D8
+3891DC:lI47|H3892EC
+3892EC:lI99|H3893FC
+3893FC:lI108|H38950C
+38950C:lI101|H389614
+389614:lI97|H38970C
+38970C:lI114|H389804
+389804:lI99|H3898FC
+3898FC:lI97|H3899F4
+3899F4:lI115|H389AD4
+389AD4:lI101|H389BAC
+389BAC:lI47|H389C74
+389C74:lI111|H389D3C
+389D3C:lI116|H389E04
+389E04:lI112|H389EBC
+389EBC:lI47|H389F6C
+389F6C:lI101|H38A00C
+38A00C:lI114|H38A09C
+38A09C:lI116|H38A11C
+38A11C:lI115|H38A18C
+38A18C:lI47|H38A1FC
+38A1FC:lI108|H38A264
+38A264:lI105|H38A2CC
+38A2CC:lI98|H38A334
+38A334:lI47|H38A39C
+38A39C:lI97|H38A404
+38A404:lI115|H38A45C
+38A45C:lI110|H38A4AC
+38A4AC:lI49|H38A4FC
+38A4FC:lI47|H38A544
+38A544:lI101|H38A58C
+38A58C:lI98|H38A5D4
+38A5D4:lI105|H38A61C
+38A61C:lI110|N
+38B0D8:lH3892F4|H38B0E0
+3892F4:lI47|H389404
+389404:lI99|H389514
+389514:lI108|H38961C
+38961C:lI101|H389714
+389714:lI97|H38980C
+38980C:lI114|H389904
+389904:lI99|H3899FC
+3899FC:lI97|H389ADC
+389ADC:lI115|H389BB4
+389BB4:lI101|H389C7C
+389C7C:lI47|H389D44
+389D44:lI111|H389E0C
+389E0C:lI116|H389EC4
+389EC4:lI112|H389F74
+389F74:lI47|H38A014
+38A014:lI101|H38A0A4
+38A0A4:lI114|H38A124
+38A124:lI116|H38A194
+38A194:lI115|H38A204
+38A204:lI47|H38A26C
+38A26C:lI108|H38A2D4
+38A2D4:lI105|H38A33C
+38A33C:lI98|H38A3A4
+38A3A4:lI47|H38A40C
+38A40C:lI97|H38A464
+38A464:lI112|H38A4B4
+38A4B4:lI112|H38A504
+38A504:lI109|H38A54C
+38A54C:lI111|H38A594
+38A594:lI110|H38A5DC
+38A5DC:lI47|H38A624
+38A624:lI101|H38A664
+38A664:lI98|H38A69C
+38A69C:lI105|H38A6CC
+38A6CC:lI110|N
+38B0E0:lH38AA88|H38B0E8
+38AA88:lI47|H38AA90
+38AA90:lI104|H38AA98
+38AA98:lI111|H38AAA0
+38AAA0:lI109|H38AAA8
+38AAA8:lI101|H38AAB0
+38AAB0:lI47|H38AAB8
+38AAB8:lI115|H38AAC0
+38AAC0:lI105|H38AAC8
+38AAC8:lI114|H38AAD0
+38AAD0:lI105|H38AAD8
+38AAD8:lI47|H38AAE0
+38AAE0:lI101|H38AAE8
+38AAE8:lI114|H38AAF0
+38AAF0:lI108|H38AAF8
+38AAF8:lI97|H38AB00
+38AB00:lI110|H38AB08
+38AB08:lI103|N
+38B0E8:lH38AB1C|H38B0F0
+38AB1C:lI47|H38AB2C
+38AB2C:lI104|H38AB4C
+38AB4C:lI111|H38AB74
+38AB74:lI109|H38ABA4
+38ABA4:lI101|H38ABC4
+38ABC4:lI47|H38ABE4
+38ABE4:lI115|H38AC04
+38AC04:lI105|H38AC24
+38AC24:lI114|H38AC3C
+38AC3C:lI105|H38AC44
+38AC44:lI47|H38AC4C
+38AC4C:lI116|H38AC54
+38AC54:lI111|H38AC5C
+38AC5C:lI111|H38AC64
+38AC64:lI108|H38AC6C
+38AC6C:lI115|H38AC74
+38AC74:lI47|H38AC7C
+38AC7C:lI100|H38AC84
+38AC84:lI105|H38AC8C
+38AC8C:lI115|H38AC94
+38AC94:lI116|H38AC9C
+38AC9C:lI101|H38ACA4
+38ACA4:lI108|H38ACAC
+38ACAC:lI47|H38ACB4
+38ACB4:lI101|H38ACBC
+38ACBC:lI98|H38ACC4
+38ACC4:lI105|H38ACCC
+38ACCC:lI110|N
+38B0F0:lH38B0F8|N
+38B0F8:lI47|H38B100
+38B100:lI104|H38B108
+38B108:lI111|H38B110
+38B110:lI109|H38B118
+38B118:lI101|H38B120
+38B120:lI47|H38B128
+38B128:lI115|H38B130
+38B130:lI105|H38B138
+38B138:lI114|H38B140
+38B140:lI105|H38B148
+38B148:lI47|H38B150
+38B150:lI79|H38B158
+38B158:lI84|H38B160
+38B160:lI80|H38B168
+38B168:lI47|H38B170
+38B170:lI103|H38B178
+38B178:lI112|H38B180
+38B180:lI114|H38B188
+38B188:lI115|H38B190
+38B190:lI95|H38B198
+38B198:lI116|H38B1A0
+38B1A0:lI114|H38B1A8
+38B1A8:lI97|H38B1B0
+38B1B0:lI99|H38B1B8
+38B1B8:lI101|H38B1C0
+38B1C0:lI47|H38B1C8
+38B1C8:lI106|H38B1D0
+38B1D0:lI97|H38B1D8
+38B1D8:lI110|N
+3873BC:lI47|H3873CC
+3873CC:lI99|H3873E4
+3873E4:lI108|H3873FC
+3873FC:lI101|H38741C
+38741C:lI97|H387444
+387444:lI114|H387474
+387474:lI99|H3874AC
+3874AC:lI97|H3874EC
+3874EC:lI115|H387534
+387534:lI101|H387584
+387584:lI47|H3875DC
+3875DC:lI111|H38763C
+38763C:lI116|H3876A4
+3876A4:lI112|H387714
+387714:lI47|H38778C
+38778C:lI101|H38780C
+38780C:lI114|H387894
+387894:lI116|H387924
+387924:lI115|N
+=proc_dictionary:<0.19.0>
+H370244
+H370250
+=proc_stack:<0.19.0>
+36b45c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A11:supervisor_bridge
+y3:H36B17C
+y4:P<0.19.0>
+y5:P<0.9.0>
+36b478:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H37025C
+=proc_heap:<0.19.0>
+36B17C:t5:A5:state,A8:user_sup,P<0.21.0>,P<0.21.0>,H370238
+370238:t2:P<0.19.0>,A8:user_sup
+37025C:lAA:gen_server|H37027C
+37027C:lP<0.9.0>|H37028C
+37028C:lP<0.9.0>|H370294
+370294:lA11:supervisor_bridge|H37029C
+37029C:lH3702A4|H3702AC
+3702A4:lA8:user_sup|H3702B4
+3702B4:lN|H3702BC
+3702BC:lA4:self|N
+3702AC:lN|N
+370244:t2:AD:$initial_call,H370264
+370264:t3:A3:gen,A7:init_it,H37025C
+370250:t2:AA:$ancestors,H370274
+370274:lAA:kernel_sup|H370284
+370284:lP<0.8.0>|N
+=proc_dictionary:<0.20.0>
+H36F8A8
+=proc_stack:<0.20.0>
+36a714:SReturn addr 0x156F90 (<terminate process normally>)
+y0:N
+y1:N
+y2:H36F8C4
+y3:P<0.21.0>
+y4:P<0.22.0>
+y5:p<0.72>
+y6:p<0.72>
+=proc_heap:<0.20.0>
+36F8C4:t4:I3,I2,P<0.22.0>,H36F8F0
+36F8F0:lH36F900|H36F910
+36F900:t3:I1,P<0.21.0>,H36F920
+36F920:t0:
+36F910:lH36F924|N
+36F924:t3:I2,P<0.22.0>,H36F93C
+36F93C:t3:A5:shell,A5:start,N
+36F8A8:t2:A3:eof,A5:false
+=proc_dictionary:<0.21.0>
+H3709DC
+H3709D0
+H3709F8
+=proc_stack:<0.21.0>
+370d1c:SReturn addr 0x156F90 (<terminate process normally>)
+y0:N
+y1:A9:undefined
+y2:P<0.20.0>
+=proc_heap:<0.21.0>
+3709DC:t2:AB:line_buffer,N
+3709D0:t2:AB:kill_buffer,N
+3709F8:t2:A9:read_mode,A4:list
+=proc_dictionary:<0.22.0>
+H370D44
+H370D60
+H370D7C
+H370D38
+=proc_stack:<0.22.0>
+374a88:SReturn addr 0x2CE718 (group:get_chars_loop/7 + 80)
+y0:N
+y1:N
+y2:A8:infinity
+y3:H374A00
+y4:P<0.20.0>
+y5:H374A28
+374aa4:SReturn addr 0x2CDC18 (group:io_request/5 + 48)
+y0:H37499C
+y1:A6:io_lib
+y2:A9:get_until
+y3:H3748B8
+y4:P<0.20.0>
+y5:A5:start
+374ac0:SReturn addr 0x2CDB2C (group:server_loop/3 + 372)
+y0:P<0.49.0>
+y1:P<0.22.0>
+374acc:SReturn addr 0x156F90 (<terminate process normally>)
+y0:N
+y1:P<0.25.0>
+y2:P<0.20.0>
+=proc_heap:<0.22.0>
+374A00:t4:A4:line,H37499C,H3749A4,A4:none
+3749A4:t2:N,N
+37499C:lI50|H374994
+374994:lI62|H37498C
+37498C:lI32|N
+374A28:t4:A5:stack,H370D58,H374A24,N
+374A24:t0:
+370D58:lH370D74|N
+370D74:lI99|H370D88
+370D88:lI114|H370D90
+370D90:lI97|H370D98
+370D98:lI115|H370DA0
+370DA0:lI104|H370DA8
+370DA8:lI100|H370DB0
+370DB0:lI117|H370DB8
+370DB8:lI109|H370DC0
+370DC0:lI112|H370DC8
+370DC8:lI95|H370DD0
+370DD0:lI118|H370DD8
+370DD8:lI105|H370DE0
+370DE0:lI101|H370DE8
+370DE8:lI119|H370DF0
+370DF0:lI101|H370DF8
+370DF8:lI114|H370E00
+370E00:lI58|H370E08
+370E08:lI115|H370E10
+370E10:lI116|H370E18
+370E18:lI97|H370E20
+370E20:lI114|H370E28
+370E28:lI116|H370E30
+370E30:lI40|H370E38
+370E38:lI41|H370E40
+370E40:lI46|H370E48
+370E48:lI10|N
+3748B8:t3:A8:erl_scan,A6:tokens,H3748B0
+3748B0:lI1|N
+370D44:t2:AB:line_buffer,H370D58
+370D60:t2:A5:shell,P<0.25.0>
+370D7C:t2:AB:kill_buffer,N
+370D38:t2:A9:read_mode,A4:list
+=proc_dictionary:<0.23.0>
+H376464
+H376448
+=proc_stack:<0.23.0>
+376754:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AD:kernel_config
+y3:N
+y4:P<0.23.0>
+y5:P<0.9.0>
+376770:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H376418
+=proc_heap:<0.23.0>
+376418:lAA:gen_server|H376410
+376410:lP<0.9.0>|H376408
+376408:lP<0.9.0>|H376400
+376400:lAD:kernel_config|H3763F8
+3763F8:lN|H3763F0
+3763F0:lN|N
+376464:t2:AD:$initial_call,H376454
+376454:t3:A3:gen,A7:init_it,H376418
+376448:t2:AA:$ancestors,H376440
+376440:lAA:kernel_sup|H376420
+376420:lP<0.8.0>|N
+=proc_dictionary:<0.24.0>
+H3705E0
+H3705EC
+=proc_stack:<0.24.0>
+36f38c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AA:supervisor
+y3:H36F018
+y4:AF:kernel_safe_sup
+y5:P<0.9.0>
+36f3a8:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H37063C
+=proc_heap:<0.24.0>
+36F018:tA:A5:state,H370644,AB:one_for_one,H36F044,N,I4,I3600,N,A6:kernel,A4:safe
+36F044:lH36F04C|N
+36F04C:t8:A5:child,P<0.31.0>,A17:inet_gethost_native_sup,H370650,A9:temporary,I1000,A6:worker,H370660
+370660:lA13:inet_gethost_native|N
+370650:t3:A13:inet_gethost_native,AA:start_link,N
+370644:t2:A5:local,AF:kernel_safe_sup
+37063C:lAA:gen_server|H3706AC
+3706AC:lP<0.9.0>|H3706BC
+3706BC:lP<0.9.0>|H3706C4
+3706C4:lH3706CC|H3706D8
+3706CC:t2:A5:local,AF:kernel_safe_sup
+3706D8:lAA:supervisor|H3706E0
+3706E0:lH3706E8|H3706F8
+3706E8:t3:H370644,A6:kernel,A4:safe
+3706F8:lN|N
+3705E0:t2:AD:$initial_call,H370668
+370668:t3:A3:gen,A7:init_it,H37063C
+3705EC:t2:AA:$ancestors,H370678
+370678:lAA:kernel_sup|H3706B4
+3706B4:lP<0.8.0>|N
+=proc_dictionary:<0.25.0>
+H36E304
+H36E31C
+=proc_stack:<0.25.0>
+36e610:SReturn addr 0x2E06FC (shell:server_loop/6 + 140)
+y0:N
+y1:N
+y2:P<0.27.0>
+y3:P<0.49.0>
+36e624:SReturn addr 0x156F90 (<terminate process normally>)
+y0:N
+y1:N
+y2:I2
+y3:I1
+y4:N
+y5:N
+y6:N
+y7:I20
+y8:I20
+=proc_heap:<0.25.0>
+36E304:t2:H36E2F8,H36E2A8
+36E2A8:lH36E2B0|N
+36E2B0:t4:A4:call,I1,H36E2C4,N
+36E2C4:t4:A6:remote,I1,H36E2D8,H36E2E8
+36E2E8:t3:A4:atom,I1,A5:start
+36E2D8:t3:A4:atom,I1,A10:crashdump_viewer
+36E2F8:t2:A7:command,I1
+36E31C:t2:H36E310,A2:ok
+36E310:t2:A6:result,I1
+=proc_stack:<0.27.0>
+3bda3c:SReturn addr 0x156F90 (<terminate process normally>)
+y0:N
+y1:N
+y2:P<0.25.0>
+=proc_heap:<0.27.0>
+=proc_dictionary:<0.31.0>
+H36DA24
+H36DA08
+=proc_stack:<0.31.0>
+36dcd4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A11:supervisor_bridge
+y3:H36DB68
+y4:A17:inet_gethost_native_sup
+y5:P<0.24.0>
+36dcf0:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H36D9D0
+=proc_heap:<0.31.0>
+36DB68:t5:A5:state,A13:inet_gethost_native,P<0.32.0>,P<0.32.0>,H36D994
+36D994:t2:A5:local,A17:inet_gethost_native_sup
+36D9D0:lAA:gen_server|H36D9C8
+36D9C8:lP<0.24.0>|H36D9C0
+36D9C0:lP<0.24.0>|H36D970
+36D970:lH36D980|H36D9B8
+36D980:t2:A5:local,A17:inet_gethost_native_sup
+36D9B8:lA11:supervisor_bridge|H36D978
+36D978:lH36D9A8|H36D9B0
+36D9A8:lA13:inet_gethost_native|H36D9A0
+36D9A0:lN|H36D98C
+36D98C:lH36D994|N
+36D9B0:lN|N
+36DA24:t2:AD:$initial_call,H36DA14
+36DA14:t3:A3:gen,A7:init_it,H36D9D0
+36DA08:t2:AA:$ancestors,H36DA00
+36DA00:lAF:kernel_safe_sup|H36D9E0
+36D9E0:lAA:kernel_sup|H36D9D8
+36D9D8:lP<0.8.0>|N
+=proc_dictionary:<0.32.0>
+H36CFD4
+H36D0BC
+=proc_stack:<0.32.0>
+36d12c:SReturn addr 0x156F90 (<terminate process normally>)
+y0:H36CF18
+=proc_heap:<0.32.0>
+36CF18:t8:A5:state,p<0.105>,I8000,I11,I12,P<0.31.0>,I4,H36CEF0
+36CEF0:t9:AA:statistics,I0,I0,I0,I0,I0,I0,I0,I0
+36CFD4:t2:A3:rid,I1
+36D0BC:t2:AC:num_requests,I0
+=proc_dictionary:<0.33.0>
+H3905C4
+H3905D0
+=proc_stack:<0.33.0>
+3ceee4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A7:webtool
+y3:H3C8570
+y4:A8:web_tool
+y5:P<0.33.0>
+3cef00:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H3905FC
+=proc_heap:<0.33.0>
+3C8570:t6:A5:state,H3905EC,I13,P<0.41.0>,H3905F4,H3C85D4
+3C85D4:lA10:crashdump_viewer|N
+3905F4:lH390650|H39065C
+390650:t2:A4:port,I8888
+39065C:lH3906C8|H3906D4
+3906C8:t2:AC:bind_address,H390760
+390760:t4:I127,I0,I0,I1
+3906D4:lH390774|H390780
+390774:t2:AB:server_name,H39082C
+39082C:lI108|H390908
+390908:lI111|H3909DC
+3909DC:lI99|H390AC0
+390AC0:lI97|H390B98
+390B98:lI108|H390C78
+390C78:lI104|H390D58
+390D58:lI111|H390E2C
+390E2C:lI115|H390F10
+390F10:lI116|N
+390780:lH390834|H390840
+390834:t2:AE:max_header_siz,I1024
+390840:lH390910|H39091C
+390910:t2:A11:max_header_action,A8:reply414
+39091C:lH3909E4|H3909F0
+3909E4:t2:A8:com_type,A7:ip_comm
+3909F0:lH390AC8|H390AD4
+390AC8:t2:A7:modules,H390BA0
+390BA0:lA9:mod_alias|H390C80
+390C80:lA8:mod_auth|H390D60
+390D60:lA7:mod_esi|H390E34
+390E34:lAB:mod_actions|H390F18
+390F18:lA7:mod_cgi|H390FF4
+390FF4:lAB:mod_include|H3910D8
+3910D8:lA7:mod_dir|H3911B4
+3911B4:lA7:mod_get|H3912A0
+3912A0:lA8:mod_head|H39139C
+39139C:lA7:mod_log|H3914A0
+3914A0:lAC:mod_disk_log|N
+390AD4:lH390BA8|H390BB4
+390BA8:t2:AF:directory_index,H390C88
+390C88:lH390D68|N
+390D68:lI105|H390E3C
+390E3C:lI110|H390F20
+390F20:lI100|H390FFC
+390FFC:lI101|H3910E0
+3910E0:lI120|H3911BC
+3911BC:lI46|H3912A8
+3912A8:lI104|H3913A4
+3913A4:lI116|H3914A8
+3914A8:lI109|H39159C
+39159C:lI108|N
+390BB4:lH390C90|N
+390C90:t2:AC:default_type,H390D70
+390D70:lI116|H390E44
+390E44:lI101|H390F28
+390F28:lI120|H391004
+391004:lI116|H3910E8
+3910E8:lI47|H3911C4
+3911C4:lI112|H3912B0
+3912B0:lI108|H3913AC
+3913AC:lI97|H3914B0
+3914B0:lI105|H3915A4
+3915A4:lI110|N
+3905EC:lI47|H390648
+390648:lI99|H3906C0
+3906C0:lI108|H390758
+390758:lI101|H390824
+390824:lI97|H390900
+390900:lI114|H3909D4
+3909D4:lI99|H390AB8
+390AB8:lI97|H390B90
+390B90:lI115|H390C70
+390C70:lI101|H390D50
+390D50:lI47|H390E24
+390E24:lI111|H390F08
+390F08:lI116|H390FEC
+390FEC:lI112|H3910D0
+3910D0:lI47|H3911AC
+3911AC:lI101|H391298
+391298:lI114|H391394
+391394:lI116|H391498
+391498:lI115|H391594
+391594:lI47|H391680
+391680:lI108|H39175C
+39175C:lI105|H391840
+391840:lI98|H391924
+391924:lI47|H3919F8
+3919F8:lI119|H391AC4
+391AC4:lI101|H391B90
+391B90:lI98|H391C54
+391C54:lI116|H391D18
+391D18:lI111|H391DD4
+391DD4:lI111|H391E90
+391E90:lI108|H391F5C
+391F5C:lI47|H392030
+392030:lI112|H3920EC
+3920EC:lI114|H3921A8
+3921A8:lI105|H392264
+392264:lI118|N
+3905FC:lAA:gen_server|H390664
+390664:lP<0.27.0>|H3906DC
+3906DC:lA4:self|H390788
+390788:lH390848|H390854
+390848:t2:A5:local,A8:web_tool
+390854:lA7:webtool|H390924
+390924:lH3909F8|H390A04
+3909F8:t2:H3905EC,H3905F4
+390A04:lN|N
+3905C4:t2:AD:$initial_call,H390614
+390614:t3:A3:gen,A7:init_it,H3905FC
+3905D0:t2:AA:$ancestors,H390624
+390624:lP<0.27.0>|N
+=proc_dictionary:<0.41.0>
+H36DF0C
+H36DF18
+=proc_stack:<0.41.0>
+36eda4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AA:supervisor
+y3:H36EA3C
+y4:A6:websup
+y5:P<0.33.0>
+36edc0:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H36DF24
+=proc_heap:<0.41.0>
+36EA3C:tA:A5:state,H36DF2C,AB:one_for_one,H36EA68,N,I100,I10,N,AB:webtool_sup,N
+36EA68:lH36EA70|N
+36EA70:t8:A5:child,P<0.48.0>,H36DF38,H36DF44,A9:permanent,I100,A6:worker,H36DF54
+36DF54:lA10:crashdump_viewer|N
+36DF44:t3:A10:crashdump_viewer,AA:start_link,N
+36DF38:t2:A5:local,A17:crashdump_viewer_server
+36DF2C:t2:A5:local,A6:websup
+36DF24:lAA:gen_server|H36DF84
+36DF84:lP<0.33.0>|H36DF94
+36DF94:lP<0.33.0>|H36DF9C
+36DF9C:lH36DFA4|H36DFB0
+36DFA4:t2:A5:local,A6:websup
+36DFB0:lAA:supervisor|H36DFB8
+36DFB8:lH36DFC0|H36DFD0
+36DFC0:t3:H36DF2C,AB:webtool_sup,N
+36DFD0:lN|N
+36DF0C:t2:AD:$initial_call,H36DF6C
+36DF6C:t3:A3:gen,A7:init_it,H36DF24
+36DF18:t2:AA:$ancestors,H36DF7C
+36DF7C:lA8:web_tool|H36DF8C
+36DF8C:lP<0.27.0>|N
+=proc_dictionary:<0.43.0>
+H39D940
+H39D94C
+=proc_stack:<0.43.0>
+3a42ac:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AA:supervisor
+y3:H3A3E34
+y4:A1A:httpd_sup__127_0_0_1__8888
+y5:P<0.33.0>
+3a42c8:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H39D9CC
+=proc_heap:<0.43.0>
+3A3E34:tA:A5:state,H39D960,AB:one_for_one,H3A3E20,N,I0,I1,N,A9:httpd_sup,H39DA88
+39DA88:lA9:undefined|H39DB18
+39DB18:lH39DB50|H39DB58
+39DB50:lH39DB88|H39DB94
+39DB88:t2:AB:server_root,H39DBD0
+39DBD0:lI47|H39DC0C
+39DC0C:lI99|H39DC50
+39DC50:lI108|H39DC84
+39DC84:lI101|H39DCC4
+39DCC4:lI97|H39DD28
+39DD28:lI114|H39DD90
+39DD90:lI99|H39DE00
+39DE00:lI97|H39DE78
+39DE78:lI115|H39DF00
+39DF00:lI101|H39DF90
+39DF90:lI47|H39E038
+39E038:lI111|H39E0E8
+39E0E8:lI116|H39E1AC
+39E1AC:lI112|H39E288
+39E288:lI47|H39E37C
+39E37C:lI101|H39E478
+39E478:lI114|H39E580
+39E580:lI116|H39E69C
+39E69C:lI115|H39E7B0
+39E7B0:lI47|H39E8C4
+39E8C4:lI108|H39E9D8
+39E9D8:lI105|H39EACC
+39EACC:lI98|H39EBC0
+39EBC0:lI47|H39ECB4
+39ECB4:lI119|H39EDA8
+39EDA8:lI101|H39EE7C
+39EE7C:lI98|H39EF50
+39EF50:lI116|H39F02C
+39F02C:lI111|H39F110
+39F110:lI111|H39F1E4
+39F1E4:lI108|H39F2B0
+39F2B0:lI47|H39F36C
+39F36C:lI112|H39F430
+39F430:lI114|H39F4FC
+39F4FC:lI105|H39F5C0
+39F5C0:lI118|H39F694
+39F694:lI47|H39F768
+39F768:lI114|H39F83C
+39F83C:lI111|H39F920
+39F920:lI111|H39F9FC
+39F9FC:lI116|N
+39DB94:lH39DBD8|H39DBE4
+39DBD8:t2:AD:document_root,H39DC14
+39DC14:lI47|H39DC58
+39DC58:lI99|H39DC8C
+39DC8C:lI108|H39DCCC
+39DCCC:lI101|H39DD30
+39DD30:lI97|H39DD98
+39DD98:lI114|H39DE08
+39DE08:lI99|H39DE80
+39DE80:lI97|H39DF08
+39DF08:lI115|H39DF98
+39DF98:lI101|H39E040
+39E040:lI47|H39E0F0
+39E0F0:lI111|H39E1B4
+39E1B4:lI116|H39E290
+39E290:lI112|H39E384
+39E384:lI47|H39E480
+39E480:lI101|H39E588
+39E588:lI114|H39E6A4
+39E6A4:lI116|H39E7B8
+39E7B8:lI115|H39E8CC
+39E8CC:lI47|H39E9E0
+39E9E0:lI108|H39EAD4
+39EAD4:lI105|H39EBC8
+39EBC8:lI98|H39ECBC
+39ECBC:lI47|H39EDB0
+39EDB0:lI119|H39EE84
+39EE84:lI101|H39EF58
+39EF58:lI98|H39F034
+39F034:lI116|H39F118
+39F118:lI111|H39F1EC
+39F1EC:lI111|H39F2B8
+39F2B8:lI108|H39F374
+39F374:lI47|H39F438
+39F438:lI112|H39F504
+39F504:lI114|H39F5C8
+39F5C8:lI105|H39F69C
+39F69C:lI118|H39F770
+39F770:lI47|H39F844
+39F844:lI114|H39F928
+39F928:lI111|H39FA04
+39FA04:lI111|H39FAD8
+39FAD8:lI116|H39FBB4
+39FBB4:lI47|H39FC80
+39FC80:lI100|H39FD44
+39FD44:lI111|H39FE10
+39FE10:lI99|N
+39DBE4:lH39DC1C|H39DC28
+39DC1C:t2:AA:mime_types,H39DC60
+39DC60:lH39DC94|H39DCA0
+39DC94:t2:H39DCD4,H39DCDC
+39DCDC:lI120|H39DD40
+39DD40:lI45|H39DDA8
+39DDA8:lI119|H39DE10
+39DE10:lI111|H39DE88
+39DE88:lI114|H39DF10
+39DF10:lI108|H39DFA0
+39DFA0:lI100|H39E048
+39E048:lI47|H39E0F8
+39E0F8:lI120|H39E1BC
+39E1BC:lI45|H39E298
+39E298:lI118|H39E38C
+39E38C:lI114|H39E488
+39E488:lI109|H39E590
+39E590:lI108|N
+39DCD4:lI119|H39DD38
+39DD38:lI114|H39DDA0
+39DDA0:lI108|N
+39DCA0:lH39DCE4|H39DCF0
+39DCE4:t2:H39DD48,H39DD50
+39DD50:lI120|H39DDB8
+39DDB8:lI45|H39DE20
+39DE20:lI119|H39DE98
+39DE98:lI111|H39DF18
+39DF18:lI114|H39DFA8
+39DFA8:lI108|H39E050
+39E050:lI100|H39E100
+39E100:lI47|H39E1C4
+39E1C4:lI120|H39E2A0
+39E2A0:lI45|H39E394
+39E394:lI118|H39E490
+39E490:lI114|H39E598
+39E598:lI109|H39E6AC
+39E6AC:lI108|N
+39DD48:lI118|H39DDB0
+39DDB0:lI114|H39DE18
+39DE18:lI109|H39DE90
+39DE90:lI108|N
+39DCF0:lH39DD58|H39DD64
+39DD58:t2:H39DDC0,H39DDC8
+39DDC8:lI120|H39DE30
+39DE30:lI45|H39DEA8
+39DEA8:lI99|H39DF20
+39DF20:lI111|H39DFB0
+39DFB0:lI110|H39E058
+39E058:lI102|H39E108
+39E108:lI101|H39E1CC
+39E1CC:lI114|H39E2A8
+39E2A8:lI101|H39E39C
+39E39C:lI110|H39E498
+39E498:lI99|H39E5A0
+39E5A0:lI101|H39E6B4
+39E6B4:lI47|H39E7C0
+39E7C0:lI120|H39E8D4
+39E8D4:lI45|H39E9E8
+39E9E8:lI99|H39EADC
+39EADC:lI111|H39EBD0
+39EBD0:lI111|H39ECC4
+39ECC4:lI108|H39EDB8
+39EDB8:lI116|H39EE8C
+39EE8C:lI97|H39EF60
+39EF60:lI108|H39F03C
+39F03C:lI107|N
+39DDC0:lI105|H39DE28
+39DE28:lI99|H39DEA0
+39DEA0:lI101|N
+39DD64:lH39DDD0|H39DDDC
+39DDD0:t2:H39DE38,H39DE40
+39DE40:lI118|H39DEB8
+39DEB8:lI105|H39DF30
+39DF30:lI100|H39DFC0
+39DFC0:lI101|H39E068
+39E068:lI111|H39E110
+39E110:lI47|H39E1D4
+39E1D4:lI120|H39E2B0
+39E2B0:lI45|H39E3A4
+39E3A4:lI115|H39E4A0
+39E4A0:lI103|H39E5A8
+39E5A8:lI105|H39E6BC
+39E6BC:lI45|H39E7C8
+39E7C8:lI109|H39E8DC
+39E8DC:lI111|H39E9F0
+39E9F0:lI118|H39EAE4
+39EAE4:lI105|H39EBD8
+39EBD8:lI101|N
+39DE38:lI109|H39DEB0
+39DEB0:lI111|H39DF28
+39DF28:lI118|H39DFB8
+39DFB8:lI105|H39E060
+39E060:lI101|N
+39DDDC:lH39DE48|H39DE54
+39DE48:t2:H39DEC0,H39DEC8
+39DEC8:lI118|H39DF40
+39DF40:lI105|H39DFD0
+39DFD0:lI100|H39E070
+39E070:lI101|H39E118
+39E118:lI111|H39E1DC
+39E1DC:lI47|H39E2B8
+39E2B8:lI120|H39E3AC
+39E3AC:lI45|H39E4A8
+39E4A8:lI109|H39E5B0
+39E5B0:lI115|H39E6C4
+39E6C4:lI118|H39E7D0
+39E7D0:lI105|H39E8E4
+39E8E4:lI100|H39E9F8
+39E9F8:lI101|H39EAEC
+39EAEC:lI111|N
+39DEC0:lI97|H39DF38
+39DF38:lI118|H39DFC8
+39DFC8:lI105|N
+39DE54:lH39DED0|H39DEDC
+39DED0:t2:H39DF48,H39DF50
+39DF50:lI118|H39DFE0
+39DFE0:lI105|H39E078
+39E078:lI100|H39E120
+39E120:lI101|H39E1E4
+39E1E4:lI111|H39E2C0
+39E2C0:lI47|H39E3B4
+39E3B4:lI113|H39E4B0
+39E4B0:lI117|H39E5B8
+39E5B8:lI105|H39E6CC
+39E6CC:lI99|H39E7D8
+39E7D8:lI107|H39E8EC
+39E8EC:lI116|H39EA00
+39EA00:lI105|H39EAF4
+39EAF4:lI109|H39EBE0
+39EBE0:lI101|N
+39DF48:lI113|H39DFD8
+39DFD8:lI116|N
+39DEDC:lH39DF58|H39DF64
+39DF58:t2:H39DFE8,H39DFF0
+39DFF0:lI118|H39E088
+39E088:lI105|H39E130
+39E130:lI100|H39E1EC
+39E1EC:lI101|H39E2C8
+39E2C8:lI111|H39E3BC
+39E3BC:lI47|H39E4B8
+39E4B8:lI113|H39E5C0
+39E5C0:lI117|H39E6D4
+39E6D4:lI105|H39E7E0
+39E7E0:lI99|H39E8F4
+39E8F4:lI107|H39EA08
+39EA08:lI116|H39EAFC
+39EAFC:lI105|H39EBE8
+39EBE8:lI109|H39ECCC
+39ECCC:lI101|N
+39DFE8:lI109|H39E080
+39E080:lI111|H39E128
+39E128:lI118|N
+39DF64:lH39DFF8|H39E004
+39DFF8:t2:H39E090,H39E098
+39E098:lI118|H39E140
+39E140:lI105|H39E1FC
+39E1FC:lI100|H39E2D8
+39E2D8:lI101|H39E3C4
+39E3C4:lI111|H39E4C0
+39E4C0:lI47|H39E5C8
+39E5C8:lI109|H39E6DC
+39E6DC:lI112|H39E7E8
+39E7E8:lI101|H39E8FC
+39E8FC:lI103|N
+39E090:lI109|H39E138
+39E138:lI112|H39E1F4
+39E1F4:lI101|H39E2D0
+39E2D0:lI103|N
+39E004:lH39E0A0|H39E0AC
+39E0A0:t2:H39E148,H39E150
+39E150:lI118|H39E20C
+39E20C:lI105|H39E2E8
+39E2E8:lI100|H39E3CC
+39E3CC:lI101|H39E4C8
+39E4C8:lI111|H39E5D0
+39E5D0:lI47|H39E6E4
+39E6E4:lI109|H39E7F0
+39E7F0:lI112|H39E904
+39E904:lI101|H39EA10
+39EA10:lI103|N
+39E148:lI109|H39E204
+39E204:lI112|H39E2E0
+39E2E0:lI103|N
+39E0AC:lH39E158|H39E164
+39E158:t2:H39E214,H39E21C
+39E21C:lI118|H39E2F8
+39E2F8:lI105|H39E3DC
+39E3DC:lI100|H39E4D0
+39E4D0:lI101|H39E5D8
+39E5D8:lI111|H39E6EC
+39E6EC:lI47|H39E7F8
+39E7F8:lI109|H39E90C
+39E90C:lI112|H39EA18
+39EA18:lI101|H39EB04
+39EB04:lI103|N
+39E214:lI109|H39E2F0
+39E2F0:lI112|H39E3D4
+39E3D4:lI101|N
+39E164:lH39E224|H39E230
+39E224:t2:H39E300,H39E308
+39E308:lI116|H39E3EC
+39E3EC:lI101|H39E4E0
+39E4E0:lI120|H39E5E8
+39E5E8:lI116|H39E6F4
+39E6F4:lI47|H39E800
+39E800:lI120|H39E914
+39E914:lI45|H39EA20
+39EA20:lI115|H39EB0C
+39EB0C:lI103|H39EBF0
+39EBF0:lI109|H39ECD4
+39ECD4:lI108|N
+39E300:lI115|H39E3E4
+39E3E4:lI103|H39E4D8
+39E4D8:lI109|H39E5E0
+39E5E0:lI108|N
+39E230:lH39E310|H39E31C
+39E310:t2:H39E3F4,H39E3FC
+39E3FC:lI116|H39E4F0
+39E4F0:lI101|H39E5F8
+39E5F8:lI120|H39E6FC
+39E6FC:lI116|H39E808
+39E808:lI47|H39E91C
+39E91C:lI120|H39EA28
+39EA28:lI45|H39EB14
+39EB14:lI115|H39EBF8
+39EBF8:lI103|H39ECDC
+39ECDC:lI109|H39EDC0
+39EDC0:lI108|N
+39E3F4:lI115|H39E4E8
+39E4E8:lI103|H39E5F0
+39E5F0:lI109|N
+39E31C:lH39E404|H39E410
+39E404:t2:H39E4F8,H39E500
+39E500:lI116|H39E608
+39E608:lI101|H39E70C
+39E70C:lI120|H39E810
+39E810:lI116|H39E924
+39E924:lI47|H39EA30
+39EA30:lI120|H39EB1C
+39EB1C:lI45|H39EC00
+39EC00:lI115|H39ECE4
+39ECE4:lI101|H39EDC8
+39EDC8:lI116|H39EE94
+39EE94:lI101|H39EF68
+39EF68:lI120|H39F044
+39F044:lI116|N
+39E4F8:lI101|H39E600
+39E600:lI116|H39E704
+39E704:lI120|N
+39E410:lH39E508|H39E514
+39E508:t2:H39E610,H39E618
+39E618:lI116|H39E71C
+39E71C:lI101|H39E820
+39E820:lI120|H39E92C
+39E92C:lI116|H39EA38
+39EA38:lI47|H39EB24
+39EB24:lI116|H39EC08
+39EC08:lI97|H39ECEC
+39ECEC:lI98|H39EDD0
+39EDD0:lI45|H39EE9C
+39EE9C:lI115|H39EF70
+39EF70:lI101|H39F04C
+39F04C:lI112|H39F120
+39F120:lI97|H39F1F4
+39F1F4:lI114|H39F2C0
+39F2C0:lI97|H39F37C
+39F37C:lI116|H39F440
+39F440:lI101|H39F50C
+39F50C:lI100|H39F5D0
+39F5D0:lI45|H39F6A4
+39F6A4:lI118|H39F778
+39F778:lI97|H39F84C
+39F84C:lI108|H39F930
+39F930:lI117|H39FA0C
+39FA0C:lI101|H39FAE0
+39FAE0:lI115|N
+39E610:lI116|H39E714
+39E714:lI115|H39E818
+39E818:lI118|N
+39E514:lH39E620|H39E62C
+39E620:t2:H39E724,H39E72C
+39E72C:lI116|H39E830
+39E830:lI101|H39E93C
+39E93C:lI120|H39EA40
+39EA40:lI116|H39EB2C
+39EB2C:lI47|H39EC10
+39EC10:lI114|H39ECF4
+39ECF4:lI105|H39EDD8
+39EDD8:lI99|H39EEA4
+39EEA4:lI104|H39EF78
+39EF78:lI116|H39F054
+39F054:lI101|H39F128
+39F128:lI120|H39F1FC
+39F1FC:lI116|N
+39E724:lI114|H39E828
+39E828:lI116|H39E934
+39E934:lI120|N
+39E62C:lH39E734|H39E740
+39E734:t2:H39E838,H39E840
+39E840:lI116|H39E94C
+39E94C:lI101|H39EA50
+39EA50:lI120|H39EB34
+39EB34:lI116|H39EC18
+39EC18:lI47|H39ECFC
+39ECFC:lI112|H39EDE0
+39EDE0:lI108|H39EEAC
+39EEAC:lI97|H39EF80
+39EF80:lI105|H39F05C
+39F05C:lI110|N
+39E838:lI116|H39E944
+39E944:lI120|H39EA48
+39EA48:lI116|N
+39E740:lH39E848|H39E854
+39E848:t2:H39E954,H39E95C
+39E95C:lI116|H39EA60
+39EA60:lI101|H39EB44
+39EB44:lI120|H39EC28
+39EC28:lI116|H39ED0C
+39ED0C:lI47|H39EDE8
+39EDE8:lI120|H39EEB4
+39EEB4:lI45|H39EF88
+39EF88:lI115|H39F064
+39F064:lI101|H39F130
+39F130:lI114|H39F204
+39F204:lI118|H39F2C8
+39F2C8:lI101|H39F384
+39F384:lI114|H39F448
+39F448:lI45|H39F514
+39F514:lI112|H39F5D8
+39F5D8:lI97|H39F6AC
+39F6AC:lI114|H39F780
+39F780:lI115|H39F854
+39F854:lI101|H39F938
+39F938:lI100|H39FA14
+39FA14:lI45|H39FAE8
+39FAE8:lI104|H39FBBC
+39FBBC:lI116|H39FC88
+39FC88:lI109|H39FD4C
+39FD4C:lI108|N
+39E954:lI115|H39EA58
+39EA58:lI104|H39EB3C
+39EB3C:lI116|H39EC20
+39EC20:lI109|H39ED04
+39ED04:lI108|N
+39E854:lH39E964|H39E970
+39E964:t2:H39EA68,H39EA70
+39EA70:lI116|H39EB54
+39EB54:lI101|H39EC38
+39EC38:lI120|H39ED1C
+39ED1C:lI116|H39EDF0
+39EDF0:lI47|H39EEBC
+39EEBC:lI104|H39EF90
+39EF90:lI116|H39F06C
+39F06C:lI109|H39F138
+39F138:lI108|N
+39EA68:lI104|H39EB4C
+39EB4C:lI116|H39EC30
+39EC30:lI109|H39ED14
+39ED14:lI108|N
+39E970:lH39EA78|H39EA84
+39EA78:t2:H39EB5C,H39EB64
+39EB64:lI116|H39EC48
+39EC48:lI101|H39ED2C
+39ED2C:lI120|H39EDF8
+39EDF8:lI116|H39EEC4
+39EEC4:lI47|H39EF98
+39EF98:lI104|H39F074
+39F074:lI116|H39F140
+39F140:lI109|H39F20C
+39F20C:lI108|N
+39EB5C:lI104|H39EC40
+39EC40:lI116|H39ED24
+39ED24:lI109|N
+39EA84:lH39EB6C|H39EB78
+39EB6C:t2:H39EC50,H39EC58
+39EC58:lI105|H39ED3C
+39ED3C:lI109|H39EE08
+39EE08:lI97|H39EECC
+39EECC:lI103|H39EFA0
+39EFA0:lI101|H39F07C
+39F07C:lI47|H39F148
+39F148:lI120|H39F214
+39F214:lI45|H39F2D0
+39F2D0:lI120|H39F38C
+39F38C:lI119|H39F450
+39F450:lI105|H39F51C
+39F51C:lI110|H39F5E0
+39F5E0:lI100|H39F6B4
+39F6B4:lI111|H39F788
+39F788:lI119|H39F85C
+39F85C:lI100|H39F940
+39F940:lI117|H39FA1C
+39FA1C:lI109|H39FAF0
+39FAF0:lI112|N
+39EC50:lI120|H39ED34
+39ED34:lI119|H39EE00
+39EE00:lI100|N
+39EB78:lH39EC60|H39EC6C
+39EC60:t2:H39ED44,H39ED4C
+39ED4C:lI105|H39EE18
+39EE18:lI109|H39EEDC
+39EEDC:lI97|H39EFA8
+39EFA8:lI103|H39F084
+39F084:lI101|H39F150
+39F150:lI47|H39F21C
+39F21C:lI120|H39F2D8
+39F2D8:lI45|H39F394
+39F394:lI120|H39F458
+39F458:lI112|H39F524
+39F524:lI105|H39F5E8
+39F5E8:lI120|H39F6BC
+39F6BC:lI109|H39F790
+39F790:lI97|H39F864
+39F864:lI112|N
+39ED44:lI120|H39EE10
+39EE10:lI112|H39EED4
+39EED4:lI109|N
+39EC6C:lH39ED54|H39ED60
+39ED54:t2:H39EE20,H39EE28
+39EE28:lI105|H39EEEC
+39EEEC:lI109|H39EFB8
+39EFB8:lI97|H39F08C
+39F08C:lI103|H39F158
+39F158:lI101|H39F224
+39F224:lI47|H39F2E0
+39F2E0:lI120|H39F39C
+39F39C:lI45|H39F460
+39F460:lI120|H39F52C
+39F52C:lI98|H39F5F0
+39F5F0:lI105|H39F6C4
+39F6C4:lI116|H39F798
+39F798:lI109|H39F86C
+39F86C:lI97|H39F948
+39F948:lI112|N
+39EE20:lI120|H39EEE4
+39EEE4:lI98|H39EFB0
+39EFB0:lI109|N
+39ED60:lH39EE30|H39EE3C
+39EE30:t2:H39EEF4,H39EEFC
+39EEFC:lI105|H39EFC8
+39EFC8:lI109|H39F09C
+39F09C:lI97|H39F160
+39F160:lI103|H39F22C
+39F22C:lI101|H39F2E8
+39F2E8:lI47|H39F3A4
+39F3A4:lI120|H39F468
+39F468:lI45|H39F534
+39F534:lI114|H39F5F8
+39F5F8:lI103|H39F6CC
+39F6CC:lI98|N
+39EEF4:lI114|H39EFC0
+39EFC0:lI103|H39F094
+39F094:lI98|N
+39EE3C:lH39EF04|H39EF10
+39EF04:t2:H39EFD0,H39EFD8
+39EFD8:lI105|H39F0AC
+39F0AC:lI109|H39F170
+39F170:lI97|H39F234
+39F234:lI103|H39F2F0
+39F2F0:lI101|H39F3AC
+39F3AC:lI47|H39F470
+39F470:lI120|H39F53C
+39F53C:lI45|H39F600
+39F600:lI112|H39F6D4
+39F6D4:lI111|H39F7A0
+39F7A0:lI114|H39F874
+39F874:lI116|H39F950
+39F950:lI97|H39FA24
+39FA24:lI98|H39FAF8
+39FAF8:lI108|H39FBC4
+39FBC4:lI101|H39FC90
+39FC90:lI45|H39FD54
+39FD54:lI112|H39FE18
+39FE18:lI105|H39FECC
+39FECC:lI120|H39FF88
+39FF88:lI109|H3A003C
+3A003C:lI97|H3A00E8
+3A00E8:lI112|N
+39EFD0:lI112|H39F0A4
+39F0A4:lI112|H39F168
+39F168:lI109|N
+39EF10:lH39EFE0|H39EFEC
+39EFE0:t2:H39F0B4,H39F0BC
+39F0BC:lI105|H39F180
+39F180:lI109|H39F244
+39F244:lI97|H39F2F8
+39F2F8:lI103|H39F3B4
+39F3B4:lI101|H39F478
+39F478:lI47|H39F544
+39F544:lI120|H39F608
+39F608:lI45|H39F6DC
+39F6DC:lI112|H39F7A8
+39F7A8:lI111|H39F87C
+39F87C:lI114|H39F958
+39F958:lI116|H39FA2C
+39FA2C:lI97|H39FB00
+39FB00:lI98|H39FBCC
+39FBCC:lI108|H39FC98
+39FC98:lI101|H39FD5C
+39FD5C:lI45|H39FE20
+39FE20:lI103|H39FED4
+39FED4:lI114|H39FF90
+39FF90:lI97|H3A0044
+3A0044:lI121|H3A00F0
+3A00F0:lI109|H3A0194
+3A0194:lI97|H3A0248
+3A0248:lI112|N
+39F0B4:lI112|H39F178
+39F178:lI103|H39F23C
+39F23C:lI109|N
+39EFEC:lH39F0C4|H39F0D0
+39F0C4:t2:H39F188,H39F190
+39F190:lI105|H39F254
+39F254:lI109|H39F308
+39F308:lI97|H39F3BC
+39F3BC:lI103|H39F480
+39F480:lI101|H39F54C
+39F54C:lI47|H39F610
+39F610:lI120|H39F6E4
+39F6E4:lI45|H39F7B0
+39F7B0:lI112|H39F884
+39F884:lI111|H39F960
+39F960:lI114|H39FA34
+39FA34:lI116|H39FB08
+39FB08:lI97|H39FBD4
+39FBD4:lI98|H39FCA0
+39FCA0:lI108|H39FD64
+39FD64:lI101|H39FE28
+39FE28:lI45|H39FEDC
+39FEDC:lI98|H39FF98
+39FF98:lI105|H3A004C
+3A004C:lI116|H3A00F8
+3A00F8:lI109|H3A019C
+3A019C:lI97|H3A0250
+3A0250:lI112|N
+39F188:lI112|H39F24C
+39F24C:lI98|H39F300
+39F300:lI109|N
+39F0D0:lH39F198|H39F1A4
+39F198:t2:H39F25C,H39F264
+39F264:lI105|H39F318
+39F318:lI109|H39F3CC
+39F3CC:lI97|H39F488
+39F488:lI103|H39F554
+39F554:lI101|H39F618
+39F618:lI47|H39F6EC
+39F6EC:lI120|H39F7B8
+39F7B8:lI45|H39F88C
+39F88C:lI112|H39F968
+39F968:lI111|H39FA3C
+39FA3C:lI114|H39FB10
+39FB10:lI116|H39FBDC
+39FBDC:lI97|H39FCA8
+39FCA8:lI98|H39FD6C
+39FD6C:lI108|H39FE30
+39FE30:lI101|H39FEE4
+39FEE4:lI45|H39FFA0
+39FFA0:lI97|H3A0054
+3A0054:lI110|H3A0100
+3A0100:lI121|H3A01A4
+3A01A4:lI109|H3A0258
+3A0258:lI97|H3A0304
+3A0304:lI112|N
+39F25C:lI112|H39F310
+39F310:lI110|H39F3C4
+39F3C4:lI109|N
+39F1A4:lH39F26C|H39F278
+39F26C:t2:H39F320,H39F328
+39F328:lI105|H39F3DC
+39F3DC:lI109|H39F498
+39F498:lI97|H39F55C
+39F55C:lI103|H39F620
+39F620:lI101|H39F6F4
+39F6F4:lI47|H39F7C0
+39F7C0:lI120|H39F894
+39F894:lI45|H39F970
+39F970:lI99|H39FA44
+39FA44:lI109|H39FB18
+39FB18:lI117|H39FBE4
+39FBE4:lI45|H39FCB0
+39FCB0:lI114|H39FD74
+39FD74:lI97|H39FE38
+39FE38:lI115|H39FEEC
+39FEEC:lI116|H39FFA8
+39FFA8:lI101|H3A005C
+3A005C:lI114|N
+39F320:lI114|H39F3D4
+39F3D4:lI97|H39F490
+39F490:lI115|N
+39F278:lH39F330|H39F33C
+39F330:t2:H39F3E4,H39F3EC
+39F3EC:lI105|H39F4A8
+39F4A8:lI109|H39F56C
+39F56C:lI97|H39F630
+39F630:lI103|H39F6FC
+39F6FC:lI101|H39F7C8
+39F7C8:lI47|H39F89C
+39F89C:lI116|H39F978
+39F978:lI105|H39FA4C
+39FA4C:lI102|H39FB20
+39FB20:lI102|N
+39F3E4:lI116|H39F4A0
+39F4A0:lI105|H39F564
+39F564:lI102|H39F628
+39F628:lI102|N
+39F33C:lH39F3F4|H39F400
+39F3F4:t2:H39F4B0,H39F4B8
+39F4B8:lI105|H39F57C
+39F57C:lI109|H39F640
+39F640:lI97|H39F704
+39F704:lI103|H39F7D0
+39F7D0:lI101|H39F8A4
+39F8A4:lI47|H39F980
+39F980:lI116|H39FA54
+39FA54:lI105|H39FB28
+39FB28:lI102|H39FBEC
+39FBEC:lI102|N
+39F4B0:lI116|H39F574
+39F574:lI105|H39F638
+39F638:lI102|N
+39F400:lH39F4C0|H39F4CC
+39F4C0:t2:H39F584,H39F58C
+39F58C:lI105|H39F650
+39F650:lI109|H39F714
+39F714:lI97|H39F7D8
+39F7D8:lI103|H39F8AC
+39F8AC:lI101|H39F988
+39F988:lI47|H39FA5C
+39FA5C:lI112|H39FB30
+39FB30:lI110|H39FBF4
+39FBF4:lI103|N
+39F584:lI112|H39F648
+39F648:lI110|H39F70C
+39F70C:lI103|N
+39F4CC:lH39F594|H39F5A0
+39F594:t2:H39F658,H39F660
+39F660:lI105|H39F724
+39F724:lI109|H39F7E8
+39F7E8:lI97|H39F8BC
+39F8BC:lI103|H39F990
+39F990:lI101|H39FA64
+39FA64:lI47|H39FB38
+39FB38:lI106|H39FBFC
+39FBFC:lI112|H39FCB8
+39FCB8:lI101|H39FD7C
+39FD7C:lI103|N
+39F658:lI106|H39F71C
+39F71C:lI112|H39F7E0
+39F7E0:lI101|H39F8B4
+39F8B4:lI103|N
+39F5A0:lH39F668|H39F674
+39F668:t2:H39F72C,H39F734
+39F734:lI105|H39F7F8
+39F7F8:lI109|H39F8CC
+39F8CC:lI97|H39F998
+39F998:lI103|H39FA6C
+39FA6C:lI101|H39FB40
+39FB40:lI47|H39FC04
+39FC04:lI106|H39FCC0
+39FCC0:lI112|H39FD84
+39FD84:lI101|H39FE40
+39FE40:lI103|N
+39F72C:lI106|H39F7F0
+39F7F0:lI112|H39F8C4
+39F8C4:lI103|N
+39F674:lH39F73C|H39F748
+39F73C:t2:H39F800,H39F808
+39F808:lI105|H39F8DC
+39F8DC:lI109|H39F9A8
+39F9A8:lI97|H39FA74
+39FA74:lI103|H39FB48
+39FB48:lI101|H39FC0C
+39FC0C:lI47|H39FCC8
+39FCC8:lI106|H39FD8C
+39FD8C:lI112|H39FE48
+39FE48:lI101|H39FEF4
+39FEF4:lI103|N
+39F800:lI106|H39F8D4
+39F8D4:lI112|H39F9A0
+39F9A0:lI101|N
+39F748:lH39F810|H39F81C
+39F810:t2:H39F8E4,H39F8EC
+39F8EC:lI105|H39F9B8
+39F9B8:lI109|H39FA84
+39FA84:lI97|H39FB50
+39FB50:lI103|H39FC14
+39FC14:lI101|H39FCD0
+39FCD0:lI47|H39FD94
+39FD94:lI105|H39FE50
+39FE50:lI101|H39FEFC
+39FEFC:lI102|N
+39F8E4:lI105|H39F9B0
+39F9B0:lI101|H39FA7C
+39FA7C:lI102|N
+39F81C:lH39F8F4|H39F900
+39F8F4:t2:H39F9C0,H39F9C8
+39F9C8:lI105|H39FA94
+39FA94:lI109|H39FB60
+39FB60:lI97|H39FC1C
+39FC1C:lI103|H39FCD8
+39FCD8:lI101|H39FD9C
+39FD9C:lI47|H39FE58
+39FE58:lI103|H39FF04
+39FF04:lI105|H39FFB0
+39FFB0:lI102|N
+39F9C0:lI103|H39FA8C
+39FA8C:lI105|H39FB58
+39FB58:lI102|N
+39F900:lH39F9D0|H39F9DC
+39F9D0:t2:H39FA9C,H39FAA4
+39FAA4:lI99|H39FB70
+39FB70:lI104|H39FC2C
+39FC2C:lI101|H39FCE0
+39FCE0:lI109|H39FDA4
+39FDA4:lI105|H39FE60
+39FE60:lI99|H39FF0C
+39FF0C:lI97|H39FFB8
+39FFB8:lI108|H3A0064
+3A0064:lI47|H3A0108
+3A0108:lI120|H3A01AC
+3A01AC:lI45|H3A0260
+3A0260:lI112|H3A030C
+3A030C:lI100|H3A03B8
+3A03B8:lI98|N
+39FA9C:lI112|H39FB68
+39FB68:lI100|H39FC24
+39FC24:lI98|N
+39F9DC:lH39FAAC|H39FAB8
+39FAAC:t2:H39FB78,H39FB80
+39FB80:lI99|H39FC3C
+39FC3C:lI104|H39FCF0
+39FCF0:lI101|H39FDAC
+39FDAC:lI109|H39FE68
+39FE68:lI105|H39FF14
+39FF14:lI99|H39FFC0
+39FFC0:lI97|H3A006C
+3A006C:lI108|H3A0110
+3A0110:lI47|H3A01B4
+3A01B4:lI120|H3A0268
+3A0268:lI45|H3A0314
+3A0314:lI112|H3A03C0
+3A03C0:lI100|H3A0454
+3A0454:lI98|N
+39FB78:lI120|H39FC34
+39FC34:lI121|H39FCE8
+39FCE8:lI122|N
+39FAB8:lH39FB88|H39FB94
+39FB88:t2:H39FC44,H39FC4C
+39FC4C:lI97|H39FD00
+39FD00:lI117|H39FDBC
+39FDBC:lI100|H39FE70
+39FE70:lI105|H39FF1C
+39FF1C:lI111|H39FFC8
+39FFC8:lI47|H3A0074
+3A0074:lI120|H3A0118
+3A0118:lI45|H3A01BC
+3A01BC:lI119|H3A0270
+3A0270:lI97|H3A031C
+3A031C:lI118|N
+39FC44:lI119|H39FCF8
+39FCF8:lI97|H39FDB4
+39FDB4:lI118|N
+39FB94:lH39FC54|H39FC60
+39FC54:t2:H39FD08,H39FD10
+39FD10:lI97|H39FDCC
+39FDCC:lI117|H39FE78
+39FE78:lI100|H39FF24
+39FF24:lI105|H39FFD0
+39FFD0:lI111|H3A007C
+3A007C:lI47|H3A0120
+3A0120:lI120|H3A01C4
+3A01C4:lI45|H3A0278
+3A0278:lI114|H3A0324
+3A0324:lI101|H3A03C8
+3A03C8:lI97|H3A045C
+3A045C:lI108|H3A04F8
+3A04F8:lI97|H3A059C
+3A059C:lI117|H3A0648
+3A0648:lI100|H3A06F4
+3A06F4:lI105|H3A07A0
+3A07A0:lI111|N
+39FD08:lI114|H39FDC4
+39FDC4:lI97|N
+39FC60:lH39FD18|H39FD24
+39FD18:t2:H39FDD4,H39FDDC
+39FDDC:lI97|H39FE88
+39FE88:lI117|H39FF34
+39FF34:lI100|H39FFD8
+39FFD8:lI105|H3A0084
+3A0084:lI111|H3A0128
+3A0128:lI47|H3A01CC
+3A01CC:lI120|H3A0280
+3A0280:lI45|H3A032C
+3A032C:lI112|H3A03D0
+3A03D0:lI110|H3A0464
+3A0464:lI45|H3A0500
+3A0500:lI114|H3A05A4
+3A05A4:lI101|H3A0650
+3A0650:lI97|H3A06FC
+3A06FC:lI108|H3A07A8
+3A07A8:lI97|H3A0844
+3A0844:lI117|H3A08D0
+3A08D0:lI100|H3A0964
+3A0964:lI105|H3A09F8
+3A09F8:lI111|H3A0A94
+3A0A94:lI45|H3A0B40
+3A0B40:lI112|H3A0BEC
+3A0BEC:lI108|H3A0CA8
+3A0CA8:lI117|H3A0D64
+3A0D64:lI103|H3A0E18
+3A0E18:lI105|H3A0ECC
+3A0ECC:lI110|N
+39FDD4:lI114|H39FE80
+39FE80:lI112|H39FF2C
+39FF2C:lI109|N
+39FD24:lH39FDE4|H39FDF0
+39FDE4:t2:H39FE90,H39FE98
+39FE98:lI97|H39FF44
+39FF44:lI117|H39FFE8
+39FFE8:lI100|H3A008C
+3A008C:lI105|H3A0130
+3A0130:lI111|H3A01D4
+3A01D4:lI47|H3A0288
+3A0288:lI120|H3A0334
+3A0334:lI45|H3A03D8
+3A03D8:lI112|H3A046C
+3A046C:lI110|H3A0508
+3A0508:lI45|H3A05AC
+3A05AC:lI114|H3A0658
+3A0658:lI101|H3A0704
+3A0704:lI97|H3A07B0
+3A07B0:lI108|H3A084C
+3A084C:lI97|H3A08D8
+3A08D8:lI117|H3A096C
+3A096C:lI100|H3A0A00
+3A0A00:lI105|H3A0A9C
+3A0A9C:lI111|N
+39FE90:lI114|H39FF3C
+39FF3C:lI97|H39FFE0
+39FFE0:lI109|N
+39FDF0:lH39FEA0|H39FEAC
+39FEA0:t2:H39FF4C,H39FF54
+39FF54:lI97|H39FFF8
+39FFF8:lI117|H3A009C
+3A009C:lI100|H3A0138
+3A0138:lI105|H3A01DC
+3A01DC:lI111|H3A0290
+3A0290:lI47|H3A033C
+3A033C:lI120|H3A03E0
+3A03E0:lI45|H3A0474
+3A0474:lI97|H3A0510
+3A0510:lI105|H3A05B4
+3A05B4:lI102|H3A0660
+3A0660:lI102|N
+39FF4C:lI97|H39FFF0
+39FFF0:lI105|H3A0094
+3A0094:lI102|N
+39FEAC:lH39FF5C|H39FF68
+39FF5C:t2:H3A0000,H3A0008
+3A0008:lI97|H3A00AC
+3A00AC:lI117|H3A0148
+3A0148:lI100|H3A01EC
+3A01EC:lI105|H3A0298
+3A0298:lI111|H3A0344
+3A0344:lI47|H3A03E8
+3A03E8:lI120|H3A047C
+3A047C:lI45|H3A0518
+3A0518:lI97|H3A05BC
+3A05BC:lI105|H3A0668
+3A0668:lI102|H3A070C
+3A070C:lI102|N
+3A0000:lI97|H3A00A4
+3A00A4:lI105|H3A0140
+3A0140:lI102|H3A01E4
+3A01E4:lI102|N
+39FF68:lH3A0010|H3A001C
+3A0010:t2:H3A00B4,H3A00BC
+3A00BC:lI97|H3A0158
+3A0158:lI117|H3A01FC
+3A01FC:lI100|H3A02A8
+3A02A8:lI105|H3A034C
+3A034C:lI111|H3A03F0
+3A03F0:lI47|H3A0484
+3A0484:lI120|H3A0520
+3A0520:lI45|H3A05C4
+3A05C4:lI97|H3A0670
+3A0670:lI105|H3A0714
+3A0714:lI102|H3A07B8
+3A07B8:lI102|N
+3A00B4:lI97|H3A0150
+3A0150:lI105|H3A01F4
+3A01F4:lI102|H3A02A0
+3A02A0:lI99|N
+3A001C:lH3A00C4|H3A00D0
+3A00C4:t2:H3A0160,H3A0168
+3A0168:lI97|H3A020C
+3A020C:lI117|H3A02B8
+3A02B8:lI100|H3A035C
+3A035C:lI105|H3A03F8
+3A03F8:lI111|H3A048C
+3A048C:lI47|H3A0528
+3A0528:lI109|H3A05CC
+3A05CC:lI112|H3A0678
+3A0678:lI101|H3A071C
+3A071C:lI103|N
+3A0160:lI109|H3A0204
+3A0204:lI112|H3A02B0
+3A02B0:lI103|H3A0354
+3A0354:lI97|N
+3A00D0:lH3A0170|H3A017C
+3A0170:t2:H3A0214,H3A021C
+3A021C:lI97|H3A02C8
+3A02C8:lI117|H3A036C
+3A036C:lI100|H3A0400
+3A0400:lI105|H3A0494
+3A0494:lI111|H3A0530
+3A0530:lI47|H3A05D4
+3A05D4:lI109|H3A0680
+3A0680:lI112|H3A0724
+3A0724:lI101|H3A07C0
+3A07C0:lI103|N
+3A0214:lI109|H3A02C0
+3A02C0:lI112|H3A0364
+3A0364:lI50|N
+3A017C:lH3A0224|H3A0230
+3A0224:t2:H3A02D0,H3A02D8
+3A02D8:lI97|H3A037C
+3A037C:lI117|H3A0408
+3A0408:lI100|H3A049C
+3A049C:lI105|H3A0538
+3A0538:lI111|H3A05DC
+3A05DC:lI47|H3A0688
+3A0688:lI98|H3A072C
+3A072C:lI97|H3A07C8
+3A07C8:lI115|H3A0854
+3A0854:lI105|H3A08E0
+3A08E0:lI99|N
+3A02D0:lI97|H3A0374
+3A0374:lI117|N
+3A0230:lH3A02E0|H3A02EC
+3A02E0:t2:H3A0384,H3A038C
+3A038C:lI97|H3A0418
+3A0418:lI117|H3A04AC
+3A04AC:lI100|H3A0540
+3A0540:lI105|H3A05E4
+3A05E4:lI111|H3A0690
+3A0690:lI47|H3A0734
+3A0734:lI98|H3A07D0
+3A07D0:lI97|H3A085C
+3A085C:lI115|H3A08E8
+3A08E8:lI105|H3A0974
+3A0974:lI99|N
+3A0384:lI115|H3A0410
+3A0410:lI110|H3A04A4
+3A04A4:lI100|N
+3A02EC:lH3A0394|H3A03A0
+3A0394:t2:H3A0420,H3A0428
+3A0428:lI97|H3A04BC
+3A04BC:lI112|H3A0550
+3A0550:lI112|H3A05EC
+3A05EC:lI108|H3A0698
+3A0698:lI105|H3A073C
+3A073C:lI99|H3A07D8
+3A07D8:lI97|H3A0864
+3A0864:lI116|H3A08F0
+3A08F0:lI105|H3A097C
+3A097C:lI111|H3A0A08
+3A0A08:lI110|H3A0AA4
+3A0AA4:lI47|H3A0B48
+3A0B48:lI122|H3A0BF4
+3A0BF4:lI105|H3A0CB0
+3A0CB0:lI112|N
+3A0420:lI122|H3A04B4
+3A04B4:lI105|H3A0548
+3A0548:lI112|N
+3A03A0:lH3A0430|H3A043C
+3A0430:t2:H3A04C4,H3A04CC
+3A04CC:lI97|H3A0560
+3A0560:lI112|H3A05FC
+3A05FC:lI112|H3A06A0
+3A06A0:lI108|H3A0744
+3A0744:lI105|H3A07E0
+3A07E0:lI99|H3A086C
+3A086C:lI97|H3A08F8
+3A08F8:lI116|H3A0984
+3A0984:lI105|H3A0A10
+3A0A10:lI111|H3A0AAC
+3A0AAC:lI110|H3A0B50
+3A0B50:lI47|H3A0BFC
+3A0BFC:lI120|H3A0CB8
+3A0CB8:lI45|H3A0D6C
+3A0D6C:lI119|H3A0E20
+3A0E20:lI97|H3A0ED4
+3A0ED4:lI105|H3A0F90
+3A0F90:lI115|H3A105C
+3A105C:lI45|H3A1130
+3A1130:lI115|H3A1204
+3A1204:lI111|H3A12D0
+3A12D0:lI117|H3A13A4
+3A13A4:lI114|H3A1480
+3A1480:lI99|H3A1564
+3A1564:lI101|N
+3A04C4:lI115|H3A0558
+3A0558:lI114|H3A05F4
+3A05F4:lI99|N
+3A043C:lH3A04D4|H3A04E0
+3A04D4:t2:H3A0568,H3A0570
+3A0570:lI97|H3A060C
+3A060C:lI112|H3A06B0
+3A06B0:lI112|H3A0754
+3A0754:lI108|H3A07F0
+3A07F0:lI105|H3A0874
+3A0874:lI99|H3A0900
+3A0900:lI97|H3A098C
+3A098C:lI116|H3A0A18
+3A0A18:lI105|H3A0AB4
+3A0AB4:lI111|H3A0B58
+3A0B58:lI110|H3A0C04
+3A0C04:lI47|H3A0CC0
+3A0CC0:lI120|H3A0D74
+3A0D74:lI45|H3A0E28
+3A0E28:lI117|H3A0EDC
+3A0EDC:lI115|H3A0F98
+3A0F98:lI116|H3A1064
+3A1064:lI97|H3A1138
+3A1138:lI114|N
+3A0568:lI117|H3A0604
+3A0604:lI115|H3A06A8
+3A06A8:lI116|H3A074C
+3A074C:lI97|H3A07E8
+3A07E8:lI114|N
+3A04E0:lH3A0578|H3A0584
+3A0578:t2:H3A0614,H3A061C
+3A061C:lI97|H3A06C0
+3A06C0:lI112|H3A075C
+3A075C:lI112|H3A07F8
+3A07F8:lI108|H3A087C
+3A087C:lI105|H3A0908
+3A0908:lI99|H3A0994
+3A0994:lI97|H3A0A20
+3A0A20:lI116|H3A0ABC
+3A0ABC:lI105|H3A0B60
+3A0B60:lI111|H3A0C0C
+3A0C0C:lI110|H3A0CC8
+3A0CC8:lI47|H3A0D7C
+3A0D7C:lI120|H3A0E30
+3A0E30:lI45|H3A0EE4
+3A0EE4:lI116|H3A0FA0
+3A0FA0:lI114|H3A106C
+3A106C:lI111|H3A1140
+3A1140:lI102|H3A120C
+3A120C:lI102|H3A12D8
+3A12D8:lI45|H3A13AC
+3A13AC:lI109|H3A1488
+3A1488:lI115|N
+3A0614:lI109|H3A06B8
+3A06B8:lI115|N
+3A0584:lH3A0624|H3A0630
+3A0624:t2:H3A06C8,H3A06D0
+3A06D0:lI97|H3A076C
+3A076C:lI112|H3A0800
+3A0800:lI112|H3A0884
+3A0884:lI108|H3A0910
+3A0910:lI105|H3A099C
+3A099C:lI99|H3A0A28
+3A0A28:lI97|H3A0AC4
+3A0AC4:lI116|H3A0B68
+3A0B68:lI105|H3A0C14
+3A0C14:lI111|H3A0CD0
+3A0CD0:lI110|H3A0D84
+3A0D84:lI47|H3A0E38
+3A0E38:lI120|H3A0EEC
+3A0EEC:lI45|H3A0FA8
+3A0FA8:lI116|H3A1074
+3A1074:lI114|H3A1148
+3A1148:lI111|H3A1214
+3A1214:lI102|H3A12E0
+3A12E0:lI102|H3A13B4
+3A13B4:lI45|H3A1490
+3A1490:lI109|H3A156C
+3A156C:lI101|N
+3A06C8:lI109|H3A0764
+3A0764:lI101|N
+3A0630:lH3A06D8|H3A06E4
+3A06D8:t2:H3A0774,H3A077C
+3A077C:lI97|H3A0810
+3A0810:lI112|H3A0894
+3A0894:lI112|H3A0918
+3A0918:lI108|H3A09A4
+3A09A4:lI105|H3A0A30
+3A0A30:lI99|H3A0ACC
+3A0ACC:lI97|H3A0B70
+3A0B70:lI116|H3A0C1C
+3A0C1C:lI105|H3A0CD8
+3A0CD8:lI111|H3A0D8C
+3A0D8C:lI110|H3A0E40
+3A0E40:lI47|H3A0EF4
+3A0EF4:lI120|H3A0FB0
+3A0FB0:lI45|H3A107C
+3A107C:lI116|H3A1150
+3A1150:lI114|H3A121C
+3A121C:lI111|H3A12E8
+3A12E8:lI102|H3A13BC
+3A13BC:lI102|H3A1498
+3A1498:lI45|H3A1574
+3A1574:lI109|H3A1648
+3A1648:lI97|H3A171C
+3A171C:lI110|N
+3A0774:lI109|H3A0808
+3A0808:lI97|H3A088C
+3A088C:lI110|N
+3A06E4:lH3A0784|H3A0790
+3A0784:t2:H3A0818,H3A0820
+3A0820:lI97|H3A089C
+3A089C:lI112|H3A0920
+3A0920:lI112|H3A09AC
+3A09AC:lI108|H3A0A38
+3A0A38:lI105|H3A0AD4
+3A0AD4:lI99|H3A0B78
+3A0B78:lI97|H3A0C24
+3A0C24:lI116|H3A0CE0
+3A0CE0:lI105|H3A0D94
+3A0D94:lI111|H3A0E48
+3A0E48:lI110|H3A0EFC
+3A0EFC:lI47|H3A0FB8
+3A0FB8:lI120|H3A1084
+3A1084:lI45|H3A1158
+3A1158:lI116|H3A1224
+3A1224:lI114|H3A12F0
+3A12F0:lI111|H3A13C4
+3A13C4:lI102|H3A14A0
+3A14A0:lI102|N
+3A0818:lI116|N
+3A0790:lH3A0828|H3A0834
+3A0828:t2:H3A08A4,H3A08AC
+3A08AC:lI97|H3A0930
+3A0930:lI112|H3A09B4
+3A09B4:lI112|H3A0A40
+3A0A40:lI108|H3A0ADC
+3A0ADC:lI105|H3A0B80
+3A0B80:lI99|H3A0C2C
+3A0C2C:lI97|H3A0CE8
+3A0CE8:lI116|H3A0D9C
+3A0D9C:lI105|H3A0E50
+3A0E50:lI111|H3A0F04
+3A0F04:lI110|H3A0FC0
+3A0FC0:lI47|H3A108C
+3A108C:lI120|H3A1160
+3A1160:lI45|H3A122C
+3A122C:lI116|H3A12F8
+3A12F8:lI114|H3A13CC
+3A13CC:lI111|H3A14A8
+3A14A8:lI102|H3A157C
+3A157C:lI102|N
+3A08A4:lI116|H3A0928
+3A0928:lI114|N
+3A0834:lH3A08B4|H3A08C0
+3A08B4:t2:H3A0938,H3A0940
+3A0940:lI97|H3A09C4
+3A09C4:lI112|H3A0A50
+3A0A50:lI112|H3A0AEC
+3A0AEC:lI108|H3A0B88
+3A0B88:lI105|H3A0C34
+3A0C34:lI99|H3A0CF0
+3A0CF0:lI97|H3A0DA4
+3A0DA4:lI116|H3A0E58
+3A0E58:lI105|H3A0F0C
+3A0F0C:lI111|H3A0FC8
+3A0FC8:lI110|H3A1094
+3A1094:lI47|H3A1168
+3A1168:lI120|H3A1234
+3A1234:lI45|H3A1300
+3A1300:lI116|H3A13D4
+3A13D4:lI114|H3A14B0
+3A14B0:lI111|H3A1584
+3A1584:lI102|H3A1650
+3A1650:lI102|N
+3A0938:lI114|H3A09BC
+3A09BC:lI111|H3A0A48
+3A0A48:lI102|H3A0AE4
+3A0AE4:lI102|N
+3A08C0:lH3A0948|H3A0954
+3A0948:t2:H3A09CC,H3A09D4
+3A09D4:lI97|H3A0A60
+3A0A60:lI112|H3A0AFC
+3A0AFC:lI112|H3A0B98
+3A0B98:lI108|H3A0C44
+3A0C44:lI105|H3A0D00
+3A0D00:lI99|H3A0DB4
+3A0DB4:lI97|H3A0E60
+3A0E60:lI116|H3A0F14
+3A0F14:lI105|H3A0FD0
+3A0FD0:lI111|H3A109C
+3A109C:lI110|H3A1170
+3A1170:lI47|H3A123C
+3A123C:lI120|H3A1308
+3A1308:lI45|H3A13DC
+3A13DC:lI116|H3A14B8
+3A14B8:lI101|H3A158C
+3A158C:lI120|H3A1658
+3A1658:lI105|H3A1724
+3A1724:lI110|H3A17E8
+3A17E8:lI102|H3A18AC
+3A18AC:lI111|N
+3A09CC:lI116|H3A0A58
+3A0A58:lI101|H3A0AF4
+3A0AF4:lI120|H3A0B90
+3A0B90:lI105|H3A0C3C
+3A0C3C:lI110|H3A0CF8
+3A0CF8:lI102|H3A0DAC
+3A0DAC:lI111|N
+3A0954:lH3A09DC|H3A09E8
+3A09DC:t2:H3A0A68,H3A0A70
+3A0A70:lI97|H3A0B0C
+3A0B0C:lI112|H3A0BA8
+3A0BA8:lI112|H3A0C54
+3A0C54:lI108|H3A0D08
+3A0D08:lI105|H3A0DBC
+3A0DBC:lI99|H3A0E68
+3A0E68:lI97|H3A0F1C
+3A0F1C:lI116|H3A0FD8
+3A0FD8:lI105|H3A10A4
+3A10A4:lI111|H3A1178
+3A1178:lI110|H3A1244
+3A1244:lI47|H3A1310
+3A1310:lI120|H3A13E4
+3A13E4:lI45|H3A14C0
+3A14C0:lI116|H3A1594
+3A1594:lI101|H3A1660
+3A1660:lI120|H3A172C
+3A172C:lI105|H3A17F0
+3A17F0:lI110|H3A18B4
+3A18B4:lI102|H3A1970
+3A1970:lI111|N
+3A0A68:lI116|H3A0B04
+3A0B04:lI101|H3A0BA0
+3A0BA0:lI120|H3A0C4C
+3A0C4C:lI105|N
+3A09E8:lH3A0A78|H3A0A84
+3A0A78:t2:H3A0B14,H3A0B1C
+3A0B1C:lI97|H3A0BB8
+3A0BB8:lI112|H3A0C64
+3A0C64:lI112|H3A0D10
+3A0D10:lI108|H3A0DC4
+3A0DC4:lI105|H3A0E70
+3A0E70:lI99|H3A0F24
+3A0F24:lI97|H3A0FE0
+3A0FE0:lI116|H3A10AC
+3A10AC:lI105|H3A1180
+3A1180:lI111|H3A124C
+3A124C:lI110|H3A1318
+3A1318:lI47|H3A13EC
+3A13EC:lI120|H3A14C8
+3A14C8:lI45|H3A159C
+3A159C:lI116|H3A1668
+3A1668:lI101|H3A1734
+3A1734:lI120|N
+3A0B14:lI116|H3A0BB0
+3A0BB0:lI101|H3A0C5C
+3A0C5C:lI120|N
+3A0A84:lH3A0B24|H3A0B30
+3A0B24:t2:H3A0BC0,H3A0BC8
+3A0BC8:lI97|H3A0C74
+3A0C74:lI112|H3A0D20
+3A0D20:lI112|H3A0DCC
+3A0DCC:lI108|H3A0E78
+3A0E78:lI105|H3A0F2C
+3A0F2C:lI99|H3A0FE8
+3A0FE8:lI97|H3A10B4
+3A10B4:lI116|H3A1188
+3A1188:lI105|H3A1254
+3A1254:lI111|H3A1320
+3A1320:lI110|H3A13F4
+3A13F4:lI47|H3A14D0
+3A14D0:lI120|H3A15A4
+3A15A4:lI45|H3A1670
+3A1670:lI116|H3A173C
+3A173C:lI99|H3A17F8
+3A17F8:lI108|N
+3A0BC0:lI116|H3A0C6C
+3A0C6C:lI99|H3A0D18
+3A0D18:lI108|N
+3A0B30:lH3A0BD0|H3A0BDC
+3A0BD0:t2:H3A0C7C,H3A0C84
+3A0C84:lI97|H3A0D30
+3A0D30:lI112|H3A0DDC
+3A0DDC:lI112|H3A0E80
+3A0E80:lI108|H3A0F34
+3A0F34:lI105|H3A0FF0
+3A0FF0:lI99|H3A10BC
+3A10BC:lI97|H3A1190
+3A1190:lI116|H3A125C
+3A125C:lI105|H3A1328
+3A1328:lI111|H3A13FC
+3A13FC:lI110|H3A14D8
+3A14D8:lI47|H3A15AC
+3A15AC:lI120|H3A1678
+3A1678:lI45|H3A1744
+3A1744:lI116|H3A1800
+3A1800:lI97|H3A18BC
+3A18BC:lI114|N
+3A0C7C:lI116|H3A0D28
+3A0D28:lI97|H3A0DD4
+3A0DD4:lI114|N
+3A0BDC:lH3A0C8C|H3A0C98
+3A0C8C:t2:H3A0D38,H3A0D40
+3A0D40:lI97|H3A0DEC
+3A0DEC:lI112|H3A0E90
+3A0E90:lI112|H3A0F44
+3A0F44:lI108|H3A1000
+3A1000:lI105|H3A10CC
+3A10CC:lI99|H3A1198
+3A1198:lI97|H3A1264
+3A1264:lI116|H3A1330
+3A1330:lI105|H3A1404
+3A1404:lI111|H3A14E0
+3A14E0:lI110|H3A15B4
+3A15B4:lI47|H3A1680
+3A1680:lI120|H3A174C
+3A174C:lI45|H3A1808
+3A1808:lI115|H3A18C4
+3A18C4:lI118|H3A1978
+3A1978:lI52|H3A1A2C
+3A1A2C:lI99|H3A1AE0
+3A1AE0:lI114|H3A1BA4
+3A1BA4:lI99|N
+3A0D38:lI115|H3A0DE4
+3A0DE4:lI118|H3A0E88
+3A0E88:lI52|H3A0F3C
+3A0F3C:lI99|H3A0FF8
+3A0FF8:lI114|H3A10C4
+3A10C4:lI99|N
+3A0C98:lH3A0D48|H3A0D54
+3A0D48:t2:H3A0DF4,H3A0DFC
+3A0DFC:lI97|H3A0EA0
+3A0EA0:lI112|H3A0F54
+3A0F54:lI112|H3A1010
+3A1010:lI108|H3A10DC
+3A10DC:lI105|H3A11A8
+3A11A8:lI99|H3A1274
+3A1274:lI97|H3A1338
+3A1338:lI116|H3A140C
+3A140C:lI105|H3A14E8
+3A14E8:lI111|H3A15BC
+3A15BC:lI110|H3A1688
+3A1688:lI47|H3A1754
+3A1754:lI120|H3A1810
+3A1810:lI45|H3A18CC
+3A18CC:lI115|H3A1980
+3A1980:lI118|H3A1A34
+3A1A34:lI52|H3A1AE8
+3A1AE8:lI99|H3A1BAC
+3A1BAC:lI112|H3A1C78
+3A1C78:lI105|H3A1D3C
+3A1D3C:lI111|N
+3A0DF4:lI115|H3A0E98
+3A0E98:lI118|H3A0F4C
+3A0F4C:lI52|H3A1008
+3A1008:lI99|H3A10D4
+3A10D4:lI112|H3A11A0
+3A11A0:lI105|H3A126C
+3A126C:lI111|N
+3A0D54:lH3A0E04|H3A0E10
+3A0E04:t2:H3A0EA8,H3A0EB0
+3A0EB0:lI97|H3A0F64
+3A0F64:lI112|H3A1020
+3A1020:lI112|H3A10E4
+3A10E4:lI108|H3A11B0
+3A11B0:lI105|H3A127C
+3A127C:lI99|H3A1340
+3A1340:lI97|H3A1414
+3A1414:lI116|H3A14F0
+3A14F0:lI105|H3A15C4
+3A15C4:lI111|H3A1690
+3A1690:lI110|H3A175C
+3A175C:lI47|H3A1818
+3A1818:lI120|H3A18D4
+3A18D4:lI45|H3A1988
+3A1988:lI115|H3A1A3C
+3A1A3C:lI116|H3A1AF0
+3A1AF0:lI117|H3A1BB4
+3A1BB4:lI102|H3A1C80
+3A1C80:lI102|H3A1D44
+3A1D44:lI105|H3A1E00
+3A1E00:lI116|N
+3A0EA8:lI115|H3A0F5C
+3A0F5C:lI105|H3A1018
+3A1018:lI116|N
+3A0E10:lH3A0EB8|H3A0EC4
+3A0EB8:t2:H3A0F6C,H3A0F74
+3A0F74:lI97|H3A1030
+3A1030:lI112|H3A10F4
+3A10F4:lI112|H3A11C0
+3A11C0:lI108|H3A1284
+3A1284:lI105|H3A1348
+3A1348:lI99|H3A141C
+3A141C:lI97|H3A14F8
+3A14F8:lI116|H3A15CC
+3A15CC:lI105|H3A1698
+3A1698:lI111|H3A1764
+3A1764:lI110|H3A1820
+3A1820:lI47|H3A18DC
+3A18DC:lI120|H3A1990
+3A1990:lI45|H3A1A44
+3A1A44:lI115|H3A1AF8
+3A1AF8:lI104|H3A1BBC
+3A1BBC:lI97|H3A1C88
+3A1C88:lI114|N
+3A0F6C:lI115|H3A1028
+3A1028:lI104|H3A10EC
+3A10EC:lI97|H3A11B8
+3A11B8:lI114|N
+3A0EC4:lH3A0F7C|H3A0F88
+3A0F7C:t2:H3A1038,H3A1040
+3A1040:lI97|H3A1104
+3A1104:lI112|H3A11C8
+3A11C8:lI112|H3A128C
+3A128C:lI108|H3A1350
+3A1350:lI105|H3A1424
+3A1424:lI99|H3A1500
+3A1500:lI97|H3A15D4
+3A15D4:lI116|H3A16A0
+3A16A0:lI105|H3A176C
+3A176C:lI111|H3A1828
+3A1828:lI110|H3A18E4
+3A18E4:lI47|H3A1998
+3A1998:lI120|H3A1A4C
+3A1A4C:lI45|H3A1B00
+3A1B00:lI115|H3A1BC4
+3A1BC4:lI104|N
+3A1038:lI115|H3A10FC
+3A10FC:lI104|N
+3A0F88:lH3A1048|H3A1054
+3A1048:t2:H3A110C,H3A1114
+3A1114:lI97|H3A11D8
+3A11D8:lI112|H3A1294
+3A1294:lI112|H3A1358
+3A1358:lI108|H3A142C
+3A142C:lI105|H3A1508
+3A1508:lI99|H3A15DC
+3A15DC:lI97|H3A16A8
+3A16A8:lI116|H3A1774
+3A1774:lI105|H3A1830
+3A1830:lI111|H3A18EC
+3A18EC:lI110|H3A19A0
+3A19A0:lI47|H3A1A54
+3A1A54:lI120|H3A1B08
+3A1B08:lI45|H3A1BCC
+3A1BCC:lI110|H3A1C90
+3A1C90:lI101|H3A1D4C
+3A1D4C:lI116|H3A1E08
+3A1E08:lI99|H3A1EC4
+3A1EC4:lI100|H3A1F88
+3A1F88:lI102|N
+3A110C:lI110|H3A11D0
+3A11D0:lI99|N
+3A1054:lH3A111C|H3A1128
+3A111C:t2:H3A11E0,H3A11E8
+3A11E8:lI97|H3A12A4
+3A12A4:lI112|H3A1368
+3A1368:lI112|H3A1434
+3A1434:lI108|H3A1510
+3A1510:lI105|H3A15E4
+3A15E4:lI99|H3A16B0
+3A16B0:lI97|H3A177C
+3A177C:lI116|H3A1838
+3A1838:lI105|H3A18F4
+3A18F4:lI111|H3A19A8
+3A19A8:lI110|H3A1A5C
+3A1A5C:lI47|H3A1B10
+3A1B10:lI120|H3A1BD4
+3A1BD4:lI45|H3A1C98
+3A1C98:lI110|H3A1D54
+3A1D54:lI101|H3A1E10
+3A1E10:lI116|H3A1ECC
+3A1ECC:lI99|H3A1F90
+3A1F90:lI100|H3A2044
+3A2044:lI102|N
+3A11E0:lI99|H3A129C
+3A129C:lI100|H3A1360
+3A1360:lI102|N
+3A1128:lH3A11F0|H3A11FC
+3A11F0:t2:H3A12AC,H3A12B4
+3A12B4:lI97|H3A1378
+3A1378:lI112|H3A1444
+3A1444:lI112|H3A1518
+3A1518:lI108|H3A15EC
+3A15EC:lI105|H3A16B8
+3A16B8:lI99|H3A1784
+3A1784:lI97|H3A1840
+3A1840:lI116|H3A18FC
+3A18FC:lI105|H3A19B0
+3A19B0:lI111|H3A1A64
+3A1A64:lI110|H3A1B18
+3A1B18:lI47|H3A1BDC
+3A1BDC:lI120|H3A1CA0
+3A1CA0:lI45|H3A1D5C
+3A1D5C:lI109|H3A1E18
+3A1E18:lI105|H3A1ED4
+3A1ED4:lI102|N
+3A12AC:lI109|H3A1370
+3A1370:lI105|H3A143C
+3A143C:lI102|N
+3A11FC:lH3A12BC|H3A12C8
+3A12BC:t2:H3A1380,H3A1388
+3A1388:lI97|H3A1454
+3A1454:lI112|H3A1528
+3A1528:lI112|H3A15FC
+3A15FC:lI108|H3A16C8
+3A16C8:lI105|H3A178C
+3A178C:lI99|H3A1848
+3A1848:lI97|H3A1904
+3A1904:lI116|H3A19B8
+3A19B8:lI105|H3A1A6C
+3A1A6C:lI111|H3A1B20
+3A1B20:lI110|H3A1BE4
+3A1BE4:lI47|H3A1CA8
+3A1CA8:lI120|H3A1D64
+3A1D64:lI45|H3A1E20
+3A1E20:lI108|H3A1EDC
+3A1EDC:lI97|H3A1F98
+3A1F98:lI116|H3A204C
+3A204C:lI101|H3A2108
+3A2108:lI120|N
+3A1380:lI108|H3A144C
+3A144C:lI97|H3A1520
+3A1520:lI116|H3A15F4
+3A15F4:lI101|H3A16C0
+3A16C0:lI120|N
+3A12C8:lH3A1390|H3A139C
+3A1390:t2:H3A145C,H3A1464
+3A1464:lI97|H3A1538
+3A1538:lI112|H3A160C
+3A160C:lI112|H3A16D0
+3A16D0:lI108|H3A1794
+3A1794:lI105|H3A1850
+3A1850:lI99|H3A190C
+3A190C:lI97|H3A19C0
+3A19C0:lI116|H3A1A74
+3A1A74:lI105|H3A1B28
+3A1B28:lI111|H3A1BEC
+3A1BEC:lI110|H3A1CB0
+3A1CB0:lI47|H3A1D6C
+3A1D6C:lI120|H3A1E28
+3A1E28:lI45|H3A1EE4
+3A1EE4:lI107|H3A1FA0
+3A1FA0:lI111|H3A2054
+3A2054:lI97|H3A2110
+3A2110:lI110|N
+3A145C:lI115|H3A1530
+3A1530:lI107|H3A1604
+3A1604:lI112|N
+3A139C:lH3A146C|H3A1478
+3A146C:t2:H3A1540,H3A1548
+3A1548:lI97|H3A161C
+3A161C:lI112|H3A16E0
+3A16E0:lI112|H3A179C
+3A179C:lI108|H3A1858
+3A1858:lI105|H3A1914
+3A1914:lI99|H3A19C8
+3A19C8:lI97|H3A1A7C
+3A1A7C:lI116|H3A1B30
+3A1B30:lI105|H3A1BF4
+3A1BF4:lI111|H3A1CB8
+3A1CB8:lI110|H3A1D74
+3A1D74:lI47|H3A1E30
+3A1E30:lI120|H3A1EEC
+3A1EEC:lI45|H3A1FA8
+3A1FA8:lI107|H3A205C
+3A205C:lI111|H3A2118
+3A2118:lI97|H3A21CC
+3A21CC:lI110|N
+3A1540:lI115|H3A1614
+3A1614:lI107|H3A16D8
+3A16D8:lI100|N
+3A1478:lH3A1550|H3A155C
+3A1550:t2:H3A1624,H3A162C
+3A162C:lI97|H3A16F0
+3A16F0:lI112|H3A17AC
+3A17AC:lI112|H3A1860
+3A1860:lI108|H3A191C
+3A191C:lI105|H3A19D0
+3A19D0:lI99|H3A1A84
+3A1A84:lI97|H3A1B38
+3A1B38:lI116|H3A1BFC
+3A1BFC:lI105|H3A1CC0
+3A1CC0:lI111|H3A1D7C
+3A1D7C:lI110|H3A1E38
+3A1E38:lI47|H3A1EF4
+3A1EF4:lI120|H3A1FB0
+3A1FB0:lI45|H3A2064
+3A2064:lI107|H3A2120
+3A2120:lI111|H3A21D4
+3A21D4:lI97|H3A2288
+3A2288:lI110|N
+3A1624:lI115|H3A16E8
+3A16E8:lI107|H3A17A4
+3A17A4:lI116|N
+3A155C:lH3A1634|H3A1640
+3A1634:t2:H3A16F8,H3A1700
+3A1700:lI97|H3A17BC
+3A17BC:lI112|H3A1870
+3A1870:lI112|H3A1924
+3A1924:lI108|H3A19D8
+3A19D8:lI105|H3A1A8C
+3A1A8C:lI99|H3A1B40
+3A1B40:lI97|H3A1C04
+3A1C04:lI116|H3A1CC8
+3A1CC8:lI105|H3A1D84
+3A1D84:lI111|H3A1E40
+3A1E40:lI110|H3A1EFC
+3A1EFC:lI47|H3A1FB8
+3A1FB8:lI120|H3A206C
+3A206C:lI45|H3A2128
+3A2128:lI107|H3A21DC
+3A21DC:lI111|H3A2290
+3A2290:lI97|H3A234C
+3A234C:lI110|N
+3A16F8:lI115|H3A17B4
+3A17B4:lI107|H3A1868
+3A1868:lI109|N
+3A1640:lH3A1708|H3A1714
+3A1708:t2:H3A17C4,H3A17CC
+3A17CC:lI97|H3A1880
+3A1880:lI112|H3A1934
+3A1934:lI112|H3A19E0
+3A19E0:lI108|H3A1A94
+3A1A94:lI105|H3A1B48
+3A1B48:lI99|H3A1C0C
+3A1C0C:lI97|H3A1CD0
+3A1CD0:lI116|H3A1D8C
+3A1D8C:lI105|H3A1E48
+3A1E48:lI111|H3A1F04
+3A1F04:lI110|H3A1FC0
+3A1FC0:lI47|H3A2074
+3A2074:lI120|H3A2130
+3A2130:lI45|H3A21E4
+3A21E4:lI104|H3A2298
+3A2298:lI116|H3A2354
+3A2354:lI116|H3A2410
+3A2410:lI112|H3A24C4
+3A24C4:lI100|H3A2580
+3A2580:lI45|H3A263C
+3A263C:lI99|H3A2700
+3A2700:lI103|H3A27BC
+3A27BC:lI105|N
+3A17C4:lI99|H3A1878
+3A1878:lI103|H3A192C
+3A192C:lI105|N
+3A1714:lH3A17D4|H3A17E0
+3A17D4:t2:H3A1888,H3A1890
+3A1890:lI97|H3A1944
+3A1944:lI112|H3A19F0
+3A19F0:lI112|H3A1A9C
+3A1A9C:lI108|H3A1B50
+3A1B50:lI105|H3A1C14
+3A1C14:lI99|H3A1CD8
+3A1CD8:lI97|H3A1D94
+3A1D94:lI116|H3A1E50
+3A1E50:lI105|H3A1F0C
+3A1F0C:lI111|H3A1FC8
+3A1FC8:lI110|H3A207C
+3A207C:lI47|H3A2138
+3A2138:lI120|H3A21EC
+3A21EC:lI45|H3A22A0
+3A22A0:lI104|H3A235C
+3A235C:lI100|H3A2418
+3A2418:lI102|N
+3A1888:lI104|H3A193C
+3A193C:lI100|H3A19E8
+3A19E8:lI102|N
+3A17E0:lH3A1898|H3A18A4
+3A1898:t2:H3A194C,H3A1954
+3A1954:lI97|H3A1A00
+3A1A00:lI112|H3A1AA4
+3A1AA4:lI112|H3A1B58
+3A1B58:lI108|H3A1C1C
+3A1C1C:lI105|H3A1CE0
+3A1CE0:lI99|H3A1D9C
+3A1D9C:lI97|H3A1E58
+3A1E58:lI116|H3A1F14
+3A1F14:lI105|H3A1FD0
+3A1FD0:lI111|H3A2084
+3A2084:lI110|H3A2140
+3A2140:lI47|H3A21F4
+3A21F4:lI120|H3A22A8
+3A22A8:lI45|H3A2364
+3A2364:lI103|H3A2420
+3A2420:lI122|H3A24CC
+3A24CC:lI105|H3A2588
+3A2588:lI112|N
+3A194C:lI103|H3A19F8
+3A19F8:lI122|N
+3A18A4:lH3A195C|H3A1968
+3A195C:t2:H3A1A08,H3A1A10
+3A1A10:lI97|H3A1AB4
+3A1AB4:lI112|H3A1B68
+3A1B68:lI112|H3A1C2C
+3A1C2C:lI108|H3A1CE8
+3A1CE8:lI105|H3A1DA4
+3A1DA4:lI99|H3A1E60
+3A1E60:lI97|H3A1F1C
+3A1F1C:lI116|H3A1FD8
+3A1FD8:lI105|H3A208C
+3A208C:lI111|H3A2148
+3A2148:lI110|H3A21FC
+3A21FC:lI47|H3A22B0
+3A22B0:lI120|H3A236C
+3A236C:lI45|H3A2428
+3A2428:lI103|H3A24D4
+3A24D4:lI116|H3A2590
+3A2590:lI97|H3A2644
+3A2644:lI114|N
+3A1A08:lI103|H3A1AAC
+3A1AAC:lI116|H3A1B60
+3A1B60:lI97|H3A1C24
+3A1C24:lI114|N
+3A1968:lH3A1A18|H3A1A24
+3A1A18:t2:H3A1ABC,H3A1AC4
+3A1AC4:lI97|H3A1B78
+3A1B78:lI112|H3A1C3C
+3A1C3C:lI112|H3A1CF0
+3A1CF0:lI108|H3A1DAC
+3A1DAC:lI105|H3A1E68
+3A1E68:lI99|H3A1F24
+3A1F24:lI97|H3A1FE0
+3A1FE0:lI116|H3A2094
+3A2094:lI105|H3A2150
+3A2150:lI111|H3A2204
+3A2204:lI110|H3A22B8
+3A22B8:lI47|H3A2374
+3A2374:lI120|H3A2430
+3A2430:lI45|H3A24DC
+3A24DC:lI100|H3A2598
+3A2598:lI118|H3A264C
+3A264C:lI105|N
+3A1ABC:lI100|H3A1B70
+3A1B70:lI118|H3A1C34
+3A1C34:lI105|N
+3A1A24:lH3A1ACC|H3A1AD8
+3A1ACC:t2:H3A1B80,H3A1B88
+3A1B88:lI97|H3A1C4C
+3A1C4C:lI112|H3A1D00
+3A1D00:lI112|H3A1DB4
+3A1DB4:lI108|H3A1E70
+3A1E70:lI105|H3A1F2C
+3A1F2C:lI99|H3A1FE8
+3A1FE8:lI97|H3A209C
+3A209C:lI116|H3A2158
+3A2158:lI105|H3A220C
+3A220C:lI111|H3A22C0
+3A22C0:lI110|H3A237C
+3A237C:lI47|H3A2438
+3A2438:lI120|H3A24E4
+3A24E4:lI45|H3A25A0
+3A25A0:lI100|H3A2654
+3A2654:lI105|H3A2708
+3A2708:lI114|H3A27C4
+3A27C4:lI101|H3A2880
+3A2880:lI99|H3A2944
+3A2944:lI116|H3A2A10
+3A2A10:lI111|H3A2ADC
+3A2ADC:lI114|N
+3A1B80:lI100|H3A1C44
+3A1C44:lI99|H3A1CF8
+3A1CF8:lI114|N
+3A1AD8:lH3A1B90|H3A1B9C
+3A1B90:t2:H3A1C54,H3A1C5C
+3A1C5C:lI97|H3A1D10
+3A1D10:lI112|H3A1DC4
+3A1DC4:lI112|H3A1E78
+3A1E78:lI108|H3A1F34
+3A1F34:lI105|H3A1FF0
+3A1FF0:lI99|H3A20A4
+3A20A4:lI97|H3A2160
+3A2160:lI116|H3A2214
+3A2214:lI105|H3A22C8
+3A22C8:lI111|H3A2384
+3A2384:lI110|H3A2440
+3A2440:lI47|H3A24EC
+3A24EC:lI120|H3A25A8
+3A25A8:lI45|H3A265C
+3A265C:lI100|H3A2710
+3A2710:lI105|H3A27CC
+3A27CC:lI114|H3A2888
+3A2888:lI101|H3A294C
+3A294C:lI99|H3A2A18
+3A2A18:lI116|H3A2AE4
+3A2AE4:lI111|H3A2BB0
+3A2BB0:lI114|N
+3A1C54:lI100|H3A1D08
+3A1D08:lI105|H3A1DBC
+3A1DBC:lI114|N
+3A1B9C:lH3A1C64|H3A1C70
+3A1C64:t2:H3A1D18,H3A1D20
+3A1D20:lI97|H3A1DD4
+3A1DD4:lI112|H3A1E88
+3A1E88:lI112|H3A1F3C
+3A1F3C:lI108|H3A1FF8
+3A1FF8:lI105|H3A20AC
+3A20AC:lI99|H3A2168
+3A2168:lI97|H3A221C
+3A221C:lI116|H3A22D0
+3A22D0:lI105|H3A238C
+3A238C:lI111|H3A2448
+3A2448:lI110|H3A24F4
+3A24F4:lI47|H3A25B0
+3A25B0:lI120|H3A2664
+3A2664:lI45|H3A2718
+3A2718:lI100|H3A27D4
+3A27D4:lI105|H3A2890
+3A2890:lI114|H3A2954
+3A2954:lI101|H3A2A20
+3A2A20:lI99|H3A2AEC
+3A2AEC:lI116|H3A2BB8
+3A2BB8:lI111|H3A2C74
+3A2C74:lI114|N
+3A1D18:lI100|H3A1DCC
+3A1DCC:lI120|H3A1E80
+3A1E80:lI114|N
+3A1C70:lH3A1D28|H3A1D34
+3A1D28:t2:H3A1DDC,H3A1DE4
+3A1DE4:lI97|H3A1E98
+3A1E98:lI112|H3A1F4C
+3A1F4C:lI112|H3A2000
+3A2000:lI108|H3A20B4
+3A20B4:lI105|H3A2170
+3A2170:lI99|H3A2224
+3A2224:lI97|H3A22D8
+3A22D8:lI116|H3A2394
+3A2394:lI105|H3A2450
+3A2450:lI111|H3A24FC
+3A24FC:lI110|H3A25B8
+3A25B8:lI47|H3A266C
+3A266C:lI120|H3A2720
+3A2720:lI45|H3A27DC
+3A27DC:lI99|H3A2898
+3A2898:lI115|H3A295C
+3A295C:lI104|N
+3A1DDC:lI99|H3A1E90
+3A1E90:lI115|H3A1F44
+3A1F44:lI104|N
+3A1D34:lH3A1DEC|H3A1DF8
+3A1DEC:t2:H3A1EA0,H3A1EA8
+3A1EA8:lI97|H3A1F5C
+3A1F5C:lI112|H3A2010
+3A2010:lI112|H3A20C4
+3A20C4:lI108|H3A2178
+3A2178:lI105|H3A222C
+3A222C:lI99|H3A22E0
+3A22E0:lI97|H3A239C
+3A239C:lI116|H3A2458
+3A2458:lI105|H3A2504
+3A2504:lI111|H3A25C0
+3A25C0:lI110|H3A2674
+3A2674:lI47|H3A2728
+3A2728:lI120|H3A27E4
+3A27E4:lI45|H3A28A0
+3A28A0:lI99|H3A2964
+3A2964:lI112|H3A2A28
+3A2A28:lI105|H3A2AF4
+3A2AF4:lI111|N
+3A1EA0:lI99|H3A1F54
+3A1F54:lI112|H3A2008
+3A2008:lI105|H3A20BC
+3A20BC:lI111|N
+3A1DF8:lH3A1EB0|H3A1EBC
+3A1EB0:t2:H3A1F64,H3A1F6C
+3A1F6C:lI97|H3A2018
+3A2018:lI112|H3A20CC
+3A20CC:lI112|H3A2180
+3A2180:lI108|H3A2234
+3A2234:lI105|H3A22E8
+3A22E8:lI99|H3A23A4
+3A23A4:lI97|H3A2460
+3A2460:lI116|H3A250C
+3A250C:lI105|H3A25C8
+3A25C8:lI111|H3A267C
+3A267C:lI110|H3A2730
+3A2730:lI47|H3A27EC
+3A27EC:lI120|H3A28A8
+3A28A8:lI45|H3A296C
+3A296C:lI99|H3A2A30
+3A2A30:lI111|H3A2AFC
+3A2AFC:lI109|H3A2BC0
+3A2BC0:lI112|H3A2C7C
+3A2C7C:lI114|H3A2D2C
+3A2D2C:lI101|H3A2DD4
+3A2DD4:lI115|H3A2E6C
+3A2E6C:lI115|N
+3A1F64:lI90|N
+3A1EBC:lH3A1F74|H3A1F80
+3A1F74:t2:H3A2020,H3A2028
+3A2028:lI97|H3A20DC
+3A20DC:lI112|H3A2190
+3A2190:lI112|H3A223C
+3A223C:lI108|H3A22F0
+3A22F0:lI105|H3A23AC
+3A23AC:lI99|H3A2468
+3A2468:lI97|H3A2514
+3A2514:lI116|H3A25D0
+3A25D0:lI105|H3A2684
+3A2684:lI111|H3A2738
+3A2738:lI110|H3A27F4
+3A27F4:lI47|H3A28B0
+3A28B0:lI120|H3A2974
+3A2974:lI45|H3A2A38
+3A2A38:lI99|H3A2B04
+3A2B04:lI100|H3A2BC8
+3A2BC8:lI108|H3A2C84
+3A2C84:lI105|H3A2D34
+3A2D34:lI110|H3A2DDC
+3A2DDC:lI107|N
+3A2020:lI118|H3A20D4
+3A20D4:lI99|H3A2188
+3A2188:lI100|N
+3A1F80:lH3A2030|H3A203C
+3A2030:t2:H3A20E4,H3A20EC
+3A20EC:lI97|H3A21A0
+3A21A0:lI112|H3A224C
+3A224C:lI112|H3A2300
+3A2300:lI108|H3A23BC
+3A23BC:lI105|H3A2470
+3A2470:lI99|H3A251C
+3A251C:lI97|H3A25D8
+3A25D8:lI116|H3A268C
+3A268C:lI105|H3A2740
+3A2740:lI111|H3A27FC
+3A27FC:lI110|H3A28B8
+3A28B8:lI47|H3A297C
+3A297C:lI120|H3A2A40
+3A2A40:lI45|H3A2B0C
+3A2B0C:lI98|H3A2BD0
+3A2BD0:lI99|H3A2C8C
+3A2C8C:lI112|H3A2D3C
+3A2D3C:lI105|H3A2DE4
+3A2DE4:lI111|N
+3A20E4:lI98|H3A2198
+3A2198:lI99|H3A2244
+3A2244:lI112|H3A22F8
+3A22F8:lI105|H3A23B4
+3A23B4:lI111|N
+3A203C:lH3A20F4|H3A2100
+3A20F4:t2:H3A21A8,H3A21B0
+3A21B0:lI97|H3A225C
+3A225C:lI112|H3A2310
+3A2310:lI112|H3A23C4
+3A23C4:lI108|H3A2478
+3A2478:lI105|H3A2524
+3A2524:lI99|H3A25E0
+3A25E0:lI97|H3A2694
+3A2694:lI116|H3A2748
+3A2748:lI105|H3A2804
+3A2804:lI111|H3A28C0
+3A28C0:lI110|H3A2984
+3A2984:lI47|H3A2A48
+3A2A48:lI114|H3A2B14
+3A2B14:lI116|H3A2BD8
+3A2BD8:lI102|N
+3A21A8:lI114|H3A2254
+3A2254:lI116|H3A2308
+3A2308:lI102|N
+3A2100:lH3A21B8|H3A21C4
+3A21B8:t2:H3A2264,H3A226C
+3A226C:lI97|H3A2320
+3A2320:lI112|H3A23D4
+3A23D4:lI112|H3A2480
+3A2480:lI108|H3A252C
+3A252C:lI105|H3A25E8
+3A25E8:lI99|H3A269C
+3A269C:lI97|H3A2750
+3A2750:lI116|H3A280C
+3A280C:lI105|H3A28C8
+3A28C8:lI111|H3A298C
+3A298C:lI110|H3A2A50
+3A2A50:lI47|H3A2B1C
+3A2B1C:lI112|H3A2BE0
+3A2BE0:lI111|H3A2C94
+3A2C94:lI119|H3A2D44
+3A2D44:lI101|H3A2DEC
+3A2DEC:lI114|H3A2E74
+3A2E74:lI112|H3A2EEC
+3A2EEC:lI111|H3A2F64
+3A2F64:lI105|H3A2FD4
+3A2FD4:lI110|H3A303C
+3A303C:lI116|N
+3A2264:lI112|H3A2318
+3A2318:lI112|H3A23CC
+3A23CC:lI116|N
+3A21C4:lH3A2274|H3A2280
+3A2274:t2:H3A2328,H3A2330
+3A2330:lI97|H3A23E4
+3A23E4:lI112|H3A2488
+3A2488:lI112|H3A2534
+3A2534:lI108|H3A25F0
+3A25F0:lI105|H3A26A4
+3A26A4:lI99|H3A2758
+3A2758:lI97|H3A2814
+3A2814:lI116|H3A28D0
+3A28D0:lI105|H3A2994
+3A2994:lI111|H3A2A58
+3A2A58:lI110|H3A2B24
+3A2B24:lI47|H3A2BE8
+3A2BE8:lI112|H3A2C9C
+3A2C9C:lI111|H3A2D4C
+3A2D4C:lI115|H3A2DF4
+3A2DF4:lI116|H3A2E7C
+3A2E7C:lI115|H3A2EF4
+3A2EF4:lI99|H3A2F6C
+3A2F6C:lI114|H3A2FDC
+3A2FDC:lI105|H3A3044
+3A3044:lI112|H3A30A4
+3A30A4:lI116|N
+3A2328:lI97|H3A23DC
+3A23DC:lI105|N
+3A2280:lH3A2338|H3A2344
+3A2338:t2:H3A23EC,H3A23F4
+3A23F4:lI97|H3A2498
+3A2498:lI112|H3A2544
+3A2544:lI112|H3A25F8
+3A25F8:lI108|H3A26AC
+3A26AC:lI105|H3A2760
+3A2760:lI99|H3A281C
+3A281C:lI97|H3A28D8
+3A28D8:lI116|H3A299C
+3A299C:lI105|H3A2A60
+3A2A60:lI111|H3A2B2C
+3A2B2C:lI110|H3A2BF0
+3A2BF0:lI47|H3A2CA4
+3A2CA4:lI112|H3A2D54
+3A2D54:lI111|H3A2DFC
+3A2DFC:lI115|H3A2E84
+3A2E84:lI116|H3A2EFC
+3A2EFC:lI115|H3A2F74
+3A2F74:lI99|H3A2FE4
+3A2FE4:lI114|H3A304C
+3A304C:lI105|H3A30AC
+3A30AC:lI112|H3A3104
+3A3104:lI116|N
+3A23EC:lI101|H3A2490
+3A2490:lI112|H3A253C
+3A253C:lI115|N
+3A2344:lH3A23FC|H3A2408
+3A23FC:t2:H3A24A0,H3A24A8
+3A24A8:lI97|H3A2554
+3A2554:lI112|H3A2600
+3A2600:lI112|H3A26B4
+3A26B4:lI108|H3A2768
+3A2768:lI105|H3A2824
+3A2824:lI99|H3A28E0
+3A28E0:lI97|H3A29A4
+3A29A4:lI116|H3A2A68
+3A2A68:lI105|H3A2B34
+3A2B34:lI111|H3A2BF8
+3A2BF8:lI110|H3A2CAC
+3A2CAC:lI47|H3A2D5C
+3A2D5C:lI112|H3A2E04
+3A2E04:lI111|H3A2E8C
+3A2E8C:lI115|H3A2F04
+3A2F04:lI116|H3A2F7C
+3A2F7C:lI115|H3A2FEC
+3A2FEC:lI99|H3A3054
+3A3054:lI114|H3A30B4
+3A30B4:lI105|H3A310C
+3A310C:lI112|H3A315C
+3A315C:lI116|N
+3A24A0:lI112|H3A254C
+3A254C:lI115|N
+3A2408:lH3A24B0|H3A24BC
+3A24B0:t2:H3A255C,H3A2564
+3A2564:lI97|H3A2610
+3A2610:lI112|H3A26C4
+3A26C4:lI112|H3A2770
+3A2770:lI108|H3A282C
+3A282C:lI105|H3A28E8
+3A28E8:lI99|H3A29AC
+3A29AC:lI97|H3A2A70
+3A2A70:lI116|H3A2B3C
+3A2B3C:lI105|H3A2C00
+3A2C00:lI111|H3A2CB4
+3A2CB4:lI110|H3A2D64
+3A2D64:lI47|H3A2E0C
+3A2E0C:lI112|H3A2E94
+3A2E94:lI100|H3A2F0C
+3A2F0C:lI102|N
+3A255C:lI112|H3A2608
+3A2608:lI100|H3A26BC
+3A26BC:lI102|N
+3A24BC:lH3A256C|H3A2578
+3A256C:t2:H3A2618,H3A2620
+3A2620:lI97|H3A26D4
+3A26D4:lI112|H3A2780
+3A2780:lI112|H3A2834
+3A2834:lI108|H3A28F0
+3A28F0:lI105|H3A29B4
+3A29B4:lI99|H3A2A78
+3A2A78:lI97|H3A2B44
+3A2B44:lI116|H3A2C08
+3A2C08:lI105|H3A2CBC
+3A2CBC:lI111|H3A2D6C
+3A2D6C:lI110|H3A2E14
+3A2E14:lI47|H3A2E9C
+3A2E9C:lI111|H3A2F14
+3A2F14:lI100|H3A2F84
+3A2F84:lI97|N
+3A2618:lI111|H3A26CC
+3A26CC:lI100|H3A2778
+3A2778:lI97|N
+3A2578:lH3A2628|H3A2634
+3A2628:t2:H3A26DC,H3A26E4
+3A26E4:lI97|H3A2790
+3A2790:lI112|H3A2844
+3A2844:lI112|H3A28F8
+3A28F8:lI108|H3A29BC
+3A29BC:lI105|H3A2A80
+3A2A80:lI99|H3A2B4C
+3A2B4C:lI97|H3A2C10
+3A2C10:lI116|H3A2CC4
+3A2CC4:lI105|H3A2D74
+3A2D74:lI111|H3A2E1C
+3A2E1C:lI110|H3A2EA4
+3A2EA4:lI47|H3A2F1C
+3A2F1C:lI111|H3A2F8C
+3A2F8C:lI99|H3A2FF4
+3A2FF4:lI116|H3A305C
+3A305C:lI101|H3A30BC
+3A30BC:lI116|H3A3114
+3A3114:lI45|H3A3164
+3A3164:lI115|H3A31AC
+3A31AC:lI116|H3A31F4
+3A31F4:lI114|H3A323C
+3A323C:lI101|H3A3284
+3A3284:lI97|H3A32CC
+3A32CC:lI109|N
+3A26DC:lI98|H3A2788
+3A2788:lI105|H3A283C
+3A283C:lI110|N
+3A2634:lH3A26EC|H3A26F8
+3A26EC:t2:H3A2798,H3A27A0
+3A27A0:lI97|H3A2854
+3A2854:lI112|H3A2908
+3A2908:lI112|H3A29C4
+3A29C4:lI108|H3A2A88
+3A2A88:lI105|H3A2B54
+3A2B54:lI99|H3A2C18
+3A2C18:lI97|H3A2CCC
+3A2CCC:lI116|H3A2D7C
+3A2D7C:lI105|H3A2E24
+3A2E24:lI111|H3A2EAC
+3A2EAC:lI110|H3A2F24
+3A2F24:lI47|H3A2F94
+3A2F94:lI111|H3A2FFC
+3A2FFC:lI99|H3A3064
+3A3064:lI116|H3A30C4
+3A30C4:lI101|H3A311C
+3A311C:lI116|H3A316C
+3A316C:lI45|H3A31B4
+3A31B4:lI115|H3A31FC
+3A31FC:lI116|H3A3244
+3A3244:lI114|H3A328C
+3A328C:lI101|H3A32D4
+3A32D4:lI97|H3A3314
+3A3314:lI109|N
+3A2798:lI100|H3A284C
+3A284C:lI109|H3A2900
+3A2900:lI115|N
+3A26F8:lH3A27A8|H3A27B4
+3A27A8:t2:H3A285C,H3A2864
+3A2864:lI97|H3A2918
+3A2918:lI112|H3A29D4
+3A29D4:lI112|H3A2A90
+3A2A90:lI108|H3A2B5C
+3A2B5C:lI105|H3A2C20
+3A2C20:lI99|H3A2CD4
+3A2CD4:lI97|H3A2D84
+3A2D84:lI116|H3A2E2C
+3A2E2C:lI105|H3A2EB4
+3A2EB4:lI111|H3A2F2C
+3A2F2C:lI110|H3A2F9C
+3A2F9C:lI47|H3A3004
+3A3004:lI111|H3A306C
+3A306C:lI99|H3A30CC
+3A30CC:lI116|H3A3124
+3A3124:lI101|H3A3174
+3A3174:lI116|H3A31BC
+3A31BC:lI45|H3A3204
+3A3204:lI115|H3A324C
+3A324C:lI116|H3A3294
+3A3294:lI114|H3A32DC
+3A32DC:lI101|H3A331C
+3A331C:lI97|H3A334C
+3A334C:lI109|N
+3A285C:lI108|H3A2910
+3A2910:lI104|H3A29CC
+3A29CC:lI97|N
+3A27B4:lH3A286C|H3A2878
+3A286C:t2:H3A2920,H3A2928
+3A2928:lI97|H3A29E4
+3A29E4:lI112|H3A2AA0
+3A2AA0:lI112|H3A2B64
+3A2B64:lI108|H3A2C28
+3A2C28:lI105|H3A2CDC
+3A2CDC:lI99|H3A2D8C
+3A2D8C:lI97|H3A2E34
+3A2E34:lI116|H3A2EBC
+3A2EBC:lI105|H3A2F34
+3A2F34:lI111|H3A2FA4
+3A2FA4:lI110|H3A300C
+3A300C:lI47|H3A3074
+3A3074:lI111|H3A30D4
+3A30D4:lI99|H3A312C
+3A312C:lI116|H3A317C
+3A317C:lI101|H3A31C4
+3A31C4:lI116|H3A320C
+3A320C:lI45|H3A3254
+3A3254:lI115|H3A329C
+3A329C:lI116|H3A32E4
+3A32E4:lI114|H3A3324
+3A3324:lI101|H3A3354
+3A3354:lI97|H3A337C
+3A337C:lI109|N
+3A2920:lI108|H3A29DC
+3A29DC:lI122|H3A2A98
+3A2A98:lI104|N
+3A2878:lH3A2930|H3A293C
+3A2930:t2:H3A29EC,H3A29F4
+3A29F4:lI97|H3A2AB0
+3A2AB0:lI112|H3A2B74
+3A2B74:lI112|H3A2C30
+3A2C30:lI108|H3A2CE4
+3A2CE4:lI105|H3A2D94
+3A2D94:lI99|H3A2E3C
+3A2E3C:lI97|H3A2EC4
+3A2EC4:lI116|H3A2F3C
+3A2F3C:lI105|H3A2FAC
+3A2FAC:lI111|H3A3014
+3A3014:lI110|H3A307C
+3A307C:lI47|H3A30DC
+3A30DC:lI111|H3A3134
+3A3134:lI99|H3A3184
+3A3184:lI116|H3A31CC
+3A31CC:lI101|H3A3214
+3A3214:lI116|H3A325C
+3A325C:lI45|H3A32A4
+3A32A4:lI115|H3A32EC
+3A32EC:lI116|H3A332C
+3A332C:lI114|H3A335C
+3A335C:lI101|H3A3384
+3A3384:lI97|H3A33A4
+3A33A4:lI109|N
+3A29EC:lI101|H3A2AA8
+3A2AA8:lI120|H3A2B6C
+3A2B6C:lI101|N
+3A293C:lH3A29FC|H3A2A08
+3A29FC:t2:H3A2AB8,H3A2AC0
+3A2AC0:lI97|H3A2B84
+3A2B84:lI112|H3A2C40
+3A2C40:lI112|H3A2CF4
+3A2CF4:lI108|H3A2DA4
+3A2DA4:lI105|H3A2E44
+3A2E44:lI99|H3A2ECC
+3A2ECC:lI97|H3A2F44
+3A2F44:lI116|H3A2FB4
+3A2FB4:lI105|H3A301C
+3A301C:lI111|H3A3084
+3A3084:lI110|H3A30E4
+3A30E4:lI47|H3A313C
+3A313C:lI111|H3A318C
+3A318C:lI99|H3A31D4
+3A31D4:lI116|H3A321C
+3A321C:lI101|H3A3264
+3A3264:lI116|H3A32AC
+3A32AC:lI45|H3A32F4
+3A32F4:lI115|H3A3334
+3A3334:lI116|H3A3364
+3A3364:lI114|H3A338C
+3A338C:lI101|H3A33AC
+3A33AC:lI97|H3A33C4
+3A33C4:lI109|N
+3A2AB8:lI99|H3A2B7C
+3A2B7C:lI108|H3A2C38
+3A2C38:lI97|H3A2CEC
+3A2CEC:lI115|H3A2D9C
+3A2D9C:lI115|N
+3A2A08:lH3A2AC8|H3A2AD4
+3A2AC8:t2:H3A2B8C,H3A2B94
+3A2B94:lI97|H3A2C50
+3A2C50:lI112|H3A2D04
+3A2D04:lI112|H3A2DAC
+3A2DAC:lI108|H3A2E4C
+3A2E4C:lI105|H3A2ED4
+3A2ED4:lI99|H3A2F4C
+3A2F4C:lI97|H3A2FBC
+3A2FBC:lI116|H3A3024
+3A3024:lI105|H3A308C
+3A308C:lI111|H3A30EC
+3A30EC:lI110|H3A3144
+3A3144:lI47|H3A3194
+3A3194:lI109|H3A31DC
+3A31DC:lI115|H3A3224
+3A3224:lI119|H3A326C
+3A326C:lI111|H3A32B4
+3A32B4:lI114|H3A32FC
+3A32FC:lI100|N
+3A2B8C:lI100|H3A2C48
+3A2C48:lI111|H3A2CFC
+3A2CFC:lI99|N
+3A2AD4:lH3A2B9C|H3A2BA8
+3A2B9C:t2:H3A2C58,H3A2C60
+3A2C60:lI97|H3A2D14
+3A2D14:lI112|H3A2DBC
+3A2DBC:lI112|H3A2E54
+3A2E54:lI108|H3A2EDC
+3A2EDC:lI105|H3A2F54
+3A2F54:lI99|H3A2FC4
+3A2FC4:lI97|H3A302C
+3A302C:lI116|H3A3094
+3A3094:lI105|H3A30F4
+3A30F4:lI111|H3A314C
+3A314C:lI110|H3A319C
+3A319C:lI47|H3A31E4
+3A31E4:lI109|H3A322C
+3A322C:lI97|H3A3274
+3A3274:lI99|H3A32BC
+3A32BC:lI45|H3A3304
+3A3304:lI99|H3A333C
+3A333C:lI111|H3A336C
+3A336C:lI109|H3A3394
+3A3394:lI112|H3A33B4
+3A33B4:lI97|H3A33CC
+3A33CC:lI99|H3A33DC
+3A33DC:lI116|H3A33EC
+3A33EC:lI112|H3A33FC
+3A33FC:lI114|H3A340C
+3A340C:lI111|N
+3A2C58:lI99|H3A2D0C
+3A2D0C:lI112|H3A2DB4
+3A2DB4:lI116|N
+3A2BA8:lH3A2C68|N
+3A2C68:t2:H3A2D1C,H3A2D24
+3A2D24:lI97|H3A2DCC
+3A2DCC:lI112|H3A2E64
+3A2E64:lI112|H3A2EE4
+3A2EE4:lI108|H3A2F5C
+3A2F5C:lI105|H3A2FCC
+3A2FCC:lI99|H3A3034
+3A3034:lI97|H3A309C
+3A309C:lI116|H3A30FC
+3A30FC:lI105|H3A3154
+3A3154:lI111|H3A31A4
+3A31A4:lI110|H3A31EC
+3A31EC:lI47|H3A3234
+3A3234:lI109|H3A327C
+3A327C:lI97|H3A32C4
+3A32C4:lI99|H3A330C
+3A330C:lI45|H3A3344
+3A3344:lI98|H3A3374
+3A3374:lI105|H3A339C
+3A339C:lI110|H3A33BC
+3A33BC:lI104|H3A33D4
+3A33D4:lI101|H3A33E4
+3A33E4:lI120|H3A33F4
+3A33F4:lI52|H3A3404
+3A3404:lI48|N
+3A2D1C:lI104|H3A2DC4
+3A2DC4:lI113|H3A2E5C
+3A2E5C:lI120|N
+39DC28:lH39DC68|H39DC74
+39DC68:t2:A4:port,I8888
+39DC74:lH39DCA8|H39DCB4
+39DCA8:t2:AC:bind_address,H39DCF8
+39DCF8:t4:I127,I0,I0,I1
+39DCB4:lH39DD0C|H39DD18
+39DD0C:t2:AB:server_name,H39DD6C
+39DD6C:lI108|H39DDE4
+39DDE4:lI111|H39DE5C
+39DE5C:lI99|H39DEE4
+39DEE4:lI97|H39DF6C
+39DF6C:lI108|H39E00C
+39E00C:lI104|H39E0B4
+39E0B4:lI111|H39E16C
+39E16C:lI115|H39E238
+39E238:lI116|N
+39DD18:lH39DD74|H39DD80
+39DD74:t2:AE:max_header_siz,I1024
+39DD80:lH39DDEC|H39DDF8
+39DDEC:t2:A11:max_header_action,A8:reply414
+39DDF8:lH39DE64|H39DE70
+39DE64:t2:A8:com_type,A7:ip_comm
+39DE70:lH39DEEC|H39DEF8
+39DEEC:t2:A7:modules,H39DF74
+39DF74:lA9:mod_alias|H39E014
+39E014:lA8:mod_auth|H39E0BC
+39E0BC:lA7:mod_esi|H39E174
+39E174:lAB:mod_actions|H39E240
+39E240:lA7:mod_cgi|H39E324
+39E324:lAB:mod_include|H39E418
+39E418:lA7:mod_dir|H39E51C
+39E51C:lA7:mod_get|H39E634
+39E634:lA8:mod_head|H39E748
+39E748:lA7:mod_log|H39E85C
+39E85C:lAC:mod_disk_log|N
+39DEF8:lH39DF7C|H39DF88
+39DF7C:t2:AF:directory_index,H39E01C
+39E01C:lH39E0C4|N
+39E0C4:lI105|H39E17C
+39E17C:lI110|H39E248
+39E248:lI100|H39E32C
+39E32C:lI101|H39E420
+39E420:lI120|H39E524
+39E524:lI46|H39E63C
+39E63C:lI104|H39E750
+39E750:lI116|H39E864
+39E864:lI109|H39E978
+39E978:lI108|N
+39DF88:lH39E024|H39E030
+39E024:t2:AC:default_type,H39E0CC
+39E0CC:lI116|H39E184
+39E184:lI101|H39E250
+39E250:lI120|H39E334
+39E334:lI116|H39E428
+39E428:lI47|H39E52C
+39E52C:lI112|H39E644
+39E644:lI108|H39E758
+39E758:lI97|H39E86C
+39E86C:lI105|H39E980
+39E980:lI110|N
+39E030:lH39E0D4|H39E0E0
+39E0D4:t2:A10:erl_script_alias,H39E18C
+39E18C:t2:H39E258,H39E260
+39E260:lH39E344|N
+39E344:lI119|H39E438
+39E438:lI101|H39E53C
+39E53C:lI98|H39E654
+39E654:lI116|H39E768
+39E768:lI111|H39E87C
+39E87C:lI111|H39E990
+39E990:lI108|N
+39E258:lI47|H39E33C
+39E33C:lI119|H39E430
+39E430:lI101|H39E534
+39E534:lI98|H39E64C
+39E64C:lI116|H39E760
+39E760:lI111|H39E874
+39E874:lI111|H39E988
+39E988:lI108|N
+39E0E0:lH39E198|H39E1A4
+39E198:t2:A5:alias,H39E268
+39E268:t2:H39E34C,H39E354
+39E354:lI47|H39E448
+39E448:lI99|H39E54C
+39E54C:lI108|H39E664
+39E664:lI101|H39E778
+39E778:lI97|H39E88C
+39E88C:lI114|H39E9A0
+39E9A0:lI99|H39EA94
+39EA94:lI97|H39EB88
+39EB88:lI115|H39EC7C
+39EC7C:lI101|H39ED70
+39ED70:lI47|H39EE4C
+39EE4C:lI111|H39EF20
+39EF20:lI116|H39EFFC
+39EFFC:lI112|H39F0E0
+39F0E0:lI47|H39F1B4
+39F1B4:lI101|H39F288
+39F288:lI114|H39F344
+39F344:lI116|H39F408
+39F408:lI115|H39F4D4
+39F4D4:lI47|H39F5A8
+39F5A8:lI108|H39F67C
+39F67C:lI105|H39F750
+39F750:lI98|H39F824
+39F824:lI47|H39F908
+39F908:lI111|H39F9E4
+39F9E4:lI98|H39FAC0
+39FAC0:lI115|H39FB9C
+39FB9C:lI101|H39FC68
+39FC68:lI114|H39FD2C
+39FD2C:lI118|H39FDF8
+39FDF8:lI101|H39FEB4
+39FEB4:lI114|H39FF70
+39FF70:lI47|H3A0024
+3A0024:lI112|H3A00D8
+3A00D8:lI114|H3A0184
+3A0184:lI105|H3A0238
+3A0238:lI118|H3A02F4
+3A02F4:lI47|H3A03A8
+3A03A8:lI99|H3A0444
+3A0444:lI114|H3A04E8
+3A04E8:lI97|H3A058C
+3A058C:lI115|H3A0638
+3A0638:lI104|H3A06EC
+3A06EC:lI100|H3A0798
+3A0798:lI117|H3A083C
+3A083C:lI109|H3A08C8
+3A08C8:lI112|H3A095C
+3A095C:lI95|H3A09F0
+3A09F0:lI118|H3A0A8C
+3A0A8C:lI105|H3A0B38
+3A0B38:lI101|H3A0BE4
+3A0BE4:lI119|H3A0CA0
+3A0CA0:lI101|H3A0D5C
+3A0D5C:lI114|N
+39E34C:lI47|H39E440
+39E440:lI99|H39E544
+39E544:lI114|H39E65C
+39E65C:lI97|H39E770
+39E770:lI115|H39E884
+39E884:lI104|H39E998
+39E998:lI100|H39EA8C
+39EA8C:lI117|H39EB80
+39EB80:lI109|H39EC74
+39EC74:lI112|H39ED68
+39ED68:lI95|H39EE44
+39EE44:lI118|H39EF18
+39EF18:lI105|H39EFF4
+39EFF4:lI101|H39F0D8
+39F0D8:lI119|H39F1AC
+39F1AC:lI101|H39F280
+39F280:lI114|N
+39E1A4:lH39E274|H39E280
+39E274:t2:A5:alias,H39E35C
+39E35C:t2:H39E450,H39E458
+39E458:lI47|H39E55C
+39E55C:lI99|H39E674
+39E674:lI108|H39E788
+39E788:lI101|H39E89C
+39E89C:lI97|H39E9B0
+39E9B0:lI114|H39EAA4
+39EAA4:lI99|H39EB98
+39EB98:lI97|H39EC8C
+39EC8C:lI115|H39ED80
+39ED80:lI101|H39EE5C
+39EE5C:lI47|H39EF30
+39EF30:lI111|H39F00C
+39F00C:lI116|H39F0F0
+39F0F0:lI112|H39F1C4
+39F1C4:lI47|H39F298
+39F298:lI101|H39F354
+39F354:lI114|H39F418
+39F418:lI116|H39F4E4
+39F4E4:lI115|H39F5B0
+39F5B0:lI47|H39F684
+39F684:lI101|H39F758
+39F758:lI114|H39F82C
+39F82C:lI116|H39F910
+39F910:lI115|H39F9EC
+39F9EC:lI47|H39FAC8
+39FAC8:lI100|H39FBA4
+39FBA4:lI111|H39FC70
+39FC70:lI99|H39FD34
+39FD34:lI47|H39FE00
+39FE00:lI104|H39FEBC
+39FEBC:lI116|H39FF78
+39FF78:lI109|H3A002C
+3A002C:lI108|N
+39E450:lI47|H39E554
+39E554:lI99|H39E66C
+39E66C:lI114|H39E780
+39E780:lI97|H39E894
+39E894:lI115|H39E9A8
+39E9A8:lI104|H39EA9C
+39EA9C:lI100|H39EB90
+39EB90:lI117|H39EC84
+39EC84:lI109|H39ED78
+39ED78:lI112|H39EE54
+39EE54:lI95|H39EF28
+39EF28:lI101|H39F004
+39F004:lI114|H39F0E8
+39F0E8:lI116|H39F1BC
+39F1BC:lI115|H39F290
+39F290:lI95|H39F34C
+39F34C:lI100|H39F410
+39F410:lI111|H39F4DC
+39F4DC:lI99|N
+39E280:lH39E368|H39E374
+39E368:t2:A5:alias,H39E460
+39E460:t2:H39E564,H39E56C
+39E56C:lI47|H39E684
+39E684:lI99|H39E798
+39E798:lI108|H39E8AC
+39E8AC:lI101|H39E9C0
+39E9C0:lI97|H39EAB4
+39EAB4:lI114|H39EBA8
+39EBA8:lI99|H39EC9C
+39EC9C:lI97|H39ED90
+39ED90:lI115|H39EE6C
+39EE6C:lI101|H39EF40
+39EF40:lI47|H39F01C
+39F01C:lI111|H39F100
+39F100:lI116|H39F1D4
+39F1D4:lI112|H39F2A0
+39F2A0:lI47|H39F35C
+39F35C:lI101|H39F420
+39F420:lI114|H39F4EC
+39F4EC:lI116|H39F5B8
+39F5B8:lI115|H39F68C
+39F68C:lI47|H39F760
+39F760:lI108|H39F834
+39F834:lI105|H39F918
+39F918:lI98|H39F9F4
+39F9F4:lI47|H39FAD0
+39FAD0:lI111|H39FBAC
+39FBAC:lI98|H39FC78
+39FC78:lI115|H39FD3C
+39FD3C:lI101|H39FE08
+39FE08:lI114|H39FEC4
+39FEC4:lI118|H39FF80
+39FF80:lI101|H3A0034
+3A0034:lI114|H3A00E0
+3A00E0:lI47|H3A018C
+3A018C:lI100|H3A0240
+3A0240:lI111|H3A02FC
+3A02FC:lI99|H3A03B0
+3A03B0:lI47|H3A044C
+3A044C:lI104|H3A04F0
+3A04F0:lI116|H3A0594
+3A0594:lI109|H3A0640
+3A0640:lI108|N
+39E564:lI47|H39E67C
+39E67C:lI99|H39E790
+39E790:lI114|H39E8A4
+39E8A4:lI97|H39E9B8
+39E9B8:lI115|H39EAAC
+39EAAC:lI104|H39EBA0
+39EBA0:lI100|H39EC94
+39EC94:lI117|H39ED88
+39ED88:lI109|H39EE64
+39EE64:lI112|H39EF38
+39EF38:lI95|H39F014
+39F014:lI100|H39F0F8
+39F0F8:lI111|H39F1CC
+39F1CC:lI99|N
+39E374:lH39E46C|N
+39E46C:t2:A10:erl_script_alias,H39E574
+39E574:t2:H39E68C,H39E694
+39E694:lH39E7A8|N
+39E7A8:lI99|H39E8BC
+39E8BC:lI114|H39E9D0
+39E9D0:lI97|H39EAC4
+39EAC4:lI115|H39EBB8
+39EBB8:lI104|H39ECAC
+39ECAC:lI100|H39EDA0
+39EDA0:lI117|H39EE74
+39EE74:lI109|H39EF48
+39EF48:lI112|H39F024
+39F024:lI95|H39F108
+39F108:lI118|H39F1DC
+39F1DC:lI105|H39F2A8
+39F2A8:lI101|H39F364
+39F364:lI119|H39F428
+39F428:lI101|H39F4F4
+39F4F4:lI114|N
+39E68C:lI47|H39E7A0
+39E7A0:lI99|H39E8B4
+39E8B4:lI100|H39E9C8
+39E9C8:lI118|H39EABC
+39EABC:lI95|H39EBB0
+39EBB0:lI101|H39ECA4
+39ECA4:lI114|H39ED98
+39ED98:lI108|N
+39DB58:lN|H39DB9C
+39DB9C:lH39D9FC|H39DBEC
+39D9FC:t4:I127,I0,I0,I1
+39DBEC:lI8888|N
+3A3E20:lH3A3DFC|H3A3704
+3A3DFC:t8:A5:child,P<0.46.0>,H39DAC8,H39DAD8,A9:permanent,I2000,A6:worker,H39DAE8
+39DAE8:lAD:httpd_manager|H39DB38
+39DB38:lAA:gen_server|N
+39DAD8:t3:AD:httpd_manager,AA:start_link,H39DB30
+39DB30:lA9:undefined|H39DB78
+39DB78:lH39DB50|H39DBC0
+39DBC0:lN|N
+39DAC8:t3:AD:httpd_manager,H39D9FC,I8888
+3A3704:lH3A36E0|H39D998
+3A36E0:t8:A5:child,P<0.45.0>,H39DA18,H39DA28,A9:permanent,I2000,AA:supervisor,H39DA38
+39DA38:lAE:httpd_misc_sup|H39DAC0
+39DAC0:lAA:supervisor|N
+39DA28:t3:AE:httpd_misc_sup,A5:start,H39D958
+39D958:lH39D9FC|H39DA10
+39DA10:lI8888|H39DAB8
+39DAB8:lA7:silence|N
+39DA18:t3:AE:httpd_misc_sup,H39D9FC,I8888
+39D998:lH39DA64|N
+39DA64:t8:A5:child,P<0.44.0>,H39DAF0,H39DB00,A9:permanent,I2000,AA:supervisor,H39DB10
+39DB10:lA12:httpd_acceptor_sup|H39DB48
+39DB48:lAA:supervisor|N
+39DB00:t3:A12:httpd_acceptor_sup,A5:start,H39DB40
+39DB40:lH39D9FC|H39DB80
+39DB80:lI8888|H39DBC8
+39DBC8:lA7:silence|N
+39DAF0:t3:A12:httpd_acceptor_sup,H39D9FC,I8888
+39D960:t2:A5:local,A1A:httpd_sup__127_0_0_1__8888
+39D9CC:lAA:gen_server|H39DA90
+39DA90:lP<0.33.0>|H39DB20
+39DB20:lP<0.33.0>|H39DB60
+39DB60:lH39DBA4|H39DBB0
+39DBA4:t2:A5:local,A1A:httpd_sup__127_0_0_1__8888
+39DBB0:lAA:supervisor|H39DBF4
+39DBF4:lH39DC30|H39DC40
+39DC30:t3:H39D960,A9:httpd_sup,H39DA88
+39DC40:lN|N
+39D940:t2:AD:$initial_call,H39D9E4
+39D9E4:t3:A3:gen,A7:init_it,H39D9CC
+39D94C:t2:AA:$ancestors,H39D9F4
+39D9F4:lA8:web_tool|H39DAB0
+39DAB0:lP<0.27.0>|N
+=proc_dictionary:<0.44.0>
+H3756A8
+H3756B4
+H3756C0
+H3756CC
+=proc_stack:<0.44.0>
+36c194:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AA:supervisor
+y3:H36C030
+y4:A1E:httpd_acc_sup__127_0_0_1__8888
+y5:P<0.43.0>
+36c1b0:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H375710
+=proc_heap:<0.44.0>
+36C030:tA:A5:state,H3756D8,AB:one_for_one,H36C028,N,I500,I100,N,A12:httpd_acceptor_sup,H375730
+375730:lA7:silence|N
+36C028:lH36C004|N
+36C004:t8:A5:child,P<0.47.0>,H36BE80,H36BE90,A9:permanent,I1000,A6:worker,H36BEA0
+36BEA0:lAE:httpd_acceptor|N
+36BE90:t3:AE:httpd_acceptor,AA:start_link,H36BEE8
+36BEE8:lP<0.46.0>|H36BEF0
+36BEF0:lA7:ip_comm|H36BEF8
+36BEF8:lH36BF00|H36BF14
+36BF00:t4:I127,I0,I0,I1
+36BF14:lI8888|H36BF1C
+36BF1C:lA1B:httpd_conf__127_0_0_1__8888|H36BF24
+36BF24:lA7:silence|N
+36BE80:t3:AE:httpd_acceptor,H36BED4,I8888
+36BED4:t4:I127,I0,I0,I1
+3756D8:t2:A5:local,A1E:httpd_acc_sup__127_0_0_1__8888
+375710:lAA:gen_server|H375738
+375738:lP<0.43.0>|H375748
+375748:lP<0.43.0>|H375758
+375758:lH375760|H37576C
+375760:t2:A5:local,A1E:httpd_acc_sup__127_0_0_1__8888
+37576C:lAA:supervisor|H375774
+375774:lH37577C|H37578C
+37577C:t3:H3756D8,A12:httpd_acceptor_sup,H375730
+37578C:lN|N
+3756A8:t2:AD:$initial_call,H375718
+375718:t3:A3:gen,A7:init_it,H375710
+3756B4:t2:A9:verbosity,A7:silence
+3756C0:t2:AA:$ancestors,H375728
+375728:lA1A:httpd_sup__127_0_0_1__8888|H375740
+375740:lA8:web_tool|H375750
+375750:lP<0.27.0>|N
+3756CC:t2:A5:sname,A7:acc_sup
+=proc_dictionary:<0.45.0>
+H36F484
+H36F4F4
+H36F468
+H36F500
+=proc_stack:<0.45.0>
+36f734:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AA:supervisor
+y3:H36F5D0
+y4:A1F:httpd_misc_sup__127_0_0_1__8888
+y5:P<0.43.0>
+36f750:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H36F430
+=proc_heap:<0.45.0>
+36F5D0:tA:A5:state,H36F3FC,AB:one_for_one,N,N,I0,I1,N,AE:httpd_misc_sup,H36F408
+36F408:lA7:silence|N
+36F3FC:t2:A5:local,A1F:httpd_misc_sup__127_0_0_1__8888
+36F430:lAA:gen_server|H36F428
+36F428:lP<0.43.0>|H36F420
+36F420:lP<0.43.0>|H36F3D0
+36F3D0:lH36F3E0|H36F418
+36F3E0:t2:A5:local,A1F:httpd_misc_sup__127_0_0_1__8888
+36F418:lAA:supervisor|H36F3D8
+36F3D8:lH36F3EC|H36F410
+36F3EC:t3:H36F3FC,AE:httpd_misc_sup,H36F408
+36F410:lN|N
+36F484:t2:AD:$initial_call,H36F474
+36F474:t3:A3:gen,A7:init_it,H36F430
+36F4F4:t2:A9:verbosity,A7:silence
+36F468:t2:AA:$ancestors,H36F460
+36F460:lA1A:httpd_sup__127_0_0_1__8888|H36F440
+36F440:lA8:web_tool|H36F438
+36F438:lP<0.27.0>|N
+36F500:t2:A5:sname,A8:misc_sup
+=proc_dictionary:<0.46.0>
+H3BDA50
+H3BDA5C
+H3BDAC8
+H3BDB28
+H3BDB9C
+H3BDC00
+H3BDADC
+H3BDB3C
+=proc_stack:<0.46.0>
+39d8f4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AD:httpd_manager
+y3:H39D5A4
+y4:A16:httpd__127_0_0_1__8888
+y5:P<0.43.0>
+39d910:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H3BDAB0
+=proc_heap:<0.46.0>
+39D5A4:t9:A5:state,A7:ip_comm,A9:undefined,A1B:httpd_conf__127_0_0_1__8888,N,A9:unblocked,A9:undefined,A9:undefined,H39D430
+39D430:lH39BF40|H39D428
+39BF40:t2:A8:max_conn,I1
+39D428:lH39BC80|H39D420
+39BC80:t2:AF:last_heavy_load,A5:never
+39D420:lH39D414|N
+39D414:t2:AF:last_connection,H39D408
+39D408:t2:H39D3E8,H39D3F8
+39D3F8:t3:I11,I22,I34
+39D3E8:t3:I2004,I4,I21
+3BDAB0:lAA:gen_server|H3BDB20
+3BDB20:lP<0.43.0>|H3BDB94
+3BDB94:lP<0.43.0>|H3BDBF8
+3BDBF8:lH3BDC48|H3BDC54
+3BDC48:t2:A5:local,A16:httpd__127_0_0_1__8888
+3BDC54:lAD:httpd_manager|H3BDCAC
+3BDCAC:lH3BDD14|H3BDD1C
+3BDD14:lA9:undefined|H3BDD9C
+3BDD9C:lH3BDA84|H3BDE2C
+3BDA84:lH3BDAF0|H3BDAFC
+3BDAF0:t2:AB:server_root,H3BDB48
+3BDB48:lI47|H3BDBB0
+3BDBB0:lI99|H3BDC0C
+3BDC0C:lI108|H3BDC64
+3BDC64:lI101|H3BDCBC
+3BDCBC:lI97|H3BDD2C
+3BDD2C:lI114|H3BDDA4
+3BDDA4:lI99|H3BDE34
+3BDE34:lI97|H3BDED4
+3BDED4:lI115|H3BDF90
+3BDF90:lI101|H3BE054
+3BE054:lI47|H3BE128
+3BE128:lI111|H3BE204
+3BE204:lI116|H3BE2EC
+3BE2EC:lI112|H3BE3E0
+3BE3E0:lI47|H3BE4E4
+3BE4E4:lI101|H3BE5E8
+3BE5E8:lI114|H3BE6EC
+3BE6EC:lI116|H3BE7E0
+3BE7E0:lI115|H3BE8CC
+3BE8CC:lI47|H3BE9B8
+3BE9B8:lI108|H3BEAAC
+3BEAAC:lI105|H3BEB98
+3BEB98:lI98|H3BEC84
+3BEC84:lI47|H3BED70
+3BED70:lI119|H3BEE5C
+3BEE5C:lI101|H3BEF30
+3BEF30:lI98|H3BEFFC
+3BEFFC:lI116|H3BF0C8
+3BF0C8:lI111|H3BF19C
+3BF19C:lI111|H3BF260
+3BF260:lI108|H3BF314
+3BF314:lI47|H3BF3C0
+3BF3C0:lI112|H3BF474
+3BF474:lI114|H3BF530
+3BF530:lI105|H3BF5F4
+3BF5F4:lI118|H3BF6C8
+3BF6C8:lI47|H3BF79C
+3BF79C:lI114|H3BF870
+3BF870:lI111|H3BF954
+3BF954:lI111|H3BFA30
+3BFA30:lI116|N
+3BDAFC:lH3BDB50|H3BDB5C
+3BDB50:t2:AD:document_root,H3BDBB8
+3BDBB8:lI47|H3BDC14
+3BDC14:lI99|H3BDC6C
+3BDC6C:lI108|H3BDCC4
+3BDCC4:lI101|H3BDD34
+3BDD34:lI97|H3BDDAC
+3BDDAC:lI114|H3BDE3C
+3BDE3C:lI99|H3BDEDC
+3BDEDC:lI97|H3BDF98
+3BDF98:lI115|H3BE05C
+3BE05C:lI101|H3BE130
+3BE130:lI47|H3BE20C
+3BE20C:lI111|H3BE2F4
+3BE2F4:lI116|H3BE3E8
+3BE3E8:lI112|H3BE4EC
+3BE4EC:lI47|H3BE5F0
+3BE5F0:lI101|H3BE6F4
+3BE6F4:lI114|H3BE7E8
+3BE7E8:lI116|H3BE8D4
+3BE8D4:lI115|H3BE9C0
+3BE9C0:lI47|H3BEAB4
+3BEAB4:lI108|H3BEBA0
+3BEBA0:lI105|H3BEC8C
+3BEC8C:lI98|H3BED78
+3BED78:lI47|H3BEE64
+3BEE64:lI119|H3BEF38
+3BEF38:lI101|H3BF004
+3BF004:lI98|H3BF0D0
+3BF0D0:lI116|H3BF1A4
+3BF1A4:lI111|H3BF268
+3BF268:lI111|H3BF31C
+3BF31C:lI108|H3BF3C8
+3BF3C8:lI47|H3BF47C
+3BF47C:lI112|H3BF538
+3BF538:lI114|H3BF5FC
+3BF5FC:lI105|H3BF6D0
+3BF6D0:lI118|H3BF7A4
+3BF7A4:lI47|H3BF878
+3BF878:lI114|H3BF95C
+3BF95C:lI111|H3BFA38
+3BFA38:lI111|H3BFB0C
+3BFB0C:lI116|H3BFBE8
+3BFBE8:lI47|H3BFCB4
+3BFCB4:lI100|H3BFD78
+3BFD78:lI111|H3BFE3C
+3BFE3C:lI99|N
+3BDB5C:lH3BDBC0|H3BDBCC
+3BDBC0:t2:AA:mime_types,H3BDC1C
+3BDC1C:lH3BDC74|H3BDC80
+3BDC74:t2:H3BDCCC,H3BDCD4
+3BDCD4:lI120|H3BDD44
+3BDD44:lI45|H3BDDBC
+3BDDBC:lI119|H3BDE44
+3BDE44:lI111|H3BDEE4
+3BDEE4:lI114|H3BDFA0
+3BDFA0:lI108|H3BE064
+3BE064:lI100|H3BE138
+3BE138:lI47|H3BE214
+3BE214:lI120|H3BE2FC
+3BE2FC:lI45|H3BE3F0
+3BE3F0:lI118|H3BE4F4
+3BE4F4:lI114|H3BE5F8
+3BE5F8:lI109|H3BE6FC
+3BE6FC:lI108|N
+3BDCCC:lI119|H3BDD3C
+3BDD3C:lI114|H3BDDB4
+3BDDB4:lI108|N
+3BDC80:lH3BDCDC|H3BDCE8
+3BDCDC:t2:H3BDD4C,H3BDD54
+3BDD54:lI120|H3BDDCC
+3BDDCC:lI45|H3BDE54
+3BDE54:lI119|H3BDEF4
+3BDEF4:lI111|H3BDFA8
+3BDFA8:lI114|H3BE06C
+3BE06C:lI108|H3BE140
+3BE140:lI100|H3BE21C
+3BE21C:lI47|H3BE304
+3BE304:lI120|H3BE3F8
+3BE3F8:lI45|H3BE4FC
+3BE4FC:lI118|H3BE600
+3BE600:lI114|H3BE704
+3BE704:lI109|H3BE7F0
+3BE7F0:lI108|N
+3BDD4C:lI118|H3BDDC4
+3BDDC4:lI114|H3BDE4C
+3BDE4C:lI109|H3BDEEC
+3BDEEC:lI108|N
+3BDCE8:lH3BDD5C|H3BDD68
+3BDD5C:t2:H3BDDD4,H3BDDDC
+3BDDDC:lI120|H3BDE64
+3BDE64:lI45|H3BDF04
+3BDF04:lI99|H3BDFB0
+3BDFB0:lI111|H3BE074
+3BE074:lI110|H3BE148
+3BE148:lI102|H3BE224
+3BE224:lI101|H3BE30C
+3BE30C:lI114|H3BE400
+3BE400:lI101|H3BE504
+3BE504:lI110|H3BE608
+3BE608:lI99|H3BE70C
+3BE70C:lI101|H3BE7F8
+3BE7F8:lI47|H3BE8DC
+3BE8DC:lI120|H3BE9C8
+3BE9C8:lI45|H3BEABC
+3BEABC:lI99|H3BEBA8
+3BEBA8:lI111|H3BEC94
+3BEC94:lI111|H3BED80
+3BED80:lI108|H3BEE6C
+3BEE6C:lI116|H3BEF40
+3BEF40:lI97|H3BF00C
+3BF00C:lI108|H3BF0D8
+3BF0D8:lI107|N
+3BDDD4:lI105|H3BDE5C
+3BDE5C:lI99|H3BDEFC
+3BDEFC:lI101|N
+3BDD68:lH3BDDE4|H3BDDF0
+3BDDE4:t2:H3BDE6C,H3BDE74
+3BDE74:lI118|H3BDF14
+3BDF14:lI105|H3BDFC0
+3BDFC0:lI100|H3BE084
+3BE084:lI101|H3BE158
+3BE158:lI111|H3BE22C
+3BE22C:lI47|H3BE314
+3BE314:lI120|H3BE408
+3BE408:lI45|H3BE50C
+3BE50C:lI115|H3BE610
+3BE610:lI103|H3BE714
+3BE714:lI105|H3BE800
+3BE800:lI45|H3BE8E4
+3BE8E4:lI109|H3BE9D0
+3BE9D0:lI111|H3BEAC4
+3BEAC4:lI118|H3BEBB0
+3BEBB0:lI105|H3BEC9C
+3BEC9C:lI101|N
+3BDE6C:lI109|H3BDF0C
+3BDF0C:lI111|H3BDFB8
+3BDFB8:lI118|H3BE07C
+3BE07C:lI105|H3BE150
+3BE150:lI101|N
+3BDDF0:lH3BDE7C|H3BDE88
+3BDE7C:t2:H3BDF1C,H3BDF24
+3BDF24:lI118|H3BDFD0
+3BDFD0:lI105|H3BE094
+3BE094:lI100|H3BE160
+3BE160:lI101|H3BE234
+3BE234:lI111|H3BE31C
+3BE31C:lI47|H3BE410
+3BE410:lI120|H3BE514
+3BE514:lI45|H3BE618
+3BE618:lI109|H3BE71C
+3BE71C:lI115|H3BE808
+3BE808:lI118|H3BE8EC
+3BE8EC:lI105|H3BE9D8
+3BE9D8:lI100|H3BEACC
+3BEACC:lI101|H3BEBB8
+3BEBB8:lI111|N
+3BDF1C:lI97|H3BDFC8
+3BDFC8:lI118|H3BE08C
+3BE08C:lI105|N
+3BDE88:lH3BDF2C|H3BDF38
+3BDF2C:t2:H3BDFD8,H3BDFE0
+3BDFE0:lI118|H3BE0A4
+3BE0A4:lI105|H3BE168
+3BE168:lI100|H3BE23C
+3BE23C:lI101|H3BE324
+3BE324:lI111|H3BE418
+3BE418:lI47|H3BE51C
+3BE51C:lI113|H3BE620
+3BE620:lI117|H3BE724
+3BE724:lI105|H3BE810
+3BE810:lI99|H3BE8F4
+3BE8F4:lI107|H3BE9E0
+3BE9E0:lI116|H3BEAD4
+3BEAD4:lI105|H3BEBC0
+3BEBC0:lI109|H3BECA4
+3BECA4:lI101|N
+3BDFD8:lI113|H3BE09C
+3BE09C:lI116|N
+3BDF38:lH3BDFE8|H3BDFF4
+3BDFE8:t2:H3BE0AC,H3BE0B4
+3BE0B4:lI118|H3BE178
+3BE178:lI105|H3BE24C
+3BE24C:lI100|H3BE32C
+3BE32C:lI101|H3BE420
+3BE420:lI111|H3BE524
+3BE524:lI47|H3BE628
+3BE628:lI113|H3BE72C
+3BE72C:lI117|H3BE818
+3BE818:lI105|H3BE8FC
+3BE8FC:lI99|H3BE9E8
+3BE9E8:lI107|H3BEADC
+3BEADC:lI116|H3BEBC8
+3BEBC8:lI105|H3BECAC
+3BECAC:lI109|H3BED88
+3BED88:lI101|N
+3BE0AC:lI109|H3BE170
+3BE170:lI111|H3BE244
+3BE244:lI118|N
+3BDFF4:lH3BE0BC|H3BE0C8
+3BE0BC:t2:H3BE180,H3BE188
+3BE188:lI118|H3BE25C
+3BE25C:lI105|H3BE33C
+3BE33C:lI100|H3BE430
+3BE430:lI101|H3BE52C
+3BE52C:lI111|H3BE630
+3BE630:lI47|H3BE734
+3BE734:lI109|H3BE820
+3BE820:lI112|H3BE904
+3BE904:lI101|H3BE9F0
+3BE9F0:lI103|N
+3BE180:lI109|H3BE254
+3BE254:lI112|H3BE334
+3BE334:lI101|H3BE428
+3BE428:lI103|N
+3BE0C8:lH3BE190|H3BE19C
+3BE190:t2:H3BE264,H3BE26C
+3BE26C:lI118|H3BE34C
+3BE34C:lI105|H3BE440
+3BE440:lI100|H3BE534
+3BE534:lI101|H3BE638
+3BE638:lI111|H3BE73C
+3BE73C:lI47|H3BE828
+3BE828:lI109|H3BE90C
+3BE90C:lI112|H3BE9F8
+3BE9F8:lI101|H3BEAE4
+3BEAE4:lI103|N
+3BE264:lI109|H3BE344
+3BE344:lI112|H3BE438
+3BE438:lI103|N
+3BE19C:lH3BE274|H3BE280
+3BE274:t2:H3BE354,H3BE35C
+3BE35C:lI118|H3BE450
+3BE450:lI105|H3BE544
+3BE544:lI100|H3BE640
+3BE640:lI101|H3BE744
+3BE744:lI111|H3BE830
+3BE830:lI47|H3BE914
+3BE914:lI109|H3BEA00
+3BEA00:lI112|H3BEAEC
+3BEAEC:lI101|H3BEBD0
+3BEBD0:lI103|N
+3BE354:lI109|H3BE448
+3BE448:lI112|H3BE53C
+3BE53C:lI101|N
+3BE280:lH3BE364|H3BE370
+3BE364:t2:H3BE458,H3BE460
+3BE460:lI116|H3BE554
+3BE554:lI101|H3BE650
+3BE650:lI120|H3BE754
+3BE754:lI116|H3BE838
+3BE838:lI47|H3BE91C
+3BE91C:lI120|H3BEA08
+3BEA08:lI45|H3BEAF4
+3BEAF4:lI115|H3BEBD8
+3BEBD8:lI103|H3BECB4
+3BECB4:lI109|H3BED90
+3BED90:lI108|N
+3BE458:lI115|H3BE54C
+3BE54C:lI103|H3BE648
+3BE648:lI109|H3BE74C
+3BE74C:lI108|N
+3BE370:lH3BE468|H3BE474
+3BE468:t2:H3BE55C,H3BE564
+3BE564:lI116|H3BE660
+3BE660:lI101|H3BE764
+3BE764:lI120|H3BE840
+3BE840:lI116|H3BE924
+3BE924:lI47|H3BEA10
+3BEA10:lI120|H3BEAFC
+3BEAFC:lI45|H3BEBE0
+3BEBE0:lI115|H3BECBC
+3BECBC:lI103|H3BED98
+3BED98:lI109|H3BEE74
+3BEE74:lI108|N
+3BE55C:lI115|H3BE658
+3BE658:lI103|H3BE75C
+3BE75C:lI109|N
+3BE474:lH3BE56C|H3BE578
+3BE56C:t2:H3BE668,H3BE670
+3BE670:lI116|H3BE774
+3BE774:lI101|H3BE850
+3BE850:lI120|H3BE92C
+3BE92C:lI116|H3BEA18
+3BEA18:lI47|H3BEB04
+3BEB04:lI120|H3BEBE8
+3BEBE8:lI45|H3BECC4
+3BECC4:lI115|H3BEDA0
+3BEDA0:lI101|H3BEE7C
+3BEE7C:lI116|H3BEF48
+3BEF48:lI101|H3BF014
+3BF014:lI120|H3BF0E0
+3BF0E0:lI116|N
+3BE668:lI101|H3BE76C
+3BE76C:lI116|H3BE848
+3BE848:lI120|N
+3BE578:lH3BE678|H3BE684
+3BE678:t2:H3BE77C,H3BE784
+3BE784:lI116|H3BE860
+3BE860:lI101|H3BE93C
+3BE93C:lI120|H3BEA20
+3BEA20:lI116|H3BEB0C
+3BEB0C:lI47|H3BEBF0
+3BEBF0:lI116|H3BECCC
+3BECCC:lI97|H3BEDA8
+3BEDA8:lI98|H3BEE84
+3BEE84:lI45|H3BEF50
+3BEF50:lI115|H3BF01C
+3BF01C:lI101|H3BF0E8
+3BF0E8:lI112|H3BF1AC
+3BF1AC:lI97|H3BF270
+3BF270:lI114|H3BF324
+3BF324:lI97|H3BF3D0
+3BF3D0:lI116|H3BF484
+3BF484:lI101|H3BF540
+3BF540:lI100|H3BF604
+3BF604:lI45|H3BF6D8
+3BF6D8:lI118|H3BF7AC
+3BF7AC:lI97|H3BF880
+3BF880:lI108|H3BF964
+3BF964:lI117|H3BFA40
+3BFA40:lI101|H3BFB14
+3BFB14:lI115|N
+3BE77C:lI116|H3BE858
+3BE858:lI115|H3BE934
+3BE934:lI118|N
+3BE684:lH3BE78C|H3BE798
+3BE78C:t2:H3BE868,H3BE870
+3BE870:lI116|H3BE94C
+3BE94C:lI101|H3BEA30
+3BEA30:lI120|H3BEB14
+3BEB14:lI116|H3BEBF8
+3BEBF8:lI47|H3BECD4
+3BECD4:lI114|H3BEDB0
+3BEDB0:lI105|H3BEE8C
+3BEE8C:lI99|H3BEF58
+3BEF58:lI104|H3BF024
+3BF024:lI116|H3BF0F0
+3BF0F0:lI101|H3BF1B4
+3BF1B4:lI120|H3BF278
+3BF278:lI116|N
+3BE868:lI114|H3BE944
+3BE944:lI116|H3BEA28
+3BEA28:lI120|N
+3BE798:lH3BE878|H3BE884
+3BE878:t2:H3BE954,H3BE95C
+3BE95C:lI116|H3BEA40
+3BEA40:lI101|H3BEB24
+3BEB24:lI120|H3BEC00
+3BEC00:lI116|H3BECDC
+3BECDC:lI47|H3BEDB8
+3BEDB8:lI112|H3BEE94
+3BEE94:lI108|H3BEF60
+3BEF60:lI97|H3BF02C
+3BF02C:lI105|H3BF0F8
+3BF0F8:lI110|N
+3BE954:lI116|H3BEA38
+3BEA38:lI120|H3BEB1C
+3BEB1C:lI116|N
+3BE884:lH3BE964|H3BE970
+3BE964:t2:H3BEA48,H3BEA50
+3BEA50:lI116|H3BEB34
+3BEB34:lI101|H3BEC10
+3BEC10:lI120|H3BECEC
+3BECEC:lI116|H3BEDC8
+3BEDC8:lI47|H3BEE9C
+3BEE9C:lI120|H3BEF68
+3BEF68:lI45|H3BF034
+3BF034:lI115|H3BF100
+3BF100:lI101|H3BF1BC
+3BF1BC:lI114|H3BF280
+3BF280:lI118|H3BF32C
+3BF32C:lI101|H3BF3D8
+3BF3D8:lI114|H3BF48C
+3BF48C:lI45|H3BF548
+3BF548:lI112|H3BF60C
+3BF60C:lI97|H3BF6E0
+3BF6E0:lI114|H3BF7B4
+3BF7B4:lI115|H3BF888
+3BF888:lI101|H3BF96C
+3BF96C:lI100|H3BFA48
+3BFA48:lI45|H3BFB1C
+3BFB1C:lI104|H3BFBF0
+3BFBF0:lI116|H3BFCBC
+3BFCBC:lI109|H3BFD80
+3BFD80:lI108|N
+3BEA48:lI115|H3BEB2C
+3BEB2C:lI104|H3BEC08
+3BEC08:lI116|H3BECE4
+3BECE4:lI109|H3BEDC0
+3BEDC0:lI108|N
+3BE970:lH3BEA58|H3BEA64
+3BEA58:t2:H3BEB3C,H3BEB44
+3BEB44:lI116|H3BEC20
+3BEC20:lI101|H3BECFC
+3BECFC:lI120|H3BEDD8
+3BEDD8:lI116|H3BEEA4
+3BEEA4:lI47|H3BEF70
+3BEF70:lI104|H3BF03C
+3BF03C:lI116|H3BF108
+3BF108:lI109|H3BF1C4
+3BF1C4:lI108|N
+3BEB3C:lI104|H3BEC18
+3BEC18:lI116|H3BECF4
+3BECF4:lI109|H3BEDD0
+3BEDD0:lI108|N
+3BEA64:lH3BEB4C|H3BEB58
+3BEB4C:t2:H3BEC28,H3BEC30
+3BEC30:lI116|H3BED0C
+3BED0C:lI101|H3BEDE8
+3BEDE8:lI120|H3BEEAC
+3BEEAC:lI116|H3BEF78
+3BEF78:lI47|H3BF044
+3BF044:lI104|H3BF110
+3BF110:lI116|H3BF1CC
+3BF1CC:lI109|H3BF288
+3BF288:lI108|N
+3BEC28:lI104|H3BED04
+3BED04:lI116|H3BEDE0
+3BEDE0:lI109|N
+3BEB58:lH3BEC38|H3BEC44
+3BEC38:t2:H3BED14,H3BED1C
+3BED1C:lI105|H3BEDF8
+3BEDF8:lI109|H3BEEBC
+3BEEBC:lI97|H3BEF80
+3BEF80:lI103|H3BF04C
+3BF04C:lI101|H3BF118
+3BF118:lI47|H3BF1D4
+3BF1D4:lI120|H3BF290
+3BF290:lI45|H3BF334
+3BF334:lI120|H3BF3E0
+3BF3E0:lI119|H3BF494
+3BF494:lI105|H3BF550
+3BF550:lI110|H3BF614
+3BF614:lI100|H3BF6E8
+3BF6E8:lI111|H3BF7BC
+3BF7BC:lI119|H3BF890
+3BF890:lI100|H3BF974
+3BF974:lI117|H3BFA50
+3BFA50:lI109|H3BFB24
+3BFB24:lI112|N
+3BED14:lI120|H3BEDF0
+3BEDF0:lI119|H3BEEB4
+3BEEB4:lI100|N
+3BEC44:lH3BED24|H3BED30
+3BED24:t2:H3BEE00,H3BEE08
+3BEE08:lI105|H3BEECC
+3BEECC:lI109|H3BEF90
+3BEF90:lI97|H3BF054
+3BF054:lI103|H3BF120
+3BF120:lI101|H3BF1DC
+3BF1DC:lI47|H3BF298
+3BF298:lI120|H3BF33C
+3BF33C:lI45|H3BF3E8
+3BF3E8:lI120|H3BF49C
+3BF49C:lI112|H3BF558
+3BF558:lI105|H3BF61C
+3BF61C:lI120|H3BF6F0
+3BF6F0:lI109|H3BF7C4
+3BF7C4:lI97|H3BF898
+3BF898:lI112|N
+3BEE00:lI120|H3BEEC4
+3BEEC4:lI112|H3BEF88
+3BEF88:lI109|N
+3BED30:lH3BEE10|H3BEE1C
+3BEE10:t2:H3BEED4,H3BEEDC
+3BEEDC:lI105|H3BEFA0
+3BEFA0:lI109|H3BF064
+3BF064:lI97|H3BF128
+3BF128:lI103|H3BF1E4
+3BF1E4:lI101|H3BF2A0
+3BF2A0:lI47|H3BF344
+3BF344:lI120|H3BF3F0
+3BF3F0:lI45|H3BF4A4
+3BF4A4:lI120|H3BF560
+3BF560:lI98|H3BF624
+3BF624:lI105|H3BF6F8
+3BF6F8:lI116|H3BF7CC
+3BF7CC:lI109|H3BF8A0
+3BF8A0:lI97|H3BF97C
+3BF97C:lI112|N
+3BEED4:lI120|H3BEF98
+3BEF98:lI98|H3BF05C
+3BF05C:lI109|N
+3BEE1C:lH3BEEE4|H3BEEF0
+3BEEE4:t2:H3BEFA8,H3BEFB0
+3BEFB0:lI105|H3BF074
+3BF074:lI109|H3BF138
+3BF138:lI97|H3BF1EC
+3BF1EC:lI103|H3BF2A8
+3BF2A8:lI101|H3BF34C
+3BF34C:lI47|H3BF3F8
+3BF3F8:lI120|H3BF4AC
+3BF4AC:lI45|H3BF568
+3BF568:lI114|H3BF62C
+3BF62C:lI103|H3BF700
+3BF700:lI98|N
+3BEFA8:lI114|H3BF06C
+3BF06C:lI103|H3BF130
+3BF130:lI98|N
+3BEEF0:lH3BEFB8|H3BEFC4
+3BEFB8:t2:H3BF07C,H3BF084
+3BF084:lI105|H3BF148
+3BF148:lI109|H3BF1FC
+3BF1FC:lI97|H3BF2B0
+3BF2B0:lI103|H3BF354
+3BF354:lI101|H3BF400
+3BF400:lI47|H3BF4B4
+3BF4B4:lI120|H3BF570
+3BF570:lI45|H3BF634
+3BF634:lI112|H3BF708
+3BF708:lI111|H3BF7D4
+3BF7D4:lI114|H3BF8A8
+3BF8A8:lI116|H3BF984
+3BF984:lI97|H3BFA58
+3BFA58:lI98|H3BFB2C
+3BFB2C:lI108|H3BFBF8
+3BFBF8:lI101|H3BFCC4
+3BFCC4:lI45|H3BFD88
+3BFD88:lI112|H3BFE44
+3BFE44:lI105|H3BFEF0
+3BFEF0:lI120|H3BFFA4
+3BFFA4:lI109|H3C0050
+3C0050:lI97|H3C00FC
+3C00FC:lI112|N
+3BF07C:lI112|H3BF140
+3BF140:lI112|H3BF1F4
+3BF1F4:lI109|N
+3BEFC4:lH3BF08C|H3BF098
+3BF08C:t2:H3BF150,H3BF158
+3BF158:lI105|H3BF20C
+3BF20C:lI109|H3BF2C0
+3BF2C0:lI97|H3BF35C
+3BF35C:lI103|H3BF408
+3BF408:lI101|H3BF4BC
+3BF4BC:lI47|H3BF578
+3BF578:lI120|H3BF63C
+3BF63C:lI45|H3BF710
+3BF710:lI112|H3BF7DC
+3BF7DC:lI111|H3BF8B0
+3BF8B0:lI114|H3BF98C
+3BF98C:lI116|H3BFA60
+3BFA60:lI97|H3BFB34
+3BFB34:lI98|H3BFC00
+3BFC00:lI108|H3BFCCC
+3BFCCC:lI101|H3BFD90
+3BFD90:lI45|H3BFE4C
+3BFE4C:lI103|H3BFEF8
+3BFEF8:lI114|H3BFFAC
+3BFFAC:lI97|H3C0058
+3C0058:lI121|H3C0104
+3C0104:lI109|H3C01A8
+3C01A8:lI97|H3C025C
+3C025C:lI112|N
+3BF150:lI112|H3BF204
+3BF204:lI103|H3BF2B8
+3BF2B8:lI109|N
+3BF098:lH3BF160|H3BF16C
+3BF160:t2:H3BF214,H3BF21C
+3BF21C:lI105|H3BF2D0
+3BF2D0:lI109|H3BF36C
+3BF36C:lI97|H3BF410
+3BF410:lI103|H3BF4C4
+3BF4C4:lI101|H3BF580
+3BF580:lI47|H3BF644
+3BF644:lI120|H3BF718
+3BF718:lI45|H3BF7E4
+3BF7E4:lI112|H3BF8B8
+3BF8B8:lI111|H3BF994
+3BF994:lI114|H3BFA68
+3BFA68:lI116|H3BFB3C
+3BFB3C:lI97|H3BFC08
+3BFC08:lI98|H3BFCD4
+3BFCD4:lI108|H3BFD98
+3BFD98:lI101|H3BFE54
+3BFE54:lI45|H3BFF00
+3BFF00:lI98|H3BFFB4
+3BFFB4:lI105|H3C0060
+3C0060:lI116|H3C010C
+3C010C:lI109|H3C01B0
+3C01B0:lI97|H3C0264
+3C0264:lI112|N
+3BF214:lI112|H3BF2C8
+3BF2C8:lI98|H3BF364
+3BF364:lI109|N
+3BF16C:lH3BF224|H3BF230
+3BF224:t2:H3BF2D8,H3BF2E0
+3BF2E0:lI105|H3BF37C
+3BF37C:lI109|H3BF420
+3BF420:lI97|H3BF4CC
+3BF4CC:lI103|H3BF588
+3BF588:lI101|H3BF64C
+3BF64C:lI47|H3BF720
+3BF720:lI120|H3BF7EC
+3BF7EC:lI45|H3BF8C0
+3BF8C0:lI112|H3BF99C
+3BF99C:lI111|H3BFA70
+3BFA70:lI114|H3BFB44
+3BFB44:lI116|H3BFC10
+3BFC10:lI97|H3BFCDC
+3BFCDC:lI98|H3BFDA0
+3BFDA0:lI108|H3BFE5C
+3BFE5C:lI101|H3BFF08
+3BFF08:lI45|H3BFFBC
+3BFFBC:lI97|H3C0068
+3C0068:lI110|H3C0114
+3C0114:lI121|H3C01B8
+3C01B8:lI109|H3C026C
+3C026C:lI97|H3C0318
+3C0318:lI112|N
+3BF2D8:lI112|H3BF374
+3BF374:lI110|H3BF418
+3BF418:lI109|N
+3BF230:lH3BF2E8|H3BF2F4
+3BF2E8:t2:H3BF384,H3BF38C
+3BF38C:lI105|H3BF430
+3BF430:lI109|H3BF4DC
+3BF4DC:lI97|H3BF590
+3BF590:lI103|H3BF654
+3BF654:lI101|H3BF728
+3BF728:lI47|H3BF7F4
+3BF7F4:lI120|H3BF8C8
+3BF8C8:lI45|H3BF9A4
+3BF9A4:lI99|H3BFA78
+3BFA78:lI109|H3BFB4C
+3BFB4C:lI117|H3BFC18
+3BFC18:lI45|H3BFCE4
+3BFCE4:lI114|H3BFDA8
+3BFDA8:lI97|H3BFE64
+3BFE64:lI115|H3BFF10
+3BFF10:lI116|H3BFFC4
+3BFFC4:lI101|H3C0070
+3C0070:lI114|N
+3BF384:lI114|H3BF428
+3BF428:lI97|H3BF4D4
+3BF4D4:lI115|N
+3BF2F4:lH3BF394|H3BF3A0
+3BF394:t2:H3BF438,H3BF440
+3BF440:lI105|H3BF4EC
+3BF4EC:lI109|H3BF5A0
+3BF5A0:lI97|H3BF664
+3BF664:lI103|H3BF730
+3BF730:lI101|H3BF7FC
+3BF7FC:lI47|H3BF8D0
+3BF8D0:lI116|H3BF9AC
+3BF9AC:lI105|H3BFA80
+3BFA80:lI102|H3BFB54
+3BFB54:lI102|N
+3BF438:lI116|H3BF4E4
+3BF4E4:lI105|H3BF598
+3BF598:lI102|H3BF65C
+3BF65C:lI102|N
+3BF3A0:lH3BF448|H3BF454
+3BF448:t2:H3BF4F4,H3BF4FC
+3BF4FC:lI105|H3BF5B0
+3BF5B0:lI109|H3BF674
+3BF674:lI97|H3BF738
+3BF738:lI103|H3BF804
+3BF804:lI101|H3BF8D8
+3BF8D8:lI47|H3BF9B4
+3BF9B4:lI116|H3BFA88
+3BFA88:lI105|H3BFB5C
+3BFB5C:lI102|H3BFC20
+3BFC20:lI102|N
+3BF4F4:lI116|H3BF5A8
+3BF5A8:lI105|H3BF66C
+3BF66C:lI102|N
+3BF454:lH3BF504|H3BF510
+3BF504:t2:H3BF5B8,H3BF5C0
+3BF5C0:lI105|H3BF684
+3BF684:lI109|H3BF748
+3BF748:lI97|H3BF80C
+3BF80C:lI103|H3BF8E0
+3BF8E0:lI101|H3BF9BC
+3BF9BC:lI47|H3BFA90
+3BFA90:lI112|H3BFB64
+3BFB64:lI110|H3BFC28
+3BFC28:lI103|N
+3BF5B8:lI112|H3BF67C
+3BF67C:lI110|H3BF740
+3BF740:lI103|N
+3BF510:lH3BF5C8|H3BF5D4
+3BF5C8:t2:H3BF68C,H3BF694
+3BF694:lI105|H3BF758
+3BF758:lI109|H3BF81C
+3BF81C:lI97|H3BF8F0
+3BF8F0:lI103|H3BF9C4
+3BF9C4:lI101|H3BFA98
+3BFA98:lI47|H3BFB6C
+3BFB6C:lI106|H3BFC30
+3BFC30:lI112|H3BFCEC
+3BFCEC:lI101|H3BFDB0
+3BFDB0:lI103|N
+3BF68C:lI106|H3BF750
+3BF750:lI112|H3BF814
+3BF814:lI101|H3BF8E8
+3BF8E8:lI103|N
+3BF5D4:lH3BF69C|H3BF6A8
+3BF69C:t2:H3BF760,H3BF768
+3BF768:lI105|H3BF82C
+3BF82C:lI109|H3BF900
+3BF900:lI97|H3BF9CC
+3BF9CC:lI103|H3BFAA0
+3BFAA0:lI101|H3BFB74
+3BFB74:lI47|H3BFC38
+3BFC38:lI106|H3BFCF4
+3BFCF4:lI112|H3BFDB8
+3BFDB8:lI101|H3BFE6C
+3BFE6C:lI103|N
+3BF760:lI106|H3BF824
+3BF824:lI112|H3BF8F8
+3BF8F8:lI103|N
+3BF6A8:lH3BF770|H3BF77C
+3BF770:t2:H3BF834,H3BF83C
+3BF83C:lI105|H3BF910
+3BF910:lI109|H3BF9DC
+3BF9DC:lI97|H3BFAA8
+3BFAA8:lI103|H3BFB7C
+3BFB7C:lI101|H3BFC40
+3BFC40:lI47|H3BFCFC
+3BFCFC:lI106|H3BFDC0
+3BFDC0:lI112|H3BFE74
+3BFE74:lI101|H3BFF18
+3BFF18:lI103|N
+3BF834:lI106|H3BF908
+3BF908:lI112|H3BF9D4
+3BF9D4:lI101|N
+3BF77C:lH3BF844|H3BF850
+3BF844:t2:H3BF918,H3BF920
+3BF920:lI105|H3BF9EC
+3BF9EC:lI109|H3BFAB8
+3BFAB8:lI97|H3BFB84
+3BFB84:lI103|H3BFC48
+3BFC48:lI101|H3BFD04
+3BFD04:lI47|H3BFDC8
+3BFDC8:lI105|H3BFE7C
+3BFE7C:lI101|H3BFF20
+3BFF20:lI102|N
+3BF918:lI105|H3BF9E4
+3BF9E4:lI101|H3BFAB0
+3BFAB0:lI102|N
+3BF850:lH3BF928|H3BF934
+3BF928:t2:H3BF9F4,H3BF9FC
+3BF9FC:lI105|H3BFAC8
+3BFAC8:lI109|H3BFB94
+3BFB94:lI97|H3BFC50
+3BFC50:lI103|H3BFD0C
+3BFD0C:lI101|H3BFDD0
+3BFDD0:lI47|H3BFE84
+3BFE84:lI103|H3BFF28
+3BFF28:lI105|H3BFFCC
+3BFFCC:lI102|N
+3BF9F4:lI103|H3BFAC0
+3BFAC0:lI105|H3BFB8C
+3BFB8C:lI102|N
+3BF934:lH3BFA04|H3BFA10
+3BFA04:t2:H3BFAD0,H3BFAD8
+3BFAD8:lI99|H3BFBA4
+3BFBA4:lI104|H3BFC60
+3BFC60:lI101|H3BFD14
+3BFD14:lI109|H3BFDD8
+3BFDD8:lI105|H3BFE8C
+3BFE8C:lI99|H3BFF30
+3BFF30:lI97|H3BFFD4
+3BFFD4:lI108|H3C0078
+3C0078:lI47|H3C011C
+3C011C:lI120|H3C01C0
+3C01C0:lI45|H3C0274
+3C0274:lI112|H3C0320
+3C0320:lI100|H3C03CC
+3C03CC:lI98|N
+3BFAD0:lI112|H3BFB9C
+3BFB9C:lI100|H3BFC58
+3BFC58:lI98|N
+3BFA10:lH3BFAE0|H3BFAEC
+3BFAE0:t2:H3BFBAC,H3BFBB4
+3BFBB4:lI99|H3BFC70
+3BFC70:lI104|H3BFD24
+3BFD24:lI101|H3BFDE0
+3BFDE0:lI109|H3BFE94
+3BFE94:lI105|H3BFF38
+3BFF38:lI99|H3BFFDC
+3BFFDC:lI97|H3C0080
+3C0080:lI108|H3C0124
+3C0124:lI47|H3C01C8
+3C01C8:lI120|H3C027C
+3C027C:lI45|H3C0328
+3C0328:lI112|H3C03D4
+3C03D4:lI100|H3C0460
+3C0460:lI98|N
+3BFBAC:lI120|H3BFC68
+3BFC68:lI121|H3BFD1C
+3BFD1C:lI122|N
+3BFAEC:lH3BFBBC|H3BFBC8
+3BFBBC:t2:H3BFC78,H3BFC80
+3BFC80:lI97|H3BFD34
+3BFD34:lI117|H3BFDF0
+3BFDF0:lI100|H3BFE9C
+3BFE9C:lI105|H3BFF40
+3BFF40:lI111|H3BFFE4
+3BFFE4:lI47|H3C0088
+3C0088:lI120|H3C012C
+3C012C:lI45|H3C01D0
+3C01D0:lI119|H3C0284
+3C0284:lI97|H3C0330
+3C0330:lI118|N
+3BFC78:lI119|H3BFD2C
+3BFD2C:lI97|H3BFDE8
+3BFDE8:lI118|N
+3BFBC8:lH3BFC88|H3BFC94
+3BFC88:t2:H3BFD3C,H3BFD44
+3BFD44:lI97|H3BFE00
+3BFE00:lI117|H3BFEA4
+3BFEA4:lI100|H3BFF48
+3BFF48:lI105|H3BFFEC
+3BFFEC:lI111|H3C0090
+3C0090:lI47|H3C0134
+3C0134:lI120|H3C01D8
+3C01D8:lI45|H3C028C
+3C028C:lI114|H3C0338
+3C0338:lI101|H3C03DC
+3C03DC:lI97|H3C0468
+3C0468:lI108|H3C04FC
+3C04FC:lI97|H3C0598
+3C0598:lI117|H3C063C
+3C063C:lI100|H3C06E8
+3C06E8:lI105|H3C0794
+3C0794:lI111|N
+3BFD3C:lI114|H3BFDF8
+3BFDF8:lI97|N
+3BFC94:lH3BFD4C|H3BFD58
+3BFD4C:t2:H3BFE08,H3BFE10
+3BFE10:lI97|H3BFEB4
+3BFEB4:lI117|H3BFF58
+3BFF58:lI100|H3BFFF4
+3BFFF4:lI105|H3C0098
+3C0098:lI111|H3C013C
+3C013C:lI47|H3C01E0
+3C01E0:lI120|H3C0294
+3C0294:lI45|H3C0340
+3C0340:lI112|H3C03E4
+3C03E4:lI110|H3C0470
+3C0470:lI45|H3C0504
+3C0504:lI114|H3C05A0
+3C05A0:lI101|H3C0644
+3C0644:lI97|H3C06F0
+3C06F0:lI108|H3C079C
+3C079C:lI97|H3C0838
+3C0838:lI117|H3C08C4
+3C08C4:lI100|H3C0958
+3C0958:lI105|H3C09EC
+3C09EC:lI111|H3C0A88
+3C0A88:lI45|H3C0B2C
+3C0B2C:lI112|H3C0BD0
+3C0BD0:lI108|H3C0C84
+3C0C84:lI117|H3C0D38
+3C0D38:lI103|H3C0DEC
+3C0DEC:lI105|H3C0EA0
+3C0EA0:lI110|N
+3BFE08:lI114|H3BFEAC
+3BFEAC:lI112|H3BFF50
+3BFF50:lI109|N
+3BFD58:lH3BFE18|H3BFE24
+3BFE18:t2:H3BFEBC,H3BFEC4
+3BFEC4:lI97|H3BFF68
+3BFF68:lI117|H3C0004
+3C0004:lI100|H3C00A0
+3C00A0:lI105|H3C0144
+3C0144:lI111|H3C01E8
+3C01E8:lI47|H3C029C
+3C029C:lI120|H3C0348
+3C0348:lI45|H3C03EC
+3C03EC:lI112|H3C0478
+3C0478:lI110|H3C050C
+3C050C:lI45|H3C05A8
+3C05A8:lI114|H3C064C
+3C064C:lI101|H3C06F8
+3C06F8:lI97|H3C07A4
+3C07A4:lI108|H3C0840
+3C0840:lI97|H3C08CC
+3C08CC:lI117|H3C0960
+3C0960:lI100|H3C09F4
+3C09F4:lI105|H3C0A90
+3C0A90:lI111|N
+3BFEBC:lI114|H3BFF60
+3BFF60:lI97|H3BFFFC
+3BFFFC:lI109|N
+3BFE24:lH3BFECC|H3BFED8
+3BFECC:t2:H3BFF70,H3BFF78
+3BFF78:lI97|H3C0014
+3C0014:lI117|H3C00B0
+3C00B0:lI100|H3C014C
+3C014C:lI105|H3C01F0
+3C01F0:lI111|H3C02A4
+3C02A4:lI47|H3C0350
+3C0350:lI120|H3C03F4
+3C03F4:lI45|H3C0480
+3C0480:lI97|H3C0514
+3C0514:lI105|H3C05B0
+3C05B0:lI102|H3C0654
+3C0654:lI102|N
+3BFF70:lI97|H3C000C
+3C000C:lI105|H3C00A8
+3C00A8:lI102|N
+3BFED8:lH3BFF80|H3BFF8C
+3BFF80:t2:H3C001C,H3C0024
+3C0024:lI97|H3C00C0
+3C00C0:lI117|H3C015C
+3C015C:lI100|H3C0200
+3C0200:lI105|H3C02AC
+3C02AC:lI111|H3C0358
+3C0358:lI47|H3C03FC
+3C03FC:lI120|H3C0488
+3C0488:lI45|H3C051C
+3C051C:lI97|H3C05B8
+3C05B8:lI105|H3C065C
+3C065C:lI102|H3C0700
+3C0700:lI102|N
+3C001C:lI97|H3C00B8
+3C00B8:lI105|H3C0154
+3C0154:lI102|H3C01F8
+3C01F8:lI102|N
+3BFF8C:lH3C002C|H3C0038
+3C002C:t2:H3C00C8,H3C00D0
+3C00D0:lI97|H3C016C
+3C016C:lI117|H3C0210
+3C0210:lI100|H3C02BC
+3C02BC:lI105|H3C0360
+3C0360:lI111|H3C0404
+3C0404:lI47|H3C0490
+3C0490:lI120|H3C0524
+3C0524:lI45|H3C05C0
+3C05C0:lI97|H3C0664
+3C0664:lI105|H3C0708
+3C0708:lI102|H3C07AC
+3C07AC:lI102|N
+3C00C8:lI97|H3C0164
+3C0164:lI105|H3C0208
+3C0208:lI102|H3C02B4
+3C02B4:lI99|N
+3C0038:lH3C00D8|H3C00E4
+3C00D8:t2:H3C0174,H3C017C
+3C017C:lI97|H3C0220
+3C0220:lI117|H3C02CC
+3C02CC:lI100|H3C0370
+3C0370:lI105|H3C040C
+3C040C:lI111|H3C0498
+3C0498:lI47|H3C052C
+3C052C:lI109|H3C05C8
+3C05C8:lI112|H3C066C
+3C066C:lI101|H3C0710
+3C0710:lI103|N
+3C0174:lI109|H3C0218
+3C0218:lI112|H3C02C4
+3C02C4:lI103|H3C0368
+3C0368:lI97|N
+3C00E4:lH3C0184|H3C0190
+3C0184:t2:H3C0228,H3C0230
+3C0230:lI97|H3C02DC
+3C02DC:lI117|H3C0380
+3C0380:lI100|H3C0414
+3C0414:lI105|H3C04A0
+3C04A0:lI111|H3C0534
+3C0534:lI47|H3C05D0
+3C05D0:lI109|H3C0674
+3C0674:lI112|H3C0718
+3C0718:lI101|H3C07B4
+3C07B4:lI103|N
+3C0228:lI109|H3C02D4
+3C02D4:lI112|H3C0378
+3C0378:lI50|N
+3C0190:lH3C0238|H3C0244
+3C0238:t2:H3C02E4,H3C02EC
+3C02EC:lI97|H3C0390
+3C0390:lI117|H3C041C
+3C041C:lI100|H3C04A8
+3C04A8:lI105|H3C053C
+3C053C:lI111|H3C05D8
+3C05D8:lI47|H3C067C
+3C067C:lI98|H3C0720
+3C0720:lI97|H3C07BC
+3C07BC:lI115|H3C0848
+3C0848:lI105|H3C08D4
+3C08D4:lI99|N
+3C02E4:lI97|H3C0388
+3C0388:lI117|N
+3C0244:lH3C02F4|H3C0300
+3C02F4:t2:H3C0398,H3C03A0
+3C03A0:lI97|H3C042C
+3C042C:lI117|H3C04B8
+3C04B8:lI100|H3C0544
+3C0544:lI105|H3C05E0
+3C05E0:lI111|H3C0684
+3C0684:lI47|H3C0728
+3C0728:lI98|H3C07C4
+3C07C4:lI97|H3C0850
+3C0850:lI115|H3C08DC
+3C08DC:lI105|H3C0968
+3C0968:lI99|N
+3C0398:lI115|H3C0424
+3C0424:lI110|H3C04B0
+3C04B0:lI100|N
+3C0300:lH3C03A8|H3C03B4
+3C03A8:t2:H3C0434,H3C043C
+3C043C:lI97|H3C04C8
+3C04C8:lI112|H3C0554
+3C0554:lI112|H3C05E8
+3C05E8:lI108|H3C068C
+3C068C:lI105|H3C0730
+3C0730:lI99|H3C07CC
+3C07CC:lI97|H3C0858
+3C0858:lI116|H3C08E4
+3C08E4:lI105|H3C0970
+3C0970:lI111|H3C09FC
+3C09FC:lI110|H3C0A98
+3C0A98:lI47|H3C0B34
+3C0B34:lI122|H3C0BD8
+3C0BD8:lI105|H3C0C8C
+3C0C8C:lI112|N
+3C0434:lI122|H3C04C0
+3C04C0:lI105|H3C054C
+3C054C:lI112|N
+3C03B4:lH3C0444|H3C0450
+3C0444:t2:H3C04D0,H3C04D8
+3C04D8:lI97|H3C0564
+3C0564:lI112|H3C05F8
+3C05F8:lI112|H3C0694
+3C0694:lI108|H3C0738
+3C0738:lI105|H3C07D4
+3C07D4:lI99|H3C0860
+3C0860:lI97|H3C08EC
+3C08EC:lI116|H3C0978
+3C0978:lI105|H3C0A04
+3C0A04:lI111|H3C0AA0
+3C0AA0:lI110|H3C0B3C
+3C0B3C:lI47|H3C0BE0
+3C0BE0:lI120|H3C0C94
+3C0C94:lI45|H3C0D40
+3C0D40:lI119|H3C0DF4
+3C0DF4:lI97|H3C0EA8
+3C0EA8:lI105|H3C0F64
+3C0F64:lI115|H3C1030
+3C1030:lI45|H3C1104
+3C1104:lI115|H3C11D8
+3C11D8:lI111|H3C12A4
+3C12A4:lI117|H3C1378
+3C1378:lI114|H3C1454
+3C1454:lI99|H3C1538
+3C1538:lI101|N
+3C04D0:lI115|H3C055C
+3C055C:lI114|H3C05F0
+3C05F0:lI99|N
+3C0450:lH3C04E0|H3C04EC
+3C04E0:t2:H3C056C,H3C0574
+3C0574:lI97|H3C0608
+3C0608:lI112|H3C06A4
+3C06A4:lI112|H3C0748
+3C0748:lI108|H3C07E4
+3C07E4:lI105|H3C0868
+3C0868:lI99|H3C08F4
+3C08F4:lI97|H3C0980
+3C0980:lI116|H3C0A0C
+3C0A0C:lI105|H3C0AA8
+3C0AA8:lI111|H3C0B44
+3C0B44:lI110|H3C0BE8
+3C0BE8:lI47|H3C0C9C
+3C0C9C:lI120|H3C0D48
+3C0D48:lI45|H3C0DFC
+3C0DFC:lI117|H3C0EB0
+3C0EB0:lI115|H3C0F6C
+3C0F6C:lI116|H3C1038
+3C1038:lI97|H3C110C
+3C110C:lI114|N
+3C056C:lI117|H3C0600
+3C0600:lI115|H3C069C
+3C069C:lI116|H3C0740
+3C0740:lI97|H3C07DC
+3C07DC:lI114|N
+3C04EC:lH3C057C|H3C0588
+3C057C:t2:H3C0610,H3C0618
+3C0618:lI97|H3C06B4
+3C06B4:lI112|H3C0750
+3C0750:lI112|H3C07EC
+3C07EC:lI108|H3C0870
+3C0870:lI105|H3C08FC
+3C08FC:lI99|H3C0988
+3C0988:lI97|H3C0A14
+3C0A14:lI116|H3C0AB0
+3C0AB0:lI105|H3C0B4C
+3C0B4C:lI111|H3C0BF0
+3C0BF0:lI110|H3C0CA4
+3C0CA4:lI47|H3C0D50
+3C0D50:lI120|H3C0E04
+3C0E04:lI45|H3C0EB8
+3C0EB8:lI116|H3C0F74
+3C0F74:lI114|H3C1040
+3C1040:lI111|H3C1114
+3C1114:lI102|H3C11E0
+3C11E0:lI102|H3C12AC
+3C12AC:lI45|H3C1380
+3C1380:lI109|H3C145C
+3C145C:lI115|N
+3C0610:lI109|H3C06AC
+3C06AC:lI115|N
+3C0588:lH3C0620|H3C062C
+3C0620:t2:H3C06BC,H3C06C4
+3C06C4:lI97|H3C0760
+3C0760:lI112|H3C07F4
+3C07F4:lI112|H3C0878
+3C0878:lI108|H3C0904
+3C0904:lI105|H3C0990
+3C0990:lI99|H3C0A1C
+3C0A1C:lI97|H3C0AB8
+3C0AB8:lI116|H3C0B54
+3C0B54:lI105|H3C0BF8
+3C0BF8:lI111|H3C0CAC
+3C0CAC:lI110|H3C0D58
+3C0D58:lI47|H3C0E0C
+3C0E0C:lI120|H3C0EC0
+3C0EC0:lI45|H3C0F7C
+3C0F7C:lI116|H3C1048
+3C1048:lI114|H3C111C
+3C111C:lI111|H3C11E8
+3C11E8:lI102|H3C12B4
+3C12B4:lI102|H3C1388
+3C1388:lI45|H3C1464
+3C1464:lI109|H3C1540
+3C1540:lI101|N
+3C06BC:lI109|H3C0758
+3C0758:lI101|N
+3C062C:lH3C06CC|H3C06D8
+3C06CC:t2:H3C0768,H3C0770
+3C0770:lI97|H3C0804
+3C0804:lI112|H3C0888
+3C0888:lI112|H3C090C
+3C090C:lI108|H3C0998
+3C0998:lI105|H3C0A24
+3C0A24:lI99|H3C0AC0
+3C0AC0:lI97|H3C0B5C
+3C0B5C:lI116|H3C0C00
+3C0C00:lI105|H3C0CB4
+3C0CB4:lI111|H3C0D60
+3C0D60:lI110|H3C0E14
+3C0E14:lI47|H3C0EC8
+3C0EC8:lI120|H3C0F84
+3C0F84:lI45|H3C1050
+3C1050:lI116|H3C1124
+3C1124:lI114|H3C11F0
+3C11F0:lI111|H3C12BC
+3C12BC:lI102|H3C1390
+3C1390:lI102|H3C146C
+3C146C:lI45|H3C1548
+3C1548:lI109|H3C161C
+3C161C:lI97|H3C16F0
+3C16F0:lI110|N
+3C0768:lI109|H3C07FC
+3C07FC:lI97|H3C0880
+3C0880:lI110|N
+3C06D8:lH3C0778|H3C0784
+3C0778:t2:H3C080C,H3C0814
+3C0814:lI97|H3C0890
+3C0890:lI112|H3C0914
+3C0914:lI112|H3C09A0
+3C09A0:lI108|H3C0A2C
+3C0A2C:lI105|H3C0AC8
+3C0AC8:lI99|H3C0B64
+3C0B64:lI97|H3C0C08
+3C0C08:lI116|H3C0CBC
+3C0CBC:lI105|H3C0D68
+3C0D68:lI111|H3C0E1C
+3C0E1C:lI110|H3C0ED0
+3C0ED0:lI47|H3C0F8C
+3C0F8C:lI120|H3C1058
+3C1058:lI45|H3C112C
+3C112C:lI116|H3C11F8
+3C11F8:lI114|H3C12C4
+3C12C4:lI111|H3C1398
+3C1398:lI102|H3C1474
+3C1474:lI102|N
+3C080C:lI116|N
+3C0784:lH3C081C|H3C0828
+3C081C:t2:H3C0898,H3C08A0
+3C08A0:lI97|H3C0924
+3C0924:lI112|H3C09A8
+3C09A8:lI112|H3C0A34
+3C0A34:lI108|H3C0AD0
+3C0AD0:lI105|H3C0B6C
+3C0B6C:lI99|H3C0C10
+3C0C10:lI97|H3C0CC4
+3C0CC4:lI116|H3C0D70
+3C0D70:lI105|H3C0E24
+3C0E24:lI111|H3C0ED8
+3C0ED8:lI110|H3C0F94
+3C0F94:lI47|H3C1060
+3C1060:lI120|H3C1134
+3C1134:lI45|H3C1200
+3C1200:lI116|H3C12CC
+3C12CC:lI114|H3C13A0
+3C13A0:lI111|H3C147C
+3C147C:lI102|H3C1550
+3C1550:lI102|N
+3C0898:lI116|H3C091C
+3C091C:lI114|N
+3C0828:lH3C08A8|H3C08B4
+3C08A8:t2:H3C092C,H3C0934
+3C0934:lI97|H3C09B8
+3C09B8:lI112|H3C0A44
+3C0A44:lI112|H3C0AE0
+3C0AE0:lI108|H3C0B74
+3C0B74:lI105|H3C0C18
+3C0C18:lI99|H3C0CCC
+3C0CCC:lI97|H3C0D78
+3C0D78:lI116|H3C0E2C
+3C0E2C:lI105|H3C0EE0
+3C0EE0:lI111|H3C0F9C
+3C0F9C:lI110|H3C1068
+3C1068:lI47|H3C113C
+3C113C:lI120|H3C1208
+3C1208:lI45|H3C12D4
+3C12D4:lI116|H3C13A8
+3C13A8:lI114|H3C1484
+3C1484:lI111|H3C1558
+3C1558:lI102|H3C1624
+3C1624:lI102|N
+3C092C:lI114|H3C09B0
+3C09B0:lI111|H3C0A3C
+3C0A3C:lI102|H3C0AD8
+3C0AD8:lI102|N
+3C08B4:lH3C093C|H3C0948
+3C093C:t2:H3C09C0,H3C09C8
+3C09C8:lI97|H3C0A54
+3C0A54:lI112|H3C0AF0
+3C0AF0:lI112|H3C0B84
+3C0B84:lI108|H3C0C28
+3C0C28:lI105|H3C0CDC
+3C0CDC:lI99|H3C0D88
+3C0D88:lI97|H3C0E34
+3C0E34:lI116|H3C0EE8
+3C0EE8:lI105|H3C0FA4
+3C0FA4:lI111|H3C1070
+3C1070:lI110|H3C1144
+3C1144:lI47|H3C1210
+3C1210:lI120|H3C12DC
+3C12DC:lI45|H3C13B0
+3C13B0:lI116|H3C148C
+3C148C:lI101|H3C1560
+3C1560:lI120|H3C162C
+3C162C:lI105|H3C16F8
+3C16F8:lI110|H3C17BC
+3C17BC:lI102|H3C1880
+3C1880:lI111|N
+3C09C0:lI116|H3C0A4C
+3C0A4C:lI101|H3C0AE8
+3C0AE8:lI120|H3C0B7C
+3C0B7C:lI105|H3C0C20
+3C0C20:lI110|H3C0CD4
+3C0CD4:lI102|H3C0D80
+3C0D80:lI111|N
+3C0948:lH3C09D0|H3C09DC
+3C09D0:t2:H3C0A5C,H3C0A64
+3C0A64:lI97|H3C0B00
+3C0B00:lI112|H3C0B94
+3C0B94:lI112|H3C0C38
+3C0C38:lI108|H3C0CE4
+3C0CE4:lI105|H3C0D90
+3C0D90:lI99|H3C0E3C
+3C0E3C:lI97|H3C0EF0
+3C0EF0:lI116|H3C0FAC
+3C0FAC:lI105|H3C1078
+3C1078:lI111|H3C114C
+3C114C:lI110|H3C1218
+3C1218:lI47|H3C12E4
+3C12E4:lI120|H3C13B8
+3C13B8:lI45|H3C1494
+3C1494:lI116|H3C1568
+3C1568:lI101|H3C1634
+3C1634:lI120|H3C1700
+3C1700:lI105|H3C17C4
+3C17C4:lI110|H3C1888
+3C1888:lI102|H3C1944
+3C1944:lI111|N
+3C0A5C:lI116|H3C0AF8
+3C0AF8:lI101|H3C0B8C
+3C0B8C:lI120|H3C0C30
+3C0C30:lI105|N
+3C09DC:lH3C0A6C|H3C0A78
+3C0A6C:t2:H3C0B08,H3C0B10
+3C0B10:lI97|H3C0BA4
+3C0BA4:lI112|H3C0C48
+3C0C48:lI112|H3C0CEC
+3C0CEC:lI108|H3C0D98
+3C0D98:lI105|H3C0E44
+3C0E44:lI99|H3C0EF8
+3C0EF8:lI97|H3C0FB4
+3C0FB4:lI116|H3C1080
+3C1080:lI105|H3C1154
+3C1154:lI111|H3C1220
+3C1220:lI110|H3C12EC
+3C12EC:lI47|H3C13C0
+3C13C0:lI120|H3C149C
+3C149C:lI45|H3C1570
+3C1570:lI116|H3C163C
+3C163C:lI101|H3C1708
+3C1708:lI120|N
+3C0B08:lI116|H3C0B9C
+3C0B9C:lI101|H3C0C40
+3C0C40:lI120|N
+3C0A78:lH3C0B18|H3C0B24
+3C0B18:t2:H3C0BAC,H3C0BB4
+3C0BB4:lI97|H3C0C58
+3C0C58:lI112|H3C0CFC
+3C0CFC:lI112|H3C0DA0
+3C0DA0:lI108|H3C0E4C
+3C0E4C:lI105|H3C0F00
+3C0F00:lI99|H3C0FBC
+3C0FBC:lI97|H3C1088
+3C1088:lI116|H3C115C
+3C115C:lI105|H3C1228
+3C1228:lI111|H3C12F4
+3C12F4:lI110|H3C13C8
+3C13C8:lI47|H3C14A4
+3C14A4:lI120|H3C1578
+3C1578:lI45|H3C1644
+3C1644:lI116|H3C1710
+3C1710:lI99|H3C17CC
+3C17CC:lI108|N
+3C0BAC:lI116|H3C0C50
+3C0C50:lI99|H3C0CF4
+3C0CF4:lI108|N
+3C0B24:lH3C0BBC|H3C0BC8
+3C0BBC:t2:H3C0C60,H3C0C68
+3C0C68:lI97|H3C0D0C
+3C0D0C:lI112|H3C0DB0
+3C0DB0:lI112|H3C0E54
+3C0E54:lI108|H3C0F08
+3C0F08:lI105|H3C0FC4
+3C0FC4:lI99|H3C1090
+3C1090:lI97|H3C1164
+3C1164:lI116|H3C1230
+3C1230:lI105|H3C12FC
+3C12FC:lI111|H3C13D0
+3C13D0:lI110|H3C14AC
+3C14AC:lI47|H3C1580
+3C1580:lI120|H3C164C
+3C164C:lI45|H3C1718
+3C1718:lI116|H3C17D4
+3C17D4:lI97|H3C1890
+3C1890:lI114|N
+3C0C60:lI116|H3C0D04
+3C0D04:lI97|H3C0DA8
+3C0DA8:lI114|N
+3C0BC8:lH3C0C70|H3C0C7C
+3C0C70:t2:H3C0D14,H3C0D1C
+3C0D1C:lI97|H3C0DC0
+3C0DC0:lI112|H3C0E64
+3C0E64:lI112|H3C0F18
+3C0F18:lI108|H3C0FD4
+3C0FD4:lI105|H3C10A0
+3C10A0:lI99|H3C116C
+3C116C:lI97|H3C1238
+3C1238:lI116|H3C1304
+3C1304:lI105|H3C13D8
+3C13D8:lI111|H3C14B4
+3C14B4:lI110|H3C1588
+3C1588:lI47|H3C1654
+3C1654:lI120|H3C1720
+3C1720:lI45|H3C17DC
+3C17DC:lI115|H3C1898
+3C1898:lI118|H3C194C
+3C194C:lI52|H3C1A00
+3C1A00:lI99|H3C1AB4
+3C1AB4:lI114|H3C1B78
+3C1B78:lI99|N
+3C0D14:lI115|H3C0DB8
+3C0DB8:lI118|H3C0E5C
+3C0E5C:lI52|H3C0F10
+3C0F10:lI99|H3C0FCC
+3C0FCC:lI114|H3C1098
+3C1098:lI99|N
+3C0C7C:lH3C0D24|H3C0D30
+3C0D24:t2:H3C0DC8,H3C0DD0
+3C0DD0:lI97|H3C0E74
+3C0E74:lI112|H3C0F28
+3C0F28:lI112|H3C0FE4
+3C0FE4:lI108|H3C10B0
+3C10B0:lI105|H3C117C
+3C117C:lI99|H3C1248
+3C1248:lI97|H3C130C
+3C130C:lI116|H3C13E0
+3C13E0:lI105|H3C14BC
+3C14BC:lI111|H3C1590
+3C1590:lI110|H3C165C
+3C165C:lI47|H3C1728
+3C1728:lI120|H3C17E4
+3C17E4:lI45|H3C18A0
+3C18A0:lI115|H3C1954
+3C1954:lI118|H3C1A08
+3C1A08:lI52|H3C1ABC
+3C1ABC:lI99|H3C1B80
+3C1B80:lI112|H3C1C4C
+3C1C4C:lI105|H3C1D10
+3C1D10:lI111|N
+3C0DC8:lI115|H3C0E6C
+3C0E6C:lI118|H3C0F20
+3C0F20:lI52|H3C0FDC
+3C0FDC:lI99|H3C10A8
+3C10A8:lI112|H3C1174
+3C1174:lI105|H3C1240
+3C1240:lI111|N
+3C0D30:lH3C0DD8|H3C0DE4
+3C0DD8:t2:H3C0E7C,H3C0E84
+3C0E84:lI97|H3C0F38
+3C0F38:lI112|H3C0FF4
+3C0FF4:lI112|H3C10B8
+3C10B8:lI108|H3C1184
+3C1184:lI105|H3C1250
+3C1250:lI99|H3C1314
+3C1314:lI97|H3C13E8
+3C13E8:lI116|H3C14C4
+3C14C4:lI105|H3C1598
+3C1598:lI111|H3C1664
+3C1664:lI110|H3C1730
+3C1730:lI47|H3C17EC
+3C17EC:lI120|H3C18A8
+3C18A8:lI45|H3C195C
+3C195C:lI115|H3C1A10
+3C1A10:lI116|H3C1AC4
+3C1AC4:lI117|H3C1B88
+3C1B88:lI102|H3C1C54
+3C1C54:lI102|H3C1D18
+3C1D18:lI105|H3C1DD4
+3C1DD4:lI116|N
+3C0E7C:lI115|H3C0F30
+3C0F30:lI105|H3C0FEC
+3C0FEC:lI116|N
+3C0DE4:lH3C0E8C|H3C0E98
+3C0E8C:t2:H3C0F40,H3C0F48
+3C0F48:lI97|H3C1004
+3C1004:lI112|H3C10C8
+3C10C8:lI112|H3C1194
+3C1194:lI108|H3C1258
+3C1258:lI105|H3C131C
+3C131C:lI99|H3C13F0
+3C13F0:lI97|H3C14CC
+3C14CC:lI116|H3C15A0
+3C15A0:lI105|H3C166C
+3C166C:lI111|H3C1738
+3C1738:lI110|H3C17F4
+3C17F4:lI47|H3C18B0
+3C18B0:lI120|H3C1964
+3C1964:lI45|H3C1A18
+3C1A18:lI115|H3C1ACC
+3C1ACC:lI104|H3C1B90
+3C1B90:lI97|H3C1C5C
+3C1C5C:lI114|N
+3C0F40:lI115|H3C0FFC
+3C0FFC:lI104|H3C10C0
+3C10C0:lI97|H3C118C
+3C118C:lI114|N
+3C0E98:lH3C0F50|H3C0F5C
+3C0F50:t2:H3C100C,H3C1014
+3C1014:lI97|H3C10D8
+3C10D8:lI112|H3C119C
+3C119C:lI112|H3C1260
+3C1260:lI108|H3C1324
+3C1324:lI105|H3C13F8
+3C13F8:lI99|H3C14D4
+3C14D4:lI97|H3C15A8
+3C15A8:lI116|H3C1674
+3C1674:lI105|H3C1740
+3C1740:lI111|H3C17FC
+3C17FC:lI110|H3C18B8
+3C18B8:lI47|H3C196C
+3C196C:lI120|H3C1A20
+3C1A20:lI45|H3C1AD4
+3C1AD4:lI115|H3C1B98
+3C1B98:lI104|N
+3C100C:lI115|H3C10D0
+3C10D0:lI104|N
+3C0F5C:lH3C101C|H3C1028
+3C101C:t2:H3C10E0,H3C10E8
+3C10E8:lI97|H3C11AC
+3C11AC:lI112|H3C1268
+3C1268:lI112|H3C132C
+3C132C:lI108|H3C1400
+3C1400:lI105|H3C14DC
+3C14DC:lI99|H3C15B0
+3C15B0:lI97|H3C167C
+3C167C:lI116|H3C1748
+3C1748:lI105|H3C1804
+3C1804:lI111|H3C18C0
+3C18C0:lI110|H3C1974
+3C1974:lI47|H3C1A28
+3C1A28:lI120|H3C1ADC
+3C1ADC:lI45|H3C1BA0
+3C1BA0:lI110|H3C1C64
+3C1C64:lI101|H3C1D20
+3C1D20:lI116|H3C1DDC
+3C1DDC:lI99|H3C1E98
+3C1E98:lI100|H3C1F5C
+3C1F5C:lI102|N
+3C10E0:lI110|H3C11A4
+3C11A4:lI99|N
+3C1028:lH3C10F0|H3C10FC
+3C10F0:t2:H3C11B4,H3C11BC
+3C11BC:lI97|H3C1278
+3C1278:lI112|H3C133C
+3C133C:lI112|H3C1408
+3C1408:lI108|H3C14E4
+3C14E4:lI105|H3C15B8
+3C15B8:lI99|H3C1684
+3C1684:lI97|H3C1750
+3C1750:lI116|H3C180C
+3C180C:lI105|H3C18C8
+3C18C8:lI111|H3C197C
+3C197C:lI110|H3C1A30
+3C1A30:lI47|H3C1AE4
+3C1AE4:lI120|H3C1BA8
+3C1BA8:lI45|H3C1C6C
+3C1C6C:lI110|H3C1D28
+3C1D28:lI101|H3C1DE4
+3C1DE4:lI116|H3C1EA0
+3C1EA0:lI99|H3C1F64
+3C1F64:lI100|H3C2018
+3C2018:lI102|N
+3C11B4:lI99|H3C1270
+3C1270:lI100|H3C1334
+3C1334:lI102|N
+3C10FC:lH3C11C4|H3C11D0
+3C11C4:t2:H3C1280,H3C1288
+3C1288:lI97|H3C134C
+3C134C:lI112|H3C1418
+3C1418:lI112|H3C14EC
+3C14EC:lI108|H3C15C0
+3C15C0:lI105|H3C168C
+3C168C:lI99|H3C1758
+3C1758:lI97|H3C1814
+3C1814:lI116|H3C18D0
+3C18D0:lI105|H3C1984
+3C1984:lI111|H3C1A38
+3C1A38:lI110|H3C1AEC
+3C1AEC:lI47|H3C1BB0
+3C1BB0:lI120|H3C1C74
+3C1C74:lI45|H3C1D30
+3C1D30:lI109|H3C1DEC
+3C1DEC:lI105|H3C1EA8
+3C1EA8:lI102|N
+3C1280:lI109|H3C1344
+3C1344:lI105|H3C1410
+3C1410:lI102|N
+3C11D0:lH3C1290|H3C129C
+3C1290:t2:H3C1354,H3C135C
+3C135C:lI97|H3C1428
+3C1428:lI112|H3C14FC
+3C14FC:lI112|H3C15D0
+3C15D0:lI108|H3C169C
+3C169C:lI105|H3C1760
+3C1760:lI99|H3C181C
+3C181C:lI97|H3C18D8
+3C18D8:lI116|H3C198C
+3C198C:lI105|H3C1A40
+3C1A40:lI111|H3C1AF4
+3C1AF4:lI110|H3C1BB8
+3C1BB8:lI47|H3C1C7C
+3C1C7C:lI120|H3C1D38
+3C1D38:lI45|H3C1DF4
+3C1DF4:lI108|H3C1EB0
+3C1EB0:lI97|H3C1F6C
+3C1F6C:lI116|H3C2020
+3C2020:lI101|H3C20DC
+3C20DC:lI120|N
+3C1354:lI108|H3C1420
+3C1420:lI97|H3C14F4
+3C14F4:lI116|H3C15C8
+3C15C8:lI101|H3C1694
+3C1694:lI120|N
+3C129C:lH3C1364|H3C1370
+3C1364:t2:H3C1430,H3C1438
+3C1438:lI97|H3C150C
+3C150C:lI112|H3C15E0
+3C15E0:lI112|H3C16A4
+3C16A4:lI108|H3C1768
+3C1768:lI105|H3C1824
+3C1824:lI99|H3C18E0
+3C18E0:lI97|H3C1994
+3C1994:lI116|H3C1A48
+3C1A48:lI105|H3C1AFC
+3C1AFC:lI111|H3C1BC0
+3C1BC0:lI110|H3C1C84
+3C1C84:lI47|H3C1D40
+3C1D40:lI120|H3C1DFC
+3C1DFC:lI45|H3C1EB8
+3C1EB8:lI107|H3C1F74
+3C1F74:lI111|H3C2028
+3C2028:lI97|H3C20E4
+3C20E4:lI110|N
+3C1430:lI115|H3C1504
+3C1504:lI107|H3C15D8
+3C15D8:lI112|N
+3C1370:lH3C1440|H3C144C
+3C1440:t2:H3C1514,H3C151C
+3C151C:lI97|H3C15F0
+3C15F0:lI112|H3C16B4
+3C16B4:lI112|H3C1770
+3C1770:lI108|H3C182C
+3C182C:lI105|H3C18E8
+3C18E8:lI99|H3C199C
+3C199C:lI97|H3C1A50
+3C1A50:lI116|H3C1B04
+3C1B04:lI105|H3C1BC8
+3C1BC8:lI111|H3C1C8C
+3C1C8C:lI110|H3C1D48
+3C1D48:lI47|H3C1E04
+3C1E04:lI120|H3C1EC0
+3C1EC0:lI45|H3C1F7C
+3C1F7C:lI107|H3C2030
+3C2030:lI111|H3C20EC
+3C20EC:lI97|H3C21A0
+3C21A0:lI110|N
+3C1514:lI115|H3C15E8
+3C15E8:lI107|H3C16AC
+3C16AC:lI100|N
+3C144C:lH3C1524|H3C1530
+3C1524:t2:H3C15F8,H3C1600
+3C1600:lI97|H3C16C4
+3C16C4:lI112|H3C1780
+3C1780:lI112|H3C1834
+3C1834:lI108|H3C18F0
+3C18F0:lI105|H3C19A4
+3C19A4:lI99|H3C1A58
+3C1A58:lI97|H3C1B0C
+3C1B0C:lI116|H3C1BD0
+3C1BD0:lI105|H3C1C94
+3C1C94:lI111|H3C1D50
+3C1D50:lI110|H3C1E0C
+3C1E0C:lI47|H3C1EC8
+3C1EC8:lI120|H3C1F84
+3C1F84:lI45|H3C2038
+3C2038:lI107|H3C20F4
+3C20F4:lI111|H3C21A8
+3C21A8:lI97|H3C225C
+3C225C:lI110|N
+3C15F8:lI115|H3C16BC
+3C16BC:lI107|H3C1778
+3C1778:lI116|N
+3C1530:lH3C1608|H3C1614
+3C1608:t2:H3C16CC,H3C16D4
+3C16D4:lI97|H3C1790
+3C1790:lI112|H3C1844
+3C1844:lI112|H3C18F8
+3C18F8:lI108|H3C19AC
+3C19AC:lI105|H3C1A60
+3C1A60:lI99|H3C1B14
+3C1B14:lI97|H3C1BD8
+3C1BD8:lI116|H3C1C9C
+3C1C9C:lI105|H3C1D58
+3C1D58:lI111|H3C1E14
+3C1E14:lI110|H3C1ED0
+3C1ED0:lI47|H3C1F8C
+3C1F8C:lI120|H3C2040
+3C2040:lI45|H3C20FC
+3C20FC:lI107|H3C21B0
+3C21B0:lI111|H3C2264
+3C2264:lI97|H3C2320
+3C2320:lI110|N
+3C16CC:lI115|H3C1788
+3C1788:lI107|H3C183C
+3C183C:lI109|N
+3C1614:lH3C16DC|H3C16E8
+3C16DC:t2:H3C1798,H3C17A0
+3C17A0:lI97|H3C1854
+3C1854:lI112|H3C1908
+3C1908:lI112|H3C19B4
+3C19B4:lI108|H3C1A68
+3C1A68:lI105|H3C1B1C
+3C1B1C:lI99|H3C1BE0
+3C1BE0:lI97|H3C1CA4
+3C1CA4:lI116|H3C1D60
+3C1D60:lI105|H3C1E1C
+3C1E1C:lI111|H3C1ED8
+3C1ED8:lI110|H3C1F94
+3C1F94:lI47|H3C2048
+3C2048:lI120|H3C2104
+3C2104:lI45|H3C21B8
+3C21B8:lI104|H3C226C
+3C226C:lI116|H3C2328
+3C2328:lI116|H3C23E4
+3C23E4:lI112|H3C2498
+3C2498:lI100|H3C2554
+3C2554:lI45|H3C2610
+3C2610:lI99|H3C26D4
+3C26D4:lI103|H3C2790
+3C2790:lI105|N
+3C1798:lI99|H3C184C
+3C184C:lI103|H3C1900
+3C1900:lI105|N
+3C16E8:lH3C17A8|H3C17B4
+3C17A8:t2:H3C185C,H3C1864
+3C1864:lI97|H3C1918
+3C1918:lI112|H3C19C4
+3C19C4:lI112|H3C1A70
+3C1A70:lI108|H3C1B24
+3C1B24:lI105|H3C1BE8
+3C1BE8:lI99|H3C1CAC
+3C1CAC:lI97|H3C1D68
+3C1D68:lI116|H3C1E24
+3C1E24:lI105|H3C1EE0
+3C1EE0:lI111|H3C1F9C
+3C1F9C:lI110|H3C2050
+3C2050:lI47|H3C210C
+3C210C:lI120|H3C21C0
+3C21C0:lI45|H3C2274
+3C2274:lI104|H3C2330
+3C2330:lI100|H3C23EC
+3C23EC:lI102|N
+3C185C:lI104|H3C1910
+3C1910:lI100|H3C19BC
+3C19BC:lI102|N
+3C17B4:lH3C186C|H3C1878
+3C186C:t2:H3C1920,H3C1928
+3C1928:lI97|H3C19D4
+3C19D4:lI112|H3C1A78
+3C1A78:lI112|H3C1B2C
+3C1B2C:lI108|H3C1BF0
+3C1BF0:lI105|H3C1CB4
+3C1CB4:lI99|H3C1D70
+3C1D70:lI97|H3C1E2C
+3C1E2C:lI116|H3C1EE8
+3C1EE8:lI105|H3C1FA4
+3C1FA4:lI111|H3C2058
+3C2058:lI110|H3C2114
+3C2114:lI47|H3C21C8
+3C21C8:lI120|H3C227C
+3C227C:lI45|H3C2338
+3C2338:lI103|H3C23F4
+3C23F4:lI122|H3C24A0
+3C24A0:lI105|H3C255C
+3C255C:lI112|N
+3C1920:lI103|H3C19CC
+3C19CC:lI122|N
+3C1878:lH3C1930|H3C193C
+3C1930:t2:H3C19DC,H3C19E4
+3C19E4:lI97|H3C1A88
+3C1A88:lI112|H3C1B3C
+3C1B3C:lI112|H3C1C00
+3C1C00:lI108|H3C1CBC
+3C1CBC:lI105|H3C1D78
+3C1D78:lI99|H3C1E34
+3C1E34:lI97|H3C1EF0
+3C1EF0:lI116|H3C1FAC
+3C1FAC:lI105|H3C2060
+3C2060:lI111|H3C211C
+3C211C:lI110|H3C21D0
+3C21D0:lI47|H3C2284
+3C2284:lI120|H3C2340
+3C2340:lI45|H3C23FC
+3C23FC:lI103|H3C24A8
+3C24A8:lI116|H3C2564
+3C2564:lI97|H3C2618
+3C2618:lI114|N
+3C19DC:lI103|H3C1A80
+3C1A80:lI116|H3C1B34
+3C1B34:lI97|H3C1BF8
+3C1BF8:lI114|N
+3C193C:lH3C19EC|H3C19F8
+3C19EC:t2:H3C1A90,H3C1A98
+3C1A98:lI97|H3C1B4C
+3C1B4C:lI112|H3C1C10
+3C1C10:lI112|H3C1CC4
+3C1CC4:lI108|H3C1D80
+3C1D80:lI105|H3C1E3C
+3C1E3C:lI99|H3C1EF8
+3C1EF8:lI97|H3C1FB4
+3C1FB4:lI116|H3C2068
+3C2068:lI105|H3C2124
+3C2124:lI111|H3C21D8
+3C21D8:lI110|H3C228C
+3C228C:lI47|H3C2348
+3C2348:lI120|H3C2404
+3C2404:lI45|H3C24B0
+3C24B0:lI100|H3C256C
+3C256C:lI118|H3C2620
+3C2620:lI105|N
+3C1A90:lI100|H3C1B44
+3C1B44:lI118|H3C1C08
+3C1C08:lI105|N
+3C19F8:lH3C1AA0|H3C1AAC
+3C1AA0:t2:H3C1B54,H3C1B5C
+3C1B5C:lI97|H3C1C20
+3C1C20:lI112|H3C1CD4
+3C1CD4:lI112|H3C1D88
+3C1D88:lI108|H3C1E44
+3C1E44:lI105|H3C1F00
+3C1F00:lI99|H3C1FBC
+3C1FBC:lI97|H3C2070
+3C2070:lI116|H3C212C
+3C212C:lI105|H3C21E0
+3C21E0:lI111|H3C2294
+3C2294:lI110|H3C2350
+3C2350:lI47|H3C240C
+3C240C:lI120|H3C24B8
+3C24B8:lI45|H3C2574
+3C2574:lI100|H3C2628
+3C2628:lI105|H3C26DC
+3C26DC:lI114|H3C2798
+3C2798:lI101|H3C2854
+3C2854:lI99|H3C2918
+3C2918:lI116|H3C29E4
+3C29E4:lI111|H3C2AB0
+3C2AB0:lI114|N
+3C1B54:lI100|H3C1C18
+3C1C18:lI99|H3C1CCC
+3C1CCC:lI114|N
+3C1AAC:lH3C1B64|H3C1B70
+3C1B64:t2:H3C1C28,H3C1C30
+3C1C30:lI97|H3C1CE4
+3C1CE4:lI112|H3C1D98
+3C1D98:lI112|H3C1E4C
+3C1E4C:lI108|H3C1F08
+3C1F08:lI105|H3C1FC4
+3C1FC4:lI99|H3C2078
+3C2078:lI97|H3C2134
+3C2134:lI116|H3C21E8
+3C21E8:lI105|H3C229C
+3C229C:lI111|H3C2358
+3C2358:lI110|H3C2414
+3C2414:lI47|H3C24C0
+3C24C0:lI120|H3C257C
+3C257C:lI45|H3C2630
+3C2630:lI100|H3C26E4
+3C26E4:lI105|H3C27A0
+3C27A0:lI114|H3C285C
+3C285C:lI101|H3C2920
+3C2920:lI99|H3C29EC
+3C29EC:lI116|H3C2AB8
+3C2AB8:lI111|H3C2B84
+3C2B84:lI114|N
+3C1C28:lI100|H3C1CDC
+3C1CDC:lI105|H3C1D90
+3C1D90:lI114|N
+3C1B70:lH3C1C38|H3C1C44
+3C1C38:t2:H3C1CEC,H3C1CF4
+3C1CF4:lI97|H3C1DA8
+3C1DA8:lI112|H3C1E5C
+3C1E5C:lI112|H3C1F10
+3C1F10:lI108|H3C1FCC
+3C1FCC:lI105|H3C2080
+3C2080:lI99|H3C213C
+3C213C:lI97|H3C21F0
+3C21F0:lI116|H3C22A4
+3C22A4:lI105|H3C2360
+3C2360:lI111|H3C241C
+3C241C:lI110|H3C24C8
+3C24C8:lI47|H3C2584
+3C2584:lI120|H3C2638
+3C2638:lI45|H3C26EC
+3C26EC:lI100|H3C27A8
+3C27A8:lI105|H3C2864
+3C2864:lI114|H3C2928
+3C2928:lI101|H3C29F4
+3C29F4:lI99|H3C2AC0
+3C2AC0:lI116|H3C2B8C
+3C2B8C:lI111|H3C2C48
+3C2C48:lI114|N
+3C1CEC:lI100|H3C1DA0
+3C1DA0:lI120|H3C1E54
+3C1E54:lI114|N
+3C1C44:lH3C1CFC|H3C1D08
+3C1CFC:t2:H3C1DB0,H3C1DB8
+3C1DB8:lI97|H3C1E6C
+3C1E6C:lI112|H3C1F20
+3C1F20:lI112|H3C1FD4
+3C1FD4:lI108|H3C2088
+3C2088:lI105|H3C2144
+3C2144:lI99|H3C21F8
+3C21F8:lI97|H3C22AC
+3C22AC:lI116|H3C2368
+3C2368:lI105|H3C2424
+3C2424:lI111|H3C24D0
+3C24D0:lI110|H3C258C
+3C258C:lI47|H3C2640
+3C2640:lI120|H3C26F4
+3C26F4:lI45|H3C27B0
+3C27B0:lI99|H3C286C
+3C286C:lI115|H3C2930
+3C2930:lI104|N
+3C1DB0:lI99|H3C1E64
+3C1E64:lI115|H3C1F18
+3C1F18:lI104|N
+3C1D08:lH3C1DC0|H3C1DCC
+3C1DC0:t2:H3C1E74,H3C1E7C
+3C1E7C:lI97|H3C1F30
+3C1F30:lI112|H3C1FE4
+3C1FE4:lI112|H3C2098
+3C2098:lI108|H3C214C
+3C214C:lI105|H3C2200
+3C2200:lI99|H3C22B4
+3C22B4:lI97|H3C2370
+3C2370:lI116|H3C242C
+3C242C:lI105|H3C24D8
+3C24D8:lI111|H3C2594
+3C2594:lI110|H3C2648
+3C2648:lI47|H3C26FC
+3C26FC:lI120|H3C27B8
+3C27B8:lI45|H3C2874
+3C2874:lI99|H3C2938
+3C2938:lI112|H3C29FC
+3C29FC:lI105|H3C2AC8
+3C2AC8:lI111|N
+3C1E74:lI99|H3C1F28
+3C1F28:lI112|H3C1FDC
+3C1FDC:lI105|H3C2090
+3C2090:lI111|N
+3C1DCC:lH3C1E84|H3C1E90
+3C1E84:t2:H3C1F38,H3C1F40
+3C1F40:lI97|H3C1FEC
+3C1FEC:lI112|H3C20A0
+3C20A0:lI112|H3C2154
+3C2154:lI108|H3C2208
+3C2208:lI105|H3C22BC
+3C22BC:lI99|H3C2378
+3C2378:lI97|H3C2434
+3C2434:lI116|H3C24E0
+3C24E0:lI105|H3C259C
+3C259C:lI111|H3C2650
+3C2650:lI110|H3C2704
+3C2704:lI47|H3C27C0
+3C27C0:lI120|H3C287C
+3C287C:lI45|H3C2940
+3C2940:lI99|H3C2A04
+3C2A04:lI111|H3C2AD0
+3C2AD0:lI109|H3C2B94
+3C2B94:lI112|H3C2C50
+3C2C50:lI114|H3C2D00
+3C2D00:lI101|H3C2DA8
+3C2DA8:lI115|H3C2E40
+3C2E40:lI115|N
+3C1F38:lI90|N
+3C1E90:lH3C1F48|H3C1F54
+3C1F48:t2:H3C1FF4,H3C1FFC
+3C1FFC:lI97|H3C20B0
+3C20B0:lI112|H3C2164
+3C2164:lI112|H3C2210
+3C2210:lI108|H3C22C4
+3C22C4:lI105|H3C2380
+3C2380:lI99|H3C243C
+3C243C:lI97|H3C24E8
+3C24E8:lI116|H3C25A4
+3C25A4:lI105|H3C2658
+3C2658:lI111|H3C270C
+3C270C:lI110|H3C27C8
+3C27C8:lI47|H3C2884
+3C2884:lI120|H3C2948
+3C2948:lI45|H3C2A0C
+3C2A0C:lI99|H3C2AD8
+3C2AD8:lI100|H3C2B9C
+3C2B9C:lI108|H3C2C58
+3C2C58:lI105|H3C2D08
+3C2D08:lI110|H3C2DB0
+3C2DB0:lI107|N
+3C1FF4:lI118|H3C20A8
+3C20A8:lI99|H3C215C
+3C215C:lI100|N
+3C1F54:lH3C2004|H3C2010
+3C2004:t2:H3C20B8,H3C20C0
+3C20C0:lI97|H3C2174
+3C2174:lI112|H3C2220
+3C2220:lI112|H3C22D4
+3C22D4:lI108|H3C2390
+3C2390:lI105|H3C2444
+3C2444:lI99|H3C24F0
+3C24F0:lI97|H3C25AC
+3C25AC:lI116|H3C2660
+3C2660:lI105|H3C2714
+3C2714:lI111|H3C27D0
+3C27D0:lI110|H3C288C
+3C288C:lI47|H3C2950
+3C2950:lI120|H3C2A14
+3C2A14:lI45|H3C2AE0
+3C2AE0:lI98|H3C2BA4
+3C2BA4:lI99|H3C2C60
+3C2C60:lI112|H3C2D10
+3C2D10:lI105|H3C2DB8
+3C2DB8:lI111|N
+3C20B8:lI98|H3C216C
+3C216C:lI99|H3C2218
+3C2218:lI112|H3C22CC
+3C22CC:lI105|H3C2388
+3C2388:lI111|N
+3C2010:lH3C20C8|H3C20D4
+3C20C8:t2:H3C217C,H3C2184
+3C2184:lI97|H3C2230
+3C2230:lI112|H3C22E4
+3C22E4:lI112|H3C2398
+3C2398:lI108|H3C244C
+3C244C:lI105|H3C24F8
+3C24F8:lI99|H3C25B4
+3C25B4:lI97|H3C2668
+3C2668:lI116|H3C271C
+3C271C:lI105|H3C27D8
+3C27D8:lI111|H3C2894
+3C2894:lI110|H3C2958
+3C2958:lI47|H3C2A1C
+3C2A1C:lI114|H3C2AE8
+3C2AE8:lI116|H3C2BAC
+3C2BAC:lI102|N
+3C217C:lI114|H3C2228
+3C2228:lI116|H3C22DC
+3C22DC:lI102|N
+3C20D4:lH3C218C|H3C2198
+3C218C:t2:H3C2238,H3C2240
+3C2240:lI97|H3C22F4
+3C22F4:lI112|H3C23A8
+3C23A8:lI112|H3C2454
+3C2454:lI108|H3C2500
+3C2500:lI105|H3C25BC
+3C25BC:lI99|H3C2670
+3C2670:lI97|H3C2724
+3C2724:lI116|H3C27E0
+3C27E0:lI105|H3C289C
+3C289C:lI111|H3C2960
+3C2960:lI110|H3C2A24
+3C2A24:lI47|H3C2AF0
+3C2AF0:lI112|H3C2BB4
+3C2BB4:lI111|H3C2C68
+3C2C68:lI119|H3C2D18
+3C2D18:lI101|H3C2DC0
+3C2DC0:lI114|H3C2E48
+3C2E48:lI112|H3C2EC0
+3C2EC0:lI111|H3C2F38
+3C2F38:lI105|H3C2FA8
+3C2FA8:lI110|H3C3010
+3C3010:lI116|N
+3C2238:lI112|H3C22EC
+3C22EC:lI112|H3C23A0
+3C23A0:lI116|N
+3C2198:lH3C2248|H3C2254
+3C2248:t2:H3C22FC,H3C2304
+3C2304:lI97|H3C23B8
+3C23B8:lI112|H3C245C
+3C245C:lI112|H3C2508
+3C2508:lI108|H3C25C4
+3C25C4:lI105|H3C2678
+3C2678:lI99|H3C272C
+3C272C:lI97|H3C27E8
+3C27E8:lI116|H3C28A4
+3C28A4:lI105|H3C2968
+3C2968:lI111|H3C2A2C
+3C2A2C:lI110|H3C2AF8
+3C2AF8:lI47|H3C2BBC
+3C2BBC:lI112|H3C2C70
+3C2C70:lI111|H3C2D20
+3C2D20:lI115|H3C2DC8
+3C2DC8:lI116|H3C2E50
+3C2E50:lI115|H3C2EC8
+3C2EC8:lI99|H3C2F40
+3C2F40:lI114|H3C2FB0
+3C2FB0:lI105|H3C3018
+3C3018:lI112|H3C3078
+3C3078:lI116|N
+3C22FC:lI97|H3C23B0
+3C23B0:lI105|N
+3C2254:lH3C230C|H3C2318
+3C230C:t2:H3C23C0,H3C23C8
+3C23C8:lI97|H3C246C
+3C246C:lI112|H3C2518
+3C2518:lI112|H3C25CC
+3C25CC:lI108|H3C2680
+3C2680:lI105|H3C2734
+3C2734:lI99|H3C27F0
+3C27F0:lI97|H3C28AC
+3C28AC:lI116|H3C2970
+3C2970:lI105|H3C2A34
+3C2A34:lI111|H3C2B00
+3C2B00:lI110|H3C2BC4
+3C2BC4:lI47|H3C2C78
+3C2C78:lI112|H3C2D28
+3C2D28:lI111|H3C2DD0
+3C2DD0:lI115|H3C2E58
+3C2E58:lI116|H3C2ED0
+3C2ED0:lI115|H3C2F48
+3C2F48:lI99|H3C2FB8
+3C2FB8:lI114|H3C3020
+3C3020:lI105|H3C3080
+3C3080:lI112|H3C30D8
+3C30D8:lI116|N
+3C23C0:lI101|H3C2464
+3C2464:lI112|H3C2510
+3C2510:lI115|N
+3C2318:lH3C23D0|H3C23DC
+3C23D0:t2:H3C2474,H3C247C
+3C247C:lI97|H3C2528
+3C2528:lI112|H3C25D4
+3C25D4:lI112|H3C2688
+3C2688:lI108|H3C273C
+3C273C:lI105|H3C27F8
+3C27F8:lI99|H3C28B4
+3C28B4:lI97|H3C2978
+3C2978:lI116|H3C2A3C
+3C2A3C:lI105|H3C2B08
+3C2B08:lI111|H3C2BCC
+3C2BCC:lI110|H3C2C80
+3C2C80:lI47|H3C2D30
+3C2D30:lI112|H3C2DD8
+3C2DD8:lI111|H3C2E60
+3C2E60:lI115|H3C2ED8
+3C2ED8:lI116|H3C2F50
+3C2F50:lI115|H3C2FC0
+3C2FC0:lI99|H3C3028
+3C3028:lI114|H3C3088
+3C3088:lI105|H3C30E0
+3C30E0:lI112|H3C3130
+3C3130:lI116|N
+3C2474:lI112|H3C2520
+3C2520:lI115|N
+3C23DC:lH3C2484|H3C2490
+3C2484:t2:H3C2530,H3C2538
+3C2538:lI97|H3C25E4
+3C25E4:lI112|H3C2698
+3C2698:lI112|H3C2744
+3C2744:lI108|H3C2800
+3C2800:lI105|H3C28BC
+3C28BC:lI99|H3C2980
+3C2980:lI97|H3C2A44
+3C2A44:lI116|H3C2B10
+3C2B10:lI105|H3C2BD4
+3C2BD4:lI111|H3C2C88
+3C2C88:lI110|H3C2D38
+3C2D38:lI47|H3C2DE0
+3C2DE0:lI112|H3C2E68
+3C2E68:lI100|H3C2EE0
+3C2EE0:lI102|N
+3C2530:lI112|H3C25DC
+3C25DC:lI100|H3C2690
+3C2690:lI102|N
+3C2490:lH3C2540|H3C254C
+3C2540:t2:H3C25EC,H3C25F4
+3C25F4:lI97|H3C26A8
+3C26A8:lI112|H3C2754
+3C2754:lI112|H3C2808
+3C2808:lI108|H3C28C4
+3C28C4:lI105|H3C2988
+3C2988:lI99|H3C2A4C
+3C2A4C:lI97|H3C2B18
+3C2B18:lI116|H3C2BDC
+3C2BDC:lI105|H3C2C90
+3C2C90:lI111|H3C2D40
+3C2D40:lI110|H3C2DE8
+3C2DE8:lI47|H3C2E70
+3C2E70:lI111|H3C2EE8
+3C2EE8:lI100|H3C2F58
+3C2F58:lI97|N
+3C25EC:lI111|H3C26A0
+3C26A0:lI100|H3C274C
+3C274C:lI97|N
+3C254C:lH3C25FC|H3C2608
+3C25FC:t2:H3C26B0,H3C26B8
+3C26B8:lI97|H3C2764
+3C2764:lI112|H3C2818
+3C2818:lI112|H3C28CC
+3C28CC:lI108|H3C2990
+3C2990:lI105|H3C2A54
+3C2A54:lI99|H3C2B20
+3C2B20:lI97|H3C2BE4
+3C2BE4:lI116|H3C2C98
+3C2C98:lI105|H3C2D48
+3C2D48:lI111|H3C2DF0
+3C2DF0:lI110|H3C2E78
+3C2E78:lI47|H3C2EF0
+3C2EF0:lI111|H3C2F60
+3C2F60:lI99|H3C2FC8
+3C2FC8:lI116|H3C3030
+3C3030:lI101|H3C3090
+3C3090:lI116|H3C30E8
+3C30E8:lI45|H3C3138
+3C3138:lI115|H3C3180
+3C3180:lI116|H3C31C8
+3C31C8:lI114|H3C3210
+3C3210:lI101|H3C3258
+3C3258:lI97|H3C32A0
+3C32A0:lI109|N
+3C26B0:lI98|H3C275C
+3C275C:lI105|H3C2810
+3C2810:lI110|N
+3C2608:lH3C26C0|H3C26CC
+3C26C0:t2:H3C276C,H3C2774
+3C2774:lI97|H3C2828
+3C2828:lI112|H3C28DC
+3C28DC:lI112|H3C2998
+3C2998:lI108|H3C2A5C
+3C2A5C:lI105|H3C2B28
+3C2B28:lI99|H3C2BEC
+3C2BEC:lI97|H3C2CA0
+3C2CA0:lI116|H3C2D50
+3C2D50:lI105|H3C2DF8
+3C2DF8:lI111|H3C2E80
+3C2E80:lI110|H3C2EF8
+3C2EF8:lI47|H3C2F68
+3C2F68:lI111|H3C2FD0
+3C2FD0:lI99|H3C3038
+3C3038:lI116|H3C3098
+3C3098:lI101|H3C30F0
+3C30F0:lI116|H3C3140
+3C3140:lI45|H3C3188
+3C3188:lI115|H3C31D0
+3C31D0:lI116|H3C3218
+3C3218:lI114|H3C3260
+3C3260:lI101|H3C32A8
+3C32A8:lI97|H3C32E8
+3C32E8:lI109|N
+3C276C:lI100|H3C2820
+3C2820:lI109|H3C28D4
+3C28D4:lI115|N
+3C26CC:lH3C277C|H3C2788
+3C277C:t2:H3C2830,H3C2838
+3C2838:lI97|H3C28EC
+3C28EC:lI112|H3C29A8
+3C29A8:lI112|H3C2A64
+3C2A64:lI108|H3C2B30
+3C2B30:lI105|H3C2BF4
+3C2BF4:lI99|H3C2CA8
+3C2CA8:lI97|H3C2D58
+3C2D58:lI116|H3C2E00
+3C2E00:lI105|H3C2E88
+3C2E88:lI111|H3C2F00
+3C2F00:lI110|H3C2F70
+3C2F70:lI47|H3C2FD8
+3C2FD8:lI111|H3C3040
+3C3040:lI99|H3C30A0
+3C30A0:lI116|H3C30F8
+3C30F8:lI101|H3C3148
+3C3148:lI116|H3C3190
+3C3190:lI45|H3C31D8
+3C31D8:lI115|H3C3220
+3C3220:lI116|H3C3268
+3C3268:lI114|H3C32B0
+3C32B0:lI101|H3C32F0
+3C32F0:lI97|H3C3320
+3C3320:lI109|N
+3C2830:lI108|H3C28E4
+3C28E4:lI104|H3C29A0
+3C29A0:lI97|N
+3C2788:lH3C2840|H3C284C
+3C2840:t2:H3C28F4,H3C28FC
+3C28FC:lI97|H3C29B8
+3C29B8:lI112|H3C2A74
+3C2A74:lI112|H3C2B38
+3C2B38:lI108|H3C2BFC
+3C2BFC:lI105|H3C2CB0
+3C2CB0:lI99|H3C2D60
+3C2D60:lI97|H3C2E08
+3C2E08:lI116|H3C2E90
+3C2E90:lI105|H3C2F08
+3C2F08:lI111|H3C2F78
+3C2F78:lI110|H3C2FE0
+3C2FE0:lI47|H3C3048
+3C3048:lI111|H3C30A8
+3C30A8:lI99|H3C3100
+3C3100:lI116|H3C3150
+3C3150:lI101|H3C3198
+3C3198:lI116|H3C31E0
+3C31E0:lI45|H3C3228
+3C3228:lI115|H3C3270
+3C3270:lI116|H3C32B8
+3C32B8:lI114|H3C32F8
+3C32F8:lI101|H3C3328
+3C3328:lI97|H3C3350
+3C3350:lI109|N
+3C28F4:lI108|H3C29B0
+3C29B0:lI122|H3C2A6C
+3C2A6C:lI104|N
+3C284C:lH3C2904|H3C2910
+3C2904:t2:H3C29C0,H3C29C8
+3C29C8:lI97|H3C2A84
+3C2A84:lI112|H3C2B48
+3C2B48:lI112|H3C2C04
+3C2C04:lI108|H3C2CB8
+3C2CB8:lI105|H3C2D68
+3C2D68:lI99|H3C2E10
+3C2E10:lI97|H3C2E98
+3C2E98:lI116|H3C2F10
+3C2F10:lI105|H3C2F80
+3C2F80:lI111|H3C2FE8
+3C2FE8:lI110|H3C3050
+3C3050:lI47|H3C30B0
+3C30B0:lI111|H3C3108
+3C3108:lI99|H3C3158
+3C3158:lI116|H3C31A0
+3C31A0:lI101|H3C31E8
+3C31E8:lI116|H3C3230
+3C3230:lI45|H3C3278
+3C3278:lI115|H3C32C0
+3C32C0:lI116|H3C3300
+3C3300:lI114|H3C3330
+3C3330:lI101|H3C3358
+3C3358:lI97|H3C3378
+3C3378:lI109|N
+3C29C0:lI101|H3C2A7C
+3C2A7C:lI120|H3C2B40
+3C2B40:lI101|N
+3C2910:lH3C29D0|H3C29DC
+3C29D0:t2:H3C2A8C,H3C2A94
+3C2A94:lI97|H3C2B58
+3C2B58:lI112|H3C2C14
+3C2C14:lI112|H3C2CC8
+3C2CC8:lI108|H3C2D78
+3C2D78:lI105|H3C2E18
+3C2E18:lI99|H3C2EA0
+3C2EA0:lI97|H3C2F18
+3C2F18:lI116|H3C2F88
+3C2F88:lI105|H3C2FF0
+3C2FF0:lI111|H3C3058
+3C3058:lI110|H3C30B8
+3C30B8:lI47|H3C3110
+3C3110:lI111|H3C3160
+3C3160:lI99|H3C31A8
+3C31A8:lI116|H3C31F0
+3C31F0:lI101|H3C3238
+3C3238:lI116|H3C3280
+3C3280:lI45|H3C32C8
+3C32C8:lI115|H3C3308
+3C3308:lI116|H3C3338
+3C3338:lI114|H3C3360
+3C3360:lI101|H3C3380
+3C3380:lI97|H3C3398
+3C3398:lI109|N
+3C2A8C:lI99|H3C2B50
+3C2B50:lI108|H3C2C0C
+3C2C0C:lI97|H3C2CC0
+3C2CC0:lI115|H3C2D70
+3C2D70:lI115|N
+3C29DC:lH3C2A9C|H3C2AA8
+3C2A9C:t2:H3C2B60,H3C2B68
+3C2B68:lI97|H3C2C24
+3C2C24:lI112|H3C2CD8
+3C2CD8:lI112|H3C2D80
+3C2D80:lI108|H3C2E20
+3C2E20:lI105|H3C2EA8
+3C2EA8:lI99|H3C2F20
+3C2F20:lI97|H3C2F90
+3C2F90:lI116|H3C2FF8
+3C2FF8:lI105|H3C3060
+3C3060:lI111|H3C30C0
+3C30C0:lI110|H3C3118
+3C3118:lI47|H3C3168
+3C3168:lI109|H3C31B0
+3C31B0:lI115|H3C31F8
+3C31F8:lI119|H3C3240
+3C3240:lI111|H3C3288
+3C3288:lI114|H3C32D0
+3C32D0:lI100|N
+3C2B60:lI100|H3C2C1C
+3C2C1C:lI111|H3C2CD0
+3C2CD0:lI99|N
+3C2AA8:lH3C2B70|H3C2B7C
+3C2B70:t2:H3C2C2C,H3C2C34
+3C2C34:lI97|H3C2CE8
+3C2CE8:lI112|H3C2D90
+3C2D90:lI112|H3C2E28
+3C2E28:lI108|H3C2EB0
+3C2EB0:lI105|H3C2F28
+3C2F28:lI99|H3C2F98
+3C2F98:lI97|H3C3000
+3C3000:lI116|H3C3068
+3C3068:lI105|H3C30C8
+3C30C8:lI111|H3C3120
+3C3120:lI110|H3C3170
+3C3170:lI47|H3C31B8
+3C31B8:lI109|H3C3200
+3C3200:lI97|H3C3248
+3C3248:lI99|H3C3290
+3C3290:lI45|H3C32D8
+3C32D8:lI99|H3C3310
+3C3310:lI111|H3C3340
+3C3340:lI109|H3C3368
+3C3368:lI112|H3C3388
+3C3388:lI97|H3C33A0
+3C33A0:lI99|H3C33B0
+3C33B0:lI116|H3C33C0
+3C33C0:lI112|H3C33D0
+3C33D0:lI114|H3C33E0
+3C33E0:lI111|N
+3C2C2C:lI99|H3C2CE0
+3C2CE0:lI112|H3C2D88
+3C2D88:lI116|N
+3C2B7C:lH3C2C3C|N
+3C2C3C:t2:H3C2CF0,H3C2CF8
+3C2CF8:lI97|H3C2DA0
+3C2DA0:lI112|H3C2E38
+3C2E38:lI112|H3C2EB8
+3C2EB8:lI108|H3C2F30
+3C2F30:lI105|H3C2FA0
+3C2FA0:lI99|H3C3008
+3C3008:lI97|H3C3070
+3C3070:lI116|H3C30D0
+3C30D0:lI105|H3C3128
+3C3128:lI111|H3C3178
+3C3178:lI110|H3C31C0
+3C31C0:lI47|H3C3208
+3C3208:lI109|H3C3250
+3C3250:lI97|H3C3298
+3C3298:lI99|H3C32E0
+3C32E0:lI45|H3C3318
+3C3318:lI98|H3C3348
+3C3348:lI105|H3C3370
+3C3370:lI110|H3C3390
+3C3390:lI104|H3C33A8
+3C33A8:lI101|H3C33B8
+3C33B8:lI120|H3C33C8
+3C33C8:lI52|H3C33D8
+3C33D8:lI48|N
+3C2CF0:lI104|H3C2D98
+3C2D98:lI113|H3C2E30
+3C2E30:lI120|N
+3BDBCC:lH3BDA78|H3BDA8C
+3BDA78:t2:A4:port,I8888
+3BDA8C:lH3BDB04|H3BDB10
+3BDB04:t2:AC:bind_address,H3BDB64
+3BDB64:t4:I127,I0,I0,I1
+3BDB10:lH3BDB78|H3BDB84
+3BDB78:t2:AB:server_name,H3BDBD4
+3BDBD4:lI108|H3BDC24
+3BDC24:lI111|H3BDC88
+3BDC88:lI99|H3BDCF0
+3BDCF0:lI97|H3BDD70
+3BDD70:lI108|H3BDDF8
+3BDDF8:lI104|H3BDE90
+3BDE90:lI111|H3BDF40
+3BDF40:lI115|H3BDFFC
+3BDFFC:lI116|N
+3BDB84:lH3BDBDC|H3BDBE8
+3BDBDC:t2:AE:max_header_siz,I1024
+3BDBE8:lH3BDC2C|H3BDC38
+3BDC2C:t2:A11:max_header_action,A8:reply414
+3BDC38:lH3BDC90|H3BDC9C
+3BDC90:t2:A8:com_type,A7:ip_comm
+3BDC9C:lH3BDCF8|H3BDD04
+3BDCF8:t2:A7:modules,H3BDD78
+3BDD78:lA9:mod_alias|H3BDE00
+3BDE00:lA8:mod_auth|H3BDE98
+3BDE98:lA7:mod_esi|H3BDF48
+3BDF48:lAB:mod_actions|H3BE004
+3BE004:lA7:mod_cgi|H3BE0D0
+3BE0D0:lAB:mod_include|H3BE1A4
+3BE1A4:lA7:mod_dir|H3BE288
+3BE288:lA7:mod_get|H3BE378
+3BE378:lA8:mod_head|H3BE47C
+3BE47C:lA7:mod_log|H3BE580
+3BE580:lAC:mod_disk_log|N
+3BDD04:lH3BDD80|H3BDD8C
+3BDD80:t2:AF:directory_index,H3BDE08
+3BDE08:lH3BDEA0|N
+3BDEA0:lI105|H3BDF50
+3BDF50:lI110|H3BE00C
+3BE00C:lI100|H3BE0D8
+3BE0D8:lI101|H3BE1AC
+3BE1AC:lI120|H3BE290
+3BE290:lI46|H3BE380
+3BE380:lI104|H3BE484
+3BE484:lI116|H3BE588
+3BE588:lI109|H3BE68C
+3BE68C:lI108|N
+3BDD8C:lH3BDE10|H3BDE1C
+3BDE10:t2:AC:default_type,H3BDEA8
+3BDEA8:lI116|H3BDF58
+3BDF58:lI101|H3BE014
+3BE014:lI120|H3BE0E0
+3BE0E0:lI116|H3BE1B4
+3BE1B4:lI47|H3BE298
+3BE298:lI112|H3BE388
+3BE388:lI108|H3BE48C
+3BE48C:lI97|H3BE590
+3BE590:lI105|H3BE694
+3BE694:lI110|N
+3BDE1C:lH3BDEB0|H3BDEBC
+3BDEB0:t2:A10:erl_script_alias,H3BDF60
+3BDF60:t2:H3BE01C,H3BE024
+3BE024:lH3BE0F0|N
+3BE0F0:lI119|H3BE1C4
+3BE1C4:lI101|H3BE2A8
+3BE2A8:lI98|H3BE398
+3BE398:lI116|H3BE49C
+3BE49C:lI111|H3BE5A0
+3BE5A0:lI111|H3BE6A4
+3BE6A4:lI108|N
+3BE01C:lI47|H3BE0E8
+3BE0E8:lI119|H3BE1BC
+3BE1BC:lI101|H3BE2A0
+3BE2A0:lI98|H3BE390
+3BE390:lI116|H3BE494
+3BE494:lI111|H3BE598
+3BE598:lI111|H3BE69C
+3BE69C:lI108|N
+3BDEBC:lH3BDF6C|H3BDF78
+3BDF6C:t2:A5:alias,H3BE02C
+3BE02C:t2:H3BE0F8,H3BE100
+3BE100:lI47|H3BE1D4
+3BE1D4:lI99|H3BE2B8
+3BE2B8:lI108|H3BE3A8
+3BE3A8:lI101|H3BE4AC
+3BE4AC:lI97|H3BE5B0
+3BE5B0:lI114|H3BE6B4
+3BE6B4:lI99|H3BE7A8
+3BE7A8:lI97|H3BE894
+3BE894:lI115|H3BE980
+3BE980:lI101|H3BEA74
+3BEA74:lI47|H3BEB68
+3BEB68:lI111|H3BEC54
+3BEC54:lI116|H3BED40
+3BED40:lI112|H3BEE2C
+3BEE2C:lI47|H3BEF00
+3BEF00:lI101|H3BEFD4
+3BEFD4:lI114|H3BF0A0
+3BF0A0:lI116|H3BF174
+3BF174:lI115|H3BF238
+3BF238:lI47|H3BF2FC
+3BF2FC:lI108|H3BF3A8
+3BF3A8:lI105|H3BF45C
+3BF45C:lI98|H3BF518
+3BF518:lI47|H3BF5DC
+3BF5DC:lI111|H3BF6B0
+3BF6B0:lI98|H3BF784
+3BF784:lI115|H3BF858
+3BF858:lI101|H3BF93C
+3BF93C:lI114|H3BFA18
+3BFA18:lI118|H3BFAF4
+3BFAF4:lI101|H3BFBD0
+3BFBD0:lI114|H3BFC9C
+3BFC9C:lI47|H3BFD60
+3BFD60:lI112|H3BFE2C
+3BFE2C:lI114|H3BFEE0
+3BFEE0:lI105|H3BFF94
+3BFF94:lI118|H3C0040
+3C0040:lI47|H3C00EC
+3C00EC:lI99|H3C0198
+3C0198:lI114|H3C024C
+3C024C:lI97|H3C0308
+3C0308:lI115|H3C03BC
+3C03BC:lI104|H3C0458
+3C0458:lI100|H3C04F4
+3C04F4:lI117|H3C0590
+3C0590:lI109|H3C0634
+3C0634:lI112|H3C06E0
+3C06E0:lI95|H3C078C
+3C078C:lI118|H3C0830
+3C0830:lI105|H3C08BC
+3C08BC:lI101|H3C0950
+3C0950:lI119|H3C09E4
+3C09E4:lI101|H3C0A80
+3C0A80:lI114|N
+3BE0F8:lI47|H3BE1CC
+3BE1CC:lI99|H3BE2B0
+3BE2B0:lI114|H3BE3A0
+3BE3A0:lI97|H3BE4A4
+3BE4A4:lI115|H3BE5A8
+3BE5A8:lI104|H3BE6AC
+3BE6AC:lI100|H3BE7A0
+3BE7A0:lI117|H3BE88C
+3BE88C:lI109|H3BE978
+3BE978:lI112|H3BEA6C
+3BEA6C:lI95|H3BEB60
+3BEB60:lI118|H3BEC4C
+3BEC4C:lI105|H3BED38
+3BED38:lI101|H3BEE24
+3BEE24:lI119|H3BEEF8
+3BEEF8:lI101|H3BEFCC
+3BEFCC:lI114|N
+3BDF78:lH3BE038|H3BE044
+3BE038:t2:A5:alias,H3BE108
+3BE108:t2:H3BE1DC,H3BE1E4
+3BE1E4:lI47|H3BE2C8
+3BE2C8:lI99|H3BE3B8
+3BE3B8:lI108|H3BE4BC
+3BE4BC:lI101|H3BE5C0
+3BE5C0:lI97|H3BE6C4
+3BE6C4:lI114|H3BE7B8
+3BE7B8:lI99|H3BE8A4
+3BE8A4:lI97|H3BE990
+3BE990:lI115|H3BEA84
+3BEA84:lI101|H3BEB78
+3BEB78:lI47|H3BEC64
+3BEC64:lI111|H3BED50
+3BED50:lI116|H3BEE3C
+3BEE3C:lI112|H3BEF10
+3BEF10:lI47|H3BEFE4
+3BEFE4:lI101|H3BF0B0
+3BF0B0:lI114|H3BF184
+3BF184:lI116|H3BF248
+3BF248:lI115|H3BF304
+3BF304:lI47|H3BF3B0
+3BF3B0:lI101|H3BF464
+3BF464:lI114|H3BF520
+3BF520:lI116|H3BF5E4
+3BF5E4:lI115|H3BF6B8
+3BF6B8:lI47|H3BF78C
+3BF78C:lI100|H3BF860
+3BF860:lI111|H3BF944
+3BF944:lI99|H3BFA20
+3BFA20:lI47|H3BFAFC
+3BFAFC:lI104|H3BFBD8
+3BFBD8:lI116|H3BFCA4
+3BFCA4:lI109|H3BFD68
+3BFD68:lI108|N
+3BE1DC:lI47|H3BE2C0
+3BE2C0:lI99|H3BE3B0
+3BE3B0:lI114|H3BE4B4
+3BE4B4:lI97|H3BE5B8
+3BE5B8:lI115|H3BE6BC
+3BE6BC:lI104|H3BE7B0
+3BE7B0:lI100|H3BE89C
+3BE89C:lI117|H3BE988
+3BE988:lI109|H3BEA7C
+3BEA7C:lI112|H3BEB70
+3BEB70:lI95|H3BEC5C
+3BEC5C:lI101|H3BED48
+3BED48:lI114|H3BEE34
+3BEE34:lI116|H3BEF08
+3BEF08:lI115|H3BEFDC
+3BEFDC:lI95|H3BF0A8
+3BF0A8:lI100|H3BF17C
+3BF17C:lI111|H3BF240
+3BF240:lI99|N
+3BE044:lH3BE114|H3BE120
+3BE114:t2:A5:alias,H3BE1EC
+3BE1EC:t2:H3BE2D0,H3BE2D8
+3BE2D8:lI47|H3BE3C8
+3BE3C8:lI99|H3BE4CC
+3BE4CC:lI108|H3BE5D0
+3BE5D0:lI101|H3BE6D4
+3BE6D4:lI97|H3BE7C8
+3BE7C8:lI114|H3BE8B4
+3BE8B4:lI99|H3BE9A0
+3BE9A0:lI97|H3BEA94
+3BEA94:lI115|H3BEB88
+3BEB88:lI101|H3BEC74
+3BEC74:lI47|H3BED60
+3BED60:lI111|H3BEE4C
+3BEE4C:lI116|H3BEF20
+3BEF20:lI112|H3BEFEC
+3BEFEC:lI47|H3BF0B8
+3BF0B8:lI101|H3BF18C
+3BF18C:lI114|H3BF250
+3BF250:lI116|H3BF30C
+3BF30C:lI115|H3BF3B8
+3BF3B8:lI47|H3BF46C
+3BF46C:lI108|H3BF528
+3BF528:lI105|H3BF5EC
+3BF5EC:lI98|H3BF6C0
+3BF6C0:lI47|H3BF794
+3BF794:lI111|H3BF868
+3BF868:lI98|H3BF94C
+3BF94C:lI115|H3BFA28
+3BFA28:lI101|H3BFB04
+3BFB04:lI114|H3BFBE0
+3BFBE0:lI118|H3BFCAC
+3BFCAC:lI101|H3BFD70
+3BFD70:lI114|H3BFE34
+3BFE34:lI47|H3BFEE8
+3BFEE8:lI100|H3BFF9C
+3BFF9C:lI111|H3C0048
+3C0048:lI99|H3C00F4
+3C00F4:lI47|H3C01A0
+3C01A0:lI104|H3C0254
+3C0254:lI116|H3C0310
+3C0310:lI109|H3C03C4
+3C03C4:lI108|N
+3BE2D0:lI47|H3BE3C0
+3BE3C0:lI99|H3BE4C4
+3BE4C4:lI114|H3BE5C8
+3BE5C8:lI97|H3BE6CC
+3BE6CC:lI115|H3BE7C0
+3BE7C0:lI104|H3BE8AC
+3BE8AC:lI100|H3BE998
+3BE998:lI117|H3BEA8C
+3BEA8C:lI109|H3BEB80
+3BEB80:lI112|H3BEC6C
+3BEC6C:lI95|H3BED58
+3BED58:lI100|H3BEE44
+3BEE44:lI111|H3BEF18
+3BEF18:lI99|N
+3BE120:lH3BE1F8|N
+3BE1F8:t2:A10:erl_script_alias,H3BE2E0
+3BE2E0:t2:H3BE3D0,H3BE3D8
+3BE3D8:lH3BE4DC|N
+3BE4DC:lI99|H3BE5E0
+3BE5E0:lI114|H3BE6E4
+3BE6E4:lI97|H3BE7D8
+3BE7D8:lI115|H3BE8C4
+3BE8C4:lI104|H3BE9B0
+3BE9B0:lI100|H3BEAA4
+3BEAA4:lI117|H3BEB90
+3BEB90:lI109|H3BEC7C
+3BEC7C:lI112|H3BED68
+3BED68:lI95|H3BEE54
+3BEE54:lI118|H3BEF28
+3BEF28:lI105|H3BEFF4
+3BEFF4:lI101|H3BF0C0
+3BF0C0:lI119|H3BF194
+3BF194:lI101|H3BF258
+3BF258:lI114|N
+3BE3D0:lI47|H3BE4D4
+3BE4D4:lI99|H3BE5D8
+3BE5D8:lI100|H3BE6DC
+3BE6DC:lI118|H3BE7D0
+3BE7D0:lI95|H3BE8BC
+3BE8BC:lI101|H3BE9A8
+3BE9A8:lI114|H3BEA9C
+3BEA9C:lI108|N
+3BDE2C:lH3BDA9C|H3BDECC
+3BDA9C:t4:I127,I0,I0,I1
+3BDECC:lI8888|H3BDF88
+3BDF88:lN|N
+3BDD1C:lN|N
+3BDA50:t2:AD:$initial_call,H3BDAB8
+3BDAB8:t3:A3:gen,A7:init_it,H3BDAB0
+3BDA5C:t2:A9:verbosity,A7:silence
+3BDAC8:t2:AE:auth_verbosity,A7:silence
+3BDB28:t2:A12:security_verbosity,A7:silence
+3BDB9C:t2:A12:acceptor_verbosity,A7:silence
+3BDC00:t2:AA:$ancestors,H3BDC5C
+3BDC5C:lA1A:httpd_sup__127_0_0_1__8888|H3BDCB4
+3BDCB4:lA8:web_tool|H3BDD24
+3BDD24:lP<0.27.0>|N
+3BDADC:t2:A19:request_handler_verbosity,A7:silence
+3BDB3C:t2:A5:sname,A3:man
+=proc_dictionary:<0.47.0>
+H36E688
+H36E694
+H36E6A0
+H36E6AC
+=proc_stack:<0.47.0>
+36c520:SReturn addr 0x362C9C (inet_tcp:accept/2 + 20)
+y0:I5
+y1:p<0.161>
+y2:p<0.141>
+36c530:SReturn addr 0x500C5C (httpd_socket:accept/3 + 280)
+y0:N
+36c538:SReturn addr 0x502BFC (httpd_acceptor:acceptor/4 + 164)
+y0:N
+36c540:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:SCatch 0x502BFC (httpd_acceptor:acceptor/4 + 164)
+y1:P<0.46.0>
+y2:A7:ip_comm
+y3:p<0.141>
+y4:A1B:httpd_conf__127_0_0_1__8888
+36c558:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:AE:httpd_acceptor
+y2:A8:acceptor
+y3:H36E6C8
+=proc_heap:<0.47.0>
+36E6C8:lP<0.44.0>|H36E724
+36E724:lP<0.46.0>|H36E748
+36E748:lA7:ip_comm|H36E760
+36E760:lH36E6D0|H36E778
+36E6D0:t4:I127,I0,I0,I1
+36E778:lI8888|H36E788
+36E788:lA1B:httpd_conf__127_0_0_1__8888|H36E798
+36E798:lA7:silence|N
+36E688:t2:AD:$initial_call,H36E6F0
+36E6F0:t3:AE:httpd_acceptor,A8:acceptor,H36E6C8
+36E694:t2:A9:verbosity,A7:silence
+36E6A0:t2:AA:$ancestors,H36E700
+36E700:lA1E:httpd_acc_sup__127_0_0_1__8888|H36E72C
+36E72C:lA1A:httpd_sup__127_0_0_1__8888|H36E750
+36E750:lA8:web_tool|H36E768
+36E768:lP<0.27.0>|N
+36E6AC:t2:A5:sname,A3:acc
+=proc_dictionary:<0.48.0>
+H385E48
+H385E54
+=proc_stack:<0.48.0>
+3ac1bc:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A10:crashdump_viewer
+y3:H3AB280
+y4:A17:crashdump_viewer_server
+y5:P<0.41.0>
+3ac1d8:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H385E90
+=proc_heap:<0.48.0>
+3AB280:t8:A5:state,A9:undefined,A9:undefined,A9:undefined,A5:false,I4,A9:undefined,P<0.56.0>
+385E90:lAA:gen_server|H385ED8
+385ED8:lP<0.41.0>|H385F10
+385F10:lP<0.41.0>|H385F58
+385F58:lH385FA8|H385FB4
+385FA8:t2:A5:local,A17:crashdump_viewer_server
+385FB4:lA10:crashdump_viewer|H386014
+386014:lN|H38606C
+38606C:lN|N
+385E48:t2:AD:$initial_call,H385EB0
+385EB0:t3:A3:gen,A7:init_it,H385E90
+385E54:t2:AA:$ancestors,H385EC0
+385EC0:lA6:websup|H385F08
+385F08:lA8:web_tool|H385F50
+385F50:lP<0.27.0>|N
+=proc_stack:<0.49.0>
+36a114:SReturn addr 0x30174C (io:parse_erl_exprs/3 + 92)
+y0:H369E10
+y1:P<0.22.0>
+36a120:SReturn addr 0x2E5360 (shell:'-get_command/4-fun-0-'/1 + 20)
+y0:N
+36a128:SReturn addr 0x156F90 (<terminate process normally>)
+=proc_heap:<0.49.0>
+369E10:E21:8372000364000D6E6F6E6F6465406E6F686F737400000001330000000000000000
+=atoms
+http_cache_control
+copy_word
+drop_line
+copy_line
+write_rest_of_line
+drop_to_empty_line
+read_to_empty_line_reverse
+set_pos
+read_line_backwards
+jumped
+jump_to_empty_line_or_eof
+get_pos
+translate_atoms
+translate_fun
+translate_funs
+translate_loaded_modules2
+translate_loaded_modules_totals
+translate_loaded_modules
+translate_links
+get_all_creations
+translate_node_info2
+translate_node_info
+translate_dist_info2
+translate_dist_info
+get_msg
+translate_timers
+translate_ets
+translate_ets_tables
+do_translate_sl_alloc_r7_r8
+translate_sl_alloc_r7_r8
+translate_sl_alloc_line
+do_translate_sl_alloc
+translate_sl_alloc
+translate_memory_and_allocated_area_r9b
+translate_allocated_areas
+translate_internal_table_line
+translate_index_table
+translate_hash_table
+translate_internal_tables
+translate_ports
+write_last_calls
+write_msg_q_stuff
+translate_process
+translate_processes
+erts_vsn
+translate_summary
+'Send'
+erl_crash_dump
+internal_tables
+mods
+zombies
+http_content_length
+http_content_type
+'-procs_summary_body/5-fun-0-'
+'-expanded_memory_body/2-fun-0-'
+'-expanded_memory_body/2-fun-1-'
+'-expanded_memory_body/2-fun-2-'
+'-ports_body/3-fun-0-'
+'-ets_tables_body/4-fun-0-'
+'-internal_ets_tables_table/1-fun-0-'
+'-timers_body/3-fun-0-'
+'-make_nodes_table/2-fun-0-'
+'-loaded_mods_body/5-fun-0-'
+'-funs_body/3-fun-0-'
+'-memory_body/3-fun-0-'
+'-allocated_areas_body/3-fun-0-'
+'-allocator_info_body/3-fun-0-'
+'-allocator_info_body/3-fun-1-'
+'-allocator_info_body/3-fun-2-'
+'-hash_tables_body/3-fun-0-'
+'-index_tables_body/3-fun-0-'
+enter_write_file
+replace_insrt
+'$insrt'
+special
+initial
+pretty_format
+heading
+to_gt_noreverse
+to_gt
+href_proc_port
+br
+font
+h2
+h1
+img
+href
+pre
+em
+td
+th
+tr
+frame
+frameset
+html_header
+index_tables_table
+index_tables_body
+hash_tables_table
+hash_tables_body
+allocator_info_body
+allocated_areas_table
+allocated_areas_body
+memory_table
+memory_body
+atoms_body
+funs_table
+funs_body
+loaded_mod_details_body
+loaded_mods_table
+loaded_mods_body
+format_extra_info
+format_links_and_monitors
+to_end_par
+break_lines_creation
+maybe_refcount
+nodes_table_row
+nodes_table_heading
+make_nodes_table
+nodes_body
+timers_table
+timers_body
+internal_ets_tables_table1
+internal_ets_tables_table
+ets_tables_table
+ets_tables_body
+ports_table
+ports_body
+expanded_binary_body
+dict_table
+stackdump_table
+msgq_table
+expanded_memory_body
+link_to_read_memory
+display_or_link_to_expand
+proc_details_body
+procs_summary_table
+summary_table_head
+procs_summary_body
+pretty_info_body
+info_body
+error_body
+general_info_body
+format_title
+format_picture
+format_item
+arentState
+format_items
+menu_body
+filename_body
+start_page_frameset
+get_translated_filename_frame_body
+read_file_frame_body
+welcome_body
+http_
+http_te
+http_connection
+http_if_modified_since
+http_referer
+http_accept_encoding
+http_accept
+http_host
+http_user_agent
+'-create_header1/3-fun-0-'
+send_response_old
+transform
+mapfilter
+create_header1
+accept_ranges
+cache_control
+pragma
+trailer
+etag
+retry_after
+content_encoding
+content_language
+content_location
+content_MD5
+content_range
+expires
+transfer_encoding
+get_connection
+bad_args
+send_header
+get_body
+traverse_modules
+formatAbsoluteURI
+removeServer
+formatRequestUri
+tagup_header
+verify_request
+split_lines
+find_content_type
+maybe_remove_nl
+get_persistens
+df
+dm
+dy
+year_day_to_date2
+year_day_to_date
+dty
+day_to_year
+valid_date1
+valid_date
+universal_time_to_local_time
+time_to_seconds
+seconds_to_time
+seconds_to_daystime
+now_to_local_time
+now_to_universal_time
+now_to_datetime
+last_day_of_the_month1
+last_day_of_the_month
+is_leap_year1
+is_leap_year
+gregorian_seconds_to_datetime
+gregorian_days_to_date
+date_to_gregorian_days
+'-parse_trailers/1-lc^0/1-0-'
+'-read_trailer_end/4-fun-0-'
+'-read_trailer_end/4-lc^0/1-0-'
+'-remove_newline/1-fun-0-'
+remove_newline
+close_sleep
+unknown_size
+send_read_status
+handle_read_error
+transfer_coding
+expect
+getTrailerField
+read_trailer
+get_chunk_size
+read_chunked_entity_body
+read_chunk_trailer
+read_trailer_end
+parse_trailers
+parse_chunk_trailer
+body_to_big
+parse_chunked_entity_body
+parse_chunk_size
+read_chunked_entity
+etimedout
+body_too_long
+unknown_coding
+chunked
+read_entity_body2
+no_expect_header
+http_1_0_expect_header
+read_entity_body
+header_too_long
+hsplit \ No newline at end of file
diff --git a/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.50atoms b/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.50atoms
new file mode 100644
index 0000000000..78e301a6c7
--- /dev/null
+++ b/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.50atoms
@@ -0,0 +1,13085 @@
+=erl_crash_dump:0.1
+Wed Apr 21 13:22:44 2004
+Slogan: eheap_alloc: Cannot allocate 785672 bytes of memory (of type "heap").
+System version: Erlang (BEAM) emulator version 5.4 [source] [hipe] [threads:0]
+Compiled: Thu Dec 18 14:07:45 2003
+Atoms: 5614
+=memory
+total: 653336887
+processes: 1768396
+processes_used: 1765460
+system: 651568491
+atom: 244837
+atom_used: 237116
+binary: 648618369
+code: 2158413
+ets: 225620
+=hash_table:atom_tab
+size: 4813
+used: 3304
+objs: 5614
+depth: 7
+=index_table:atom_tab
+size: 5700
+limit: 1048576
+used: 5614
+rate: 100
+=hash_table:module_code
+size: 97
+used: 69
+objs: 107
+depth: 5
+=index_table:module_code
+size: 110
+limit: 65536
+used: 107
+rate: 10
+=hash_table:export_list
+size: 2411
+used: 1674
+objs: 2843
+depth: 6
+=index_table:export_list
+size: 2900
+limit: 65536
+used: 2843
+rate: 100
+=hash_table:process_reg
+size: 47
+used: 16
+objs: 23
+depth: 3
+=hash_table:fun_table
+size: 397
+used: 261
+objs: 400
+depth: 4
+=hash_table:node_table
+size: 11
+used: 1
+objs: 1
+depth: 1
+=hash_table:dist_table
+size: 11
+used: 1
+objs: 1
+depth: 1
+=allocated_areas
+processes: 1765460 1768396
+ets: 225620
+sys_misc: 24634
+static: 295033
+atom_space: 65544 57967
+binary: 648618369
+atom_table: 42141
+module_table: 920
+export_table: 21336
+register_table: 252
+fun_table: 1650
+module_refs: 1024
+loaded_code: 1968915
+dist_table: 159
+node_table: 131
+bits_bufs_size: 19
+bif_timer: 13392
+link_lh: 0
+dist_buf: 0
+proc: 15080 13576
+atom_entry: 137152 137008
+export_entry: 138448 137632
+module_entry: 4872 4352
+reg_proc: 1000 592
+link_nh: 2464 2080
+link_sh: 832 192
+proc_list: 24 24
+fun_entry: 22584 22584
+db_tab: 1632 1632
+=allocator:sys_alloc
+option e: true
+option m: libc
+=allocator:temp_alloc
+versions: 0.9 2.1
+option e: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 90
+option rsbcmt: 80
+option mmbcs: 65536
+option mmsbc: 256
+option mmmbc: 10
+option lmbcs: 5242880
+option smbcs: 1048576
+option mbcgs: 10
+option as: af
+mbcs blocks: 0 9 9
+mbcs blocks size: 0 35376 35376
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 65568 65568 65568
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 65568
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+temp_alloc calls: 6155
+temp_free calls: 6155
+temp_realloc calls: 29
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:sl_alloc
+option e: false
+=allocator:std_alloc
+option e: false
+=allocator:ll_alloc
+versions: 0.9 2.1
+option e: true
+option sbct: 4294967295
+option asbcst: 0
+option rsbcst: 0
+option rsbcmt: 0
+option mmbcs: 2097152
+option mmsbc: 0
+option mmmbc: 0
+option lmbcs: 5242880
+option smbcs: 1048576
+option mbcgs: 10
+option as: aobf
+mbcs blocks: 592 592 592
+mbcs blocks size: 2838520 2863304 2863304
+mbcs carriers: 2 2 2
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 2
+mbcs carriers size: 3145760 3145760 3145760
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 3145760
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ll_alloc calls: 592
+ll_free calls: 0
+ll_realloc calls: 235
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 2
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:eheap_alloc
+versions: 2.1 2.1
+option e: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 50
+option rsbcmt: 80
+option mmbcs: 524288
+option mmsbc: 256
+option mmmbc: 10
+option lmbcs: 5242880
+option smbcs: 1048576
+option mbcgs: 10
+option mbsd: 3
+option as: gf
+mbcs blocks: 56 102 102
+mbcs blocks size: 833280 1638920 1638920
+mbcs carriers: 2 3 3
+mbcs mseg carriers: 1
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 1998880 3047456 3047456
+mbcs mseg carriers size: 1474560
+mbcs sys_alloc carriers size: 524320
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+eheap_alloc calls: 6971
+eheap_free calls: 6914
+eheap_realloc calls: 461
+mseg_alloc calls: 16
+mseg_dealloc calls: 14
+mseg_realloc calls: 0
+sys_alloc calls: 3
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:binary_alloc
+option e: false
+=allocator:ets_alloc
+option e: false
+=allocator:fix_alloc
+option e: true
+proc: 15080 13576
+atom_entry: 137152 137008
+export_entry: 138448 137632
+module_entry: 4872 4352
+reg_proc: 1000 592
+link_nh: 2464 2080
+link_sh: 832 192
+proc_list: 24 24
+fun_entry: 22584 22584
+db_tab: 1632 1632
+=allocator:mseg_alloc
+version: 0.9
+option amcbf: 4194304
+option rmcbf: 20
+option mcs: 5
+option cci: 1000
+cached_segments: 0
+cache_hits: 13
+segments: 2
+segments_watermark: 2
+mseg_alloc calls: 16
+mseg_dealloc calls: 14
+mseg_realloc calls: 0
+mseg_create calls: 4
+mseg_destroy calls: 1
+mseg_clear_cache calls: 6
+mseg_check_cache calls: 2
+=allocator:alloc_util
+option mmc: 1024
+option ycs: 1048576
+=allocator:instr
+option m: false
+option s: false
+option t: false
+=proc:<0.0.0>
+State: Waiting
+Name: init
+Spawned as: otp_ring0:start/2
+Spawned by: []
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.5.0>,<0.4.0>,<0.2.0>]
+Reductions: 3851
+Stack+heap: 377
+OldHeap: 610
+Heap unused: 53
+OldHeap unused: 610
+Program counter: 0x1f496c (init:loop/1 + 20)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.2.0>
+State: Waiting
+Name: erl_prim_loader
+Spawned as: erlang:apply/2
+Spawned by: <0.1.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.0.0>,#Port<0.2>]
+Reductions: 201036
+Stack+heap: 987
+OldHeap: 987
+Heap unused: 923
+OldHeap unused: 987
+Program counter: 0x20cc94 (erl_prim_loader:loop/3 + 52)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.4.0>
+State: Waiting
+Name: error_logger
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.1.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.21.0>,<0.0.0>]
+Reductions: 296
+Stack+heap: 6765
+OldHeap: 0
+Heap unused: 851
+OldHeap unused: 0
+Program counter: 0x21f5b8 (gen_event:loop/4 + 40)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.5.0>
+State: Waiting
+Name: application_controller
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.1.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.7.0>,<0.0.0>]
+Reductions: 1508
+Stack+heap: 1597
+OldHeap: 0
+Heap unused: 835
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.7.0>
+State: Waiting
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.6.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.8.0>,<0.5.0>]
+Reductions: 23
+Stack+heap: 377
+OldHeap: 0
+Heap unused: 79
+OldHeap unused: 0
+Program counter: 0x248d04 (application_master:main_loop/2 + 28)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.8.0>
+State: Waiting
+Spawned as: application_master:start_it/4
+Spawned by: <0.7.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>,<0.7.0>]
+Reductions: 91
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 177
+OldHeap unused: 0
+Program counter: 0x24a26c (application_master:loop_it/4 + 40)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.9.0>
+State: Waiting
+Name: kernel_sup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.8.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.24.0>,<0.23.0>,<0.19.0>,<0.18.0>,<0.17.0>,<0.16.0>,<0.15.0>,<0.14.0>,<0.11.0>,<0.10.0>,<0.8.0>]
+Reductions: 7402
+Stack+heap: 610
+OldHeap: 987
+Heap unused: 311
+OldHeap unused: 987
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.10.0>
+State: Waiting
+Name: rex
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>]
+Reductions: 44
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 144
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.11.0>
+State: Waiting
+Name: global_name_server
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.13.0>,<0.12.0>,<0.9.0>]
+Reductions: 47
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 98
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.12.0>
+State: Waiting
+Spawned as: global:init_the_locker/1
+Spawned by: <0.11.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.11.0>]
+Reductions: 3
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 227
+OldHeap unused: 0
+Program counter: 0x261340 (global:loop_the_locker/2 + 92)
+CP: 0x261184 (global:init_the_locker/1 + 112)
+arity = 0
+=proc:<0.13.0>
+State: Waiting
+Spawned as: erlang:apply/2
+Spawned by: <0.11.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.11.0>]
+Reductions: 4
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 221
+OldHeap unused: 0
+Program counter: 0x265288 (global:collect_deletions/2 + 76)
+CP: 0x2651ac (global:loop_the_deleter/1 + 36)
+arity = 0
+=proc:<0.14.0>
+State: Waiting
+Name: inet_db
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>]
+Reductions: 376
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 30
+OldHeap unused: 233
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.15.0>
+State: Waiting
+Name: global_group
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>]
+Reductions: 71
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 92
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.16.0>
+State: Waiting
+Name: file_server_2
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 1
+Heap fragment data: 119
+Link list: [{from,<0.17.0>,#Ref<0.0.0.22>},#Port<0.4>,<0.9.0>]
+Reductions: 83605
+Stack+heap: 4181
+OldHeap: 4181
+Heap unused: 1720
+OldHeap unused: 4181
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.17.0>
+State: Waiting
+Name: file_server
+Spawned as: erlang:apply/2
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [{to,<0.16.0>,#Ref<0.0.0.22>},<0.9.0>]
+Reductions: 12
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 207
+OldHeap unused: 0
+Program counter: 0x2a18e8 (old_file_server:relay_loop/3 + 32)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.18.0>
+State: Waiting
+Name: code_server
+Spawned as: erlang:apply/2
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>]
+Reductions: 108900
+Stack+heap: 6765
+OldHeap: 6765
+Heap unused: 4389
+OldHeap unused: 6765
+Program counter: 0x2a6e64 (code_server:loop/1 + 64)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.19.0>
+State: Waiting
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.21.0>,<0.9.0>]
+Reductions: 74
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 180
+OldHeap unused: 233
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.20.0>
+State: Waiting
+Spawned as: user_drv:server/2
+Spawned by: <0.19.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.22.0>,<0.21.0>,#Port<0.72>]
+Reductions: 596
+Stack+heap: 233
+OldHeap: 377
+Heap unused: 214
+OldHeap unused: 377
+Program counter: 0x2ca4e0 (user_drv:server_loop/5 + 56)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.21.0>
+State: Waiting
+Name: user
+Spawned as: group:server/2
+Spawned by: <0.20.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.4.0>,<0.19.0>,<0.20.0>]
+Reductions: 26
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 202
+OldHeap unused: 0
+Program counter: 0x2cd9d8 (group:server_loop/3 + 32)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.22.0>
+State: Waiting
+Spawned as: group:server/2
+Spawned by: <0.20.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [{from,<0.49.0>,#Ref<0.0.0.307>},<0.25.0>,<0.20.0>]
+Reductions: 1244
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 40
+OldHeap unused: 233
+Program counter: 0x2cf238 (group:get_line1/3 + 1652)
+CP: 0x2cf230 (group:get_line1/3 + 1644)
+arity = 0
+=proc:<0.23.0>
+State: Waiting
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>]
+Reductions: 45
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 63
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.24.0>
+State: Waiting
+Name: kernel_safe_sup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.31.0>,<0.9.0>]
+Reductions: 133
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 198
+OldHeap unused: 233
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.25.0>
+State: Waiting
+Spawned as: erlang:apply/2
+Spawned by: <0.22.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.49.0>,<0.27.0>,<0.22.0>]
+Reductions: 161
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 169
+OldHeap unused: 0
+Program counter: 0x2e0d00 (shell:get_command1/4 + 40)
+CP: 0x2e06fc (shell:server_loop/6 + 140)
+arity = 0
+=proc:<0.27.0>
+State: Waiting
+Spawned as: erlang:apply/2
+Spawned by: <0.25.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.25.0>]
+Reductions: 506
+Stack+heap: 4181
+OldHeap: 0
+Heap unused: 1131
+OldHeap unused: 0
+Program counter: 0x2e2bbc (shell:eval_loop/2 + 32)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.31.0>
+State: Waiting
+Name: inet_gethost_native_sup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.24.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.32.0>,<0.24.0>]
+Reductions: 49
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 87
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.32.0>
+State: Waiting
+Name: inet_gethost_native
+Spawned as: inet_gethost_native:server_init/2
+Spawned by: <0.31.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 1
+Heap fragment data: 118
+Link list: [#Port<0.105>,<0.31.0>]
+Reductions: 65
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 13
+OldHeap unused: 0
+Program counter: 0x4ad840 (inet_gethost_native:main_loop/1 + 20)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.33.0>
+State: Waiting
+Name: web_tool
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.27.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.41.0>]
+Reductions: 131773
+Stack+heap: 6765
+OldHeap: 6765
+Heap unused: 2941
+OldHeap unused: 6765
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.41.0>
+State: Waiting
+Name: websup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.33.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.48.0>,<0.33.0>]
+Reductions: 118
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 205
+OldHeap unused: 233
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.43.0>
+State: Waiting
+Name: httpd_sup__127_0_0_1__8888
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.33.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.46.0>,<0.45.0>,<0.44.0>]
+Reductions: 1220
+Stack+heap: 6765
+OldHeap: 0
+Heap unused: 277
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.44.0>
+State: Waiting
+Name: httpd_acc_sup__127_0_0_1__8888
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.43.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.47.0>,<0.43.0>]
+Reductions: 147
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 77
+OldHeap unused: 233
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.45.0>
+State: Waiting
+Name: httpd_misc_sup__127_0_0_1__8888
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.43.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.43.0>]
+Reductions: 52
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 80
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.46.0>
+State: Waiting
+Name: httpd__127_0_0_1__8888
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.43.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.43.0>]
+Reductions: 2905
+Stack+heap: 6765
+OldHeap: 10946
+Heap unused: 138
+OldHeap unused: 10946
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.47.0>
+State: Waiting
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.44.0>
+Started: Wed Apr 21 13:22:18 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [#Port<0.161>,#Port<0.141>,<0.44.0>]
+Reductions: 874
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 190
+OldHeap unused: 233
+Program counter: 0x1fe798 (prim_inet:accept0/2 + 96)
+CP: 0x1feb04 (prim_inet:async_accept/2 + 380)
+arity = 0
+=proc:<0.48.0>
+State: Waiting
+Name: crashdump_viewer_server
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.41.0>
+Started: Wed Apr 21 13:22:18 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.56.0>,<0.41.0>]
+Reductions: 1913
+Stack+heap: 987
+OldHeap: 987
+Heap unused: 524
+OldHeap unused: 987
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.49.0>
+State: Waiting
+Spawned as: erlang:apply/2
+Spawned by: <0.25.0>
+Started: Wed Apr 21 13:22:18 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [{to,<0.22.0>,#Ref<0.0.0.307>},<0.25.0>]
+Reductions: 15
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 190
+OldHeap unused: 0
+Program counter: 0x301d58 (io:wait_io_mon_reply/2 + 28)
+CP: 0x30174c (io:parse_erl_exprs/3 + 92)
+arity = 0
+=proc:<0.56.0>
+State: Garbing
+Spawned as: erlang:apply/2
+Last scheduled in for: erlang:garbage_collect/0
+Spawned by: <0.48.0>
+Started: Wed Apr 21 13:22:27 2004
+Message queue length: 0
+Number of heap fragments: 1
+Heap fragment data: 121
+Link list: [#Port<0.158>,#Port<0.157>,<0.48.0>]
+Reductions: 2420470
+Stack+heap: 121393
+OldHeap: 0
+Heap unused: 22172
+OldHeap unused: 0
+New heap start: FE5768E0
+New heap top: FE5D7734
+Stack top: FE5ED130
+Stack end: FE5ED1A4
+Old heap start: 0
+Old heap top: 0
+Old heap end: 0
+Program counter: 0x1a4980 (unknown function)
+CP: 0x20710c (prim_file:read/2 + 436)
+=port:#Port<0.1>
+Slot: 1
+Connected: #Port<0.0>
+Port controls linked-in driver: async
+=port:#Port<0.2>
+Slot: 2
+Connected: <0.2.0>
+Links: <0.2.0>
+Port controls linked-in driver: efile
+=port:#Port<0.4>
+Slot: 4
+Connected: <0.16.0>
+Links: <0.16.0>
+Port controls linked-in driver: efile
+=port:#Port<0.72>
+Slot: 72
+Connected: <0.20.0>
+Links: <0.20.0>
+Port controls linked-in driver: tty_sl -c -e
+=port:#Port<0.105>
+Slot: 105
+Connected: <0.32.0>
+Links: <0.32.0>
+Port controls external process: inet_gethost 4
+=port:#Port<0.141>
+Slot: 141
+Connected: <0.47.0>
+Links: <0.47.0>
+Port controls linked-in driver: tcp_inet
+=port:#Port<0.157>
+Slot: 157
+Connected: <0.56.0>
+Links: <0.56.0>
+Port controls linked-in driver: efile
+=port:#Port<0.158>
+Slot: 158
+Connected: <0.56.0>
+Links: <0.56.0>
+Port controls linked-in driver: efile
+=port:#Port<0.161>
+Slot: 161
+Connected: <0.47.0>
+Links: <0.47.0>
+Port controls linked-in driver: tcp_inet
+=ets:<0.18.0>
+Slot: 9
+Table: 9
+Name: code
+Buckets: 256
+Objects: 289
+Words: 14108
+=ets:<0.18.0>
+Slot: 10
+Table: 10
+Name: code_names
+Buckets: 256
+Objects: 47
+Words: 4334
+=ets:<0.32.0>
+Slot: 11
+Table: 11
+Name: ign_requests
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.32.0>
+Slot: 12
+Table: 12
+Name: ign_req_index
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.33.0>
+Slot: 13
+Table: 13
+Name: app_data
+Buckets: 256
+Objects: 7
+Words: 952
+=ets:<0.46.0>
+Slot: 15
+Table: 15
+Name: httpd_mime__127_0_0_1__8888
+Buckets: 256
+Objects: 105
+Words: 5742
+=ets:<0.11.0>
+Slot: 84
+Table: global_names
+Name: global_names
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.11.0>
+Slot: 95
+Table: global_locks
+Name: global_locks
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.11.0>
+Slot: 96
+Table: global_names_ext
+Name: global_names_ext
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.14.0>
+Slot: 316
+Table: inet_cache
+Name: inet_cache
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.48.0>
+Slot: 340
+Table: cdv_menu_table
+Name: cdv_menu_table
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.48.0>
+Slot: 341
+Table: cdv_dump_index_table
+Name: cdv_dump_index_table
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.48.0>
+Slot: 342
+Table: cdv_decode_heap_table
+Name: cdv_decode_heap_table
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.16.0>
+Slot: 780
+Table: file_io_servers
+Name: file_io_servers
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.46.0>
+Slot: 984
+Table: httpd_conf__127_0_0_1__8888
+Name: httpd_conf__127_0_0_1__8888
+Buckets: 256
+Objects: 17
+Words: 1176
+=ets:<0.14.0>
+Slot: 1342
+Table: inet_hosts
+Name: inet_hosts
+Buckets: 256
+Objects: 4
+Words: 421
+=ets:<0.14.0>
+Slot: 1362
+Table: inet_db
+Name: inet_db
+Buckets: 256
+Objects: 20
+Words: 671
+=ets:<0.5.0>
+Slot: 1655
+Table: ac_tab
+Name: ac_tab
+Buckets: 256
+Objects: 6
+Words: 843
+=timer:<0.14.0>
+Message: refresh_timeout
+Time left: 3565692 ms
+=node:'nonode@nohost'
+=no_distribution
+=loaded_modules
+Current code: 1968915
+Old code: 0
+=mod:otp_ring0
+Current size: 489
+=mod:init
+Current size: 30110
+=mod:prim_inet
+Current size: 35532
+=mod:prim_file
+Current size: 24965
+=mod:erl_prim_loader
+Current size: 19607
+=mod:erlang
+Current size: 11137
+=mod:error_handler
+Current size: 2389
+Current attributes: 836C00000001680264000376736E6C000000016E100030769A34345F26EF6D3433254FF2AE576A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161216802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6572726F725F68616E646C65722E65726C6A
+=mod:heart
+Current size: 6687
+Current attributes: 836C00000001680264000376736E6C000000016E10003094F7BECF345494DDBB4D7186E694186A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261086802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F68656172742E65726C6A
+=mod:error_logger
+Current size: 7051
+Current attributes: 836C00000001680264000376736E6C000000016E10004E3347F841DEAE2EB6A74389E6E127146A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161246802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6572726F725F6C6F676765722E65726C6A
+=mod:gen_event
+Current size: 18288
+Current attributes: 836C00000001680264000376736E6C000000016E1000336F22DF1EA75E0EA4AE65D3B8C34F946A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61346802640006736F757263656B00302F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E5F6576656E742E65726C6A
+=mod:gen
+Current size: 7129
+Current attributes: 836C00000001680264000376736E6C000000016E10007BE6AEB66EF48D8B33323C89C9936A526A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61316802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E2E65726C6A
+=mod:proc_lib
+Current size: 11658
+Current attributes: 836C00000001680264000376736E6C000000016E10005C589A8C9BD2E1F2E895E765CAE983406A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E612D6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F70726F635F6C69622E65726C6A
+=mod:application_controller
+Current size: 55249
+Current attributes: 836C00000002680264000376736E6C000000016E10003372E1AB0410565065FA086086A721316A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061246802640006736F757263656B003D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F636F6E74726F6C6C65722E65726C6A
+=mod:gen_server
+Current size: 18728
+Current attributes: 836C00000001680264000376736E6C000000016E10004C5E93533036DAC7698FC4112F59CF236A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61396802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E5F7365727665722E65726C6A
+=mod:sys
+Current size: 11589
+Current attributes: 836C00000001680264000376736E6C000000016E1000E12B0E8267551204BD5924BAB9629ADF6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61176802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7379732E65726C6A
+=mod:lists
+Current size: 18638
+Current attributes: 836C00000002680264000376736E6C000000016E10001E95B32C30E4CDAF0BDD1ABA58CBB5F36A680264000A646570726563617465646C0000000B68026400066B65796D617061046802640003616C6C61036802640003616E79610368026400036D617061036802640007666C61746D617061036802640005666F6C646C61046802640005666F6C64726104680264000666696C746572610368026400086D6170666F6C646C610468026400086D6170666F6C647261046802640007666F726561636861036A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61116802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6C697374732E65726C6A
+=mod:application
+Current size: 2666
+Current attributes: 836C00000001680264000376736E6C000000016E1000C0C5A7B67B306300FEFF9D91AA50ECB36A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6130611F6802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E2E65726C6A
+=mod:application_master
+Current size: 10912
+Current attributes: 836C00000001680264000376736E6C000000016E1000360420F5CEB80AD7DD51B3A8A0E2AFA26A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061266802640006736F757263656B00392F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F6D61737465722E65726C6A
+=mod:kernel
+Current size: 7639
+Current attributes: 836C00000002680264000376736E6C000000016E10004D418ACCB0F948D4D3CA6B9A81B462746A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261336802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6B65726E656C2E65726C6A
+=mod:supervisor
+Current size: 24469
+Current attributes: 836C00000002680264000376736E6C000000016E1000979F65727577135484BE0892A35087CC6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61126802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F73757065727669736F722E65726C6A
+=mod:rpc
+Current size: 14539
+Current attributes: 836C00000002680264000376736E6C000000016E10008C5D6242D36B3201E3B11E82D5E1581E6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6133610F6802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F7270632E65726C6A
+=mod:gb_trees
+Current size: 8274
+Current attributes: 836C00000001680264000376736E6C000000016E1000094BEFDE7B866EF2CB6FCD895AC2EE056A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D612B6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67625F74726565732E65726C6A
+=mod:global
+Current size: 40753
+Current attributes: 836C00000002680264000376736E6C000000016E10001D02C89BDE6CB2052F099894683C14CA6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161386802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F676C6F62616C2E65726C6A
+=mod:inet_db
+Current size: 34555
+Current attributes: 836C00000001680264000376736E6C000000016E1000C1CF6A6F2E83D4EBC23D2CCECBF376226A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132611A6802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F64622E65726C6A
+=mod:inet_config
+Current size: 13575
+Current attributes: 836C00000001680264000376736E6C000000016E1000650F6571C03BC9C16BB7973A747565066A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261166802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F636F6E6669672E65726C6A
+=mod:os
+Current size: 5997
+Current attributes: 836C00000001680264000376736E6C000000016E100017144CD766A604A9DFBA0B58C8FCA78B6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361056802640006736F757263656B00292F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6F732E65726C6A
+=mod:inet_udp
+Current size: 2451
+Current attributes: 836C00000001680264000376736E6C000000016E1000ACB163E87A687A6683B50B331C6E289B6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261306802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F7564702E65726C6A
+=mod:inet
+Current size: 28288
+Current attributes: 836C00000001680264000376736E6C000000016E10009B9AD400F0BAF6AAF17A4788A4EFF11E6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132610C6802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65742E65726C6A
+=mod:inet_parse
+Current size: 21928
+Current attributes: 836C00000001680264000376736E6C000000016E1000E0E65454C096847749930EDC1C53C80B6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261266802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F70617273652E65726C6A
+=mod:filename
+Current size: 17411
+Current attributes: 836C00000001680264000376736E6C000000016E100068085214F459D51A3E08819BF8D7698A6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61296802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F66696C656E616D652E65726C6A
+=mod:inet_hosts
+Current size: 3745
+Current attributes: 836C00000001680264000376736E6C000000016E1000E7430304E86230057150DEE5D279881F6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261226802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F686F7374732E65726C6A
+=mod:erl_distribution
+Current size: 2512
+Current attributes: 836C00000002680264000376736E6C000000016E1000CDE49D63ACA767E0D49679657E99D2046A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161186802640006736F757263656B00372F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F65726C5F646973747269627574696F6E2E65726C6A
+=mod:global_group
+Current size: 30960
+Current attributes: 836C00000002680264000376736E6C000000016E10008ECE759E5920988CA3ACFF34B32F86736A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131613B6802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F676C6F62616C5F67726F75702E65726C6A
+=mod:net_kernel
+Current size: 37648
+Current attributes: 836C00000002680264000376736E6C000000016E1000967CE7DE41F9B39906CCCF3225E6E5286A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361026802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6E65745F6B65726E656C2E65726C6A
+=mod:file_server
+Current size: 8372
+Current attributes: 836C00000002680264000376736E6C000000016E1000EF90906EC6204204AC0A77C4A25B65236A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612D6802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C655F7365727665722E65726C6A
+=mod:old_file_server
+Current size: 3074
+Current attributes: 836C00000001680264000376736E6C000000016E1000C802085DD76D4EFBA6A8F528FECB94B36A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612F6802640006736F757263656B00362F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6F6C645F66696C655F7365727665722E65726C6A
+=mod:code
+Current size: 7419
+Current attributes: 836C00000001680264000376736E6C000000016E1000AE618E3041C8E3807A3719CD5140DF5E6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6130612E6802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64652E65726C6A
+=mod:code_server
+Current size: 30811
+Current attributes: 836C00000001680264000376736E6C000000016E0F00BFB96248C2CA8601B4CB7F543F52E26A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061346802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64655F7365727665722E65726C6A
+=mod:code_aux
+Current size: 1736
+Current attributes: 836C00000001680264000376736E6C000000016E10007A90DB53FCCECD52504F20E7A3B6BAE26A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061316802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64655F6175782E65726C6A
+=mod:packages
+Current size: 3119
+Current attributes: 836C00000001680264000376736E6C000000016E1000044DC8EEB65F178AE23EF2465E1954496A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361076802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F7061636B616765732E65726C6A
+=mod:hipe_unified_loader
+Current size: 37330
+Current attributes: 836C00000001680264000376736E6C000000016E1000DABD57945702E56F4B3AA7B7B19C1D166A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361326802640006736F757263656B003A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F686970655F756E69666965645F6C6F616465722E65726C6A
+=mod:hipe_sparc_loader
+Current size: 1821
+Current attributes: 836C00000001680264000376736E6C000000016E1000582BC55E9FADFF879C2C45D25A6CB7E56A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F6D61696E6802640001696B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F72746C6802640001696B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F737061726364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6133612B6802640006736F757263656B00382F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F686970655F73706172635F6C6F616465722E65726C6A
+=mod:ets
+Current size: 16577
+Current attributes: 836C00000002680264000376736E6C000000016E100033D982AC91129E5FC35E0AC3337A4EB56A680264000A646570726563617465646C0000000168026400086669787461626C6561026A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D611C6802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6574732E65726C6A
+=mod:lists_sort
+Current size: 38692
+Current attributes: 836C00000001680264000376736E6C000000016E1000E17EC92FA9AA3199DD71701C215044616A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000B68026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736802640006696E6C696E656C0000000468026400096D65726765335F3132610768026400096D65726765335F32316107680264000A726D65726765335F31326107680264000A726D65726765335F323161076A6802640006696E6C696E656C00000004680264000A756D65726765335F31326108680264000A756D65726765335F32316108680264000C72756D65726765335F3132616107680264000C72756D65726765335F31326261086A6802640006696E6C696E656C00000004680264000C6B65796D65726765335F3132610C680264000C6B65796D65726765335F3231610C680264000D726B65796D65726765335F3132610C680264000D726B65796D65726765335F3231610C6A6802640006696E6C696E656C00000006680264000D756B65796D65726765335F3132610D680264000D756B65796D65726765335F3231610D680264000F72756B65796D65726765335F313261610B680264000F72756B65796D65726765335F323161610D680264000F72756B65796D65726765335F313262610D680264000F72756B65796D65726765335F323162610C6A6A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61166802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6C697374735F736F72742E65726C6A
+=mod:user_sup
+Current size: 2355
+Current attributes: 836C00000002680264000376736E6C000000016E100074BA860804CB4D60D6908C705E6544BD6A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361246802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F757365725F7375702E65726C6A
+=mod:supervisor_bridge
+Current size: 2944
+Current attributes: 836C00000002680264000376736E6C000000016E10001590DDC10CF8A9D09763CDB7479678ED6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61156802640006736F757263656B00382F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F73757065727669736F725F6272696467652E65726C6A
+=mod:user_drv
+Current size: 14630
+Current attributes: 836C00000001680264000376736E6C000000016E1000F29F3B193A1EB1ADA9975D97E51BF0E86A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361216802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F757365725F6472762E65726C6A
+=mod:group
+Current size: 10165
+Current attributes: 836C00000001680264000376736E6C000000016E1000F6427D0DA330BBFAD5D4C19058516FF36A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261066802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F67726F75702E65726C6A
+=mod:io_lib
+Current size: 12601
+Current attributes: 836C00000002680264000376736E6C000000016E10004160DD78F37EE7C72F7C5B6A751DB7F56A680264000A646570726563617465646C0000000468026400047363616E610168026400047363616E610268026400047363616E6103680264000D72657365727665645F776F726461016A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61036802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69622E65726C6A
+=mod:edlin
+Current size: 18178
+Current attributes: 836C00000001680264000376736E6C000000016E100035D752FCBA8ED7F4D26990EF3E6A1A526A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C61016802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65646C696E2E65726C6A
+=mod:io_lib_format
+Current size: 16189
+Current attributes: 836C00000001680264000376736E6C000000016E10004F382F327C456F83F33C3D5EBFBD87906A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61066802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69625F666F726D61742E65726C6A
+=mod:kernel_config
+Current size: 3295
+Current attributes: 836C00000002680264000376736E6C000000016E100077B8EE6C9E95FBBE5DB0371F6DB235226A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261356802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6B65726E656C5F636F6E6669672E65726C6A
+=mod:shell
+Current size: 22571
+Current attributes: 836C00000001680264000376736E6C000000016E10007D1354325618EB98A5BD4E8F41E6A0226A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61016802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7368656C6C2E65726C6A
+=mod:error_logger_tty_h
+Current size: 7773
+Current attributes: 836C00000002680264000376736E6C000000016E10001502D55D6C1777F07E2E05CDD91D16986A68026400096265686176696F75726C0000000164000967656E5F6576656E746A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61196802640006736F757263656B00392F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6572726F725F6C6F676765725F7474795F682E65726C6A
+=mod:erl_eval
+Current size: 33481
+Current attributes: 836C00000002680264000376736E6C000000016E1000D06903753C86BBC49A5CBD789CCB09B66A680264000A646570726563617465646C00000004680264000373657161026802640003736571610368026400086172675F6C697374610268026400086172675F6C69737461036A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C610D6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F6576616C2E65726C6A
+=mod:orddict
+Current size: 4872
+Current attributes: 836C00000002680264000376736E6C000000016E100078DCF69F3949D79BC54168266A3ABF566A680264000A646570726563617465646C00000002680264000C646963745F746F5F6C6973746101680264000C6C6973745F746F5F6469637461016A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61236802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F7264646963742E65726C6A
+=mod:c
+Current size: 19555
+Current attributes: 836C00000001680264000376736E6C000000016E10003FACCF5DE16ABBC988ABF0811980C33B6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61136802640006736F757263656B00282F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F632E65726C6A
+=mod:io
+Current size: 7417
+Current attributes: 836C00000002680264000376736E6C000000016E1000E2F2A6094B3C3D945865225D0620E7546A680264000A646570726563617465646C00000007680264000B70617273655F65787072736102680264000C7363616E5F65726C5F7365716101680264000C7363616E5F65726C5F7365716102680264000C7363616E5F65726C5F7365716103680264000D70617273655F65726C5F7365716101680264000D70617273655F65726C5F7365716102680264000D70617273655F65726C5F73657161036A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61006802640006736F757263656B00292F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F2E65726C6A
+=mod:file
+Current size: 20795
+Current attributes: 836C00000002680264000376736E6C000000016E1000D291AF77EE8B08B792B7FE99274504506A680264000A646570726563617465646C00000001680264000966696C655F696E666F61016A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161276802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C652E65726C6A
+=mod:file_io_server
+Current size: 12071
+Current attributes: 836C00000001680264000376736E6C000000016E1000A5A8C4E2B2646855AD5C617CB216CB966A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612A6802640006736F757263656B00352F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C655F696F5F7365727665722E65726C6A
+=mod:erl_scan
+Current size: 21891
+Current attributes: 836C00000001680264000376736E6C000000016E100094F386F0C378B258E5D9CEADD4F03B6A6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61116802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F7363616E2E65726C6A
+=mod:erl_parse
+Current size: 161233
+Current attributes: 836C00000001680264000376736E6C000000016E10000E8CBC32C293BFC1FBC721CE918062236A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000968026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F76617273640006696E6C696E656802640004686970656C000000016802640008726567616C6C6F6364000B6C696E6561725F7363616E6A6A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61076802640006736F757263656B00302F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F70617273652E65726C6A
+=mod:erl_lint
+Current size: 73159
+Current attributes: 836C00000001680264000376736E6C000000016E1000D1D2A7D6DDFD1195CB180993C76FD2CD6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C61156802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F6C696E742E65726C6A
+=mod:ordsets
+Current size: 3257
+Current attributes: 836C00000002680264000376736E6C000000016E1000FD39D8FD846511128F5670BA28600F676A680264000A646570726563617465646C0000000468026400076E65775F7365746100680264000B7365745F746F5F6C6973746101680264000B6C6973745F746F5F7365746101680264000673756273657461026A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61256802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F7264736574732E65726C6A
+=mod:dict
+Current size: 15637
+Current attributes: 836C00000002680264000376736E6C000000016E1000BC846E7EF85045A5D76190CE9B1AE97C6A680264000A646570726563617465646C00000002680264000C646963745F746F5F6C6973746101680264000C6C6973745F746F5F6469637461016A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61356802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F646963742E65726C6A
+=mod:otp_internal
+Current size: 7133
+Current attributes: 836C00000001680264000376736E6C000000016E1000DC494F64DE590AFC4919DFEB0EB026B66A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61206802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F74705F696E7465726E616C2E65726C6A
+=mod:user_default
+Current size: 1261
+Current attributes: 836C00000002680264000376736E6C000000016E1000505078ACD9B84D514FC6DA2BE249E6756A6802640006617574686F726C0000000164001765656973686E6E406565692E6572696373736F6E2E73656A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000368026400036377646B00112F686F6D652F736972692F65726C616E6768026400066F75746469726B00112F686F6D652F736972692F65726C616E676400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461036116610D612C61126802640006736F757263656B00222F686F6D652F736972692F65726C616E672F757365725F64656661756C742E65726C6A
+=mod:tt
+Current size: 2959
+Current attributes: 836C00000002680264000376736E6C000000016E10001D71FD5A55D3BCBF06BFEDF2426C3C386A6802640006617574686F726C0000000164001765656973686E6E406565692E6572696373736F6E2E73656A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000368026400036377646B00112F686F6D652F736972692F65726C616E6768026400066F75746469726B00112F686F6D652F736972692F65726C616E676400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461036116610D612B610C6802640006736F757263656B00182F686F6D652F736972692F65726C616E672F74742E65726C6A
+=mod:distel
+Current size: 18214
+Current attributes: 836C00000002680264000376736E6C000000016E1000CC9C9EF141459249C1CCA00993B2E29A6A6802640006617574686F726C000000016400116C756B6540626C75657461696C2E636F6D6A6A
+Current compilation info: 836C0000000368026400076F7074696F6E736C0000000664000276336400107761726E5F756E757365645F7661727364000A64656275675F696E666F68026400066F75746469726B00046562696E68026400036377646B001C2F6C6469736B2F736972692F746F6F6C732F64697374656C2D332E3164000A6578706F72745F616C6C6A680264000776657273696F6E6B0003342E31680264000474696D65680662000007D2610B6114610B610361336A
+=mod:crashdump_viewer
+Current size: 125756
+Current attributes: 836C00000001680264000376736E6C000000016E10002DC5D9D96190A2D5F27FAC3FA3D5C7956A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F76617273680264000F70617273655F7472616E73666F726D64000C6D735F7472616E73666F726D6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461146108611B61366802640006736F757263656B00362F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7669657765722E65726C6A
+=mod:webtool
+Current size: 29229
+Current attributes: 836C00000002680264000376736E6C000000016E10008AEEF06B60527A3390CBC2C98083CC0A6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00202F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F73726368026400066F75746469726B00282F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F2E2E2F6562696E64000A64656275675F696E666F6400107761726E5F756E757365645F76617273680264000F70617273655F7472616E73666F726D64000C6D735F7472616E73666F726D6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104610661086106612D6802640006736F757263656B002C2F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F776562746F6F6C2E65726C6A
+=mod:gen_tcp
+Current size: 3574
+Current attributes: 836C00000001680264000376736E6C000000016E1000C965E4EAFDAA94D7F21EDCBE30B21E7B6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161316802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F67656E5F7463702E65726C6A
+=mod:inet_tcp
+Current size: 2743
+Current attributes: 836C00000001680264000376736E6C000000016E1000C4AFE0B49768E4CF78B2C42EA1D3DB7F6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132612B6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F7463702E65726C6A
+=mod:inet_gethost_native
+Current size: 15611
+Current attributes: 836C00000002680264000376736E6C000000016E10005D8CD4277D0BD2425B9C26036AE314506A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261206802640006736F757263656B003A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F676574686F73745F6E61746976652E65726C6A
+=mod:filelib
+Current size: 7202
+Current attributes: 836C00000001680264000376736E6C000000016E10007B42AA23FF99DF2CD9D586635B77556A6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61266802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F66696C656C69622E65726C6A
+=mod:httpd_util
+Current size: 24068
+Current attributes: 836C00000002680264000376736E6C000000016E10008D99E096221B88D542E52CB9C8377F6D6A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128613B6802640006736F757263656B00312F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F7574696C2E65726C6A
+=mod:webtool_sup
+Current size: 695
+Current attributes: 836C00000002680264000376736E6C000000016E1000FA5449E12816CF3AD0A3085BB26CDB9B6A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400036377646B00202F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F73726368026400066F75746469726B00282F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F2E2E2F6562696E64000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461066108610761236802640006736F757263656B00302F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F776562746F6F6C5F7375702E65726C6A
+=mod:httpd_conf
+Current size: 33659
+Current attributes: 836C00000002680264000376736E6C000000016E1000E3198FBDC73BC48CB7D0C1C762B8F1AB6A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861116802640006736F757263656B00312F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F636F6E662E65726C6A
+=mod:regexp
+Current size: 13698
+Current attributes: 836C00000001680264000376736E6C000000016E10009DD44F3D02F8328BE3ABF4DDA89E0CAE6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61376802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7265676578702E65726C6A
+=mod:string
+Current size: 7740
+Current attributes: 836C00000002680264000376736E6C000000016E10005521DDF38903D46D7C53DB864266F7456A680264000A646570726563617465646C00000007680264000C72655F73685F746F5F61776B6101680264000872655F70617273656101680264000872655F6D617463686102680264000672655F7375626103680264000772655F677375626103680264000872655F73706C697461026802640005696E64657861026A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F610F6802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F737472696E672E65726C6A
+=mod:httpd
+Current size: 7563
+Current attributes: 836C00000002680264000376736E6C000000016E1000BFD190D951EB3CAD2CC72ADEF20886906A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861036802640006736F757263656B002C2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470642E65726C6A
+=mod:httpd_sup
+Current size: 4068
+Current attributes: 836C00000003680264000376736E6C000000016E10007FA5C790118F18F3D20A2BFAF0229F0A6A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861366802640006736F757263656B00302F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F7375702E65726C6A
+=mod:httpd_acceptor_sup
+Current size: 2161
+Current attributes: 836C00000003680264000376736E6C000000016E10003E6F9289B64C13F1EC8A1184BACF055F6A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128610C6802640006736F757263656B00392F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6163636570746F725F7375702E65726C6A
+=mod:httpd_verbosity
+Current size: 2672
+Current attributes: 836C00000002680264000376736E6C000000016E100018B6F407D391872421748F87877DAAF36A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961036802640006736F757263656B00362F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F766572626F736974792E65726C6A
+=mod:timer
+Current size: 8223
+Current attributes: 836C00000001680264000376736E6C000000016E10001D0D64DB1B923D1B3B9497655C43B4AD6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F611A6802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F74696D65722E65726C6A
+=mod:httpd_misc_sup
+Current size: 2066
+Current attributes: 836C00000003680264000376736E6C000000016E100092342F38AC16C074DDC21532FBFB52C26A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128611F6802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6D6973635F7375702E65726C6A
+=mod:httpd_manager
+Current size: 28916
+Current attributes: 836C00000003680264000376736E6C000000016E100013F7A1E6A4B6407A0A1892A794EE10A36A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128611B6802640006736F757263656B00342F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6D616E616765722E65726C6A
+=mod:mod_alias
+Current size: 6720
+Current attributes: 836C00000002680264000376736E6C000000016E10002F35C36060B4AC45474440381D146AB96A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961106802640006736F757263656B00302F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F616C6961732E65726C6A
+=mod:mod_auth
+Current size: 25168
+Current attributes: 836C00000002680264000376736E6C000000016E100083F3CA0C7A3E7B5E19A635A7F916595D6A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961166802640006736F757263656B002F2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F617574682E65726C6A
+=mod:mod_esi
+Current size: 22534
+Current attributes: 836C00000002680264000376736E6C000000016E1000513E3FF733E1E6592B86CB55B9C14E086A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61026802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6573692E65726C6A
+=mod:mod_actions
+Current size: 3625
+Current attributes: 836C00000002680264000376736E6C000000016E10008E5437921662830490CA76DFF88548966A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066129610C6802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F616374696F6E732E65726C6A
+=mod:mod_cgi
+Current size: 25891
+Current attributes: 836C00000002680264000376736E6C000000016E1000F91D405488188F1BD25110B4ED9EE8786A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961306802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6367692E65726C6A
+=mod:mod_include
+Current size: 34923
+Current attributes: 836C00000002680264000376736E6C000000016E1000B9CCE88D63DD6AC49D5DF533C46B97D56A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61176802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F696E636C7564652E65726C6A
+=mod:mod_dir
+Current size: 13488
+Current attributes: 836C00000002680264000376736E6C000000016E1000EF620CB4B5DE5586ED681347496DA1C86A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961356802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6469722E65726C6A
+=mod:mod_get
+Current size: 4672
+Current attributes: 836C00000002680264000376736E6C000000016E1000AD2730B6BE6AF875A500AF4857C4D7F86A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61076802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6765742E65726C6A
+=mod:mod_head
+Current size: 3074
+Current attributes: 836C00000002680264000376736E6C000000016E1000CAF803B9FA6A28D4153BC109B00D7DF96A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A610B6802640006736F757263656B002F2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F686561642E65726C6A
+=mod:mod_log
+Current size: 8546
+Current attributes: 836C00000002680264000376736E6C000000016E1000F9664B54861260DEA081249379219AF86A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A611B6802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6C6F672E65726C6A
+=mod:mod_disk_log
+Current size: 15160
+Current attributes: 836C00000002680264000376736E6C000000016E1000DDA1E88A9C423A2866B56425DF36F5C66A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961396802640006736F757263656B00332F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6469736B5F6C6F672E65726C6A
+=mod:httpd_socket
+Current size: 7426
+Current attributes: 836C00000002680264000376736E6C000000016E1000B831219096661E4D2E200A07C4A9A7776A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861326802640006736F757263656B00332F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F736F636B65742E65726C6A
+=mod:httpd_acceptor
+Current size: 4472
+Current attributes: 836C00000002680264000376736E6C000000016E1000A501686DF4E4053E7D978E0CA162BEC56A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861076802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6163636570746F722E65726C6A
+=mod:io_lib_pretty
+Current size: 8171
+Current attributes: 836C00000001680264000376736E6C000000016E1000CD397E11D2D380D02A4BC6EE309B98CB6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E610C6802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69625F7072657474792E65726C6A
+=mod:httpd_request_handler
+Current size: 26393
+Current attributes: 836C00000002680264000376736E6C000000016E100021C280A5EB5B9CCD00A2C418A341202A6A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861296802640006736F757263656B003C2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F726571756573745F68616E646C65722E65726C6A
+=mod:calendar
+Current size: 7158
+Current attributes: 836C00000002680264000376736E6C000000016E10008C44498546709037F8D72DA4AF8B7FB76A680264000A646570726563617465646C00000001680264001C6C6F63616C5F74696D655F746F5F756E6976657273616C5F74696D6561016A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61166802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F63616C656E6461722E65726C6A
+=mod:httpd_parse
+Current size: 9977
+Current attributes: 836C00000002680264000376736E6C000000016E1000174653BAA652261FEB44FFDED99E50B76A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861246802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F70617273652E65726C6A
+=mod:httpd_response
+Current size: 13535
+Current attributes: 836C00000002680264000376736E6C000000016E1000785B247D894BA08A40D814EF11F848976A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128612D6802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F726573706F6E73652E65726C6A
+=mod:crashdump_viewer_html
+Current size: 68343
+Current attributes: 836C00000001680264000376736E6C000000016E1000AE414770FDB0806C5583FF8D6D71DC766A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461146108611C61026802640006736F757263656B003B2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7669657765725F68746D6C2E65726C6A
+=mod:crashdump_translate
+Current size: 89840
+Current attributes: 836C00000001680264000376736E6C000000016E100038F332287181E933A76CEF4799BDB6416A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000668026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461046115610B611661106802640006736F757263656B00392F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7472616E736C6174652E65726C6A
+=fun
+Module: crashdump_viewer_html
+Uniq: 9122590
+Index: 0
+Address: 526308
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 77168418
+Index: 14
+Address: 26541c
+Native_address: bcf04
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 88083515
+Index: 9
+Address: 284c30
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 36747896
+Index: 4
+Address: 26df84
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 80395734
+Index: 8
+Address: 265838
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 103184573
+Index: 5
+Address: 2fa59c
+Native_address: bce80
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 88265811
+Index: 24
+Address: 34f6a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global_group
+Uniq: 9644262
+Index: 2
+Address: 292cec
+Native_address: bcef4
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 100885585
+Index: 0
+Address: 29eb2c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 128335479
+Index: 6
+Address: 26de84
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 42988083
+Index: 1
+Address: 210c14
+Native_address: bcf04
+Refc: 1
+=fun
+Module: dict
+Uniq: 7105125
+Index: 7
+Address: 354f84
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 29030584
+Index: 8
+Address: 234978
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 29214351
+Index: 2
+Address: 285660
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 5158633
+Index: 4
+Address: 274034
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 74624950
+Index: 25
+Address: 34f63c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 6477018
+Index: 3
+Address: 2adb6c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 117885138
+Index: 7
+Address: 2ffff8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: dict
+Uniq: 47566924
+Index: 6
+Address: 354fb8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 114637756
+Index: 12
+Address: 313c60
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 121316204
+Index: 31
+Address: 313a68
+Native_address: bced4
+Refc: 1
+=fun
+Module: code_server
+Uniq: 61363639
+Index: 12
+Address: 2ad6a4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 116208699
+Index: 3
+Address: 274094
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global_group
+Uniq: 113750737
+Index: 0
+Address: 292d54
+Native_address: bcefc
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 12853672
+Index: 0
+Address: 222e74
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 108046357
+Index: 12
+Address: 4ab0b0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 111569299
+Index: 47
+Address: 34e80c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 20108653
+Index: 15
+Address: 2f9f94
+Native_address: bcea4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 45252965
+Index: 15
+Address: 313c0c
+Native_address: bced4
+Refc: 1
+=fun
+Module: webtool
+Uniq: 12437425
+Index: 9
+Address: 4ab3e0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 30942993
+Index: 22
+Address: 34f6ec
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_parse
+Uniq: 93430337
+Index: 3
+Address: 33b100
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_parse
+Uniq: 6604883
+Index: 2
+Address: 33b16c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: rpc
+Uniq: 36867745
+Index: 5
+Address: 255e28
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 90563105
+Index: 1
+Address: 285708
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 18519297
+Index: 7
+Address: 26ddfc
+Native_address: bcef4
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 8058975
+Index: 16
+Address: 4a36b4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 30694569
+Index: 7
+Address: 27d018
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 76933943
+Index: 0
+Address: 2741b4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 9033258
+Index: 6
+Address: 4a4690
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 74851752
+Index: 5
+Address: 4a4798
+Native_address: bcef4
+Refc: 1
+=fun
+Module: global
+Uniq: 50855382
+Index: 4
+Address: 2659a8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 39211582
+Index: 52
+Address: 34e504
+Native_address: bceec
+Refc: 1
+=fun
+Module: file_server
+Uniq: 77665472
+Index: 0
+Address: 2a0dec
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 57487277
+Index: 8
+Address: 2fa3c4
+Native_address: bce94
+Refc: 1
+=fun
+Module: webtool
+Uniq: 87386575
+Index: 11
+Address: 4ab1c8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 58991950
+Index: 8
+Address: 4a4338
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 118859163
+Index: 17
+Address: 4a34d4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: dict
+Uniq: 38265609
+Index: 12
+Address: 354dec
+Native_address: bcefc
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 56903339
+Index: 1
+Address: 2527c4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_hosts
+Uniq: 129504763
+Index: 0
+Address: 28aae8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: dict
+Uniq: 44817307
+Index: 10
+Address: 354e3c
+Native_address: bceec
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 52856894
+Index: 41
+Address: 34eb70
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 22623360
+Index: 23
+Address: 34f5d4
+Native_address: bceec
+Refc: 1
+=fun
+Module: orddict
+Uniq: 34963136
+Index: 0
+Address: 2fbbbc
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erlang
+Uniq: 24496633
+Index: 0
+Address: 213744
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 99313855
+Index: 27
+Address: 2f9914
+Native_address: bcef4
+Refc: 1
+=fun
+Module: httpd_util
+Uniq: 99137703
+Index: 3
+Address: 4b5dfc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 124043500
+Index: 3
+Address: 222b84
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 102650878
+Index: 22
+Address: 313b48
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 13333720
+Index: 12
+Address: 34fb2c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: global_group
+Uniq: 133457
+Index: 5
+Address: 292a80
+Native_address: bcefc
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 64640983
+Index: 4
+Address: 29e944
+Native_address: bcefc
+Refc: 1
+=fun
+Module: rpc
+Uniq: 7580218
+Index: 2
+Address: 255f08
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 131850870
+Index: 59
+Address: 34e6b8
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 56617403
+Index: 10
+Address: 284b40
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 108680306
+Index: 4
+Address: 4ab5e0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 90880071
+Index: 2
+Address: 26e150
+Native_address: bcefc
+Refc: 1
+=fun
+Module: file_io_server
+Uniq: 23980778
+Index: 0
+Address: 30ac30
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 12006418
+Index: 19
+Address: 2f9d54
+Native_address: bce80
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 81701030
+Index: 8
+Address: 526228
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 71013875
+Index: 1
+Address: 4a4ddc
+Native_address: bcf04
+Refc: 1
+=fun
+Module: distel
+Uniq: 87740845
+Index: 2
+Address: 35c0e0
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 90782401
+Index: 17
+Address: 2f9e8c
+Native_address: bced4
+Refc: 1
+=fun
+Module: shell
+Uniq: 133882676
+Index: 6
+Address: 2e52ac
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 105698088
+Index: 3
+Address: 2855b4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 58370899
+Index: 0
+Address: 27d370
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 15274536
+Index: 25
+Address: 2f9a94
+Native_address: bcef4
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 94349557
+Index: 0
+Address: 252844
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_parse
+Uniq: 33328185
+Index: 1
+Address: 33b1d8
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 86971387
+Index: 16
+Address: 313db0
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 53364473
+Index: 38
+Address: 34ee84
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 128145687
+Index: 0
+Address: 4ab944
+Native_address: bcee4
+Refc: 1
+=fun
+Module: c
+Uniq: 98651404
+Index: 10
+Address: 2fff20
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 78224618
+Index: 0
+Address: 313dcc
+Native_address: bced4
+Refc: 1
+=fun
+Module: shell
+Uniq: 40779085
+Index: 11
+Address: 2e50c8
+Native_address: bcef4
+Refc: 1
+=fun
+Module: c
+Uniq: 93517350
+Index: 4
+Address: 300090
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 58551291
+Index: 0
+Address: 234f14
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 10055518
+Index: 17
+Address: 526170
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 15795706
+Index: 19
+Address: 313bd4
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 31129467
+Index: 13
+Address: 313c44
+Native_address: bced4
+Refc: 1
+=fun
+Module: old_file_server
+Uniq: 115635393
+Index: 0
+Address: 2a1a4c
+Native_address: bcf04
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 65839696
+Index: 22
+Address: 2f9c00
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 69275064
+Index: 28
+Address: 313aa0
+Native_address: bced4
+Refc: 1
+=fun
+Module: dict
+Uniq: 55938066
+Index: 11
+Address: 354d6c
+Native_address: bceec
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 22323433
+Index: 3
+Address: 252688
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 129726129
+Index: 29
+Address: 313abc
+Native_address: bced4
+Refc: 1
+=fun
+Module: dict
+Uniq: 84346832
+Index: 0
+Address: 3550fc
+Native_address: bceec
+Refc: 1
+=fun
+Module: shell
+Uniq: 102096820
+Index: 7
+Address: 2e5290
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 70385762
+Index: 11
+Address: 27cf44
+Native_address: bcefc
+Refc: 1
+=fun
+Module: mod_cgi
+Uniq: 1483038
+Index: 0
+Address: 4ec2e8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: dict
+Uniq: 3664813
+Index: 1
+Address: 3550b4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet
+Uniq: 131143671
+Index: 6
+Address: 27d08c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 46286977
+Index: 2
+Address: 2740b0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: mod_esi
+Uniq: 49099432
+Index: 0
+Address: 4e522c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_master
+Uniq: 95764905
+Index: 2
+Address: 24aaa8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: packages
+Uniq: 62890926
+Index: 0
+Address: 2ae814
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 41564771
+Index: 35
+Address: 3139f8
+Native_address: bced4
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 95490768
+Index: 0
+Address: 4a4dc0
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 121559432
+Index: 3
+Address: 313d78
+Native_address: bced4
+Refc: 1
+=fun
+Module: httpd_conf
+Uniq: 21152662
+Index: 0
+Address: 4be5a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 41630916
+Index: 5
+Address: 29e914
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 19747201
+Index: 5
+Address: 313d24
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 100584837
+Index: 36
+Address: 34f0f4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64635712
+Index: 15
+Address: 34f94c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 46398361
+Index: 3
+Address: 29e9a4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 86699817
+Index: 27
+Address: 313b2c
+Native_address: bced4
+Refc: 1
+=fun
+Module: distel
+Uniq: 40869731
+Index: 0
+Address: 35c12c
+Native_address: bcf04
+Refc: 1
+=fun
+Module: inet
+Uniq: 83701641
+Index: 1
+Address: 27d33c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: mod_auth
+Uniq: 85845790
+Index: 0
+Address: 4dfd84
+Native_address: bcefc
+Refc: 1
+=fun
+Module: shell
+Uniq: 101292714
+Index: 9
+Address: 2e519c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 134173702
+Index: 1
+Address: 265b68
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 92433687
+Index: 6
+Address: 2ad9f4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: dict
+Uniq: 62315241
+Index: 8
+Address: 354f38
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 11615541
+Index: 12
+Address: 265530
+Native_address: bcefc
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 11160090
+Index: 2
+Address: 2b6bb4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 12116524
+Index: 15
+Address: 2342c4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: mod_log
+Uniq: 61620901
+Index: 2
+Address: 4fc670
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 23665189
+Index: 12
+Address: 4a3b94
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 43844413
+Index: 0
+Address: 300100
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 100514258
+Index: 6
+Address: 313d08
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 54271286
+Index: 17
+Address: 34f8a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 47017252
+Index: 3
+Address: 26dfa0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 1228304
+Index: 7
+Address: 4a45a4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 127131470
+Index: 10
+Address: 2655a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: file_server
+Uniq: 22638227
+Index: 1
+Address: 2a0e20
+Native_address: bcf04
+Refc: 1
+=fun
+Module: code_server
+Uniq: 112704920
+Index: 15
+Address: 2ad488
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 88302875
+Index: 2
+Address: 2fa76c
+Native_address: bceb4
+Refc: 1
+=fun
+Module: inet_hosts
+Uniq: 85808984
+Index: 1
+Address: 28ab18
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_parse
+Uniq: 106391799
+Index: 0
+Address: 33b22c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 25830519
+Index: 5
+Address: 27d0c0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: shell
+Uniq: 110491036
+Index: 1
+Address: 2e5398
+Native_address: bcef4
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 13128736
+Index: 5
+Address: 52627c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 84644982
+Index: 21
+Address: 313b9c
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 120577486
+Index: 3
+Address: 34fffc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 4504456
+Index: 44
+Address: 34e938
+Native_address: bceec
+Refc: 1
+=fun
+Module: mod_disk_log
+Uniq: 28754183
+Index: 0
+Address: 500140
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 88043334
+Index: 14
+Address: 313c28
+Native_address: bced4
+Refc: 1
+=fun
+Module: code_server
+Uniq: 61592373
+Index: 0
+Address: 2adc28
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 74468346
+Index: 26
+Address: 313ad8
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 69896253
+Index: 21
+Address: 2f9c40
+Native_address: bce80
+Refc: 1
+=fun
+Module: global_group
+Uniq: 59656873
+Index: 4
+Address: 292ac0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 103891261
+Index: 2
+Address: 4a4d70
+Native_address: bcefc
+Refc: 1
+=fun
+Module: httpd_util
+Uniq: 89619733
+Index: 0
+Address: 4b5e64
+Native_address: bcefc
+Refc: 1
+=fun
+Module: shell
+Uniq: 133201466
+Index: 10
+Address: 2e5180
+Native_address: bceec
+Refc: 1
+=fun
+Module: webtool
+Uniq: 32159369
+Index: 2
+Address: 4ab820
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 76861396
+Index: 2
+Address: 2adbb0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: mod_log
+Uniq: 48206487
+Index: 0
+Address: 4fc6f0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 118996551
+Index: 28
+Address: 34f384
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 12593774
+Index: 50
+Address: 34e60c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: httpd_request_handler
+Uniq: 48542841
+Index: 1
+Address: 50e88c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 56178490
+Index: 9
+Address: 4a420c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: distel
+Uniq: 88212576
+Index: 4
+Address: 35bf44
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 79562132
+Index: 29
+Address: 34f368
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 129524917
+Index: 32
+Address: 34f2c0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 54029891
+Index: 23
+Address: 2f9af0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 108872092
+Index: 4
+Address: 27d0f0
+Native_address: bcef4
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 40905124
+Index: 6
+Address: 234ac0
+Native_address: bcef4
+Refc: 1
+=fun
+Module: code_server
+Uniq: 50124876
+Index: 10
+Address: 2ad760
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 791358
+Index: 48
+Address: 34e7b0
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 18404828
+Index: 24
+Address: 313af4
+Native_address: bced4
+Refc: 1
+=fun
+Module: httpd_util
+Uniq: 13278653
+Index: 1
+Address: 4b5e48
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 110307423
+Index: 13
+Address: 284a7c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: rpc
+Uniq: 99592247
+Index: 0
+Address: 256118
+Native_address: bcf04
+Refc: 1
+=fun
+Module: global
+Uniq: 99918211
+Index: 2
+Address: 265af4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 71442319
+Index: 27
+Address: 34f510
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 7612785
+Index: 13
+Address: 2fa0fc
+Native_address: bce80
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 56095795
+Index: 15
+Address: 4a38a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 23626796
+Index: 25
+Address: 313b10
+Native_address: bced4
+Refc: 1
+=fun
+Module: file_server
+Uniq: 126074974
+Index: 2
+Address: 2a0cac
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 104278122
+Index: 1
+Address: 274154
+Native_address: bcefc
+Refc: 1
+=fun
+Module: sys
+Uniq: 90854051
+Index: 0
+Address: 240344
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 113334594
+Index: 2
+Address: 313d5c
+Native_address: bced4
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 8832142
+Index: 7
+Address: 284e30
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 9159706
+Index: 42
+Address: 34eb54
+Native_address: bceec
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 123946665
+Index: 8
+Address: 26e494
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 3149789
+Index: 1
+Address: 5262d0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 48288621
+Index: 11
+Address: 2ffed8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 8953292
+Index: 20
+Address: 4a4d54
+Native_address: bcee4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 9632158
+Index: 4
+Address: 34ff88
+Native_address: bcefc
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 31111567
+Index: 7
+Address: 29e8c8
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 85307443
+Index: 10
+Address: 2fa29c
+Native_address: bcec4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 104417191
+Index: 7
+Address: 313cd0
+Native_address: bced4
+Refc: 1
+=fun
+Module: dict
+Uniq: 43625777
+Index: 5
+Address: 354fec
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 92698798
+Index: 3
+Address: 4ab780
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 39074546
+Index: 6
+Address: 2fa54c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 71451126
+Index: 5
+Address: 234b98
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 122084387
+Index: 6
+Address: 300038
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 9625924
+Index: 14
+Address: 284a60
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 128777368
+Index: 11
+Address: 313c7c
+Native_address: bced4
+Refc: 1
+=fun
+Module: webtool
+Uniq: 10203723
+Index: 7
+Address: 4ab4f8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 35032400
+Index: 10
+Address: 313c98
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 17252586
+Index: 34
+Address: 313a14
+Native_address: bced4
+Refc: 1
+=fun
+Module: code_server
+Uniq: 7177165
+Index: 11
+Address: 2ad734
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 115778175
+Index: 3
+Address: 4a4930
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 96440880
+Index: 51
+Address: 34e590
+Native_address: bcefc
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 68275407
+Index: 0
+Address: 2b7340
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 88854488
+Index: 16
+Address: 2f9f04
+Native_address: bcebc
+Refc: 1
+=fun
+Module: global
+Uniq: 26353848
+Index: 13
+Address: 2654e8
+Native_address: bcf04
+Refc: 3
+=fun
+Module: global
+Uniq: 93414722
+Index: 11
+Address: 265568
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 11194189
+Index: 60
+Address: 34fe0c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: c
+Uniq: 125189992
+Index: 8
+Address: 2fffdc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: dict
+Uniq: 112472016
+Index: 2
+Address: 355088
+Native_address: bceec
+Refc: 1
+=fun
+Module: shell
+Uniq: 104426442
+Index: 5
+Address: 2e52e0
+Native_address: bceec
+Refc: 1
+=fun
+Module: global
+Uniq: 17426458
+Index: 0
+Address: 265bc4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 81191039
+Index: 5
+Address: 2ada48
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 71765042
+Index: 5
+Address: 284f74
+Native_address: bcefc
+Refc: 1
+=fun
+Module: init
+Uniq: 85855821
+Index: 2
+Address: 1fa298
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 70586122
+Index: 10
+Address: 4a3fe4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 87067911
+Index: 49
+Address: 34e708
+Native_address: bcef4
+Refc: 1
+=fun
+Module: distel
+Uniq: 63126735
+Index: 1
+Address: 35c0fc
+Native_address: bcf04
+Refc: 1
+=fun
+Module: c
+Uniq: 58270309
+Index: 1
+Address: 3000e4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: ets
+Uniq: 80538457
+Index: 1
+Address: 2bc1a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 69827241
+Index: 9
+Address: 34fd70
+Native_address: bcef4
+Refc: 1
+=fun
+Module: dict
+Uniq: 103968752
+Index: 3
+Address: 355054
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 117175573
+Index: 21
+Address: 34f728
+Native_address: bcef4
+Refc: 1
+=fun
+Module: shell
+Uniq: 57865450
+Index: 2
+Address: 2e537c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 14705965
+Index: 20
+Address: 313b80
+Native_address: bced4
+Refc: 1
+=fun
+Module: webtool
+Uniq: 85360931
+Index: 6
+Address: 4ab56c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: kernel_config
+Uniq: 41755598
+Index: 0
+Address: 2d9e20
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 7110547
+Index: 37
+Address: 34ef14
+Native_address: bcef4
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 28091577
+Index: 16
+Address: 234244
+Native_address: bcef4
+Refc: 2
+=fun
+Module: code_server
+Uniq: 96448152
+Index: 14
+Address: 2ad4e4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 40177568
+Index: 13
+Address: 4a39a4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 31948320
+Index: 58
+Address: 34dfdc
+Native_address: bcef4
+Refc: 1
+=fun
+Module: global
+Uniq: 54153760
+Index: 7
+Address: 265854
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 60156260
+Index: 3
+Address: 5262b4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 1010616
+Index: 2
+Address: 350064
+Native_address: bcef4
+Refc: 1
+=fun
+Module: init
+Uniq: 96784459
+Index: 1
+Address: 1fa2b4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 48691771
+Index: 18
+Address: 313bb8
+Native_address: bced4
+Refc: 1
+=fun
+Module: global
+Uniq: 26895060
+Index: 9
+Address: 265710
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 109625093
+Index: 7
+Address: 2ad8fc
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 59436171
+Index: 1
+Address: 3500dc
+Native_address: bcef4
+Refc: 1
+=fun
+Module: dict
+Uniq: 92768306
+Index: 9
+Address: 354f04
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global_group
+Uniq: 106430008
+Index: 3
+Address: 292b38
+Native_address: bcefc
+Refc: 1
+=fun
+Module: init
+Uniq: 79749196
+Index: 6
+Address: 1fa01c
+Native_address: bceec
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 6014929
+Index: 9
+Address: 2fa324
+Native_address: bceac
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 57051922
+Index: 7
+Address: 234a28
+Native_address: bcef4
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 77043468
+Index: 6
+Address: 29e8e4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 36176045
+Index: 9
+Address: 52620c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: rpc
+Uniq: 35862809
+Index: 3
+Address: 255edc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113649451
+Index: 4
+Address: 2850a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 67943969
+Index: 5
+Address: 2658f4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 109003032
+Index: 16
+Address: 5260d0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 104711447
+Index: 13
+Address: 525f5c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 107666872
+Index: 9
+Address: 27cfb0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 89410000
+Index: 10
+Address: 5261f0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 47356870
+Index: 11
+Address: 284ab4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 17873449
+Index: 56
+Address: 34e1e8
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 8839441
+Index: 33
+Address: 34f25c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 82513204
+Index: 2
+Address: 222c18
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_master
+Uniq: 5973059
+Index: 0
+Address: 24ab7c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_gethost_native
+Uniq: 127832132
+Index: 0
+Address: 4b065c
+Native_address: bcefc
+Refc: 2
+=fun
+Module: crashdump_viewer_html
+Uniq: 39322658
+Index: 14
+Address: 525f40
+Native_address: bcefc
+Refc: 1
+=fun
+Module: gen_server
+Uniq: 100284021
+Index: 0
+Address: 23d288
+Native_address: bcf04
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 17430070
+Index: 12
+Address: 284a98
+Native_address: bcefc
+Refc: 1
+=fun
+Module: init
+Uniq: 97509773
+Index: 3
+Address: 1fa27c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: distel
+Uniq: 32364818
+Index: 3
+Address: 35c050
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 58576084
+Index: 32
+Address: 313a4c
+Native_address: bced4
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 38384851
+Index: 14
+Address: 4a3988
+Native_address: bceec
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 14139883
+Index: 4
+Address: 234d78
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 122590256
+Index: 0
+Address: 2fa8b4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 14705629
+Index: 11
+Address: 2fa22c
+Native_address: bcedc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 9273769
+Index: 4
+Address: 2fa684
+Native_address: bcee4
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 87950142
+Index: 11
+Address: 5261d4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: mod_log
+Uniq: 54913678
+Index: 1
+Address: 4fc6b0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 28370334
+Index: 0
+Address: 26e4b0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 24927227
+Index: 40
+Address: 34ed4c
+Native_address: bceec
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 105437500
+Index: 33
+Address: 313a30
+Native_address: bced4
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 10921695
+Index: 1
+Address: 234eac
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 112431564
+Index: 55
+Address: 34e22c
+Native_address: bceec
+Refc: 1
+=fun
+Module: webtool
+Uniq: 129460863
+Index: 5
+Address: 4ab5c4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 89001648
+Index: 3
+Address: 27d2ec
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 36199507
+Index: 8
+Address: 27cfe4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 35620771
+Index: 2
+Address: 5262ec
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 83214871
+Index: 18
+Address: 2f9e34
+Native_address: bceec
+Refc: 1
+=fun
+Module: code_server
+Uniq: 122455383
+Index: 1
+Address: 2adc0c
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 22389488
+Index: 31
+Address: 34f1b8
+Native_address: bceec
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 41869059
+Index: 12
+Address: 2fa1d4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 18130505
+Index: 45
+Address: 34e904
+Native_address: bcefc
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 107414126
+Index: 1
+Address: 2b706c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 116638945
+Index: 28
+Address: 2f98f8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 48465762
+Index: 9
+Address: 2348c8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: httpd_request_handler
+Uniq: 87633852
+Index: 0
+Address: 50e97c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 28213098
+Index: 8
+Address: 4ab42c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 123630574
+Index: 4
+Address: 222b58
+Native_address: bcefc
+Refc: 1
+=fun
+Module: dict
+Uniq: 127425508
+Index: 13
+Address: 354eb4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 95048118
+Index: 16
+Address: 2ad46c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 108661978
+Index: 19
+Address: 34f75c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 21272619
+Index: 13
+Address: 34fad8
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 29943747
+Index: 17
+Address: 313bf0
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 120240397
+Index: 4
+Address: 313d94
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 124060676
+Index: 0
+Address: 350124
+Native_address: bcef4
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 100975346
+Index: 6
+Address: 526260
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 61421476
+Index: 4
+Address: 2ada9c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 45197232
+Index: 7
+Address: 34fe5c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 3151900
+Index: 15
+Address: 525f24
+Native_address: bcefc
+Refc: 1
+=fun
+Module: httpd_util
+Uniq: 77509245
+Index: 2
+Address: 4b5e2c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 94110229
+Index: 8
+Address: 2ad7e4
+Native_address: bcef4
+Refc: 3
+=fun
+Module: rpc
+Uniq: 101217130
+Index: 1
+Address: 2560c4
+Native_address: bcf04
+Refc: 1
+=fun
+Module: lists
+Uniq: 103647452
+Index: 0
+Address: 244b7c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 37841211
+Index: 9
+Address: 2ad77c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 40109251
+Index: 54
+Address: 34e2b4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: init
+Uniq: 98012300
+Index: 0
+Address: 1fa2d0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 73604759
+Index: 10
+Address: 4ab270
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 12042434
+Index: 1
+Address: 313d40
+Native_address: bced4
+Refc: 1
+=fun
+Module: shell
+Uniq: 127137775
+Index: 4
+Address: 2e531c
+Native_address: bcf04
+Refc: 1
+=fun
+Module: inet
+Uniq: 45498037
+Index: 12
+Address: 27cec0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 122441107
+Index: 34
+Address: 34f1d4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 70933889
+Index: 46
+Address: 34e8d0
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet
+Uniq: 69850797
+Index: 2
+Address: 27d308
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 103965539
+Index: 13
+Address: 234684
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 29979659
+Index: 30
+Address: 313a84
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 17148721
+Index: 20
+Address: 34f778
+Native_address: bcefc
+Refc: 1
+=fun
+Module: httpd_response
+Uniq: 100673049
+Index: 0
+Address: 5165dc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_gethost_native
+Uniq: 10508176
+Index: 1
+Address: 4b04dc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 32476064
+Index: 57
+Address: 34e1c4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 74835078
+Index: 9
+Address: 313cec
+Native_address: bced4
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 60689814
+Index: 19
+Address: 4a3b78
+Native_address: bceec
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 39269715
+Index: 5
+Address: 34ff14
+Native_address: bcef4
+Refc: 1
+=fun
+Module: shell
+Uniq: 112923172
+Index: 0
+Address: 2e5404
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 43010824
+Index: 14
+Address: 2fa03c
+Native_address: bce8c
+Refc: 1
+=fun
+Module: global
+Uniq: 82495254
+Index: 3
+Address: 265ac8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: shell
+Uniq: 48568081
+Index: 8
+Address: 2e5220
+Native_address: bcefc
+Refc: 1
+=fun
+Module: init
+Uniq: 77236637
+Index: 7
+Address: 1fa000
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 109386574
+Index: 1
+Address: 2fa804
+Native_address: bce9c
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 42613220
+Index: 14
+Address: 34f980
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 67093144
+Index: 23
+Address: 313b64
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 86833790
+Index: 11
+Address: 34fbe8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 6344855
+Index: 1
+Address: 29eabc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 5149749
+Index: 35
+Address: 34f220
+Native_address: bcefc
+Refc: 1
+=fun
+Module: init
+Uniq: 93451769
+Index: 5
+Address: 1fa120
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 117428568
+Index: 11
+Address: 234758
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 15225890
+Index: 4
+Address: 526298
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 120760477
+Index: 2
+Address: 234cdc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 88561919
+Index: 3
+Address: 3000ac
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 108931174
+Index: 8
+Address: 313cb4
+Native_address: bced4
+Refc: 1
+=fun
+Module: rpc
+Uniq: 122901192
+Index: 4
+Address: 255e44
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 32985930
+Index: 10
+Address: 34fc40
+Native_address: bcef4
+Refc: 1
+=fun
+Module: global_group
+Uniq: 97968498
+Index: 1
+Address: 292b7c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 45671671
+Index: 18
+Address: 4a32d0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 117968056
+Index: 3
+Address: 2fa6ec
+Native_address: bcecc
+Refc: 1
+=fun
+Module: init
+Uniq: 108717591
+Index: 4
+Address: 1fa194
+Native_address: bcf04
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 15091954
+Index: 2
+Address: 2526dc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 65707495
+Index: 6
+Address: 2658a4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 34473969
+Index: 17
+Address: 2ad450
+Native_address: bcef4
+Refc: 2
+=fun
+Module: crashdump_viewer_html
+Uniq: 124296602
+Index: 7
+Address: 526244
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 23074707
+Index: 15
+Address: 265460
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 25972856
+Index: 10
+Address: 27cf74
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 43110452
+Index: 24
+Address: 2f9ad4
+Native_address: bceec
+Refc: 1
+=fun
+Module: code_server
+Uniq: 106445918
+Index: 13
+Address: 2ad660
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 116071286
+Index: 12
+Address: 5261b8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 130814477
+Index: 8
+Address: 284cfc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 121017037
+Index: 39
+Address: 34ed80
+Native_address: bcef4
+Refc: 1
+=fun
+Module: ets
+Uniq: 104895267
+Index: 0
+Address: 2bc1bc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 104682437
+Index: 11
+Address: 4a3de0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 70248777
+Index: 30
+Address: 34f30c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 13274975
+Index: 5
+Address: 300074
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 98442771
+Index: 53
+Address: 34e2d0
+Native_address: bceec
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 69829006
+Index: 7
+Address: 2fa47c
+Native_address: bce80
+Refc: 1
+=fun
+Module: old_file_server
+Uniq: 36444943
+Index: 1
+Address: 2a1a80
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 58719455
+Index: 26
+Address: 34f5f0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: timer
+Uniq: 42505885
+Index: 0
+Address: 4cd62c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 54682479
+Index: 20
+Address: 2f9d08
+Native_address: bcf04
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 86070332
+Index: 1
+Address: 222d7c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 54728136
+Index: 9
+Address: 2fff68
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 16474219
+Index: 3
+Address: 234c60
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 108831556
+Index: 10
+Address: 234810
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 72053761
+Index: 16
+Address: 34f8ec
+Native_address: bcef4
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 65127616
+Index: 2
+Address: 29ea04
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 126167637
+Index: 14
+Address: 234640
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113704917
+Index: 0
+Address: 285788
+Native_address: bcefc
+Refc: 1
+=fun
+Module: mod_disk_log
+Uniq: 75279647
+Index: 1
+Address: 500100
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 119218247
+Index: 5
+Address: 26df68
+Native_address: bcef4
+Refc: 1
+=fun
+Module: httpd_util
+Uniq: 85690044
+Index: 4
+Address: 4b5d6c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 53075592
+Index: 1
+Address: 26e16c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 39490182
+Index: 2
+Address: 3000c8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 75189006
+Index: 12
+Address: 234714
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 14980808
+Index: 43
+Address: 34eb38
+Native_address: bceec
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 16463468
+Index: 4
+Address: 4a4914
+Native_address: bcee4
+Refc: 1
+=fun
+Module: dict
+Uniq: 99965326
+Index: 4
+Address: 355020
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 36900786
+Index: 6
+Address: 284f3c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 45447147
+Index: 18
+Address: 34f794
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 32353825
+Index: 6
+Address: 34fe78
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 134052338
+Index: 8
+Address: 34fdc0
+Native_address: bceec
+Refc: 1
+=fun
+Module: application_master
+Uniq: 23840924
+Index: 1
+Address: 24aae0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 108282500
+Index: 1
+Address: 4ab918
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 31081110
+Index: 0
+Address: 210c68
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 54275742
+Index: 26
+Address: 2f9a4c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: shell
+Uniq: 45083091
+Index: 3
+Address: 2e5350
+Native_address: bcf04
+Refc: 3
+=proc_stack:<0.0.0>
+3a48bc:SReturn addr 0x156F90 (<terminate process normally>)
+y0:H371264
+=proc_heap:<0.0.0>
+371264:t9:A5:state,H3710D8,N,N,H3710F4,P<0.1.0>,H37128C,H3710FC,N
+3710FC:t2:H371138,H371140
+371140:lI80|H371194
+371194:lI49|H3711E0
+3711E0:lI48|H371204
+371204:lI66|N
+371138:lI79|H37118C
+37118C:lI84|H3711D8
+3711D8:lI80|H3711FC
+3711FC:lI32|H37120C
+37120C:lI32|H371214
+371214:lI65|H37121C
+37121C:lI80|H371224
+371224:lI78|H37122C
+37122C:lI32|H371234
+371234:lI49|H37123C
+37123C:lI56|H371244
+371244:lI49|H37124C
+37124C:lI32|H371254
+371254:lI48|H37125C
+37125C:lI49|N
+37128C:t2:A7:started,A7:started
+3710F4:lH371124|H371130
+371124:t2:A16:application_controller,P<0.5.0>
+371130:lH371178|H371184
+371178:t2:AC:error_logger,P<0.4.0>
+371184:lH3711CC|N
+3711CC:t2:AF:erl_prim_loader,P<0.2.0>
+3710D8:lH3710E0|H3710EC
+3710E0:t2:A5:-root,H371108
+371108:lH371148|N
+371148:Yh13:2F636C656172636173652F6F74702F65727473
+3710EC:lH371110|H37111C
+371110:t2:A9:-progname,H371164
+371164:lH37119C|N
+37119C:Yh1D:2F636C656172636173652F6F74702F657274732F62696E2F6365726C20
+37111C:lH37116C|N
+37116C:t2:A5:-home,H3711C4
+3711C4:lH3711E8|N
+3711E8:YhA:2F686F6D652F73697269
+=proc_stack:<0.2.0>
+38eca8:SReturn addr 0x156F90 (<terminate process normally>)
+y0:H367D20
+y1:P<0.1.0>
+y2:H367D28
+y3:A8:infinity
+=proc_heap:<0.2.0>
+367D20:lH367D48|H367D50
+367D48:lI47|H367D58
+367D58:lI99|H367D68
+367D68:lI108|H367D78
+367D78:lI101|H367D88
+367D88:lI97|H367D98
+367D98:lI114|H367DA8
+367DA8:lI99|H367DB8
+367DB8:lI97|H367DC8
+367DC8:lI115|H367DD8
+367DD8:lI101|H367DE8
+367DE8:lI47|H367DF8
+367DF8:lI111|H367E08
+367E08:lI116|H367E18
+367E18:lI112|H367E28
+367E28:lI47|H367E38
+367E38:lI101|H367E48
+367E48:lI114|H367E58
+367E58:lI116|H367E68
+367E68:lI115|H367E78
+367E78:lI47|H367E88
+367E88:lI108|H367E98
+367E98:lI105|H367EA8
+367EA8:lI98|H367EB8
+367EB8:lI47|H367EC8
+367EC8:lI107|H367ED8
+367ED8:lI101|H367EE8
+367EE8:lI114|H367EF8
+367EF8:lI110|H367F08
+367F08:lI101|H367F18
+367F18:lI108|H367F28
+367F28:lI47|H367F38
+367F38:lI101|H367F48
+367F48:lI98|H367F58
+367F58:lI105|H367F68
+367F68:lI110|N
+367D50:lH367D60|N
+367D60:lI47|H367D70
+367D70:lI99|H367D80
+367D80:lI108|H367D90
+367D90:lI101|H367DA0
+367DA0:lI97|H367DB0
+367DB0:lI114|H367DC0
+367DC0:lI99|H367DD0
+367DD0:lI97|H367DE0
+367DE0:lI115|H367DF0
+367DF0:lI101|H367E00
+367E00:lI47|H367E10
+367E10:lI111|H367E20
+367E20:lI116|H367E30
+367E30:lI112|H367E40
+367E40:lI47|H367E50
+367E50:lI101|H367E60
+367E60:lI114|H367E70
+367E70:lI116|H367E80
+367E80:lI115|H367E90
+367E90:lI47|H367EA0
+367EA0:lI108|H367EB0
+367EB0:lI105|H367EC0
+367EC0:lI98|H367ED0
+367ED0:lI47|H367EE0
+367EE0:lI115|H367EF0
+367EF0:lI116|H367F00
+367F00:lI100|H367F10
+367F10:lI108|H367F20
+367F20:lI105|H367F30
+367F30:lI98|H367F40
+367F40:lI47|H367F50
+367F50:lI101|H367F60
+367F60:lI98|H367F70
+367F70:lI105|H367F78
+367F78:lI110|N
+367D28:t7:A5:state,A5:efile,N,A4:none,p<0.2>,A8:infinity,A5:false
+=proc_dictionary:<0.4.0>
+H3AC588
+H3AC594
+=proc_stack:<0.4.0>
+3b2f14:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:H3B21E8
+y2:AC:error_logger
+y3:P<0.1.0>
+3b2f28:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H3AC5A8
+=proc_heap:<0.4.0>
+3B21E8:lH3B2144|H3B21E0
+3B2144:t5:A7:handler,AC:error_logger,A5:false,N,A5:false
+3B21E0:lH3B21BC|N
+3B21BC:t5:A7:handler,A12:error_logger_tty_h,A5:false,H3AC610,A5:false
+3AC610:t2:P<0.21.0>,AC:error_logger
+3AC5A8:lA9:gen_event|H3AC5E8
+3AC5E8:lP<0.1.0>|H3AC608
+3AC608:lP<0.1.0>|H3AC61C
+3AC61C:lH3AC624|H3AC630
+3AC624:t2:A5:local,AC:error_logger
+3AC630:lN|H3AC638
+3AC638:lN|H3AC640
+3AC640:lN|N
+3AC588:t2:AD:$initial_call,H3AC5B0
+3AC5B0:t3:A3:gen,A7:init_it,H3AC5A8
+3AC594:t2:AA:$ancestors,H3AC5C0
+3AC5C0:lP<0.1.0>|N
+=proc_dictionary:<0.5.0>
+H372E4C
+H372E58
+=proc_stack:<0.5.0>
+374704:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A16:application_controller
+y3:H3739F4
+y4:A16:application_controller
+y5:P<0.1.0>
+374720:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H372ED0
+=proc_heap:<0.5.0>
+3739F4:t9:A5:state,N,N,N,H373914,N,H373928,N,N
+373928:lH37391C|H372F54
+37391C:t2:A6:stdlib,A9:permanent
+372F54:lH372F90|N
+372F90:t2:A6:kernel,A9:permanent
+373914:lH373908|H372F4C
+373908:t2:A6:stdlib,A9:undefined
+372F4C:lH372F84|N
+372F84:t2:A6:kernel,P<0.7.0>
+372ED0:lAA:gen_server|H372F5C
+372F5C:lP<0.1.0>|H372F9C
+372F9C:lP<0.1.0>|H372FC4
+372FC4:lH372FEC|H372FF8
+372FEC:t2:A5:local,A16:application_controller
+372FF8:lA16:application_controller|H373018
+373018:lH373038|H373048
+373038:t3:AB:application,A6:kernel,H373060
+373060:lH373078|H373084
+373078:t2:AB:description,H37309C
+37309C:lI69|H3730C8
+3730C8:lI82|H3730FC
+3730FC:lI84|H373130
+373130:lI83|H37316C
+37316C:lI32|H3731A8
+3731A8:lI32|H3731E4
+3731E4:lI67|H373220
+373220:lI88|H37325C
+37325C:lI67|H37329C
+37329C:lI32|H3732D0
+3732D0:lI49|H3732FC
+3732FC:lI51|H373328
+373328:lI56|H373348
+373348:lI32|H373368
+373368:lI49|H373388
+373388:lI48|N
+373084:lH3730A4|H3730B0
+3730A4:t2:A3:vsn,H3730D0
+3730D0:lI50|H373104
+373104:lI46|H373138
+373138:lI57|N
+3730B0:lH3730D8|H3730E4
+3730D8:t2:A2:id,N
+3730E4:lH37310C|H373118
+37310C:t2:A7:modules,H373140
+373140:lAB:application|H373174
+373174:lA16:application_controller|H3731B0
+3731B0:lA12:application_master|H3731EC
+3731EC:lA13:application_starter|H373228
+373228:lA4:auth|H373264
+373264:lA4:code|H3732A4
+3732A4:lA8:code_aux|H3732D8
+3732D8:lA8:packages|H373304
+373304:lAB:code_server|H373330
+373330:lA9:dist_util|H373350
+373350:lAF:erl_boot_server|H373370
+373370:lA10:erl_distribution|H373390
+373390:lAF:erl_prim_loader|H3733A8
+3733A8:lA9:erl_reply|H3733C0
+3733C0:lA6:erlang|H3733D8
+3733D8:lAD:error_handler|H3733F0
+3733F0:lAC:error_logger|H373408
+373408:lA4:file|H373420
+373420:lAB:file_server|H373438
+373438:lAF:old_file_server|H373450
+373450:lAE:file_io_server|H373468
+373468:lA9:prim_file|H373480
+373480:lA6:global|H373498
+373498:lAC:global_group|H3734B0
+3734B0:lAD:global_search|H3734C8
+3734C8:lA5:group|H3734E0
+3734E0:lA5:heart|H3734F8
+3734F8:lA13:hipe_unified_loader|H373510
+373510:lA11:hipe_sparc_loader|H373520
+373520:lAF:hipe_x86_loader|H373530
+373530:lA9:inet6_tcp|H373540
+373540:lAE:inet6_tcp_dist|H373550
+373550:lA9:inet6_udp|H373560
+373560:lAB:inet_config|H373570
+373570:lAA:inet_hosts|H373580
+373580:lA13:inet_gethost_native|H373590
+373590:lAD:inet_tcp_dist|H3735A0
+3735A0:lA4:init|H3735B0
+3735B0:lA6:kernel|H3735C0
+3735C0:lAD:kernel_config|H3735D0
+3735D0:lA3:net|H3735E0
+3735E0:lA7:net_adm|H3735F0
+3735F0:lAA:net_kernel|H373600
+373600:lA2:os|H373610
+373610:lA8:ram_file|H373620
+373620:lA3:rpc|H373630
+373630:lA4:user|H373640
+373640:lA8:user_drv|H373650
+373650:lA8:user_sup|H373660
+373660:lA8:disk_log|H373670
+373670:lAA:disk_log_1|H373680
+373680:lAF:disk_log_server|H373690
+373690:lAC:disk_log_sup|H3736A0
+3736A0:lA7:dist_ac|H3736B0
+3736B0:lA8:erl_ddll|H3736C0
+3736C0:lA8:erl_epmd|H3736D0
+3736D0:lAA:erts_debug|H3736E0
+3736E0:lA7:gen_tcp|H3736F0
+3736F0:lA7:gen_udp|H373700
+373700:lA9:prim_inet|H373708
+373708:lA4:inet|H373710
+373710:lA7:inet_db|H373718
+373718:lA8:inet_dns|H373720
+373720:lAA:inet_parse|H373728
+373728:lA8:inet_res|H373730
+373730:lA8:inet_tcp|H373738
+373738:lA8:inet_udp|H373740
+373740:lA3:pg2|H373748
+373748:lA9:seq_trace|H373750
+373750:lA6:socks5|H373758
+373758:lAB:socks5_auth|H373760
+373760:lAA:socks5_tcp|H373768
+373768:lAA:socks5_udp|H373770
+373770:lAF:wrap_log_reader|H373778
+373778:lA4:zlib|H373780
+373780:lA9:otp_ring0|N
+373118:lH373148|H373154
+373148:t2:AA:registered,H37317C
+37317C:lA16:application_controller|H3731B8
+3731B8:lA9:erl_reply|H3731F4
+3731F4:lA4:auth|H373230
+373230:lAB:boot_server|H37326C
+37326C:lAB:code_server|H3732AC
+3732AC:lAF:disk_log_server|H3732E0
+3732E0:lAC:disk_log_sup|H37330C
+37330C:lAF:erl_prim_loader|H373338
+373338:lAC:error_logger|H373358
+373358:lAB:file_server|H373378
+373378:lAD:file_server_2|H373398
+373398:lAF:fixtable_server|H3733B0
+3733B0:lAC:global_group|H3733C8
+3733C8:lA12:global_name_server|H3733E0
+3733E0:lA5:heart|H3733F8
+3733F8:lA4:init|H373410
+373410:lAD:kernel_config|H373428
+373428:lAA:kernel_sup|H373440
+373440:lAA:net_kernel|H373458
+373458:lA7:net_sup|H373470
+373470:lA3:rex|H373488
+373488:lA4:user|H3734A0
+3734A0:lA9:os_server|H3734B8
+3734B8:lAB:ddll_server|H3734D0
+3734D0:lA8:erl_epmd|H3734E8
+3734E8:lA7:inet_db|H373500
+373500:lA3:pg2|N
+373154:lH373184|H373190
+373184:t2:AC:applications,N
+373190:lH3731C0|H3731CC
+3731C0:t2:A15:included_applications,N
+3731CC:lH3731FC|H373208
+3731FC:t2:A3:env,H373238
+373238:lH373274|N
+373274:t2:AC:error_logger,A3:tty
+373208:lH373240|H37324C
+373240:t2:AC:start_phases,A9:undefined
+37324C:lH373280|H37328C
+373280:t2:A4:maxT,A8:infinity
+37328C:lH3732B4|H3732C0
+3732B4:t2:A4:maxP,A8:infinity
+3732C0:lH3732E8|N
+3732E8:t2:A3:mod,H373314
+373314:t2:A6:kernel,N
+373048:lN|N
+372E4C:t2:AD:$initial_call,H372EE4
+372EE4:t3:A3:gen,A7:init_it,H372ED0
+372E58:t2:AA:$ancestors,H372EF4
+372EF4:lP<0.1.0>|N
+=proc_dictionary:<0.7.0>
+H369B78
+H369B5C
+=proc_stack:<0.7.0>
+369d64:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:H369C2C
+y1:P<0.5.0>
+369d70:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A12:application_master
+y2:A4:init
+y3:H369B2C
+=proc_heap:<0.7.0>
+369C2C:t6:A5:state,P<0.8.0>,H3697B0,N,I0,P<0.0.0>
+3697B0:t9:A9:appl_data,A6:kernel,H369B14,A9:undefined,H3697D8,H369A3C,N,A8:infinity,A8:infinity
+369A3C:lAB:application|H369A34
+369A34:lA16:application_controller|H369A2C
+369A2C:lA12:application_master|H369A24
+369A24:lA13:application_starter|H369A1C
+369A1C:lA4:auth|H369A14
+369A14:lA4:code|H369A0C
+369A0C:lA8:code_aux|H369A04
+369A04:lA8:packages|H3699FC
+3699FC:lAB:code_server|H3699F4
+3699F4:lA9:dist_util|H3699EC
+3699EC:lAF:erl_boot_server|H3699E4
+3699E4:lA10:erl_distribution|H3699DC
+3699DC:lAF:erl_prim_loader|H3699D4
+3699D4:lA9:erl_reply|H3699CC
+3699CC:lA6:erlang|H3699C4
+3699C4:lAD:error_handler|H3699BC
+3699BC:lAC:error_logger|H3699B4
+3699B4:lA4:file|H3699AC
+3699AC:lAB:file_server|H3699A4
+3699A4:lAF:old_file_server|H36999C
+36999C:lAE:file_io_server|H369994
+369994:lA9:prim_file|H36998C
+36998C:lA6:global|H369984
+369984:lAC:global_group|H36997C
+36997C:lAD:global_search|H369974
+369974:lA5:group|H36996C
+36996C:lA5:heart|H369964
+369964:lA13:hipe_unified_loader|H36995C
+36995C:lA11:hipe_sparc_loader|H369954
+369954:lAF:hipe_x86_loader|H36994C
+36994C:lA9:inet6_tcp|H369944
+369944:lAE:inet6_tcp_dist|H36993C
+36993C:lA9:inet6_udp|H369934
+369934:lAB:inet_config|H36992C
+36992C:lAA:inet_hosts|H369924
+369924:lA13:inet_gethost_native|H36991C
+36991C:lAD:inet_tcp_dist|H369914
+369914:lA4:init|H36990C
+36990C:lA6:kernel|H369904
+369904:lAD:kernel_config|H3698FC
+3698FC:lA3:net|H3698F4
+3698F4:lA7:net_adm|H3698EC
+3698EC:lAA:net_kernel|H3698E4
+3698E4:lA2:os|H3698DC
+3698DC:lA8:ram_file|H3698D4
+3698D4:lA3:rpc|H3698CC
+3698CC:lA4:user|H3698C4
+3698C4:lA8:user_drv|H3698BC
+3698BC:lA8:user_sup|H3698B4
+3698B4:lA8:disk_log|H3698AC
+3698AC:lAA:disk_log_1|H3698A4
+3698A4:lAF:disk_log_server|H36989C
+36989C:lAC:disk_log_sup|H369894
+369894:lA7:dist_ac|H36988C
+36988C:lA8:erl_ddll|H369884
+369884:lA8:erl_epmd|H36987C
+36987C:lAA:erts_debug|H369874
+369874:lA7:gen_tcp|H36986C
+36986C:lA7:gen_udp|H369864
+369864:lA9:prim_inet|H36985C
+36985C:lA4:inet|H369854
+369854:lA7:inet_db|H36984C
+36984C:lA8:inet_dns|H369844
+369844:lAA:inet_parse|H36983C
+36983C:lA8:inet_res|H369834
+369834:lA8:inet_tcp|H36982C
+36982C:lA8:inet_udp|H369824
+369824:lA3:pg2|H36981C
+36981C:lA9:seq_trace|H369814
+369814:lA6:socks5|H36980C
+36980C:lAB:socks5_auth|H369804
+369804:lAA:socks5_tcp|H3697FC
+3697FC:lAA:socks5_udp|H3697F4
+3697F4:lAF:wrap_log_reader|H3697EC
+3697EC:lA4:zlib|H3697E4
+3697E4:lA9:otp_ring0|N
+3697D8:t2:A6:kernel,N
+369B14:lA16:application_controller|H369B0C
+369B0C:lA9:erl_reply|H369B04
+369B04:lA4:auth|H369AFC
+369AFC:lAB:boot_server|H369AF4
+369AF4:lAB:code_server|H369AEC
+369AEC:lAF:disk_log_server|H369AE4
+369AE4:lAC:disk_log_sup|H369ADC
+369ADC:lAF:erl_prim_loader|H369AD4
+369AD4:lAC:error_logger|H369ACC
+369ACC:lAB:file_server|H369AC4
+369AC4:lAD:file_server_2|H369ABC
+369ABC:lAF:fixtable_server|H369AB4
+369AB4:lAC:global_group|H369AAC
+369AAC:lA12:global_name_server|H369AA4
+369AA4:lA5:heart|H369A9C
+369A9C:lA4:init|H369A94
+369A94:lAD:kernel_config|H369A8C
+369A8C:lAA:kernel_sup|H369A84
+369A84:lAA:net_kernel|H369A7C
+369A7C:lA7:net_sup|H369A74
+369A74:lA3:rex|H369A6C
+369A6C:lA4:user|H369A64
+369A64:lA9:os_server|H369A5C
+369A5C:lAB:ddll_server|H369A54
+369A54:lA8:erl_epmd|H369A4C
+369A4C:lA7:inet_db|H369A44
+369A44:lA3:pg2|N
+369B2C:lP<0.5.0>|H369B24
+369B24:lP<0.6.0>|H3697A8
+3697A8:lH3697B0|H369B1C
+369B1C:lA6:normal|N
+369B78:t2:AD:$initial_call,H369B68
+369B68:t3:A12:application_master,A4:init,H369B2C
+369B5C:t2:AA:$ancestors,H369B54
+369B54:lP<0.6.0>|N
+=proc_stack:<0.8.0>
+384ec0:SReturn addr 0x156F90 (<terminate process normally>)
+y0:H384BDC
+y1:A6:kernel
+y2:P<0.9.0>
+y3:P<0.7.0>
+=proc_heap:<0.8.0>
+384BDC:t2:A5:state,A3:tty
+=proc_dictionary:<0.9.0>
+H376850
+H37685C
+=proc_stack:<0.9.0>
+36bde8:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AA:supervisor
+y3:H36B8E8
+y4:AA:kernel_sup
+y5:P<0.8.0>
+36be04:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H3768D4
+=proc_heap:<0.9.0>
+36B8E8:tA:A5:state,H376868,AB:one_for_all,H36B8D4,N,I0,I1,N,A6:kernel,N
+36B8D4:lH36B8B0|H36B6E8
+36B8B0:t8:A5:child,P<0.24.0>,AF:kernel_safe_sup,H376BF0,A9:permanent,A8:infinity,AA:supervisor,H376C00
+376C00:lA6:kernel|N
+376BF0:t3:AA:supervisor,AA:start_link,H376C08
+376C08:lH376C10|H376C1C
+376C10:t2:A5:local,AF:kernel_safe_sup
+376C1C:lA6:kernel|H376C24
+376C24:lA4:safe|N
+36B6E8:lH36B6C4|H36B490
+36B6C4:t8:A5:child,P<0.23.0>,AD:kernel_config,H376BB4,A9:permanent,I2000,A6:worker,H376BC4
+376BC4:lAD:kernel_config|N
+376BB4:t3:AD:kernel_config,AA:start_link,N
+36B490:lH36B498|H36B4BC
+36B498:t8:A5:child,P<0.19.0>,A4:user,H376B70,A9:temporary,I2000,AA:supervisor,H376B80
+376B80:lA8:user_sup|N
+376B70:t3:A8:user_sup,A5:start,N
+36B4BC:lH36B4C4|H376CB0
+36B4C4:t8:A5:child,P<0.18.0>,AB:code_server,H376B0C,A9:permanent,I2000,A6:worker,H376B1C
+376B1C:lA4:code|N
+376B0C:t3:A4:code,AA:start_link,N
+376CB0:lH376CB8|H376CDC
+376CB8:t8:A5:child,P<0.17.0>,AB:file_server,H376AB8,A9:permanent,I2000,A6:worker,H376AC8
+376AC8:lAF:old_file_server|N
+376AB8:t3:AF:old_file_server,AA:start_link,N
+376CDC:lH376CE4|H376C2C
+376CE4:t8:A5:child,P<0.16.0>,AD:file_server_2,H376A58,A9:permanent,I2000,A6:worker,H376A68
+376A68:lA4:file|H376AB0
+376AB0:lAB:file_server|H376B04
+376B04:lAE:file_io_server|H376B68
+376B68:lA9:prim_file|N
+376A58:t3:AB:file_server,AA:start_link,N
+376C2C:lH376C34|H376C58
+376C34:t8:A5:child,P<0.15.0>,AC:global_group,H3769F4,A9:permanent,I2000,A6:worker,H376A04
+376A04:lAC:global_group|N
+3769F4:t3:AC:global_group,AA:start_link,N
+376C58:lH376C60|H376C84
+376C60:t8:A5:child,A9:undefined,A7:net_sup,H37696C,A9:permanent,A8:infinity,AA:supervisor,H37697C
+37697C:lA10:erl_distribution|N
+37696C:t3:A10:erl_distribution,AA:start_link,N
+376C84:lH376C8C|H3768A0
+376C8C:t8:A5:child,P<0.14.0>,A7:inet_db,H3768F4,A9:permanent,I2000,A6:worker,H376904
+376904:lA7:inet_db|N
+3768F4:t3:A7:inet_db,AA:start_link,N
+3768A0:lH376938|H37695C
+376938:t8:A5:child,P<0.11.0>,A12:global_name_server,H3769B0,A9:permanent,I2000,A6:worker,H3769C0
+3769C0:lA6:global|N
+3769B0:t3:A6:global,AA:start_link,N
+37695C:lH3769C8|N
+3769C8:t8:A5:child,P<0.10.0>,A3:rex,H376A38,A9:permanent,I2000,A6:worker,H376A48
+376A48:lA3:rpc|N
+376A38:t3:A3:rpc,AA:start_link,N
+376868:t2:A5:local,AA:kernel_sup
+3768D4:lAA:gen_server|H376964
+376964:lP<0.8.0>|H3769EC
+3769EC:lP<0.8.0>|H376A50
+376A50:lH376A9C|H376AA8
+376A9C:t2:A5:local,AA:kernel_sup
+376AA8:lAA:supervisor|H376AFC
+376AFC:lH376B50|H376B60
+376B50:t3:H376868,A6:kernel,N
+376B60:lN|N
+376850:t2:AD:$initial_call,H3768DC
+3768DC:t3:A3:gen,A7:init_it,H3768D4
+37685C:t2:AA:$ancestors,H3768EC
+3768EC:lP<0.8.0>|N
+=proc_dictionary:<0.10.0>
+H367A10
+H3679F4
+=proc_stack:<0.10.0>
+367cec:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A3:rpc
+y3:H367AA8
+y4:A3:rex
+y5:P<0.9.0>
+367d08:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H3679C4
+=proc_heap:<0.10.0>
+367AA8:t2:I0,A3:nil
+3679C4:lAA:gen_server|H3679BC
+3679BC:lP<0.9.0>|H3679B4
+3679B4:lP<0.9.0>|H367988
+367988:lH367990|H3679AC
+367990:t2:A5:local,A3:rex
+3679AC:lA3:rpc|H3679A4
+3679A4:lN|H36799C
+36799C:lN|N
+367A10:t2:AD:$initial_call,H367A00
+367A00:t3:A3:gen,A7:init_it,H3679C4
+3679F4:t2:AA:$ancestors,H3679EC
+3679EC:lAA:kernel_sup|H3679CC
+3679CC:lP<0.8.0>|N
+=proc_dictionary:<0.11.0>
+H36ADD8
+H36ADBC
+=proc_stack:<0.11.0>
+36b0b4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A6:global
+y3:H36AF0C
+y4:A12:global_name_server
+y5:P<0.9.0>
+36b0d0:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H36AD8C
+=proc_heap:<0.11.0>
+36AF0C:t9:A5:state,A4:true,N,N,N,N,AD:nonode@nohost,P<0.12.0>,P<0.13.0>
+36AD8C:lAA:gen_server|H36AD84
+36AD84:lP<0.9.0>|H36AD7C
+36AD7C:lP<0.9.0>|H36AD50
+36AD50:lH36AD58|H36AD74
+36AD58:t2:A5:local,A12:global_name_server
+36AD74:lA6:global|H36AD6C
+36AD6C:lN|H36AD64
+36AD64:lN|N
+36ADD8:t2:AD:$initial_call,H36ADC8
+36ADC8:t3:A3:gen,A7:init_it,H36AD8C
+36ADBC:t2:AA:$ancestors,H36ADB4
+36ADB4:lAA:kernel_sup|H36AD94
+36AD94:lP<0.8.0>|N
+=proc_stack:<0.12.0>
+36921c:SReturn addr 0x261184 (global:init_the_locker/1 + 112)
+y0:N
+y1:N
+y2:N
+y3:N
+y4:N
+y5:N
+y6:A8:infinity
+y7:H368EB0
+y8:P<0.11.0>
+369244:SReturn addr 0x156F90 (<terminate process normally>)
+y0:N
+=proc_heap:<0.12.0>
+368EB0:t3:A5:multi,A9:undefined,N
+=proc_stack:<0.13.0>
+3695d0:SReturn addr 0x2651AC (global:loop_the_deleter/1 + 36)
+y0:A8:infinity
+y1:N
+y2:P<0.11.0>
+3695e0:SReturn addr 0x2654F8 (global:'-start_the_deleter/1-fun-0-'/1 + 20)
+y0:N
+y1:N
+y2:P<0.11.0>
+3695f0:SReturn addr 0x156F90 (<terminate process normally>)
+=proc_heap:<0.13.0>
+=proc_dictionary:<0.14.0>
+H36A998
+H36A9A4
+=proc_stack:<0.14.0>
+372e0c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A7:inet_db
+y3:H36A9B0
+y4:A7:inet_db
+y5:P<0.9.0>
+372e28:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H36A9C8
+=proc_heap:<0.14.0>
+36A9B0:t5:A5:state,A7:inet_db,AA:inet_cache,AA:inet_hosts,H36A9E8
+36A9E8:E21:8372000364000D6E6F6E6F6465406E6F686F737400000000060000000000000000
+36A9C8:lAA:gen_server|H36A9F8
+36A9F8:lP<0.9.0>|H36AA08
+36AA08:lP<0.9.0>|H36AA10
+36AA10:lH36AA18|H36AA24
+36AA18:t2:A5:local,A7:inet_db
+36AA24:lA7:inet_db|H36AA2C
+36AA2C:lN|H36AA34
+36AA34:lN|N
+36A998:t2:AD:$initial_call,H36A9D0
+36A9D0:t3:A3:gen,A7:init_it,H36A9C8
+36A9A4:t2:AA:$ancestors,H36A9E0
+36A9E0:lAA:kernel_sup|H36AA00
+36AA00:lP<0.8.0>|N
+=proc_dictionary:<0.15.0>
+H372788
+H3727F8
+H37276C
+H37280C
+H372820
+=proc_stack:<0.15.0>
+372a64:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AC:global_group
+y3:H3728C8
+y4:AC:global_group
+y5:P<0.9.0>
+372a80:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H37273C
+=proc_heap:<0.15.0>
+3728C8:tC:A5:state,A7:no_conf,A4:true,N,N,N,N,N,AD:nonode@nohost,N,A6:normal,A6:normal
+37273C:lAA:gen_server|H372734
+372734:lP<0.9.0>|H37272C
+37272C:lP<0.9.0>|H372700
+372700:lH372708|H372724
+372708:t2:A5:local,AC:global_group
+372724:lAC:global_group|H37271C
+37271C:lN|H372714
+372714:lN|N
+372788:t2:AD:$initial_call,H372778
+372778:t3:A3:gen,A7:init_it,H37273C
+3727F8:t2:A10:registered_names,H3727F0
+3727F0:lA9:undefined|N
+37276C:t2:AA:$ancestors,H372764
+372764:lAA:kernel_sup|H372744
+372744:lP<0.8.0>|N
+37280C:t2:A4:send,H372804
+372804:lA9:undefined|N
+372820:t2:AC:whereis_name,H372818
+372818:lA9:undefined|N
+=proc_dictionary:<0.16.0>
+H37B918
+H37B924
+=proc_stack:<0.16.0>
+3d303c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AB:file_server
+y3:p<0.4>
+y4:AD:file_server_2
+y5:P<0.9.0>
+3d3058:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H37B930
+=proc_heap:<0.16.0>
+37B930:lAA:gen_server|H37B950
+37B950:lP<0.9.0>|H37B960
+37B960:lP<0.9.0>|H37B968
+37B968:lH37B970|H37B97C
+37B970:t2:A5:local,AD:file_server_2
+37B97C:lAB:file_server|H37B984
+37B984:lN|H37B98C
+37B98C:lN|N
+37B918:t2:AD:$initial_call,H37B938
+37B938:t3:A3:gen,A7:init_it,H37B930
+37B924:t2:AA:$ancestors,H37B948
+37B948:lAA:kernel_sup|H37B958
+37B958:lP<0.8.0>|N
+=proc_stack:<0.17.0>
+3763cc:SReturn addr 0x156F90 (<terminate process normally>)
+y0:H376084
+y1:P<0.16.0>
+y2:P<0.9.0>
+=proc_heap:<0.17.0>
+376084:E21:8372000364000D6E6F6E6F6465406E6F686F737400000000160000000000000000
+=proc_stack:<0.18.0>
+3b98e8:SReturn addr 0x156F90 (<terminate process normally>)
+y0:H38AE84
+y1:P<0.9.0>
+=proc_heap:<0.18.0>
+38AE84:t8:A5:state,P<0.9.0>,H3873BC,H38AEB8,I9,I10,A8:no_cache,AB:interactive
+38AEB8:lH3873D4|H38AEE0
+3873D4:lI46|N
+38AEE0:lH3873EC|H38AF10
+3873EC:lI47|H387404
+387404:lI99|H387424
+387424:lI108|H38744C
+38744C:lI101|H38747C
+38747C:lI97|H3874B4
+3874B4:lI114|H3874F4
+3874F4:lI99|H38753C
+38753C:lI97|H38758C
+38758C:lI115|H3875E4
+3875E4:lI101|H387644
+387644:lI47|H3876AC
+3876AC:lI111|H38771C
+38771C:lI116|H387794
+387794:lI112|H387814
+387814:lI47|H38789C
+38789C:lI101|H38792C
+38792C:lI114|H3879BC
+3879BC:lI116|H387A54
+387A54:lI115|H387AF4
+387AF4:lI47|H387B9C
+387B9C:lI108|H387C4C
+387C4C:lI105|H387D04
+387D04:lI98|H387DC4
+387DC4:lI47|H387E8C
+387E8C:lI107|H387F5C
+387F5C:lI101|H388034
+388034:lI114|H388114
+388114:lI110|H3881FC
+3881FC:lI101|H3882EC
+3882EC:lI108|H3883E4
+3883E4:lI47|H3884E4
+3884E4:lI101|H3885EC
+3885EC:lI98|H3886FC
+3886FC:lI105|H388814
+388814:lI110|N
+38AF10:lH38740C|H38AF48
+38740C:lI47|H38742C
+38742C:lI99|H387454
+387454:lI108|H387484
+387484:lI101|H3874BC
+3874BC:lI97|H3874FC
+3874FC:lI114|H387544
+387544:lI99|H387594
+387594:lI97|H3875EC
+3875EC:lI115|H38764C
+38764C:lI101|H3876B4
+3876B4:lI47|H387724
+387724:lI111|H38779C
+38779C:lI116|H38781C
+38781C:lI112|H3878A4
+3878A4:lI47|H387934
+387934:lI101|H3879C4
+3879C4:lI114|H387A5C
+387A5C:lI116|H387AFC
+387AFC:lI115|H387BA4
+387BA4:lI47|H387C54
+387C54:lI108|H387D0C
+387D0C:lI105|H387DCC
+387DCC:lI98|H387E94
+387E94:lI47|H387F64
+387F64:lI115|H38803C
+38803C:lI116|H38811C
+38811C:lI100|H388204
+388204:lI108|H3882F4
+3882F4:lI105|H3883EC
+3883EC:lI98|H3884EC
+3884EC:lI47|H3885F4
+3885F4:lI101|H388704
+388704:lI98|H38881C
+38881C:lI105|H38892C
+38892C:lI110|N
+38AF48:lH387434|H38AF70
+387434:lI47|H38745C
+38745C:lI99|H38748C
+38748C:lI108|H3874C4
+3874C4:lI101|H387504
+387504:lI97|H38754C
+38754C:lI114|H38759C
+38759C:lI99|H3875F4
+3875F4:lI97|H387654
+387654:lI115|H3876BC
+3876BC:lI101|H38772C
+38772C:lI47|H3877A4
+3877A4:lI111|H387824
+387824:lI116|H3878AC
+3878AC:lI112|H38793C
+38793C:lI47|H3879CC
+3879CC:lI101|H387A64
+387A64:lI114|H387B04
+387B04:lI116|H387BAC
+387BAC:lI115|H387C5C
+387C5C:lI47|H387D14
+387D14:lI108|H387DD4
+387DD4:lI105|H387E9C
+387E9C:lI98|H387F6C
+387F6C:lI47|H388044
+388044:lI119|H388124
+388124:lI101|H38820C
+38820C:lI98|H3882FC
+3882FC:lI116|H3883F4
+3883F4:lI111|H3884F4
+3884F4:lI111|H3885FC
+3885FC:lI108|H38870C
+38870C:lI47|H388824
+388824:lI101|H388934
+388934:lI98|H388A44
+388A44:lI105|H388B54
+388B54:lI110|N
+38AF70:lH387464|H38AF98
+387464:lI47|H387494
+387494:lI99|H3874CC
+3874CC:lI108|H38750C
+38750C:lI101|H387554
+387554:lI97|H3875A4
+3875A4:lI114|H3875FC
+3875FC:lI99|H38765C
+38765C:lI97|H3876C4
+3876C4:lI115|H387734
+387734:lI101|H3877AC
+3877AC:lI47|H38782C
+38782C:lI111|H3878B4
+3878B4:lI116|H387944
+387944:lI112|H3879D4
+3879D4:lI47|H387A6C
+387A6C:lI101|H387B0C
+387B0C:lI114|H387BB4
+387BB4:lI116|H387C64
+387C64:lI115|H387D1C
+387D1C:lI47|H387DDC
+387DDC:lI108|H387EA4
+387EA4:lI105|H387F74
+387F74:lI98|H38804C
+38804C:lI47|H38812C
+38812C:lI116|H388214
+388214:lI118|H388304
+388304:lI47|H3883FC
+3883FC:lI101|H3884FC
+3884FC:lI98|H388604
+388604:lI105|H388714
+388714:lI110|N
+38AF98:lH38749C|H38AFC0
+38749C:lI47|H3874D4
+3874D4:lI99|H387514
+387514:lI108|H38755C
+38755C:lI101|H3875AC
+3875AC:lI97|H387604
+387604:lI114|H387664
+387664:lI99|H3876CC
+3876CC:lI97|H38773C
+38773C:lI115|H3877B4
+3877B4:lI101|H387834
+387834:lI47|H3878BC
+3878BC:lI111|H38794C
+38794C:lI116|H3879DC
+3879DC:lI112|H387A74
+387A74:lI47|H387B14
+387B14:lI101|H387BBC
+387BBC:lI114|H387C6C
+387C6C:lI116|H387D24
+387D24:lI115|H387DE4
+387DE4:lI47|H387EAC
+387EAC:lI108|H387F7C
+387F7C:lI105|H388054
+388054:lI98|H388134
+388134:lI47|H38821C
+38821C:lI116|H38830C
+38830C:lI115|H388404
+388404:lI112|H388504
+388504:lI47|H38860C
+38860C:lI101|H38871C
+38871C:lI98|H38882C
+38882C:lI105|H38893C
+38893C:lI110|N
+38AFC0:lH3874DC|H38AFE8
+3874DC:lI47|H38751C
+38751C:lI99|H387564
+387564:lI108|H3875B4
+3875B4:lI101|H38760C
+38760C:lI97|H38766C
+38766C:lI114|H3876D4
+3876D4:lI99|H387744
+387744:lI97|H3877BC
+3877BC:lI115|H38783C
+38783C:lI101|H3878C4
+3878C4:lI47|H387954
+387954:lI111|H3879E4
+3879E4:lI116|H387A7C
+387A7C:lI112|H387B1C
+387B1C:lI47|H387BC4
+387BC4:lI101|H387C74
+387C74:lI114|H387D2C
+387D2C:lI116|H387DEC
+387DEC:lI115|H387EB4
+387EB4:lI47|H387F84
+387F84:lI108|H38805C
+38805C:lI105|H38813C
+38813C:lI98|H388224
+388224:lI47|H388314
+388314:lI116|H38840C
+38840C:lI111|H38850C
+38850C:lI111|H388614
+388614:lI108|H388724
+388724:lI115|H388834
+388834:lI47|H388944
+388944:lI101|H388A4C
+388A4C:lI98|H388B5C
+388B5C:lI105|H388C6C
+388C6C:lI110|N
+38AFE8:lH387524|H38B008
+387524:lI47|H38756C
+38756C:lI99|H3875BC
+3875BC:lI108|H387614
+387614:lI101|H387674
+387674:lI97|H3876DC
+3876DC:lI114|H38774C
+38774C:lI99|H3877C4
+3877C4:lI97|H387844
+387844:lI115|H3878CC
+3878CC:lI101|H38795C
+38795C:lI47|H3879EC
+3879EC:lI111|H387A84
+387A84:lI116|H387B24
+387B24:lI112|H387BCC
+387BCC:lI47|H387C7C
+387C7C:lI101|H387D34
+387D34:lI114|H387DF4
+387DF4:lI116|H387EBC
+387EBC:lI115|H387F8C
+387F8C:lI47|H388064
+388064:lI108|H388144
+388144:lI105|H38822C
+38822C:lI98|H38831C
+38831C:lI47|H388414
+388414:lI116|H388514
+388514:lI111|H38861C
+38861C:lI111|H38872C
+38872C:lI108|H38883C
+38883C:lI98|H38894C
+38894C:lI97|H388A54
+388A54:lI114|H388B64
+388B64:lI47|H388C74
+388C74:lI101|H388D84
+388D84:lI98|H388E9C
+388E9C:lI105|H388FB4
+388FB4:lI110|N
+38B008:lH387574|H38B018
+387574:lI47|H3875C4
+3875C4:lI99|H38761C
+38761C:lI108|H38767C
+38767C:lI101|H3876E4
+3876E4:lI97|H387754
+387754:lI114|H3877CC
+3877CC:lI99|H38784C
+38784C:lI97|H3878D4
+3878D4:lI115|H387964
+387964:lI101|H3879F4
+3879F4:lI47|H387A8C
+387A8C:lI111|H387B2C
+387B2C:lI116|H387BD4
+387BD4:lI112|H387C84
+387C84:lI47|H387D3C
+387D3C:lI101|H387DFC
+387DFC:lI114|H387EC4
+387EC4:lI116|H387F94
+387F94:lI115|H38806C
+38806C:lI47|H38814C
+38814C:lI108|H388234
+388234:lI105|H388324
+388324:lI98|H38841C
+38841C:lI47|H38851C
+38851C:lI116|H388624
+388624:lI101|H388734
+388734:lI115|H388844
+388844:lI116|H388954
+388954:lI95|H388A5C
+388A5C:lI115|H388B6C
+388B6C:lI101|H388C7C
+388C7C:lI114|H388D8C
+388D8C:lI118|H388EA4
+388EA4:lI101|H388FBC
+388FBC:lI114|H3890D4
+3890D4:lI47|H3891EC
+3891EC:lI101|H3892FC
+3892FC:lI98|H38940C
+38940C:lI105|H38951C
+38951C:lI110|N
+38B018:lH3875CC|H38AE7C
+3875CC:lI47|H387624
+387624:lI99|H387684
+387684:lI108|H3876EC
+3876EC:lI101|H38775C
+38775C:lI97|H3877D4
+3877D4:lI114|H387854
+387854:lI99|H3878DC
+3878DC:lI97|H38796C
+38796C:lI115|H3879FC
+3879FC:lI101|H387A94
+387A94:lI47|H387B34
+387B34:lI111|H387BDC
+387BDC:lI116|H387C8C
+387C8C:lI112|H387D44
+387D44:lI47|H387E04
+387E04:lI101|H387ECC
+387ECC:lI114|H387F9C
+387F9C:lI116|H388074
+388074:lI115|H388154
+388154:lI47|H38823C
+38823C:lI108|H38832C
+38832C:lI105|H388424
+388424:lI98|H388524
+388524:lI47|H38862C
+38862C:lI115|H38873C
+38873C:lI115|H38884C
+38884C:lI108|H38895C
+38895C:lI47|H388A64
+388A64:lI101|H388B74
+388B74:lI98|H388C84
+388C84:lI105|H388D94
+388D94:lI110|N
+38AE7C:lH38762C|H38AEB0
+38762C:lI47|H38768C
+38768C:lI99|H3876F4
+3876F4:lI108|H387764
+387764:lI101|H3877DC
+3877DC:lI97|H38785C
+38785C:lI114|H3878E4
+3878E4:lI99|H387974
+387974:lI97|H387A04
+387A04:lI115|H387A9C
+387A9C:lI101|H387B3C
+387B3C:lI47|H387BE4
+387BE4:lI111|H387C94
+387C94:lI116|H387D4C
+387D4C:lI112|H387E0C
+387E0C:lI47|H387ED4
+387ED4:lI101|H387FA4
+387FA4:lI114|H38807C
+38807C:lI116|H38815C
+38815C:lI115|H388244
+388244:lI47|H388334
+388334:lI108|H38842C
+38842C:lI105|H38852C
+38852C:lI98|H388634
+388634:lI47|H388744
+388744:lI115|H388854
+388854:lI110|H388964
+388964:lI109|H388A6C
+388A6C:lI112|H388B7C
+388B7C:lI47|H388C8C
+388C8C:lI101|H388D9C
+388D9C:lI98|H388EAC
+388EAC:lI105|H388FC4
+388FC4:lI110|N
+38AEB0:lH387694|H38AED8
+387694:lI47|H3876FC
+3876FC:lI99|H38776C
+38776C:lI108|H3877E4
+3877E4:lI101|H387864
+387864:lI97|H3878EC
+3878EC:lI114|H38797C
+38797C:lI99|H387A0C
+387A0C:lI97|H387AA4
+387AA4:lI115|H387B44
+387B44:lI101|H387BEC
+387BEC:lI47|H387C9C
+387C9C:lI111|H387D54
+387D54:lI116|H387E14
+387E14:lI112|H387EDC
+387EDC:lI47|H387FAC
+387FAC:lI101|H388084
+388084:lI114|H388164
+388164:lI116|H38824C
+38824C:lI115|H38833C
+38833C:lI47|H388434
+388434:lI108|H388534
+388534:lI105|H38863C
+38863C:lI98|H38874C
+38874C:lI47|H38885C
+38885C:lI115|H38896C
+38896C:lI97|H388A74
+388A74:lI115|H388B84
+388B84:lI108|H388C94
+388C94:lI47|H388DA4
+388DA4:lI101|H388EB4
+388EB4:lI98|H388FCC
+388FCC:lI105|H3890DC
+3890DC:lI110|N
+38AED8:lH387704|H38AF08
+387704:lI47|H387774
+387774:lI99|H3877EC
+3877EC:lI108|H38786C
+38786C:lI101|H3878F4
+3878F4:lI97|H387984
+387984:lI114|H387A14
+387A14:lI99|H387AAC
+387AAC:lI97|H387B4C
+387B4C:lI115|H387BF4
+387BF4:lI101|H387CA4
+387CA4:lI47|H387D5C
+387D5C:lI111|H387E1C
+387E1C:lI116|H387EE4
+387EE4:lI112|H387FB4
+387FB4:lI47|H38808C
+38808C:lI101|H38816C
+38816C:lI114|H388254
+388254:lI116|H388344
+388344:lI115|H38843C
+38843C:lI47|H38853C
+38853C:lI108|H388644
+388644:lI105|H388754
+388754:lI98|H388864
+388864:lI47|H388974
+388974:lI114|H388A7C
+388A7C:lI117|H388B8C
+388B8C:lI110|H388C9C
+388C9C:lI116|H388DAC
+388DAC:lI105|H388EBC
+388EBC:lI109|H388FD4
+388FD4:lI101|H3890E4
+3890E4:lI95|H3891F4
+3891F4:lI116|H389304
+389304:lI111|H389414
+389414:lI111|H389524
+389524:lI108|H389624
+389624:lI115|H38971C
+38971C:lI47|H389814
+389814:lI101|H38990C
+38990C:lI98|H389A04
+389A04:lI105|H389AE4
+389AE4:lI110|N
+38AF08:lH38777C|H38AF40
+38777C:lI47|H3877F4
+3877F4:lI99|H387874
+387874:lI108|H3878FC
+3878FC:lI101|H38798C
+38798C:lI97|H387A1C
+387A1C:lI114|H387AB4
+387AB4:lI99|H387B54
+387B54:lI97|H387BFC
+387BFC:lI115|H387CAC
+387CAC:lI101|H387D64
+387D64:lI47|H387E24
+387E24:lI111|H387EEC
+387EEC:lI116|H387FBC
+387FBC:lI112|H388094
+388094:lI47|H388174
+388174:lI101|H38825C
+38825C:lI114|H38834C
+38834C:lI116|H388444
+388444:lI115|H388544
+388544:lI47|H38864C
+38864C:lI108|H38875C
+38875C:lI105|H38886C
+38886C:lI98|H38897C
+38897C:lI47|H388A84
+388A84:lI114|H388B94
+388B94:lI115|H388CA4
+388CA4:lI104|H388DB4
+388DB4:lI101|H388EC4
+388EC4:lI108|H388FDC
+388FDC:lI108|H3890EC
+3890EC:lI47|H3891FC
+3891FC:lI101|H38930C
+38930C:lI98|H38941C
+38941C:lI105|H38952C
+38952C:lI110|N
+38AF40:lH3877FC|H38AF68
+3877FC:lI47|H38787C
+38787C:lI99|H387904
+387904:lI108|H387994
+387994:lI101|H387A24
+387A24:lI97|H387ABC
+387ABC:lI114|H387B5C
+387B5C:lI99|H387C04
+387C04:lI97|H387CB4
+387CB4:lI115|H387D6C
+387D6C:lI101|H387E2C
+387E2C:lI47|H387EF4
+387EF4:lI111|H387FC4
+387FC4:lI116|H38809C
+38809C:lI112|H38817C
+38817C:lI47|H388264
+388264:lI101|H388354
+388354:lI114|H38844C
+38844C:lI116|H38854C
+38854C:lI115|H388654
+388654:lI47|H388764
+388764:lI108|H388874
+388874:lI105|H388984
+388984:lI98|H388A8C
+388A8C:lI47|H388B9C
+388B9C:lI112|H388CAC
+388CAC:lI109|H388DBC
+388DBC:lI97|H388ECC
+388ECC:lI110|H388FE4
+388FE4:lI47|H3890F4
+3890F4:lI101|H389204
+389204:lI98|H389314
+389314:lI105|H389424
+389424:lI110|N
+38AF68:lH387884|H38AF90
+387884:lI47|H38790C
+38790C:lI99|H38799C
+38799C:lI108|H387A2C
+387A2C:lI101|H387AC4
+387AC4:lI97|H387B64
+387B64:lI114|H387C0C
+387C0C:lI99|H387CBC
+387CBC:lI97|H387D74
+387D74:lI115|H387E34
+387E34:lI101|H387EFC
+387EFC:lI47|H387FCC
+387FCC:lI111|H3880A4
+3880A4:lI116|H388184
+388184:lI112|H38826C
+38826C:lI47|H38835C
+38835C:lI101|H388454
+388454:lI114|H388554
+388554:lI116|H38865C
+38865C:lI115|H38876C
+38876C:lI47|H38887C
+38887C:lI108|H38898C
+38898C:lI105|H388A94
+388A94:lI98|H388BA4
+388BA4:lI47|H388CB4
+388CB4:lI112|H388DC4
+388DC4:lI97|H388ED4
+388ED4:lI114|H388FEC
+388FEC:lI115|H3890FC
+3890FC:lI101|H38920C
+38920C:lI116|H38931C
+38931C:lI111|H38942C
+38942C:lI111|H389534
+389534:lI108|H38962C
+38962C:lI115|H389724
+389724:lI47|H38981C
+38981C:lI101|H389914
+389914:lI98|H389A0C
+389A0C:lI105|H389AEC
+389AEC:lI110|N
+38AF90:lH387914|H38AFB8
+387914:lI47|H3879A4
+3879A4:lI99|H387A34
+387A34:lI108|H387ACC
+387ACC:lI101|H387B6C
+387B6C:lI97|H387C14
+387C14:lI114|H387CC4
+387CC4:lI99|H387D7C
+387D7C:lI97|H387E3C
+387E3C:lI115|H387F04
+387F04:lI101|H387FD4
+387FD4:lI47|H3880AC
+3880AC:lI111|H38818C
+38818C:lI116|H388274
+388274:lI112|H388364
+388364:lI47|H38845C
+38845C:lI101|H38855C
+38855C:lI114|H388664
+388664:lI116|H388774
+388774:lI115|H388884
+388884:lI47|H388994
+388994:lI108|H388A9C
+388A9C:lI105|H388BAC
+388BAC:lI98|H388CBC
+388CBC:lI47|H388DCC
+388DCC:lI111|H388EDC
+388EDC:lI116|H388FF4
+388FF4:lI112|H389104
+389104:lI95|H389214
+389214:lI109|H389324
+389324:lI105|H389434
+389434:lI98|H38953C
+38953C:lI115|H389634
+389634:lI47|H38972C
+38972C:lI101|H389824
+389824:lI98|H38991C
+38991C:lI105|H389A14
+389A14:lI110|N
+38AFB8:lH3879AC|H38AFE0
+3879AC:lI47|H387A3C
+387A3C:lI99|H387AD4
+387AD4:lI108|H387B74
+387B74:lI101|H387C1C
+387C1C:lI97|H387CCC
+387CCC:lI114|H387D84
+387D84:lI99|H387E44
+387E44:lI97|H387F0C
+387F0C:lI115|H387FDC
+387FDC:lI101|H3880B4
+3880B4:lI47|H388194
+388194:lI111|H38827C
+38827C:lI116|H38836C
+38836C:lI112|H388464
+388464:lI47|H388564
+388564:lI101|H38866C
+38866C:lI114|H38877C
+38877C:lI116|H38888C
+38888C:lI115|H38899C
+38899C:lI47|H388AA4
+388AA4:lI108|H388BB4
+388BB4:lI105|H388CC4
+388CC4:lI98|H388DD4
+388DD4:lI47|H388EE4
+388EE4:lI111|H388FFC
+388FFC:lI115|H38910C
+38910C:lI95|H38921C
+38921C:lI109|H38932C
+38932C:lI111|H38943C
+38943C:lI110|H389544
+389544:lI47|H38963C
+38963C:lI101|H389734
+389734:lI98|H38982C
+38982C:lI105|H389924
+389924:lI110|N
+38AFE0:lH387A44|H38B000
+387A44:lI47|H387ADC
+387ADC:lI99|H387B7C
+387B7C:lI108|H387C24
+387C24:lI101|H387CD4
+387CD4:lI97|H387D8C
+387D8C:lI114|H387E4C
+387E4C:lI99|H387F14
+387F14:lI97|H387FE4
+387FE4:lI115|H3880BC
+3880BC:lI101|H38819C
+38819C:lI47|H388284
+388284:lI111|H388374
+388374:lI116|H38846C
+38846C:lI112|H38856C
+38856C:lI47|H388674
+388674:lI101|H388784
+388784:lI114|H388894
+388894:lI116|H3889A4
+3889A4:lI115|H388AAC
+388AAC:lI47|H388BBC
+388BBC:lI108|H388CCC
+388CCC:lI105|H388DDC
+388DDC:lI98|H388EEC
+388EEC:lI47|H389004
+389004:lI111|H389114
+389114:lI114|H389224
+389224:lI98|H389334
+389334:lI101|H389444
+389444:lI114|H38954C
+38954C:lI47|H389644
+389644:lI101|H38973C
+38973C:lI98|H389834
+389834:lI105|H38992C
+38992C:lI110|N
+38B000:lH387AE4|H38B010
+387AE4:lI47|H387B84
+387B84:lI99|H387C2C
+387C2C:lI108|H387CDC
+387CDC:lI101|H387D94
+387D94:lI97|H387E54
+387E54:lI114|H387F1C
+387F1C:lI99|H387FEC
+387FEC:lI97|H3880C4
+3880C4:lI115|H3881A4
+3881A4:lI101|H38828C
+38828C:lI47|H38837C
+38837C:lI111|H388474
+388474:lI116|H388574
+388574:lI112|H38867C
+38867C:lI47|H38878C
+38878C:lI101|H38889C
+38889C:lI114|H3889AC
+3889AC:lI116|H388AB4
+388AB4:lI115|H388BC4
+388BC4:lI47|H388CD4
+388CD4:lI108|H388DE4
+388DE4:lI105|H388EF4
+388EF4:lI98|H38900C
+38900C:lI47|H38911C
+38911C:lI111|H38922C
+38922C:lI100|H38933C
+38933C:lI98|H38944C
+38944C:lI99|H389554
+389554:lI47|H38964C
+38964C:lI101|H389744
+389744:lI98|H38983C
+38983C:lI105|H389934
+389934:lI110|N
+38B010:lH387B8C|H38B020
+387B8C:lI47|H387C34
+387C34:lI99|H387CE4
+387CE4:lI108|H387D9C
+387D9C:lI101|H387E5C
+387E5C:lI97|H387F24
+387F24:lI114|H387FF4
+387FF4:lI99|H3880CC
+3880CC:lI97|H3881AC
+3881AC:lI115|H388294
+388294:lI101|H388384
+388384:lI47|H38847C
+38847C:lI111|H38857C
+38857C:lI116|H388684
+388684:lI112|H388794
+388794:lI47|H3888A4
+3888A4:lI101|H3889B4
+3889B4:lI114|H388ABC
+388ABC:lI116|H388BCC
+388BCC:lI115|H388CDC
+388CDC:lI47|H388DEC
+388DEC:lI108|H388EFC
+388EFC:lI105|H389014
+389014:lI98|H389124
+389124:lI47|H389234
+389234:lI111|H389344
+389344:lI98|H389454
+389454:lI115|H38955C
+38955C:lI101|H389654
+389654:lI114|H38974C
+38974C:lI118|H389844
+389844:lI101|H38993C
+38993C:lI114|H389A1C
+389A1C:lI47|H389AF4
+389AF4:lI101|H389BBC
+389BBC:lI98|H389C84
+389C84:lI105|H389D4C
+389D4C:lI110|N
+38B020:lH387C3C|H38B028
+387C3C:lI47|H387CEC
+387CEC:lI99|H387DA4
+387DA4:lI108|H387E64
+387E64:lI101|H387F2C
+387F2C:lI97|H387FFC
+387FFC:lI114|H3880D4
+3880D4:lI99|H3881B4
+3881B4:lI97|H38829C
+38829C:lI115|H38838C
+38838C:lI101|H388484
+388484:lI47|H388584
+388584:lI111|H38868C
+38868C:lI116|H38879C
+38879C:lI112|H3888AC
+3888AC:lI47|H3889BC
+3889BC:lI101|H388AC4
+388AC4:lI114|H388BD4
+388BD4:lI116|H388CE4
+388CE4:lI115|H388DF4
+388DF4:lI47|H388F04
+388F04:lI108|H38901C
+38901C:lI105|H38912C
+38912C:lI98|H38923C
+38923C:lI47|H38934C
+38934C:lI109|H38945C
+38945C:lI110|H389564
+389564:lI101|H38965C
+38965C:lI115|H389754
+389754:lI105|H38984C
+38984C:lI97|H389944
+389944:lI95|H389A24
+389A24:lI115|H389AFC
+389AFC:lI101|H389BC4
+389BC4:lI115|H389C8C
+389C8C:lI115|H389D54
+389D54:lI105|H389E14
+389E14:lI111|H389ECC
+389ECC:lI110|H389F7C
+389F7C:lI47|H38A01C
+38A01C:lI101|H38A0AC
+38A0AC:lI98|H38A12C
+38A12C:lI105|H38A19C
+38A19C:lI110|N
+38B028:lH387CF4|H38B030
+387CF4:lI47|H387DAC
+387DAC:lI99|H387E6C
+387E6C:lI108|H387F34
+387F34:lI101|H388004
+388004:lI97|H3880DC
+3880DC:lI114|H3881BC
+3881BC:lI99|H3882A4
+3882A4:lI97|H388394
+388394:lI115|H38848C
+38848C:lI101|H38858C
+38858C:lI47|H388694
+388694:lI111|H3887A4
+3887A4:lI116|H3888B4
+3888B4:lI112|H3889C4
+3889C4:lI47|H388ACC
+388ACC:lI101|H388BDC
+388BDC:lI114|H388CEC
+388CEC:lI116|H388DFC
+388DFC:lI115|H388F0C
+388F0C:lI47|H389024
+389024:lI108|H389134
+389134:lI105|H389244
+389244:lI98|H389354
+389354:lI47|H389464
+389464:lI109|H38956C
+38956C:lI110|H389664
+389664:lI101|H38975C
+38975C:lI115|H389854
+389854:lI105|H38994C
+38994C:lI97|H389A2C
+389A2C:lI47|H389B04
+389B04:lI101|H389BCC
+389BCC:lI98|H389C94
+389C94:lI105|H389D5C
+389D5C:lI110|N
+38B030:lH387DB4|H38B038
+387DB4:lI47|H387E74
+387E74:lI99|H387F3C
+387F3C:lI108|H38800C
+38800C:lI101|H3880E4
+3880E4:lI97|H3881C4
+3881C4:lI114|H3882AC
+3882AC:lI99|H38839C
+38839C:lI97|H388494
+388494:lI115|H388594
+388594:lI101|H38869C
+38869C:lI47|H3887AC
+3887AC:lI111|H3888BC
+3888BC:lI116|H3889CC
+3889CC:lI112|H388AD4
+388AD4:lI47|H388BE4
+388BE4:lI101|H388CF4
+388CF4:lI114|H388E04
+388E04:lI116|H388F14
+388F14:lI115|H38902C
+38902C:lI47|H38913C
+38913C:lI108|H38924C
+38924C:lI105|H38935C
+38935C:lI98|H38946C
+38946C:lI47|H389574
+389574:lI109|H38966C
+38966C:lI110|H389764
+389764:lI101|H38985C
+38985C:lI109|H389954
+389954:lI111|H389A34
+389A34:lI115|H389B0C
+389B0C:lI121|H389BD4
+389BD4:lI110|H389C9C
+389C9C:lI101|H389D64
+389D64:lI47|H389E1C
+389E1C:lI101|H389ED4
+389ED4:lI98|H389F84
+389F84:lI105|H38A024
+38A024:lI110|N
+38B038:lH387E7C|H38B040
+387E7C:lI47|H387F44
+387F44:lI99|H388014
+388014:lI108|H3880EC
+3880EC:lI101|H3881CC
+3881CC:lI97|H3882B4
+3882B4:lI114|H3883A4
+3883A4:lI99|H38849C
+38849C:lI97|H38859C
+38859C:lI115|H3886A4
+3886A4:lI101|H3887B4
+3887B4:lI47|H3888C4
+3888C4:lI111|H3889D4
+3889D4:lI116|H388ADC
+388ADC:lI112|H388BEC
+388BEC:lI47|H388CFC
+388CFC:lI101|H388E0C
+388E0C:lI114|H388F1C
+388F1C:lI116|H389034
+389034:lI115|H389144
+389144:lI47|H389254
+389254:lI108|H389364
+389364:lI105|H389474
+389474:lI98|H38957C
+38957C:lI47|H389674
+389674:lI109|H38976C
+38976C:lI101|H389864
+389864:lI103|H38995C
+38995C:lI97|H389A3C
+389A3C:lI99|H389B14
+389B14:lI111|H389BDC
+389BDC:lI47|H389CA4
+389CA4:lI101|H389D6C
+389D6C:lI98|H389E24
+389E24:lI105|H389EDC
+389EDC:lI110|N
+38B040:lH387F4C|H38B048
+387F4C:lI47|H38801C
+38801C:lI99|H3880F4
+3880F4:lI108|H3881D4
+3881D4:lI101|H3882BC
+3882BC:lI97|H3883AC
+3883AC:lI114|H3884A4
+3884A4:lI99|H3885A4
+3885A4:lI97|H3886AC
+3886AC:lI115|H3887BC
+3887BC:lI101|H3888CC
+3888CC:lI47|H3889DC
+3889DC:lI111|H388AE4
+388AE4:lI116|H388BF4
+388BF4:lI112|H388D04
+388D04:lI47|H388E14
+388E14:lI101|H388F24
+388F24:lI114|H38903C
+38903C:lI116|H38914C
+38914C:lI115|H38925C
+38925C:lI47|H38936C
+38936C:lI108|H38947C
+38947C:lI105|H389584
+389584:lI98|H38967C
+38967C:lI47|H389774
+389774:lI106|H38986C
+38986C:lI105|H389964
+389964:lI110|H389A44
+389A44:lI116|H389B1C
+389B1C:lI101|H389BE4
+389BE4:lI114|H389CAC
+389CAC:lI102|H389D74
+389D74:lI97|H389E2C
+389E2C:lI99|H389EE4
+389EE4:lI101|N
+38B048:lH388024|H38B050
+388024:lI47|H3880FC
+3880FC:lI99|H3881DC
+3881DC:lI108|H3882C4
+3882C4:lI101|H3883B4
+3883B4:lI97|H3884AC
+3884AC:lI114|H3885AC
+3885AC:lI99|H3886B4
+3886B4:lI97|H3887C4
+3887C4:lI115|H3888D4
+3888D4:lI101|H3889E4
+3889E4:lI47|H388AEC
+388AEC:lI111|H388BFC
+388BFC:lI116|H388D0C
+388D0C:lI112|H388E1C
+388E1C:lI47|H388F2C
+388F2C:lI101|H389044
+389044:lI114|H389154
+389154:lI116|H389264
+389264:lI115|H389374
+389374:lI47|H389484
+389484:lI108|H38958C
+38958C:lI105|H389684
+389684:lI98|H38977C
+38977C:lI47|H389874
+389874:lI105|H38996C
+38996C:lI110|H389A4C
+389A4C:lI101|H389B24
+389B24:lI116|H389BEC
+389BEC:lI115|H389CB4
+389CB4:lI47|H389D7C
+389D7C:lI101|H389E34
+389E34:lI98|H389EEC
+389EEC:lI105|H389F8C
+389F8C:lI110|N
+38B050:lH388104|H38B058
+388104:lI47|H3881E4
+3881E4:lI99|H3882CC
+3882CC:lI108|H3883BC
+3883BC:lI101|H3884B4
+3884B4:lI97|H3885B4
+3885B4:lI114|H3886BC
+3886BC:lI99|H3887CC
+3887CC:lI97|H3888DC
+3888DC:lI115|H3889EC
+3889EC:lI101|H388AF4
+388AF4:lI47|H388C04
+388C04:lI111|H388D14
+388D14:lI116|H388E24
+388E24:lI112|H388F34
+388F34:lI47|H38904C
+38904C:lI101|H38915C
+38915C:lI114|H38926C
+38926C:lI116|H38937C
+38937C:lI115|H38948C
+38948C:lI47|H389594
+389594:lI108|H38968C
+38968C:lI105|H389784
+389784:lI98|H38987C
+38987C:lI47|H389974
+389974:lI105|H389A54
+389A54:lI99|H389B2C
+389B2C:lI47|H389BF4
+389BF4:lI101|H389CBC
+389CBC:lI98|H389D84
+389D84:lI105|H389E3C
+389E3C:lI110|N
+38B058:lH3881EC|H38B060
+3881EC:lI47|H3882D4
+3882D4:lI99|H3883C4
+3883C4:lI108|H3884BC
+3884BC:lI101|H3885BC
+3885BC:lI97|H3886C4
+3886C4:lI114|H3887D4
+3887D4:lI99|H3888E4
+3888E4:lI97|H3889F4
+3889F4:lI115|H388AFC
+388AFC:lI101|H388C0C
+388C0C:lI47|H388D1C
+388D1C:lI111|H388E2C
+388E2C:lI116|H388F3C
+388F3C:lI112|H389054
+389054:lI47|H389164
+389164:lI101|H389274
+389274:lI114|H389384
+389384:lI116|H389494
+389494:lI115|H38959C
+38959C:lI47|H389694
+389694:lI108|H38978C
+38978C:lI105|H389884
+389884:lI98|H38997C
+38997C:lI47|H389A5C
+389A5C:lI104|H389B34
+389B34:lI105|H389BFC
+389BFC:lI112|H389CC4
+389CC4:lI101|H389D8C
+389D8C:lI47|H389E44
+389E44:lI101|H389EF4
+389EF4:lI98|H389F94
+389F94:lI105|H38A02C
+38A02C:lI110|N
+38B060:lH3882DC|H38B068
+3882DC:lI47|H3883CC
+3883CC:lI99|H3884C4
+3884C4:lI108|H3885C4
+3885C4:lI101|H3886CC
+3886CC:lI97|H3887DC
+3887DC:lI114|H3888EC
+3888EC:lI99|H3889FC
+3889FC:lI97|H388B04
+388B04:lI115|H388C14
+388C14:lI101|H388D24
+388D24:lI47|H388E34
+388E34:lI111|H388F44
+388F44:lI116|H38905C
+38905C:lI112|H38916C
+38916C:lI47|H38927C
+38927C:lI101|H38938C
+38938C:lI114|H38949C
+38949C:lI116|H3895A4
+3895A4:lI115|H38969C
+38969C:lI47|H389794
+389794:lI108|H38988C
+38988C:lI105|H389984
+389984:lI98|H389A64
+389A64:lI47|H389B3C
+389B3C:lI103|H389C04
+389C04:lI115|H389CCC
+389CCC:lI47|H389D94
+389D94:lI101|H389E4C
+389E4C:lI98|H389EFC
+389EFC:lI105|H389F9C
+389F9C:lI110|N
+38B068:lH3883D4|H38B070
+3883D4:lI47|H3884CC
+3884CC:lI99|H3885CC
+3885CC:lI108|H3886D4
+3886D4:lI101|H3887E4
+3887E4:lI97|H3888F4
+3888F4:lI114|H388A04
+388A04:lI99|H388B0C
+388B0C:lI97|H388C1C
+388C1C:lI115|H388D2C
+388D2C:lI101|H388E3C
+388E3C:lI47|H388F4C
+388F4C:lI111|H389064
+389064:lI116|H389174
+389174:lI112|H389284
+389284:lI47|H389394
+389394:lI101|H3894A4
+3894A4:lI114|H3895AC
+3895AC:lI116|H3896A4
+3896A4:lI115|H38979C
+38979C:lI47|H389894
+389894:lI108|H38998C
+38998C:lI105|H389A6C
+389A6C:lI98|H389B44
+389B44:lI47|H389C0C
+389C0C:lI101|H389CD4
+389CD4:lI118|H389D9C
+389D9C:lI97|H389E54
+389E54:lI47|H389F04
+389F04:lI101|H389FA4
+389FA4:lI98|H38A034
+38A034:lI105|H38A0B4
+38A0B4:lI110|N
+38B070:lH3884D4|H38B078
+3884D4:lI47|H3885D4
+3885D4:lI99|H3886DC
+3886DC:lI108|H3887EC
+3887EC:lI101|H3888FC
+3888FC:lI97|H388A0C
+388A0C:lI114|H388B14
+388B14:lI99|H388C24
+388C24:lI97|H388D34
+388D34:lI115|H388E44
+388E44:lI101|H388F54
+388F54:lI47|H38906C
+38906C:lI111|H38917C
+38917C:lI116|H38928C
+38928C:lI112|H38939C
+38939C:lI47|H3894AC
+3894AC:lI101|H3895B4
+3895B4:lI114|H3896AC
+3896AC:lI116|H3897A4
+3897A4:lI115|H38989C
+38989C:lI47|H389994
+389994:lI108|H389A74
+389A74:lI105|H389B4C
+389B4C:lI98|H389C14
+389C14:lI47|H389CDC
+389CDC:lI101|H389DA4
+389DA4:lI116|H389E5C
+389E5C:lI47|H389F0C
+389F0C:lI101|H389FAC
+389FAC:lI98|H38A03C
+38A03C:lI105|H38A0BC
+38A0BC:lI110|N
+38B078:lH3885DC|H38B080
+3885DC:lI47|H3886E4
+3886E4:lI99|H3887F4
+3887F4:lI108|H388904
+388904:lI101|H388A14
+388A14:lI97|H388B1C
+388B1C:lI114|H388C2C
+388C2C:lI99|H388D3C
+388D3C:lI97|H388E4C
+388E4C:lI115|H388F5C
+388F5C:lI101|H389074
+389074:lI47|H389184
+389184:lI111|H389294
+389294:lI116|H3893A4
+3893A4:lI112|H3894B4
+3894B4:lI47|H3895BC
+3895BC:lI101|H3896B4
+3896B4:lI114|H3897AC
+3897AC:lI116|H3898A4
+3898A4:lI115|H38999C
+38999C:lI47|H389A7C
+389A7C:lI108|H389B54
+389B54:lI105|H389C1C
+389C1C:lI98|H389CE4
+389CE4:lI47|H389DAC
+389DAC:lI101|H389E64
+389E64:lI114|H389F14
+389F14:lI108|H389FB4
+389FB4:lI95|H38A044
+38A044:lI105|H38A0C4
+38A0C4:lI110|H38A134
+38A134:lI116|H38A1A4
+38A1A4:lI101|H38A20C
+38A20C:lI114|H38A274
+38A274:lI102|H38A2DC
+38A2DC:lI97|H38A344
+38A344:lI99|H38A3AC
+38A3AC:lI101|N
+38B080:lH3886EC|H38B088
+3886EC:lI47|H3887FC
+3887FC:lI99|H38890C
+38890C:lI108|H388A1C
+388A1C:lI101|H388B24
+388B24:lI97|H388C34
+388C34:lI114|H388D44
+388D44:lI99|H388E54
+388E54:lI97|H388F64
+388F64:lI115|H38907C
+38907C:lI101|H38918C
+38918C:lI47|H38929C
+38929C:lI111|H3893AC
+3893AC:lI116|H3894BC
+3894BC:lI112|H3895C4
+3895C4:lI47|H3896BC
+3896BC:lI101|H3897B4
+3897B4:lI114|H3898AC
+3898AC:lI116|H3899A4
+3899A4:lI115|H389A84
+389A84:lI47|H389B5C
+389B5C:lI108|H389C24
+389C24:lI105|H389CEC
+389CEC:lI98|H389DB4
+389DB4:lI47|H389E6C
+389E6C:lI100|H389F1C
+389F1C:lI101|H389FBC
+389FBC:lI98|H38A04C
+38A04C:lI117|H38A0CC
+38A0CC:lI103|H38A13C
+38A13C:lI103|H38A1AC
+38A1AC:lI101|H38A214
+38A214:lI114|H38A27C
+38A27C:lI47|H38A2E4
+38A2E4:lI101|H38A34C
+38A34C:lI98|H38A3B4
+38A3B4:lI105|H38A414
+38A414:lI110|N
+38B088:lH388804|H38B090
+388804:lI47|H388914
+388914:lI99|H388A24
+388A24:lI108|H388B2C
+388B2C:lI101|H388C3C
+388C3C:lI97|H388D4C
+388D4C:lI114|H388E5C
+388E5C:lI99|H388F6C
+388F6C:lI97|H389084
+389084:lI115|H389194
+389194:lI101|H3892A4
+3892A4:lI47|H3893B4
+3893B4:lI111|H3894C4
+3894C4:lI116|H3895CC
+3895CC:lI112|H3896C4
+3896C4:lI47|H3897BC
+3897BC:lI101|H3898B4
+3898B4:lI114|H3899AC
+3899AC:lI116|H389A8C
+389A8C:lI115|H389B64
+389B64:lI47|H389C2C
+389C2C:lI108|H389CF4
+389CF4:lI105|H389DBC
+389DBC:lI98|H389E74
+389E74:lI47|H389F24
+389F24:lI99|H389FC4
+389FC4:lI114|H38A054
+38A054:lI121|H38A0D4
+38A0D4:lI112|H38A144
+38A144:lI116|H38A1B4
+38A1B4:lI111|H38A21C
+38A21C:lI47|H38A284
+38A284:lI101|H38A2EC
+38A2EC:lI98|H38A354
+38A354:lI105|H38A3BC
+38A3BC:lI110|N
+38B090:lH38891C|H38B098
+38891C:lI47|H388A2C
+388A2C:lI99|H388B34
+388B34:lI108|H388C44
+388C44:lI101|H388D54
+388D54:lI97|H388E64
+388E64:lI114|H388F74
+388F74:lI99|H38908C
+38908C:lI97|H38919C
+38919C:lI115|H3892AC
+3892AC:lI101|H3893BC
+3893BC:lI47|H3894CC
+3894CC:lI111|H3895D4
+3895D4:lI116|H3896CC
+3896CC:lI112|H3897C4
+3897C4:lI47|H3898BC
+3898BC:lI101|H3899B4
+3899B4:lI114|H389A94
+389A94:lI116|H389B6C
+389B6C:lI115|H389C34
+389C34:lI47|H389CFC
+389CFC:lI108|H389DC4
+389DC4:lI105|H389E7C
+389E7C:lI98|H389F2C
+389F2C:lI47|H389FCC
+389FCC:lI99|H38A05C
+38A05C:lI111|H38A0DC
+38A0DC:lI115|H38A14C
+38A14C:lI84|H38A1BC
+38A1BC:lI114|H38A224
+38A224:lI97|H38A28C
+38A28C:lI110|H38A2F4
+38A2F4:lI115|H38A35C
+38A35C:lI97|H38A3C4
+38A3C4:lI99|H38A41C
+38A41C:lI116|H38A46C
+38A46C:lI105|H38A4BC
+38A4BC:lI111|H38A50C
+38A50C:lI110|H38A554
+38A554:lI115|H38A59C
+38A59C:lI47|H38A5E4
+38A5E4:lI101|H38A62C
+38A62C:lI98|H38A66C
+38A66C:lI105|H38A6A4
+38A6A4:lI110|N
+38B098:lH388A34|H38B0A0
+388A34:lI47|H388B3C
+388B3C:lI99|H388C4C
+388C4C:lI108|H388D5C
+388D5C:lI101|H388E6C
+388E6C:lI97|H388F7C
+388F7C:lI114|H389094
+389094:lI99|H3891A4
+3891A4:lI97|H3892B4
+3892B4:lI115|H3893C4
+3893C4:lI101|H3894D4
+3894D4:lI47|H3895DC
+3895DC:lI111|H3896D4
+3896D4:lI116|H3897CC
+3897CC:lI112|H3898C4
+3898C4:lI47|H3899BC
+3899BC:lI101|H389A9C
+389A9C:lI114|H389B74
+389B74:lI116|H389C3C
+389C3C:lI115|H389D04
+389D04:lI47|H389DCC
+389DCC:lI108|H389E84
+389E84:lI105|H389F34
+389F34:lI98|H389FD4
+389FD4:lI47|H38A064
+38A064:lI99|H38A0E4
+38A0E4:lI111|H38A154
+38A154:lI115|H38A1C4
+38A1C4:lI84|H38A22C
+38A22C:lI105|H38A294
+38A294:lI109|H38A2FC
+38A2FC:lI101|H38A364
+38A364:lI47|H38A3CC
+38A3CC:lI101|H38A424
+38A424:lI98|H38A474
+38A474:lI105|H38A4C4
+38A4C4:lI110|N
+38B0A0:lH388B44|H38B0A8
+388B44:lI47|H388C54
+388C54:lI99|H388D64
+388D64:lI108|H388E74
+388E74:lI101|H388F84
+388F84:lI97|H38909C
+38909C:lI114|H3891AC
+3891AC:lI99|H3892BC
+3892BC:lI97|H3893CC
+3893CC:lI115|H3894DC
+3894DC:lI101|H3895E4
+3895E4:lI47|H3896DC
+3896DC:lI111|H3897D4
+3897D4:lI116|H3898CC
+3898CC:lI112|H3899C4
+3899C4:lI47|H389AA4
+389AA4:lI101|H389B7C
+389B7C:lI114|H389C44
+389C44:lI116|H389D0C
+389D0C:lI115|H389DD4
+389DD4:lI47|H389E8C
+389E8C:lI108|H389F3C
+389F3C:lI105|H389FDC
+389FDC:lI98|H38A06C
+38A06C:lI47|H38A0EC
+38A0EC:lI99|H38A15C
+38A15C:lI111|H38A1CC
+38A1CC:lI115|H38A234
+38A234:lI80|H38A29C
+38A29C:lI114|H38A304
+38A304:lI111|H38A36C
+38A36C:lI112|H38A3D4
+38A3D4:lI101|H38A42C
+38A42C:lI114|H38A47C
+38A47C:lI116|H38A4CC
+38A4CC:lI121|H38A514
+38A514:lI47|H38A55C
+38A55C:lI101|H38A5A4
+38A5A4:lI98|H38A5EC
+38A5EC:lI105|H38A634
+38A634:lI110|N
+38B0A8:lH388C5C|H38B0B0
+388C5C:lI47|H388D6C
+388D6C:lI99|H388E7C
+388E7C:lI108|H388F8C
+388F8C:lI101|H3890A4
+3890A4:lI97|H3891B4
+3891B4:lI114|H3892C4
+3892C4:lI99|H3893D4
+3893D4:lI97|H3894E4
+3894E4:lI115|H3895EC
+3895EC:lI101|H3896E4
+3896E4:lI47|H3897DC
+3897DC:lI111|H3898D4
+3898D4:lI116|H3899CC
+3899CC:lI112|H389AAC
+389AAC:lI47|H389B84
+389B84:lI101|H389C4C
+389C4C:lI114|H389D14
+389D14:lI116|H389DDC
+389DDC:lI115|H389E94
+389E94:lI47|H389F44
+389F44:lI108|H389FE4
+389FE4:lI105|H38A074
+38A074:lI98|H38A0F4
+38A0F4:lI47|H38A164
+38A164:lI99|H38A1D4
+38A1D4:lI111|H38A23C
+38A23C:lI115|H38A2A4
+38A2A4:lI78|H38A30C
+38A30C:lI111|H38A374
+38A374:lI116|H38A3DC
+38A3DC:lI105|H38A434
+38A434:lI102|H38A484
+38A484:lI105|H38A4D4
+38A4D4:lI99|H38A51C
+38A51C:lI97|H38A564
+38A564:lI116|H38A5AC
+38A5AC:lI105|H38A5F4
+38A5F4:lI111|H38A63C
+38A63C:lI110|H38A674
+38A674:lI47|H38A6AC
+38A6AC:lI101|H38A6D4
+38A6D4:lI98|H38A6EC
+38A6EC:lI105|H38A704
+38A704:lI110|N
+38B0B0:lH388D74|H38B0B8
+388D74:lI47|H388E84
+388E84:lI99|H388F94
+388F94:lI108|H3890AC
+3890AC:lI101|H3891BC
+3891BC:lI97|H3892CC
+3892CC:lI114|H3893DC
+3893DC:lI99|H3894EC
+3894EC:lI97|H3895F4
+3895F4:lI115|H3896EC
+3896EC:lI101|H3897E4
+3897E4:lI47|H3898DC
+3898DC:lI111|H3899D4
+3899D4:lI116|H389AB4
+389AB4:lI112|H389B8C
+389B8C:lI47|H389C54
+389C54:lI101|H389D1C
+389D1C:lI114|H389DE4
+389DE4:lI116|H389E9C
+389E9C:lI115|H389F4C
+389F4C:lI47|H389FEC
+389FEC:lI108|H38A07C
+38A07C:lI105|H38A0FC
+38A0FC:lI98|H38A16C
+38A16C:lI47|H38A1DC
+38A1DC:lI99|H38A244
+38A244:lI111|H38A2AC
+38A2AC:lI115|H38A314
+38A314:lI70|H38A37C
+38A37C:lI105|H38A3E4
+38A3E4:lI108|H38A43C
+38A43C:lI101|H38A48C
+38A48C:lI84|H38A4DC
+38A4DC:lI114|H38A524
+38A524:lI97|H38A56C
+38A56C:lI110|H38A5B4
+38A5B4:lI115|H38A5FC
+38A5FC:lI102|H38A644
+38A644:lI101|H38A67C
+38A67C:lI114|H38A6B4
+38A6B4:lI47|H38A6DC
+38A6DC:lI101|H38A6F4
+38A6F4:lI98|H38A70C
+38A70C:lI105|H38A71C
+38A71C:lI110|N
+38B0B8:lH388E8C|H38B0C0
+388E8C:lI47|H388F9C
+388F9C:lI99|H3890B4
+3890B4:lI108|H3891C4
+3891C4:lI101|H3892D4
+3892D4:lI97|H3893E4
+3893E4:lI114|H3894F4
+3894F4:lI99|H3895FC
+3895FC:lI97|H3896F4
+3896F4:lI115|H3897EC
+3897EC:lI101|H3898E4
+3898E4:lI47|H3899DC
+3899DC:lI111|H389ABC
+389ABC:lI116|H389B94
+389B94:lI112|H389C5C
+389C5C:lI47|H389D24
+389D24:lI101|H389DEC
+389DEC:lI114|H389EA4
+389EA4:lI116|H389F54
+389F54:lI115|H389FF4
+389FF4:lI47|H38A084
+38A084:lI108|H38A104
+38A104:lI105|H38A174
+38A174:lI98|H38A1E4
+38A1E4:lI47|H38A24C
+38A24C:lI99|H38A2B4
+38A2B4:lI111|H38A31C
+38A31C:lI115|H38A384
+38A384:lI69|H38A3EC
+38A3EC:lI118|H38A444
+38A444:lI101|H38A494
+38A494:lI110|H38A4E4
+38A4E4:lI116|H38A52C
+38A52C:lI68|H38A574
+38A574:lI111|H38A5BC
+38A5BC:lI109|H38A604
+38A604:lI97|H38A64C
+38A64C:lI105|H38A684
+38A684:lI110|H38A6BC
+38A6BC:lI47|H38A6E4
+38A6E4:lI101|H38A6FC
+38A6FC:lI98|H38A714
+38A714:lI105|H38A724
+38A724:lI110|N
+38B0C0:lH388FA4|H38B0C8
+388FA4:lI47|H3890BC
+3890BC:lI99|H3891CC
+3891CC:lI108|H3892DC
+3892DC:lI101|H3893EC
+3893EC:lI97|H3894FC
+3894FC:lI114|H389604
+389604:lI99|H3896FC
+3896FC:lI97|H3897F4
+3897F4:lI115|H3898EC
+3898EC:lI101|H3899E4
+3899E4:lI47|H389AC4
+389AC4:lI111|H389B9C
+389B9C:lI116|H389C64
+389C64:lI112|H389D2C
+389D2C:lI47|H389DF4
+389DF4:lI101|H389EAC
+389EAC:lI114|H389F5C
+389F5C:lI116|H389FFC
+389FFC:lI115|H38A08C
+38A08C:lI47|H38A10C
+38A10C:lI108|H38A17C
+38A17C:lI105|H38A1EC
+38A1EC:lI98|H38A254
+38A254:lI47|H38A2BC
+38A2BC:lI99|H38A324
+38A324:lI111|H38A38C
+38A38C:lI115|H38A3F4
+38A3F4:lI69|H38A44C
+38A44C:lI118|H38A49C
+38A49C:lI101|H38A4EC
+38A4EC:lI110|H38A534
+38A534:lI116|H38A57C
+38A57C:lI47|H38A5C4
+38A5C4:lI101|H38A60C
+38A60C:lI98|H38A654
+38A654:lI105|H38A68C
+38A68C:lI110|N
+38B0C8:lH3890C4|H38B0D0
+3890C4:lI47|H3891D4
+3891D4:lI99|H3892E4
+3892E4:lI108|H3893F4
+3893F4:lI101|H389504
+389504:lI97|H38960C
+38960C:lI114|H389704
+389704:lI99|H3897FC
+3897FC:lI97|H3898F4
+3898F4:lI115|H3899EC
+3899EC:lI101|H389ACC
+389ACC:lI47|H389BA4
+389BA4:lI111|H389C6C
+389C6C:lI116|H389D34
+389D34:lI112|H389DFC
+389DFC:lI47|H389EB4
+389EB4:lI101|H389F64
+389F64:lI114|H38A004
+38A004:lI116|H38A094
+38A094:lI115|H38A114
+38A114:lI47|H38A184
+38A184:lI108|H38A1F4
+38A1F4:lI105|H38A25C
+38A25C:lI98|H38A2C4
+38A2C4:lI47|H38A32C
+38A32C:lI99|H38A394
+38A394:lI111|H38A3FC
+38A3FC:lI109|H38A454
+38A454:lI112|H38A4A4
+38A4A4:lI105|H38A4F4
+38A4F4:lI108|H38A53C
+38A53C:lI101|H38A584
+38A584:lI114|H38A5CC
+38A5CC:lI47|H38A614
+38A614:lI101|H38A65C
+38A65C:lI98|H38A694
+38A694:lI105|H38A6C4
+38A6C4:lI110|N
+38B0D0:lH3891DC|H38B0D8
+3891DC:lI47|H3892EC
+3892EC:lI99|H3893FC
+3893FC:lI108|H38950C
+38950C:lI101|H389614
+389614:lI97|H38970C
+38970C:lI114|H389804
+389804:lI99|H3898FC
+3898FC:lI97|H3899F4
+3899F4:lI115|H389AD4
+389AD4:lI101|H389BAC
+389BAC:lI47|H389C74
+389C74:lI111|H389D3C
+389D3C:lI116|H389E04
+389E04:lI112|H389EBC
+389EBC:lI47|H389F6C
+389F6C:lI101|H38A00C
+38A00C:lI114|H38A09C
+38A09C:lI116|H38A11C
+38A11C:lI115|H38A18C
+38A18C:lI47|H38A1FC
+38A1FC:lI108|H38A264
+38A264:lI105|H38A2CC
+38A2CC:lI98|H38A334
+38A334:lI47|H38A39C
+38A39C:lI97|H38A404
+38A404:lI115|H38A45C
+38A45C:lI110|H38A4AC
+38A4AC:lI49|H38A4FC
+38A4FC:lI47|H38A544
+38A544:lI101|H38A58C
+38A58C:lI98|H38A5D4
+38A5D4:lI105|H38A61C
+38A61C:lI110|N
+38B0D8:lH3892F4|H38B0E0
+3892F4:lI47|H389404
+389404:lI99|H389514
+389514:lI108|H38961C
+38961C:lI101|H389714
+389714:lI97|H38980C
+38980C:lI114|H389904
+389904:lI99|H3899FC
+3899FC:lI97|H389ADC
+389ADC:lI115|H389BB4
+389BB4:lI101|H389C7C
+389C7C:lI47|H389D44
+389D44:lI111|H389E0C
+389E0C:lI116|H389EC4
+389EC4:lI112|H389F74
+389F74:lI47|H38A014
+38A014:lI101|H38A0A4
+38A0A4:lI114|H38A124
+38A124:lI116|H38A194
+38A194:lI115|H38A204
+38A204:lI47|H38A26C
+38A26C:lI108|H38A2D4
+38A2D4:lI105|H38A33C
+38A33C:lI98|H38A3A4
+38A3A4:lI47|H38A40C
+38A40C:lI97|H38A464
+38A464:lI112|H38A4B4
+38A4B4:lI112|H38A504
+38A504:lI109|H38A54C
+38A54C:lI111|H38A594
+38A594:lI110|H38A5DC
+38A5DC:lI47|H38A624
+38A624:lI101|H38A664
+38A664:lI98|H38A69C
+38A69C:lI105|H38A6CC
+38A6CC:lI110|N
+38B0E0:lH38AA88|H38B0E8
+38AA88:lI47|H38AA90
+38AA90:lI104|H38AA98
+38AA98:lI111|H38AAA0
+38AAA0:lI109|H38AAA8
+38AAA8:lI101|H38AAB0
+38AAB0:lI47|H38AAB8
+38AAB8:lI115|H38AAC0
+38AAC0:lI105|H38AAC8
+38AAC8:lI114|H38AAD0
+38AAD0:lI105|H38AAD8
+38AAD8:lI47|H38AAE0
+38AAE0:lI101|H38AAE8
+38AAE8:lI114|H38AAF0
+38AAF0:lI108|H38AAF8
+38AAF8:lI97|H38AB00
+38AB00:lI110|H38AB08
+38AB08:lI103|N
+38B0E8:lH38AB1C|H38B0F0
+38AB1C:lI47|H38AB2C
+38AB2C:lI104|H38AB4C
+38AB4C:lI111|H38AB74
+38AB74:lI109|H38ABA4
+38ABA4:lI101|H38ABC4
+38ABC4:lI47|H38ABE4
+38ABE4:lI115|H38AC04
+38AC04:lI105|H38AC24
+38AC24:lI114|H38AC3C
+38AC3C:lI105|H38AC44
+38AC44:lI47|H38AC4C
+38AC4C:lI116|H38AC54
+38AC54:lI111|H38AC5C
+38AC5C:lI111|H38AC64
+38AC64:lI108|H38AC6C
+38AC6C:lI115|H38AC74
+38AC74:lI47|H38AC7C
+38AC7C:lI100|H38AC84
+38AC84:lI105|H38AC8C
+38AC8C:lI115|H38AC94
+38AC94:lI116|H38AC9C
+38AC9C:lI101|H38ACA4
+38ACA4:lI108|H38ACAC
+38ACAC:lI47|H38ACB4
+38ACB4:lI101|H38ACBC
+38ACBC:lI98|H38ACC4
+38ACC4:lI105|H38ACCC
+38ACCC:lI110|N
+38B0F0:lH38B0F8|N
+38B0F8:lI47|H38B100
+38B100:lI104|H38B108
+38B108:lI111|H38B110
+38B110:lI109|H38B118
+38B118:lI101|H38B120
+38B120:lI47|H38B128
+38B128:lI115|H38B130
+38B130:lI105|H38B138
+38B138:lI114|H38B140
+38B140:lI105|H38B148
+38B148:lI47|H38B150
+38B150:lI79|H38B158
+38B158:lI84|H38B160
+38B160:lI80|H38B168
+38B168:lI47|H38B170
+38B170:lI103|H38B178
+38B178:lI112|H38B180
+38B180:lI114|H38B188
+38B188:lI115|H38B190
+38B190:lI95|H38B198
+38B198:lI116|H38B1A0
+38B1A0:lI114|H38B1A8
+38B1A8:lI97|H38B1B0
+38B1B0:lI99|H38B1B8
+38B1B8:lI101|H38B1C0
+38B1C0:lI47|H38B1C8
+38B1C8:lI106|H38B1D0
+38B1D0:lI97|H38B1D8
+38B1D8:lI110|N
+3873BC:lI47|H3873CC
+3873CC:lI99|H3873E4
+3873E4:lI108|H3873FC
+3873FC:lI101|H38741C
+38741C:lI97|H387444
+387444:lI114|H387474
+387474:lI99|H3874AC
+3874AC:lI97|H3874EC
+3874EC:lI115|H387534
+387534:lI101|H387584
+387584:lI47|H3875DC
+3875DC:lI111|H38763C
+38763C:lI116|H3876A4
+3876A4:lI112|H387714
+387714:lI47|H38778C
+38778C:lI101|H38780C
+38780C:lI114|H387894
+387894:lI116|H387924
+387924:lI115|N
+=proc_dictionary:<0.19.0>
+H370244
+H370250
+=proc_stack:<0.19.0>
+36b45c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A11:supervisor_bridge
+y3:H36B17C
+y4:P<0.19.0>
+y5:P<0.9.0>
+36b478:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H37025C
+=proc_heap:<0.19.0>
+36B17C:t5:A5:state,A8:user_sup,P<0.21.0>,P<0.21.0>,H370238
+370238:t2:P<0.19.0>,A8:user_sup
+37025C:lAA:gen_server|H37027C
+37027C:lP<0.9.0>|H37028C
+37028C:lP<0.9.0>|H370294
+370294:lA11:supervisor_bridge|H37029C
+37029C:lH3702A4|H3702AC
+3702A4:lA8:user_sup|H3702B4
+3702B4:lN|H3702BC
+3702BC:lA4:self|N
+3702AC:lN|N
+370244:t2:AD:$initial_call,H370264
+370264:t3:A3:gen,A7:init_it,H37025C
+370250:t2:AA:$ancestors,H370274
+370274:lAA:kernel_sup|H370284
+370284:lP<0.8.0>|N
+=proc_dictionary:<0.20.0>
+H36F8A8
+=proc_stack:<0.20.0>
+36a714:SReturn addr 0x156F90 (<terminate process normally>)
+y0:N
+y1:N
+y2:H36F8C4
+y3:P<0.21.0>
+y4:P<0.22.0>
+y5:p<0.72>
+y6:p<0.72>
+=proc_heap:<0.20.0>
+36F8C4:t4:I3,I2,P<0.22.0>,H36F8F0
+36F8F0:lH36F900|H36F910
+36F900:t3:I1,P<0.21.0>,H36F920
+36F920:t0:
+36F910:lH36F924|N
+36F924:t3:I2,P<0.22.0>,H36F93C
+36F93C:t3:A5:shell,A5:start,N
+36F8A8:t2:A3:eof,A5:false
+=proc_dictionary:<0.21.0>
+H3709DC
+H3709D0
+H3709F8
+=proc_stack:<0.21.0>
+370d1c:SReturn addr 0x156F90 (<terminate process normally>)
+y0:N
+y1:A9:undefined
+y2:P<0.20.0>
+=proc_heap:<0.21.0>
+3709DC:t2:AB:line_buffer,N
+3709D0:t2:AB:kill_buffer,N
+3709F8:t2:A9:read_mode,A4:list
+=proc_dictionary:<0.22.0>
+H370D44
+H370D60
+H370D7C
+H370D38
+=proc_stack:<0.22.0>
+374a88:SReturn addr 0x2CE718 (group:get_chars_loop/7 + 80)
+y0:N
+y1:N
+y2:A8:infinity
+y3:H374A00
+y4:P<0.20.0>
+y5:H374A28
+374aa4:SReturn addr 0x2CDC18 (group:io_request/5 + 48)
+y0:H37499C
+y1:A6:io_lib
+y2:A9:get_until
+y3:H3748B8
+y4:P<0.20.0>
+y5:A5:start
+374ac0:SReturn addr 0x2CDB2C (group:server_loop/3 + 372)
+y0:P<0.49.0>
+y1:P<0.22.0>
+374acc:SReturn addr 0x156F90 (<terminate process normally>)
+y0:N
+y1:P<0.25.0>
+y2:P<0.20.0>
+=proc_heap:<0.22.0>
+374A00:t4:A4:line,H37499C,H3749A4,A4:none
+3749A4:t2:N,N
+37499C:lI50|H374994
+374994:lI62|H37498C
+37498C:lI32|N
+374A28:t4:A5:stack,H370D58,H374A24,N
+374A24:t0:
+370D58:lH370D74|N
+370D74:lI99|H370D88
+370D88:lI114|H370D90
+370D90:lI97|H370D98
+370D98:lI115|H370DA0
+370DA0:lI104|H370DA8
+370DA8:lI100|H370DB0
+370DB0:lI117|H370DB8
+370DB8:lI109|H370DC0
+370DC0:lI112|H370DC8
+370DC8:lI95|H370DD0
+370DD0:lI118|H370DD8
+370DD8:lI105|H370DE0
+370DE0:lI101|H370DE8
+370DE8:lI119|H370DF0
+370DF0:lI101|H370DF8
+370DF8:lI114|H370E00
+370E00:lI58|H370E08
+370E08:lI115|H370E10
+370E10:lI116|H370E18
+370E18:lI97|H370E20
+370E20:lI114|H370E28
+370E28:lI116|H370E30
+370E30:lI40|H370E38
+370E38:lI41|H370E40
+370E40:lI46|H370E48
+370E48:lI10|N
+3748B8:t3:A8:erl_scan,A6:tokens,H3748B0
+3748B0:lI1|N
+370D44:t2:AB:line_buffer,H370D58
+370D60:t2:A5:shell,P<0.25.0>
+370D7C:t2:AB:kill_buffer,N
+370D38:t2:A9:read_mode,A4:list
+=proc_dictionary:<0.23.0>
+H376464
+H376448
+=proc_stack:<0.23.0>
+376754:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AD:kernel_config
+y3:N
+y4:P<0.23.0>
+y5:P<0.9.0>
+376770:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H376418
+=proc_heap:<0.23.0>
+376418:lAA:gen_server|H376410
+376410:lP<0.9.0>|H376408
+376408:lP<0.9.0>|H376400
+376400:lAD:kernel_config|H3763F8
+3763F8:lN|H3763F0
+3763F0:lN|N
+376464:t2:AD:$initial_call,H376454
+376454:t3:A3:gen,A7:init_it,H376418
+376448:t2:AA:$ancestors,H376440
+376440:lAA:kernel_sup|H376420
+376420:lP<0.8.0>|N
+=proc_dictionary:<0.24.0>
+H3705E0
+H3705EC
+=proc_stack:<0.24.0>
+36f38c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AA:supervisor
+y3:H36F018
+y4:AF:kernel_safe_sup
+y5:P<0.9.0>
+36f3a8:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H37063C
+=proc_heap:<0.24.0>
+36F018:tA:A5:state,H370644,AB:one_for_one,H36F044,N,I4,I3600,N,A6:kernel,A4:safe
+36F044:lH36F04C|N
+36F04C:t8:A5:child,P<0.31.0>,A17:inet_gethost_native_sup,H370650,A9:temporary,I1000,A6:worker,H370660
+370660:lA13:inet_gethost_native|N
+370650:t3:A13:inet_gethost_native,AA:start_link,N
+370644:t2:A5:local,AF:kernel_safe_sup
+37063C:lAA:gen_server|H3706AC
+3706AC:lP<0.9.0>|H3706BC
+3706BC:lP<0.9.0>|H3706C4
+3706C4:lH3706CC|H3706D8
+3706CC:t2:A5:local,AF:kernel_safe_sup
+3706D8:lAA:supervisor|H3706E0
+3706E0:lH3706E8|H3706F8
+3706E8:t3:H370644,A6:kernel,A4:safe
+3706F8:lN|N
+3705E0:t2:AD:$initial_call,H370668
+370668:t3:A3:gen,A7:init_it,H37063C
+3705EC:t2:AA:$ancestors,H370678
+370678:lAA:kernel_sup|H3706B4
+3706B4:lP<0.8.0>|N
+=proc_dictionary:<0.25.0>
+H36E304
+H36E31C
+=proc_stack:<0.25.0>
+36e610:SReturn addr 0x2E06FC (shell:server_loop/6 + 140)
+y0:N
+y1:N
+y2:P<0.27.0>
+y3:P<0.49.0>
+36e624:SReturn addr 0x156F90 (<terminate process normally>)
+y0:N
+y1:N
+y2:I2
+y3:I1
+y4:N
+y5:N
+y6:N
+y7:I20
+y8:I20
+=proc_heap:<0.25.0>
+36E304:t2:H36E2F8,H36E2A8
+36E2A8:lH36E2B0|N
+36E2B0:t4:A4:call,I1,H36E2C4,N
+36E2C4:t4:A6:remote,I1,H36E2D8,H36E2E8
+36E2E8:t3:A4:atom,I1,A5:start
+36E2D8:t3:A4:atom,I1,A10:crashdump_viewer
+36E2F8:t2:A7:command,I1
+36E31C:t2:H36E310,A2:ok
+36E310:t2:A6:result,I1
+=proc_stack:<0.27.0>
+3bda3c:SReturn addr 0x156F90 (<terminate process normally>)
+y0:N
+y1:N
+y2:P<0.25.0>
+=proc_heap:<0.27.0>
+=proc_dictionary:<0.31.0>
+H36DA24
+H36DA08
+=proc_stack:<0.31.0>
+36dcd4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A11:supervisor_bridge
+y3:H36DB68
+y4:A17:inet_gethost_native_sup
+y5:P<0.24.0>
+36dcf0:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H36D9D0
+=proc_heap:<0.31.0>
+36DB68:t5:A5:state,A13:inet_gethost_native,P<0.32.0>,P<0.32.0>,H36D994
+36D994:t2:A5:local,A17:inet_gethost_native_sup
+36D9D0:lAA:gen_server|H36D9C8
+36D9C8:lP<0.24.0>|H36D9C0
+36D9C0:lP<0.24.0>|H36D970
+36D970:lH36D980|H36D9B8
+36D980:t2:A5:local,A17:inet_gethost_native_sup
+36D9B8:lA11:supervisor_bridge|H36D978
+36D978:lH36D9A8|H36D9B0
+36D9A8:lA13:inet_gethost_native|H36D9A0
+36D9A0:lN|H36D98C
+36D98C:lH36D994|N
+36D9B0:lN|N
+36DA24:t2:AD:$initial_call,H36DA14
+36DA14:t3:A3:gen,A7:init_it,H36D9D0
+36DA08:t2:AA:$ancestors,H36DA00
+36DA00:lAF:kernel_safe_sup|H36D9E0
+36D9E0:lAA:kernel_sup|H36D9D8
+36D9D8:lP<0.8.0>|N
+=proc_dictionary:<0.32.0>
+H36CFD4
+H36D0BC
+=proc_stack:<0.32.0>
+36d12c:SReturn addr 0x156F90 (<terminate process normally>)
+y0:H36CF18
+=proc_heap:<0.32.0>
+36CF18:t8:A5:state,p<0.105>,I8000,I11,I12,P<0.31.0>,I4,H36CEF0
+36CEF0:t9:AA:statistics,I0,I0,I0,I0,I0,I0,I0,I0
+36CFD4:t2:A3:rid,I1
+36D0BC:t2:AC:num_requests,I0
+=proc_dictionary:<0.33.0>
+H3905C4
+H3905D0
+=proc_stack:<0.33.0>
+3ceee4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A7:webtool
+y3:H3C8570
+y4:A8:web_tool
+y5:P<0.33.0>
+3cef00:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H3905FC
+=proc_heap:<0.33.0>
+3C8570:t6:A5:state,H3905EC,I13,P<0.41.0>,H3905F4,H3C85D4
+3C85D4:lA10:crashdump_viewer|N
+3905F4:lH390650|H39065C
+390650:t2:A4:port,I8888
+39065C:lH3906C8|H3906D4
+3906C8:t2:AC:bind_address,H390760
+390760:t4:I127,I0,I0,I1
+3906D4:lH390774|H390780
+390774:t2:AB:server_name,H39082C
+39082C:lI108|H390908
+390908:lI111|H3909DC
+3909DC:lI99|H390AC0
+390AC0:lI97|H390B98
+390B98:lI108|H390C78
+390C78:lI104|H390D58
+390D58:lI111|H390E2C
+390E2C:lI115|H390F10
+390F10:lI116|N
+390780:lH390834|H390840
+390834:t2:AE:max_header_siz,I1024
+390840:lH390910|H39091C
+390910:t2:A11:max_header_action,A8:reply414
+39091C:lH3909E4|H3909F0
+3909E4:t2:A8:com_type,A7:ip_comm
+3909F0:lH390AC8|H390AD4
+390AC8:t2:A7:modules,H390BA0
+390BA0:lA9:mod_alias|H390C80
+390C80:lA8:mod_auth|H390D60
+390D60:lA7:mod_esi|H390E34
+390E34:lAB:mod_actions|H390F18
+390F18:lA7:mod_cgi|H390FF4
+390FF4:lAB:mod_include|H3910D8
+3910D8:lA7:mod_dir|H3911B4
+3911B4:lA7:mod_get|H3912A0
+3912A0:lA8:mod_head|H39139C
+39139C:lA7:mod_log|H3914A0
+3914A0:lAC:mod_disk_log|N
+390AD4:lH390BA8|H390BB4
+390BA8:t2:AF:directory_index,H390C88
+390C88:lH390D68|N
+390D68:lI105|H390E3C
+390E3C:lI110|H390F20
+390F20:lI100|H390FFC
+390FFC:lI101|H3910E0
+3910E0:lI120|H3911BC
+3911BC:lI46|H3912A8
+3912A8:lI104|H3913A4
+3913A4:lI116|H3914A8
+3914A8:lI109|H39159C
+39159C:lI108|N
+390BB4:lH390C90|N
+390C90:t2:AC:default_type,H390D70
+390D70:lI116|H390E44
+390E44:lI101|H390F28
+390F28:lI120|H391004
+391004:lI116|H3910E8
+3910E8:lI47|H3911C4
+3911C4:lI112|H3912B0
+3912B0:lI108|H3913AC
+3913AC:lI97|H3914B0
+3914B0:lI105|H3915A4
+3915A4:lI110|N
+3905EC:lI47|H390648
+390648:lI99|H3906C0
+3906C0:lI108|H390758
+390758:lI101|H390824
+390824:lI97|H390900
+390900:lI114|H3909D4
+3909D4:lI99|H390AB8
+390AB8:lI97|H390B90
+390B90:lI115|H390C70
+390C70:lI101|H390D50
+390D50:lI47|H390E24
+390E24:lI111|H390F08
+390F08:lI116|H390FEC
+390FEC:lI112|H3910D0
+3910D0:lI47|H3911AC
+3911AC:lI101|H391298
+391298:lI114|H391394
+391394:lI116|H391498
+391498:lI115|H391594
+391594:lI47|H391680
+391680:lI108|H39175C
+39175C:lI105|H391840
+391840:lI98|H391924
+391924:lI47|H3919F8
+3919F8:lI119|H391AC4
+391AC4:lI101|H391B90
+391B90:lI98|H391C54
+391C54:lI116|H391D18
+391D18:lI111|H391DD4
+391DD4:lI111|H391E90
+391E90:lI108|H391F5C
+391F5C:lI47|H392030
+392030:lI112|H3920EC
+3920EC:lI114|H3921A8
+3921A8:lI105|H392264
+392264:lI118|N
+3905FC:lAA:gen_server|H390664
+390664:lP<0.27.0>|H3906DC
+3906DC:lA4:self|H390788
+390788:lH390848|H390854
+390848:t2:A5:local,A8:web_tool
+390854:lA7:webtool|H390924
+390924:lH3909F8|H390A04
+3909F8:t2:H3905EC,H3905F4
+390A04:lN|N
+3905C4:t2:AD:$initial_call,H390614
+390614:t3:A3:gen,A7:init_it,H3905FC
+3905D0:t2:AA:$ancestors,H390624
+390624:lP<0.27.0>|N
+=proc_dictionary:<0.41.0>
+H36DF0C
+H36DF18
+=proc_stack:<0.41.0>
+36eda4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AA:supervisor
+y3:H36EA3C
+y4:A6:websup
+y5:P<0.33.0>
+36edc0:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H36DF24
+=proc_heap:<0.41.0>
+36EA3C:tA:A5:state,H36DF2C,AB:one_for_one,H36EA68,N,I100,I10,N,AB:webtool_sup,N
+36EA68:lH36EA70|N
+36EA70:t8:A5:child,P<0.48.0>,H36DF38,H36DF44,A9:permanent,I100,A6:worker,H36DF54
+36DF54:lA10:crashdump_viewer|N
+36DF44:t3:A10:crashdump_viewer,AA:start_link,N
+36DF38:t2:A5:local,A17:crashdump_viewer_server
+36DF2C:t2:A5:local,A6:websup
+36DF24:lAA:gen_server|H36DF84
+36DF84:lP<0.33.0>|H36DF94
+36DF94:lP<0.33.0>|H36DF9C
+36DF9C:lH36DFA4|H36DFB0
+36DFA4:t2:A5:local,A6:websup
+36DFB0:lAA:supervisor|H36DFB8
+36DFB8:lH36DFC0|H36DFD0
+36DFC0:t3:H36DF2C,AB:webtool_sup,N
+36DFD0:lN|N
+36DF0C:t2:AD:$initial_call,H36DF6C
+36DF6C:t3:A3:gen,A7:init_it,H36DF24
+36DF18:t2:AA:$ancestors,H36DF7C
+36DF7C:lA8:web_tool|H36DF8C
+36DF8C:lP<0.27.0>|N
+=proc_dictionary:<0.43.0>
+H39D940
+H39D94C
+=proc_stack:<0.43.0>
+3a42ac:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AA:supervisor
+y3:H3A3E34
+y4:A1A:httpd_sup__127_0_0_1__8888
+y5:P<0.33.0>
+3a42c8:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H39D9CC
+=proc_heap:<0.43.0>
+3A3E34:tA:A5:state,H39D960,AB:one_for_one,H3A3E20,N,I0,I1,N,A9:httpd_sup,H39DA88
+39DA88:lA9:undefined|H39DB18
+39DB18:lH39DB50|H39DB58
+39DB50:lH39DB88|H39DB94
+39DB88:t2:AB:server_root,H39DBD0
+39DBD0:lI47|H39DC0C
+39DC0C:lI99|H39DC50
+39DC50:lI108|H39DC84
+39DC84:lI101|H39DCC4
+39DCC4:lI97|H39DD28
+39DD28:lI114|H39DD90
+39DD90:lI99|H39DE00
+39DE00:lI97|H39DE78
+39DE78:lI115|H39DF00
+39DF00:lI101|H39DF90
+39DF90:lI47|H39E038
+39E038:lI111|H39E0E8
+39E0E8:lI116|H39E1AC
+39E1AC:lI112|H39E288
+39E288:lI47|H39E37C
+39E37C:lI101|H39E478
+39E478:lI114|H39E580
+39E580:lI116|H39E69C
+39E69C:lI115|H39E7B0
+39E7B0:lI47|H39E8C4
+39E8C4:lI108|H39E9D8
+39E9D8:lI105|H39EACC
+39EACC:lI98|H39EBC0
+39EBC0:lI47|H39ECB4
+39ECB4:lI119|H39EDA8
+39EDA8:lI101|H39EE7C
+39EE7C:lI98|H39EF50
+39EF50:lI116|H39F02C
+39F02C:lI111|H39F110
+39F110:lI111|H39F1E4
+39F1E4:lI108|H39F2B0
+39F2B0:lI47|H39F36C
+39F36C:lI112|H39F430
+39F430:lI114|H39F4FC
+39F4FC:lI105|H39F5C0
+39F5C0:lI118|H39F694
+39F694:lI47|H39F768
+39F768:lI114|H39F83C
+39F83C:lI111|H39F920
+39F920:lI111|H39F9FC
+39F9FC:lI116|N
+39DB94:lH39DBD8|H39DBE4
+39DBD8:t2:AD:document_root,H39DC14
+39DC14:lI47|H39DC58
+39DC58:lI99|H39DC8C
+39DC8C:lI108|H39DCCC
+39DCCC:lI101|H39DD30
+39DD30:lI97|H39DD98
+39DD98:lI114|H39DE08
+39DE08:lI99|H39DE80
+39DE80:lI97|H39DF08
+39DF08:lI115|H39DF98
+39DF98:lI101|H39E040
+39E040:lI47|H39E0F0
+39E0F0:lI111|H39E1B4
+39E1B4:lI116|H39E290
+39E290:lI112|H39E384
+39E384:lI47|H39E480
+39E480:lI101|H39E588
+39E588:lI114|H39E6A4
+39E6A4:lI116|H39E7B8
+39E7B8:lI115|H39E8CC
+39E8CC:lI47|H39E9E0
+39E9E0:lI108|H39EAD4
+39EAD4:lI105|H39EBC8
+39EBC8:lI98|H39ECBC
+39ECBC:lI47|H39EDB0
+39EDB0:lI119|H39EE84
+39EE84:lI101|H39EF58
+39EF58:lI98|H39F034
+39F034:lI116|H39F118
+39F118:lI111|H39F1EC
+39F1EC:lI111|H39F2B8
+39F2B8:lI108|H39F374
+39F374:lI47|H39F438
+39F438:lI112|H39F504
+39F504:lI114|H39F5C8
+39F5C8:lI105|H39F69C
+39F69C:lI118|H39F770
+39F770:lI47|H39F844
+39F844:lI114|H39F928
+39F928:lI111|H39FA04
+39FA04:lI111|H39FAD8
+39FAD8:lI116|H39FBB4
+39FBB4:lI47|H39FC80
+39FC80:lI100|H39FD44
+39FD44:lI111|H39FE10
+39FE10:lI99|N
+39DBE4:lH39DC1C|H39DC28
+39DC1C:t2:AA:mime_types,H39DC60
+39DC60:lH39DC94|H39DCA0
+39DC94:t2:H39DCD4,H39DCDC
+39DCDC:lI120|H39DD40
+39DD40:lI45|H39DDA8
+39DDA8:lI119|H39DE10
+39DE10:lI111|H39DE88
+39DE88:lI114|H39DF10
+39DF10:lI108|H39DFA0
+39DFA0:lI100|H39E048
+39E048:lI47|H39E0F8
+39E0F8:lI120|H39E1BC
+39E1BC:lI45|H39E298
+39E298:lI118|H39E38C
+39E38C:lI114|H39E488
+39E488:lI109|H39E590
+39E590:lI108|N
+39DCD4:lI119|H39DD38
+39DD38:lI114|H39DDA0
+39DDA0:lI108|N
+39DCA0:lH39DCE4|H39DCF0
+39DCE4:t2:H39DD48,H39DD50
+39DD50:lI120|H39DDB8
+39DDB8:lI45|H39DE20
+39DE20:lI119|H39DE98
+39DE98:lI111|H39DF18
+39DF18:lI114|H39DFA8
+39DFA8:lI108|H39E050
+39E050:lI100|H39E100
+39E100:lI47|H39E1C4
+39E1C4:lI120|H39E2A0
+39E2A0:lI45|H39E394
+39E394:lI118|H39E490
+39E490:lI114|H39E598
+39E598:lI109|H39E6AC
+39E6AC:lI108|N
+39DD48:lI118|H39DDB0
+39DDB0:lI114|H39DE18
+39DE18:lI109|H39DE90
+39DE90:lI108|N
+39DCF0:lH39DD58|H39DD64
+39DD58:t2:H39DDC0,H39DDC8
+39DDC8:lI120|H39DE30
+39DE30:lI45|H39DEA8
+39DEA8:lI99|H39DF20
+39DF20:lI111|H39DFB0
+39DFB0:lI110|H39E058
+39E058:lI102|H39E108
+39E108:lI101|H39E1CC
+39E1CC:lI114|H39E2A8
+39E2A8:lI101|H39E39C
+39E39C:lI110|H39E498
+39E498:lI99|H39E5A0
+39E5A0:lI101|H39E6B4
+39E6B4:lI47|H39E7C0
+39E7C0:lI120|H39E8D4
+39E8D4:lI45|H39E9E8
+39E9E8:lI99|H39EADC
+39EADC:lI111|H39EBD0
+39EBD0:lI111|H39ECC4
+39ECC4:lI108|H39EDB8
+39EDB8:lI116|H39EE8C
+39EE8C:lI97|H39EF60
+39EF60:lI108|H39F03C
+39F03C:lI107|N
+39DDC0:lI105|H39DE28
+39DE28:lI99|H39DEA0
+39DEA0:lI101|N
+39DD64:lH39DDD0|H39DDDC
+39DDD0:t2:H39DE38,H39DE40
+39DE40:lI118|H39DEB8
+39DEB8:lI105|H39DF30
+39DF30:lI100|H39DFC0
+39DFC0:lI101|H39E068
+39E068:lI111|H39E110
+39E110:lI47|H39E1D4
+39E1D4:lI120|H39E2B0
+39E2B0:lI45|H39E3A4
+39E3A4:lI115|H39E4A0
+39E4A0:lI103|H39E5A8
+39E5A8:lI105|H39E6BC
+39E6BC:lI45|H39E7C8
+39E7C8:lI109|H39E8DC
+39E8DC:lI111|H39E9F0
+39E9F0:lI118|H39EAE4
+39EAE4:lI105|H39EBD8
+39EBD8:lI101|N
+39DE38:lI109|H39DEB0
+39DEB0:lI111|H39DF28
+39DF28:lI118|H39DFB8
+39DFB8:lI105|H39E060
+39E060:lI101|N
+39DDDC:lH39DE48|H39DE54
+39DE48:t2:H39DEC0,H39DEC8
+39DEC8:lI118|H39DF40
+39DF40:lI105|H39DFD0
+39DFD0:lI100|H39E070
+39E070:lI101|H39E118
+39E118:lI111|H39E1DC
+39E1DC:lI47|H39E2B8
+39E2B8:lI120|H39E3AC
+39E3AC:lI45|H39E4A8
+39E4A8:lI109|H39E5B0
+39E5B0:lI115|H39E6C4
+39E6C4:lI118|H39E7D0
+39E7D0:lI105|H39E8E4
+39E8E4:lI100|H39E9F8
+39E9F8:lI101|H39EAEC
+39EAEC:lI111|N
+39DEC0:lI97|H39DF38
+39DF38:lI118|H39DFC8
+39DFC8:lI105|N
+39DE54:lH39DED0|H39DEDC
+39DED0:t2:H39DF48,H39DF50
+39DF50:lI118|H39DFE0
+39DFE0:lI105|H39E078
+39E078:lI100|H39E120
+39E120:lI101|H39E1E4
+39E1E4:lI111|H39E2C0
+39E2C0:lI47|H39E3B4
+39E3B4:lI113|H39E4B0
+39E4B0:lI117|H39E5B8
+39E5B8:lI105|H39E6CC
+39E6CC:lI99|H39E7D8
+39E7D8:lI107|H39E8EC
+39E8EC:lI116|H39EA00
+39EA00:lI105|H39EAF4
+39EAF4:lI109|H39EBE0
+39EBE0:lI101|N
+39DF48:lI113|H39DFD8
+39DFD8:lI116|N
+39DEDC:lH39DF58|H39DF64
+39DF58:t2:H39DFE8,H39DFF0
+39DFF0:lI118|H39E088
+39E088:lI105|H39E130
+39E130:lI100|H39E1EC
+39E1EC:lI101|H39E2C8
+39E2C8:lI111|H39E3BC
+39E3BC:lI47|H39E4B8
+39E4B8:lI113|H39E5C0
+39E5C0:lI117|H39E6D4
+39E6D4:lI105|H39E7E0
+39E7E0:lI99|H39E8F4
+39E8F4:lI107|H39EA08
+39EA08:lI116|H39EAFC
+39EAFC:lI105|H39EBE8
+39EBE8:lI109|H39ECCC
+39ECCC:lI101|N
+39DFE8:lI109|H39E080
+39E080:lI111|H39E128
+39E128:lI118|N
+39DF64:lH39DFF8|H39E004
+39DFF8:t2:H39E090,H39E098
+39E098:lI118|H39E140
+39E140:lI105|H39E1FC
+39E1FC:lI100|H39E2D8
+39E2D8:lI101|H39E3C4
+39E3C4:lI111|H39E4C0
+39E4C0:lI47|H39E5C8
+39E5C8:lI109|H39E6DC
+39E6DC:lI112|H39E7E8
+39E7E8:lI101|H39E8FC
+39E8FC:lI103|N
+39E090:lI109|H39E138
+39E138:lI112|H39E1F4
+39E1F4:lI101|H39E2D0
+39E2D0:lI103|N
+39E004:lH39E0A0|H39E0AC
+39E0A0:t2:H39E148,H39E150
+39E150:lI118|H39E20C
+39E20C:lI105|H39E2E8
+39E2E8:lI100|H39E3CC
+39E3CC:lI101|H39E4C8
+39E4C8:lI111|H39E5D0
+39E5D0:lI47|H39E6E4
+39E6E4:lI109|H39E7F0
+39E7F0:lI112|H39E904
+39E904:lI101|H39EA10
+39EA10:lI103|N
+39E148:lI109|H39E204
+39E204:lI112|H39E2E0
+39E2E0:lI103|N
+39E0AC:lH39E158|H39E164
+39E158:t2:H39E214,H39E21C
+39E21C:lI118|H39E2F8
+39E2F8:lI105|H39E3DC
+39E3DC:lI100|H39E4D0
+39E4D0:lI101|H39E5D8
+39E5D8:lI111|H39E6EC
+39E6EC:lI47|H39E7F8
+39E7F8:lI109|H39E90C
+39E90C:lI112|H39EA18
+39EA18:lI101|H39EB04
+39EB04:lI103|N
+39E214:lI109|H39E2F0
+39E2F0:lI112|H39E3D4
+39E3D4:lI101|N
+39E164:lH39E224|H39E230
+39E224:t2:H39E300,H39E308
+39E308:lI116|H39E3EC
+39E3EC:lI101|H39E4E0
+39E4E0:lI120|H39E5E8
+39E5E8:lI116|H39E6F4
+39E6F4:lI47|H39E800
+39E800:lI120|H39E914
+39E914:lI45|H39EA20
+39EA20:lI115|H39EB0C
+39EB0C:lI103|H39EBF0
+39EBF0:lI109|H39ECD4
+39ECD4:lI108|N
+39E300:lI115|H39E3E4
+39E3E4:lI103|H39E4D8
+39E4D8:lI109|H39E5E0
+39E5E0:lI108|N
+39E230:lH39E310|H39E31C
+39E310:t2:H39E3F4,H39E3FC
+39E3FC:lI116|H39E4F0
+39E4F0:lI101|H39E5F8
+39E5F8:lI120|H39E6FC
+39E6FC:lI116|H39E808
+39E808:lI47|H39E91C
+39E91C:lI120|H39EA28
+39EA28:lI45|H39EB14
+39EB14:lI115|H39EBF8
+39EBF8:lI103|H39ECDC
+39ECDC:lI109|H39EDC0
+39EDC0:lI108|N
+39E3F4:lI115|H39E4E8
+39E4E8:lI103|H39E5F0
+39E5F0:lI109|N
+39E31C:lH39E404|H39E410
+39E404:t2:H39E4F8,H39E500
+39E500:lI116|H39E608
+39E608:lI101|H39E70C
+39E70C:lI120|H39E810
+39E810:lI116|H39E924
+39E924:lI47|H39EA30
+39EA30:lI120|H39EB1C
+39EB1C:lI45|H39EC00
+39EC00:lI115|H39ECE4
+39ECE4:lI101|H39EDC8
+39EDC8:lI116|H39EE94
+39EE94:lI101|H39EF68
+39EF68:lI120|H39F044
+39F044:lI116|N
+39E4F8:lI101|H39E600
+39E600:lI116|H39E704
+39E704:lI120|N
+39E410:lH39E508|H39E514
+39E508:t2:H39E610,H39E618
+39E618:lI116|H39E71C
+39E71C:lI101|H39E820
+39E820:lI120|H39E92C
+39E92C:lI116|H39EA38
+39EA38:lI47|H39EB24
+39EB24:lI116|H39EC08
+39EC08:lI97|H39ECEC
+39ECEC:lI98|H39EDD0
+39EDD0:lI45|H39EE9C
+39EE9C:lI115|H39EF70
+39EF70:lI101|H39F04C
+39F04C:lI112|H39F120
+39F120:lI97|H39F1F4
+39F1F4:lI114|H39F2C0
+39F2C0:lI97|H39F37C
+39F37C:lI116|H39F440
+39F440:lI101|H39F50C
+39F50C:lI100|H39F5D0
+39F5D0:lI45|H39F6A4
+39F6A4:lI118|H39F778
+39F778:lI97|H39F84C
+39F84C:lI108|H39F930
+39F930:lI117|H39FA0C
+39FA0C:lI101|H39FAE0
+39FAE0:lI115|N
+39E610:lI116|H39E714
+39E714:lI115|H39E818
+39E818:lI118|N
+39E514:lH39E620|H39E62C
+39E620:t2:H39E724,H39E72C
+39E72C:lI116|H39E830
+39E830:lI101|H39E93C
+39E93C:lI120|H39EA40
+39EA40:lI116|H39EB2C
+39EB2C:lI47|H39EC10
+39EC10:lI114|H39ECF4
+39ECF4:lI105|H39EDD8
+39EDD8:lI99|H39EEA4
+39EEA4:lI104|H39EF78
+39EF78:lI116|H39F054
+39F054:lI101|H39F128
+39F128:lI120|H39F1FC
+39F1FC:lI116|N
+39E724:lI114|H39E828
+39E828:lI116|H39E934
+39E934:lI120|N
+39E62C:lH39E734|H39E740
+39E734:t2:H39E838,H39E840
+39E840:lI116|H39E94C
+39E94C:lI101|H39EA50
+39EA50:lI120|H39EB34
+39EB34:lI116|H39EC18
+39EC18:lI47|H39ECFC
+39ECFC:lI112|H39EDE0
+39EDE0:lI108|H39EEAC
+39EEAC:lI97|H39EF80
+39EF80:lI105|H39F05C
+39F05C:lI110|N
+39E838:lI116|H39E944
+39E944:lI120|H39EA48
+39EA48:lI116|N
+39E740:lH39E848|H39E854
+39E848:t2:H39E954,H39E95C
+39E95C:lI116|H39EA60
+39EA60:lI101|H39EB44
+39EB44:lI120|H39EC28
+39EC28:lI116|H39ED0C
+39ED0C:lI47|H39EDE8
+39EDE8:lI120|H39EEB4
+39EEB4:lI45|H39EF88
+39EF88:lI115|H39F064
+39F064:lI101|H39F130
+39F130:lI114|H39F204
+39F204:lI118|H39F2C8
+39F2C8:lI101|H39F384
+39F384:lI114|H39F448
+39F448:lI45|H39F514
+39F514:lI112|H39F5D8
+39F5D8:lI97|H39F6AC
+39F6AC:lI114|H39F780
+39F780:lI115|H39F854
+39F854:lI101|H39F938
+39F938:lI100|H39FA14
+39FA14:lI45|H39FAE8
+39FAE8:lI104|H39FBBC
+39FBBC:lI116|H39FC88
+39FC88:lI109|H39FD4C
+39FD4C:lI108|N
+39E954:lI115|H39EA58
+39EA58:lI104|H39EB3C
+39EB3C:lI116|H39EC20
+39EC20:lI109|H39ED04
+39ED04:lI108|N
+39E854:lH39E964|H39E970
+39E964:t2:H39EA68,H39EA70
+39EA70:lI116|H39EB54
+39EB54:lI101|H39EC38
+39EC38:lI120|H39ED1C
+39ED1C:lI116|H39EDF0
+39EDF0:lI47|H39EEBC
+39EEBC:lI104|H39EF90
+39EF90:lI116|H39F06C
+39F06C:lI109|H39F138
+39F138:lI108|N
+39EA68:lI104|H39EB4C
+39EB4C:lI116|H39EC30
+39EC30:lI109|H39ED14
+39ED14:lI108|N
+39E970:lH39EA78|H39EA84
+39EA78:t2:H39EB5C,H39EB64
+39EB64:lI116|H39EC48
+39EC48:lI101|H39ED2C
+39ED2C:lI120|H39EDF8
+39EDF8:lI116|H39EEC4
+39EEC4:lI47|H39EF98
+39EF98:lI104|H39F074
+39F074:lI116|H39F140
+39F140:lI109|H39F20C
+39F20C:lI108|N
+39EB5C:lI104|H39EC40
+39EC40:lI116|H39ED24
+39ED24:lI109|N
+39EA84:lH39EB6C|H39EB78
+39EB6C:t2:H39EC50,H39EC58
+39EC58:lI105|H39ED3C
+39ED3C:lI109|H39EE08
+39EE08:lI97|H39EECC
+39EECC:lI103|H39EFA0
+39EFA0:lI101|H39F07C
+39F07C:lI47|H39F148
+39F148:lI120|H39F214
+39F214:lI45|H39F2D0
+39F2D0:lI120|H39F38C
+39F38C:lI119|H39F450
+39F450:lI105|H39F51C
+39F51C:lI110|H39F5E0
+39F5E0:lI100|H39F6B4
+39F6B4:lI111|H39F788
+39F788:lI119|H39F85C
+39F85C:lI100|H39F940
+39F940:lI117|H39FA1C
+39FA1C:lI109|H39FAF0
+39FAF0:lI112|N
+39EC50:lI120|H39ED34
+39ED34:lI119|H39EE00
+39EE00:lI100|N
+39EB78:lH39EC60|H39EC6C
+39EC60:t2:H39ED44,H39ED4C
+39ED4C:lI105|H39EE18
+39EE18:lI109|H39EEDC
+39EEDC:lI97|H39EFA8
+39EFA8:lI103|H39F084
+39F084:lI101|H39F150
+39F150:lI47|H39F21C
+39F21C:lI120|H39F2D8
+39F2D8:lI45|H39F394
+39F394:lI120|H39F458
+39F458:lI112|H39F524
+39F524:lI105|H39F5E8
+39F5E8:lI120|H39F6BC
+39F6BC:lI109|H39F790
+39F790:lI97|H39F864
+39F864:lI112|N
+39ED44:lI120|H39EE10
+39EE10:lI112|H39EED4
+39EED4:lI109|N
+39EC6C:lH39ED54|H39ED60
+39ED54:t2:H39EE20,H39EE28
+39EE28:lI105|H39EEEC
+39EEEC:lI109|H39EFB8
+39EFB8:lI97|H39F08C
+39F08C:lI103|H39F158
+39F158:lI101|H39F224
+39F224:lI47|H39F2E0
+39F2E0:lI120|H39F39C
+39F39C:lI45|H39F460
+39F460:lI120|H39F52C
+39F52C:lI98|H39F5F0
+39F5F0:lI105|H39F6C4
+39F6C4:lI116|H39F798
+39F798:lI109|H39F86C
+39F86C:lI97|H39F948
+39F948:lI112|N
+39EE20:lI120|H39EEE4
+39EEE4:lI98|H39EFB0
+39EFB0:lI109|N
+39ED60:lH39EE30|H39EE3C
+39EE30:t2:H39EEF4,H39EEFC
+39EEFC:lI105|H39EFC8
+39EFC8:lI109|H39F09C
+39F09C:lI97|H39F160
+39F160:lI103|H39F22C
+39F22C:lI101|H39F2E8
+39F2E8:lI47|H39F3A4
+39F3A4:lI120|H39F468
+39F468:lI45|H39F534
+39F534:lI114|H39F5F8
+39F5F8:lI103|H39F6CC
+39F6CC:lI98|N
+39EEF4:lI114|H39EFC0
+39EFC0:lI103|H39F094
+39F094:lI98|N
+39EE3C:lH39EF04|H39EF10
+39EF04:t2:H39EFD0,H39EFD8
+39EFD8:lI105|H39F0AC
+39F0AC:lI109|H39F170
+39F170:lI97|H39F234
+39F234:lI103|H39F2F0
+39F2F0:lI101|H39F3AC
+39F3AC:lI47|H39F470
+39F470:lI120|H39F53C
+39F53C:lI45|H39F600
+39F600:lI112|H39F6D4
+39F6D4:lI111|H39F7A0
+39F7A0:lI114|H39F874
+39F874:lI116|H39F950
+39F950:lI97|H39FA24
+39FA24:lI98|H39FAF8
+39FAF8:lI108|H39FBC4
+39FBC4:lI101|H39FC90
+39FC90:lI45|H39FD54
+39FD54:lI112|H39FE18
+39FE18:lI105|H39FECC
+39FECC:lI120|H39FF88
+39FF88:lI109|H3A003C
+3A003C:lI97|H3A00E8
+3A00E8:lI112|N
+39EFD0:lI112|H39F0A4
+39F0A4:lI112|H39F168
+39F168:lI109|N
+39EF10:lH39EFE0|H39EFEC
+39EFE0:t2:H39F0B4,H39F0BC
+39F0BC:lI105|H39F180
+39F180:lI109|H39F244
+39F244:lI97|H39F2F8
+39F2F8:lI103|H39F3B4
+39F3B4:lI101|H39F478
+39F478:lI47|H39F544
+39F544:lI120|H39F608
+39F608:lI45|H39F6DC
+39F6DC:lI112|H39F7A8
+39F7A8:lI111|H39F87C
+39F87C:lI114|H39F958
+39F958:lI116|H39FA2C
+39FA2C:lI97|H39FB00
+39FB00:lI98|H39FBCC
+39FBCC:lI108|H39FC98
+39FC98:lI101|H39FD5C
+39FD5C:lI45|H39FE20
+39FE20:lI103|H39FED4
+39FED4:lI114|H39FF90
+39FF90:lI97|H3A0044
+3A0044:lI121|H3A00F0
+3A00F0:lI109|H3A0194
+3A0194:lI97|H3A0248
+3A0248:lI112|N
+39F0B4:lI112|H39F178
+39F178:lI103|H39F23C
+39F23C:lI109|N
+39EFEC:lH39F0C4|H39F0D0
+39F0C4:t2:H39F188,H39F190
+39F190:lI105|H39F254
+39F254:lI109|H39F308
+39F308:lI97|H39F3BC
+39F3BC:lI103|H39F480
+39F480:lI101|H39F54C
+39F54C:lI47|H39F610
+39F610:lI120|H39F6E4
+39F6E4:lI45|H39F7B0
+39F7B0:lI112|H39F884
+39F884:lI111|H39F960
+39F960:lI114|H39FA34
+39FA34:lI116|H39FB08
+39FB08:lI97|H39FBD4
+39FBD4:lI98|H39FCA0
+39FCA0:lI108|H39FD64
+39FD64:lI101|H39FE28
+39FE28:lI45|H39FEDC
+39FEDC:lI98|H39FF98
+39FF98:lI105|H3A004C
+3A004C:lI116|H3A00F8
+3A00F8:lI109|H3A019C
+3A019C:lI97|H3A0250
+3A0250:lI112|N
+39F188:lI112|H39F24C
+39F24C:lI98|H39F300
+39F300:lI109|N
+39F0D0:lH39F198|H39F1A4
+39F198:t2:H39F25C,H39F264
+39F264:lI105|H39F318
+39F318:lI109|H39F3CC
+39F3CC:lI97|H39F488
+39F488:lI103|H39F554
+39F554:lI101|H39F618
+39F618:lI47|H39F6EC
+39F6EC:lI120|H39F7B8
+39F7B8:lI45|H39F88C
+39F88C:lI112|H39F968
+39F968:lI111|H39FA3C
+39FA3C:lI114|H39FB10
+39FB10:lI116|H39FBDC
+39FBDC:lI97|H39FCA8
+39FCA8:lI98|H39FD6C
+39FD6C:lI108|H39FE30
+39FE30:lI101|H39FEE4
+39FEE4:lI45|H39FFA0
+39FFA0:lI97|H3A0054
+3A0054:lI110|H3A0100
+3A0100:lI121|H3A01A4
+3A01A4:lI109|H3A0258
+3A0258:lI97|H3A0304
+3A0304:lI112|N
+39F25C:lI112|H39F310
+39F310:lI110|H39F3C4
+39F3C4:lI109|N
+39F1A4:lH39F26C|H39F278
+39F26C:t2:H39F320,H39F328
+39F328:lI105|H39F3DC
+39F3DC:lI109|H39F498
+39F498:lI97|H39F55C
+39F55C:lI103|H39F620
+39F620:lI101|H39F6F4
+39F6F4:lI47|H39F7C0
+39F7C0:lI120|H39F894
+39F894:lI45|H39F970
+39F970:lI99|H39FA44
+39FA44:lI109|H39FB18
+39FB18:lI117|H39FBE4
+39FBE4:lI45|H39FCB0
+39FCB0:lI114|H39FD74
+39FD74:lI97|H39FE38
+39FE38:lI115|H39FEEC
+39FEEC:lI116|H39FFA8
+39FFA8:lI101|H3A005C
+3A005C:lI114|N
+39F320:lI114|H39F3D4
+39F3D4:lI97|H39F490
+39F490:lI115|N
+39F278:lH39F330|H39F33C
+39F330:t2:H39F3E4,H39F3EC
+39F3EC:lI105|H39F4A8
+39F4A8:lI109|H39F56C
+39F56C:lI97|H39F630
+39F630:lI103|H39F6FC
+39F6FC:lI101|H39F7C8
+39F7C8:lI47|H39F89C
+39F89C:lI116|H39F978
+39F978:lI105|H39FA4C
+39FA4C:lI102|H39FB20
+39FB20:lI102|N
+39F3E4:lI116|H39F4A0
+39F4A0:lI105|H39F564
+39F564:lI102|H39F628
+39F628:lI102|N
+39F33C:lH39F3F4|H39F400
+39F3F4:t2:H39F4B0,H39F4B8
+39F4B8:lI105|H39F57C
+39F57C:lI109|H39F640
+39F640:lI97|H39F704
+39F704:lI103|H39F7D0
+39F7D0:lI101|H39F8A4
+39F8A4:lI47|H39F980
+39F980:lI116|H39FA54
+39FA54:lI105|H39FB28
+39FB28:lI102|H39FBEC
+39FBEC:lI102|N
+39F4B0:lI116|H39F574
+39F574:lI105|H39F638
+39F638:lI102|N
+39F400:lH39F4C0|H39F4CC
+39F4C0:t2:H39F584,H39F58C
+39F58C:lI105|H39F650
+39F650:lI109|H39F714
+39F714:lI97|H39F7D8
+39F7D8:lI103|H39F8AC
+39F8AC:lI101|H39F988
+39F988:lI47|H39FA5C
+39FA5C:lI112|H39FB30
+39FB30:lI110|H39FBF4
+39FBF4:lI103|N
+39F584:lI112|H39F648
+39F648:lI110|H39F70C
+39F70C:lI103|N
+39F4CC:lH39F594|H39F5A0
+39F594:t2:H39F658,H39F660
+39F660:lI105|H39F724
+39F724:lI109|H39F7E8
+39F7E8:lI97|H39F8BC
+39F8BC:lI103|H39F990
+39F990:lI101|H39FA64
+39FA64:lI47|H39FB38
+39FB38:lI106|H39FBFC
+39FBFC:lI112|H39FCB8
+39FCB8:lI101|H39FD7C
+39FD7C:lI103|N
+39F658:lI106|H39F71C
+39F71C:lI112|H39F7E0
+39F7E0:lI101|H39F8B4
+39F8B4:lI103|N
+39F5A0:lH39F668|H39F674
+39F668:t2:H39F72C,H39F734
+39F734:lI105|H39F7F8
+39F7F8:lI109|H39F8CC
+39F8CC:lI97|H39F998
+39F998:lI103|H39FA6C
+39FA6C:lI101|H39FB40
+39FB40:lI47|H39FC04
+39FC04:lI106|H39FCC0
+39FCC0:lI112|H39FD84
+39FD84:lI101|H39FE40
+39FE40:lI103|N
+39F72C:lI106|H39F7F0
+39F7F0:lI112|H39F8C4
+39F8C4:lI103|N
+39F674:lH39F73C|H39F748
+39F73C:t2:H39F800,H39F808
+39F808:lI105|H39F8DC
+39F8DC:lI109|H39F9A8
+39F9A8:lI97|H39FA74
+39FA74:lI103|H39FB48
+39FB48:lI101|H39FC0C
+39FC0C:lI47|H39FCC8
+39FCC8:lI106|H39FD8C
+39FD8C:lI112|H39FE48
+39FE48:lI101|H39FEF4
+39FEF4:lI103|N
+39F800:lI106|H39F8D4
+39F8D4:lI112|H39F9A0
+39F9A0:lI101|N
+39F748:lH39F810|H39F81C
+39F810:t2:H39F8E4,H39F8EC
+39F8EC:lI105|H39F9B8
+39F9B8:lI109|H39FA84
+39FA84:lI97|H39FB50
+39FB50:lI103|H39FC14
+39FC14:lI101|H39FCD0
+39FCD0:lI47|H39FD94
+39FD94:lI105|H39FE50
+39FE50:lI101|H39FEFC
+39FEFC:lI102|N
+39F8E4:lI105|H39F9B0
+39F9B0:lI101|H39FA7C
+39FA7C:lI102|N
+39F81C:lH39F8F4|H39F900
+39F8F4:t2:H39F9C0,H39F9C8
+39F9C8:lI105|H39FA94
+39FA94:lI109|H39FB60
+39FB60:lI97|H39FC1C
+39FC1C:lI103|H39FCD8
+39FCD8:lI101|H39FD9C
+39FD9C:lI47|H39FE58
+39FE58:lI103|H39FF04
+39FF04:lI105|H39FFB0
+39FFB0:lI102|N
+39F9C0:lI103|H39FA8C
+39FA8C:lI105|H39FB58
+39FB58:lI102|N
+39F900:lH39F9D0|H39F9DC
+39F9D0:t2:H39FA9C,H39FAA4
+39FAA4:lI99|H39FB70
+39FB70:lI104|H39FC2C
+39FC2C:lI101|H39FCE0
+39FCE0:lI109|H39FDA4
+39FDA4:lI105|H39FE60
+39FE60:lI99|H39FF0C
+39FF0C:lI97|H39FFB8
+39FFB8:lI108|H3A0064
+3A0064:lI47|H3A0108
+3A0108:lI120|H3A01AC
+3A01AC:lI45|H3A0260
+3A0260:lI112|H3A030C
+3A030C:lI100|H3A03B8
+3A03B8:lI98|N
+39FA9C:lI112|H39FB68
+39FB68:lI100|H39FC24
+39FC24:lI98|N
+39F9DC:lH39FAAC|H39FAB8
+39FAAC:t2:H39FB78,H39FB80
+39FB80:lI99|H39FC3C
+39FC3C:lI104|H39FCF0
+39FCF0:lI101|H39FDAC
+39FDAC:lI109|H39FE68
+39FE68:lI105|H39FF14
+39FF14:lI99|H39FFC0
+39FFC0:lI97|H3A006C
+3A006C:lI108|H3A0110
+3A0110:lI47|H3A01B4
+3A01B4:lI120|H3A0268
+3A0268:lI45|H3A0314
+3A0314:lI112|H3A03C0
+3A03C0:lI100|H3A0454
+3A0454:lI98|N
+39FB78:lI120|H39FC34
+39FC34:lI121|H39FCE8
+39FCE8:lI122|N
+39FAB8:lH39FB88|H39FB94
+39FB88:t2:H39FC44,H39FC4C
+39FC4C:lI97|H39FD00
+39FD00:lI117|H39FDBC
+39FDBC:lI100|H39FE70
+39FE70:lI105|H39FF1C
+39FF1C:lI111|H39FFC8
+39FFC8:lI47|H3A0074
+3A0074:lI120|H3A0118
+3A0118:lI45|H3A01BC
+3A01BC:lI119|H3A0270
+3A0270:lI97|H3A031C
+3A031C:lI118|N
+39FC44:lI119|H39FCF8
+39FCF8:lI97|H39FDB4
+39FDB4:lI118|N
+39FB94:lH39FC54|H39FC60
+39FC54:t2:H39FD08,H39FD10
+39FD10:lI97|H39FDCC
+39FDCC:lI117|H39FE78
+39FE78:lI100|H39FF24
+39FF24:lI105|H39FFD0
+39FFD0:lI111|H3A007C
+3A007C:lI47|H3A0120
+3A0120:lI120|H3A01C4
+3A01C4:lI45|H3A0278
+3A0278:lI114|H3A0324
+3A0324:lI101|H3A03C8
+3A03C8:lI97|H3A045C
+3A045C:lI108|H3A04F8
+3A04F8:lI97|H3A059C
+3A059C:lI117|H3A0648
+3A0648:lI100|H3A06F4
+3A06F4:lI105|H3A07A0
+3A07A0:lI111|N
+39FD08:lI114|H39FDC4
+39FDC4:lI97|N
+39FC60:lH39FD18|H39FD24
+39FD18:t2:H39FDD4,H39FDDC
+39FDDC:lI97|H39FE88
+39FE88:lI117|H39FF34
+39FF34:lI100|H39FFD8
+39FFD8:lI105|H3A0084
+3A0084:lI111|H3A0128
+3A0128:lI47|H3A01CC
+3A01CC:lI120|H3A0280
+3A0280:lI45|H3A032C
+3A032C:lI112|H3A03D0
+3A03D0:lI110|H3A0464
+3A0464:lI45|H3A0500
+3A0500:lI114|H3A05A4
+3A05A4:lI101|H3A0650
+3A0650:lI97|H3A06FC
+3A06FC:lI108|H3A07A8
+3A07A8:lI97|H3A0844
+3A0844:lI117|H3A08D0
+3A08D0:lI100|H3A0964
+3A0964:lI105|H3A09F8
+3A09F8:lI111|H3A0A94
+3A0A94:lI45|H3A0B40
+3A0B40:lI112|H3A0BEC
+3A0BEC:lI108|H3A0CA8
+3A0CA8:lI117|H3A0D64
+3A0D64:lI103|H3A0E18
+3A0E18:lI105|H3A0ECC
+3A0ECC:lI110|N
+39FDD4:lI114|H39FE80
+39FE80:lI112|H39FF2C
+39FF2C:lI109|N
+39FD24:lH39FDE4|H39FDF0
+39FDE4:t2:H39FE90,H39FE98
+39FE98:lI97|H39FF44
+39FF44:lI117|H39FFE8
+39FFE8:lI100|H3A008C
+3A008C:lI105|H3A0130
+3A0130:lI111|H3A01D4
+3A01D4:lI47|H3A0288
+3A0288:lI120|H3A0334
+3A0334:lI45|H3A03D8
+3A03D8:lI112|H3A046C
+3A046C:lI110|H3A0508
+3A0508:lI45|H3A05AC
+3A05AC:lI114|H3A0658
+3A0658:lI101|H3A0704
+3A0704:lI97|H3A07B0
+3A07B0:lI108|H3A084C
+3A084C:lI97|H3A08D8
+3A08D8:lI117|H3A096C
+3A096C:lI100|H3A0A00
+3A0A00:lI105|H3A0A9C
+3A0A9C:lI111|N
+39FE90:lI114|H39FF3C
+39FF3C:lI97|H39FFE0
+39FFE0:lI109|N
+39FDF0:lH39FEA0|H39FEAC
+39FEA0:t2:H39FF4C,H39FF54
+39FF54:lI97|H39FFF8
+39FFF8:lI117|H3A009C
+3A009C:lI100|H3A0138
+3A0138:lI105|H3A01DC
+3A01DC:lI111|H3A0290
+3A0290:lI47|H3A033C
+3A033C:lI120|H3A03E0
+3A03E0:lI45|H3A0474
+3A0474:lI97|H3A0510
+3A0510:lI105|H3A05B4
+3A05B4:lI102|H3A0660
+3A0660:lI102|N
+39FF4C:lI97|H39FFF0
+39FFF0:lI105|H3A0094
+3A0094:lI102|N
+39FEAC:lH39FF5C|H39FF68
+39FF5C:t2:H3A0000,H3A0008
+3A0008:lI97|H3A00AC
+3A00AC:lI117|H3A0148
+3A0148:lI100|H3A01EC
+3A01EC:lI105|H3A0298
+3A0298:lI111|H3A0344
+3A0344:lI47|H3A03E8
+3A03E8:lI120|H3A047C
+3A047C:lI45|H3A0518
+3A0518:lI97|H3A05BC
+3A05BC:lI105|H3A0668
+3A0668:lI102|H3A070C
+3A070C:lI102|N
+3A0000:lI97|H3A00A4
+3A00A4:lI105|H3A0140
+3A0140:lI102|H3A01E4
+3A01E4:lI102|N
+39FF68:lH3A0010|H3A001C
+3A0010:t2:H3A00B4,H3A00BC
+3A00BC:lI97|H3A0158
+3A0158:lI117|H3A01FC
+3A01FC:lI100|H3A02A8
+3A02A8:lI105|H3A034C
+3A034C:lI111|H3A03F0
+3A03F0:lI47|H3A0484
+3A0484:lI120|H3A0520
+3A0520:lI45|H3A05C4
+3A05C4:lI97|H3A0670
+3A0670:lI105|H3A0714
+3A0714:lI102|H3A07B8
+3A07B8:lI102|N
+3A00B4:lI97|H3A0150
+3A0150:lI105|H3A01F4
+3A01F4:lI102|H3A02A0
+3A02A0:lI99|N
+3A001C:lH3A00C4|H3A00D0
+3A00C4:t2:H3A0160,H3A0168
+3A0168:lI97|H3A020C
+3A020C:lI117|H3A02B8
+3A02B8:lI100|H3A035C
+3A035C:lI105|H3A03F8
+3A03F8:lI111|H3A048C
+3A048C:lI47|H3A0528
+3A0528:lI109|H3A05CC
+3A05CC:lI112|H3A0678
+3A0678:lI101|H3A071C
+3A071C:lI103|N
+3A0160:lI109|H3A0204
+3A0204:lI112|H3A02B0
+3A02B0:lI103|H3A0354
+3A0354:lI97|N
+3A00D0:lH3A0170|H3A017C
+3A0170:t2:H3A0214,H3A021C
+3A021C:lI97|H3A02C8
+3A02C8:lI117|H3A036C
+3A036C:lI100|H3A0400
+3A0400:lI105|H3A0494
+3A0494:lI111|H3A0530
+3A0530:lI47|H3A05D4
+3A05D4:lI109|H3A0680
+3A0680:lI112|H3A0724
+3A0724:lI101|H3A07C0
+3A07C0:lI103|N
+3A0214:lI109|H3A02C0
+3A02C0:lI112|H3A0364
+3A0364:lI50|N
+3A017C:lH3A0224|H3A0230
+3A0224:t2:H3A02D0,H3A02D8
+3A02D8:lI97|H3A037C
+3A037C:lI117|H3A0408
+3A0408:lI100|H3A049C
+3A049C:lI105|H3A0538
+3A0538:lI111|H3A05DC
+3A05DC:lI47|H3A0688
+3A0688:lI98|H3A072C
+3A072C:lI97|H3A07C8
+3A07C8:lI115|H3A0854
+3A0854:lI105|H3A08E0
+3A08E0:lI99|N
+3A02D0:lI97|H3A0374
+3A0374:lI117|N
+3A0230:lH3A02E0|H3A02EC
+3A02E0:t2:H3A0384,H3A038C
+3A038C:lI97|H3A0418
+3A0418:lI117|H3A04AC
+3A04AC:lI100|H3A0540
+3A0540:lI105|H3A05E4
+3A05E4:lI111|H3A0690
+3A0690:lI47|H3A0734
+3A0734:lI98|H3A07D0
+3A07D0:lI97|H3A085C
+3A085C:lI115|H3A08E8
+3A08E8:lI105|H3A0974
+3A0974:lI99|N
+3A0384:lI115|H3A0410
+3A0410:lI110|H3A04A4
+3A04A4:lI100|N
+3A02EC:lH3A0394|H3A03A0
+3A0394:t2:H3A0420,H3A0428
+3A0428:lI97|H3A04BC
+3A04BC:lI112|H3A0550
+3A0550:lI112|H3A05EC
+3A05EC:lI108|H3A0698
+3A0698:lI105|H3A073C
+3A073C:lI99|H3A07D8
+3A07D8:lI97|H3A0864
+3A0864:lI116|H3A08F0
+3A08F0:lI105|H3A097C
+3A097C:lI111|H3A0A08
+3A0A08:lI110|H3A0AA4
+3A0AA4:lI47|H3A0B48
+3A0B48:lI122|H3A0BF4
+3A0BF4:lI105|H3A0CB0
+3A0CB0:lI112|N
+3A0420:lI122|H3A04B4
+3A04B4:lI105|H3A0548
+3A0548:lI112|N
+3A03A0:lH3A0430|H3A043C
+3A0430:t2:H3A04C4,H3A04CC
+3A04CC:lI97|H3A0560
+3A0560:lI112|H3A05FC
+3A05FC:lI112|H3A06A0
+3A06A0:lI108|H3A0744
+3A0744:lI105|H3A07E0
+3A07E0:lI99|H3A086C
+3A086C:lI97|H3A08F8
+3A08F8:lI116|H3A0984
+3A0984:lI105|H3A0A10
+3A0A10:lI111|H3A0AAC
+3A0AAC:lI110|H3A0B50
+3A0B50:lI47|H3A0BFC
+3A0BFC:lI120|H3A0CB8
+3A0CB8:lI45|H3A0D6C
+3A0D6C:lI119|H3A0E20
+3A0E20:lI97|H3A0ED4
+3A0ED4:lI105|H3A0F90
+3A0F90:lI115|H3A105C
+3A105C:lI45|H3A1130
+3A1130:lI115|H3A1204
+3A1204:lI111|H3A12D0
+3A12D0:lI117|H3A13A4
+3A13A4:lI114|H3A1480
+3A1480:lI99|H3A1564
+3A1564:lI101|N
+3A04C4:lI115|H3A0558
+3A0558:lI114|H3A05F4
+3A05F4:lI99|N
+3A043C:lH3A04D4|H3A04E0
+3A04D4:t2:H3A0568,H3A0570
+3A0570:lI97|H3A060C
+3A060C:lI112|H3A06B0
+3A06B0:lI112|H3A0754
+3A0754:lI108|H3A07F0
+3A07F0:lI105|H3A0874
+3A0874:lI99|H3A0900
+3A0900:lI97|H3A098C
+3A098C:lI116|H3A0A18
+3A0A18:lI105|H3A0AB4
+3A0AB4:lI111|H3A0B58
+3A0B58:lI110|H3A0C04
+3A0C04:lI47|H3A0CC0
+3A0CC0:lI120|H3A0D74
+3A0D74:lI45|H3A0E28
+3A0E28:lI117|H3A0EDC
+3A0EDC:lI115|H3A0F98
+3A0F98:lI116|H3A1064
+3A1064:lI97|H3A1138
+3A1138:lI114|N
+3A0568:lI117|H3A0604
+3A0604:lI115|H3A06A8
+3A06A8:lI116|H3A074C
+3A074C:lI97|H3A07E8
+3A07E8:lI114|N
+3A04E0:lH3A0578|H3A0584
+3A0578:t2:H3A0614,H3A061C
+3A061C:lI97|H3A06C0
+3A06C0:lI112|H3A075C
+3A075C:lI112|H3A07F8
+3A07F8:lI108|H3A087C
+3A087C:lI105|H3A0908
+3A0908:lI99|H3A0994
+3A0994:lI97|H3A0A20
+3A0A20:lI116|H3A0ABC
+3A0ABC:lI105|H3A0B60
+3A0B60:lI111|H3A0C0C
+3A0C0C:lI110|H3A0CC8
+3A0CC8:lI47|H3A0D7C
+3A0D7C:lI120|H3A0E30
+3A0E30:lI45|H3A0EE4
+3A0EE4:lI116|H3A0FA0
+3A0FA0:lI114|H3A106C
+3A106C:lI111|H3A1140
+3A1140:lI102|H3A120C
+3A120C:lI102|H3A12D8
+3A12D8:lI45|H3A13AC
+3A13AC:lI109|H3A1488
+3A1488:lI115|N
+3A0614:lI109|H3A06B8
+3A06B8:lI115|N
+3A0584:lH3A0624|H3A0630
+3A0624:t2:H3A06C8,H3A06D0
+3A06D0:lI97|H3A076C
+3A076C:lI112|H3A0800
+3A0800:lI112|H3A0884
+3A0884:lI108|H3A0910
+3A0910:lI105|H3A099C
+3A099C:lI99|H3A0A28
+3A0A28:lI97|H3A0AC4
+3A0AC4:lI116|H3A0B68
+3A0B68:lI105|H3A0C14
+3A0C14:lI111|H3A0CD0
+3A0CD0:lI110|H3A0D84
+3A0D84:lI47|H3A0E38
+3A0E38:lI120|H3A0EEC
+3A0EEC:lI45|H3A0FA8
+3A0FA8:lI116|H3A1074
+3A1074:lI114|H3A1148
+3A1148:lI111|H3A1214
+3A1214:lI102|H3A12E0
+3A12E0:lI102|H3A13B4
+3A13B4:lI45|H3A1490
+3A1490:lI109|H3A156C
+3A156C:lI101|N
+3A06C8:lI109|H3A0764
+3A0764:lI101|N
+3A0630:lH3A06D8|H3A06E4
+3A06D8:t2:H3A0774,H3A077C
+3A077C:lI97|H3A0810
+3A0810:lI112|H3A0894
+3A0894:lI112|H3A0918
+3A0918:lI108|H3A09A4
+3A09A4:lI105|H3A0A30
+3A0A30:lI99|H3A0ACC
+3A0ACC:lI97|H3A0B70
+3A0B70:lI116|H3A0C1C
+3A0C1C:lI105|H3A0CD8
+3A0CD8:lI111|H3A0D8C
+3A0D8C:lI110|H3A0E40
+3A0E40:lI47|H3A0EF4
+3A0EF4:lI120|H3A0FB0
+3A0FB0:lI45|H3A107C
+3A107C:lI116|H3A1150
+3A1150:lI114|H3A121C
+3A121C:lI111|H3A12E8
+3A12E8:lI102|H3A13BC
+3A13BC:lI102|H3A1498
+3A1498:lI45|H3A1574
+3A1574:lI109|H3A1648
+3A1648:lI97|H3A171C
+3A171C:lI110|N
+3A0774:lI109|H3A0808
+3A0808:lI97|H3A088C
+3A088C:lI110|N
+3A06E4:lH3A0784|H3A0790
+3A0784:t2:H3A0818,H3A0820
+3A0820:lI97|H3A089C
+3A089C:lI112|H3A0920
+3A0920:lI112|H3A09AC
+3A09AC:lI108|H3A0A38
+3A0A38:lI105|H3A0AD4
+3A0AD4:lI99|H3A0B78
+3A0B78:lI97|H3A0C24
+3A0C24:lI116|H3A0CE0
+3A0CE0:lI105|H3A0D94
+3A0D94:lI111|H3A0E48
+3A0E48:lI110|H3A0EFC
+3A0EFC:lI47|H3A0FB8
+3A0FB8:lI120|H3A1084
+3A1084:lI45|H3A1158
+3A1158:lI116|H3A1224
+3A1224:lI114|H3A12F0
+3A12F0:lI111|H3A13C4
+3A13C4:lI102|H3A14A0
+3A14A0:lI102|N
+3A0818:lI116|N
+3A0790:lH3A0828|H3A0834
+3A0828:t2:H3A08A4,H3A08AC
+3A08AC:lI97|H3A0930
+3A0930:lI112|H3A09B4
+3A09B4:lI112|H3A0A40
+3A0A40:lI108|H3A0ADC
+3A0ADC:lI105|H3A0B80
+3A0B80:lI99|H3A0C2C
+3A0C2C:lI97|H3A0CE8
+3A0CE8:lI116|H3A0D9C
+3A0D9C:lI105|H3A0E50
+3A0E50:lI111|H3A0F04
+3A0F04:lI110|H3A0FC0
+3A0FC0:lI47|H3A108C
+3A108C:lI120|H3A1160
+3A1160:lI45|H3A122C
+3A122C:lI116|H3A12F8
+3A12F8:lI114|H3A13CC
+3A13CC:lI111|H3A14A8
+3A14A8:lI102|H3A157C
+3A157C:lI102|N
+3A08A4:lI116|H3A0928
+3A0928:lI114|N
+3A0834:lH3A08B4|H3A08C0
+3A08B4:t2:H3A0938,H3A0940
+3A0940:lI97|H3A09C4
+3A09C4:lI112|H3A0A50
+3A0A50:lI112|H3A0AEC
+3A0AEC:lI108|H3A0B88
+3A0B88:lI105|H3A0C34
+3A0C34:lI99|H3A0CF0
+3A0CF0:lI97|H3A0DA4
+3A0DA4:lI116|H3A0E58
+3A0E58:lI105|H3A0F0C
+3A0F0C:lI111|H3A0FC8
+3A0FC8:lI110|H3A1094
+3A1094:lI47|H3A1168
+3A1168:lI120|H3A1234
+3A1234:lI45|H3A1300
+3A1300:lI116|H3A13D4
+3A13D4:lI114|H3A14B0
+3A14B0:lI111|H3A1584
+3A1584:lI102|H3A1650
+3A1650:lI102|N
+3A0938:lI114|H3A09BC
+3A09BC:lI111|H3A0A48
+3A0A48:lI102|H3A0AE4
+3A0AE4:lI102|N
+3A08C0:lH3A0948|H3A0954
+3A0948:t2:H3A09CC,H3A09D4
+3A09D4:lI97|H3A0A60
+3A0A60:lI112|H3A0AFC
+3A0AFC:lI112|H3A0B98
+3A0B98:lI108|H3A0C44
+3A0C44:lI105|H3A0D00
+3A0D00:lI99|H3A0DB4
+3A0DB4:lI97|H3A0E60
+3A0E60:lI116|H3A0F14
+3A0F14:lI105|H3A0FD0
+3A0FD0:lI111|H3A109C
+3A109C:lI110|H3A1170
+3A1170:lI47|H3A123C
+3A123C:lI120|H3A1308
+3A1308:lI45|H3A13DC
+3A13DC:lI116|H3A14B8
+3A14B8:lI101|H3A158C
+3A158C:lI120|H3A1658
+3A1658:lI105|H3A1724
+3A1724:lI110|H3A17E8
+3A17E8:lI102|H3A18AC
+3A18AC:lI111|N
+3A09CC:lI116|H3A0A58
+3A0A58:lI101|H3A0AF4
+3A0AF4:lI120|H3A0B90
+3A0B90:lI105|H3A0C3C
+3A0C3C:lI110|H3A0CF8
+3A0CF8:lI102|H3A0DAC
+3A0DAC:lI111|N
+3A0954:lH3A09DC|H3A09E8
+3A09DC:t2:H3A0A68,H3A0A70
+3A0A70:lI97|H3A0B0C
+3A0B0C:lI112|H3A0BA8
+3A0BA8:lI112|H3A0C54
+3A0C54:lI108|H3A0D08
+3A0D08:lI105|H3A0DBC
+3A0DBC:lI99|H3A0E68
+3A0E68:lI97|H3A0F1C
+3A0F1C:lI116|H3A0FD8
+3A0FD8:lI105|H3A10A4
+3A10A4:lI111|H3A1178
+3A1178:lI110|H3A1244
+3A1244:lI47|H3A1310
+3A1310:lI120|H3A13E4
+3A13E4:lI45|H3A14C0
+3A14C0:lI116|H3A1594
+3A1594:lI101|H3A1660
+3A1660:lI120|H3A172C
+3A172C:lI105|H3A17F0
+3A17F0:lI110|H3A18B4
+3A18B4:lI102|H3A1970
+3A1970:lI111|N
+3A0A68:lI116|H3A0B04
+3A0B04:lI101|H3A0BA0
+3A0BA0:lI120|H3A0C4C
+3A0C4C:lI105|N
+3A09E8:lH3A0A78|H3A0A84
+3A0A78:t2:H3A0B14,H3A0B1C
+3A0B1C:lI97|H3A0BB8
+3A0BB8:lI112|H3A0C64
+3A0C64:lI112|H3A0D10
+3A0D10:lI108|H3A0DC4
+3A0DC4:lI105|H3A0E70
+3A0E70:lI99|H3A0F24
+3A0F24:lI97|H3A0FE0
+3A0FE0:lI116|H3A10AC
+3A10AC:lI105|H3A1180
+3A1180:lI111|H3A124C
+3A124C:lI110|H3A1318
+3A1318:lI47|H3A13EC
+3A13EC:lI120|H3A14C8
+3A14C8:lI45|H3A159C
+3A159C:lI116|H3A1668
+3A1668:lI101|H3A1734
+3A1734:lI120|N
+3A0B14:lI116|H3A0BB0
+3A0BB0:lI101|H3A0C5C
+3A0C5C:lI120|N
+3A0A84:lH3A0B24|H3A0B30
+3A0B24:t2:H3A0BC0,H3A0BC8
+3A0BC8:lI97|H3A0C74
+3A0C74:lI112|H3A0D20
+3A0D20:lI112|H3A0DCC
+3A0DCC:lI108|H3A0E78
+3A0E78:lI105|H3A0F2C
+3A0F2C:lI99|H3A0FE8
+3A0FE8:lI97|H3A10B4
+3A10B4:lI116|H3A1188
+3A1188:lI105|H3A1254
+3A1254:lI111|H3A1320
+3A1320:lI110|H3A13F4
+3A13F4:lI47|H3A14D0
+3A14D0:lI120|H3A15A4
+3A15A4:lI45|H3A1670
+3A1670:lI116|H3A173C
+3A173C:lI99|H3A17F8
+3A17F8:lI108|N
+3A0BC0:lI116|H3A0C6C
+3A0C6C:lI99|H3A0D18
+3A0D18:lI108|N
+3A0B30:lH3A0BD0|H3A0BDC
+3A0BD0:t2:H3A0C7C,H3A0C84
+3A0C84:lI97|H3A0D30
+3A0D30:lI112|H3A0DDC
+3A0DDC:lI112|H3A0E80
+3A0E80:lI108|H3A0F34
+3A0F34:lI105|H3A0FF0
+3A0FF0:lI99|H3A10BC
+3A10BC:lI97|H3A1190
+3A1190:lI116|H3A125C
+3A125C:lI105|H3A1328
+3A1328:lI111|H3A13FC
+3A13FC:lI110|H3A14D8
+3A14D8:lI47|H3A15AC
+3A15AC:lI120|H3A1678
+3A1678:lI45|H3A1744
+3A1744:lI116|H3A1800
+3A1800:lI97|H3A18BC
+3A18BC:lI114|N
+3A0C7C:lI116|H3A0D28
+3A0D28:lI97|H3A0DD4
+3A0DD4:lI114|N
+3A0BDC:lH3A0C8C|H3A0C98
+3A0C8C:t2:H3A0D38,H3A0D40
+3A0D40:lI97|H3A0DEC
+3A0DEC:lI112|H3A0E90
+3A0E90:lI112|H3A0F44
+3A0F44:lI108|H3A1000
+3A1000:lI105|H3A10CC
+3A10CC:lI99|H3A1198
+3A1198:lI97|H3A1264
+3A1264:lI116|H3A1330
+3A1330:lI105|H3A1404
+3A1404:lI111|H3A14E0
+3A14E0:lI110|H3A15B4
+3A15B4:lI47|H3A1680
+3A1680:lI120|H3A174C
+3A174C:lI45|H3A1808
+3A1808:lI115|H3A18C4
+3A18C4:lI118|H3A1978
+3A1978:lI52|H3A1A2C
+3A1A2C:lI99|H3A1AE0
+3A1AE0:lI114|H3A1BA4
+3A1BA4:lI99|N
+3A0D38:lI115|H3A0DE4
+3A0DE4:lI118|H3A0E88
+3A0E88:lI52|H3A0F3C
+3A0F3C:lI99|H3A0FF8
+3A0FF8:lI114|H3A10C4
+3A10C4:lI99|N
+3A0C98:lH3A0D48|H3A0D54
+3A0D48:t2:H3A0DF4,H3A0DFC
+3A0DFC:lI97|H3A0EA0
+3A0EA0:lI112|H3A0F54
+3A0F54:lI112|H3A1010
+3A1010:lI108|H3A10DC
+3A10DC:lI105|H3A11A8
+3A11A8:lI99|H3A1274
+3A1274:lI97|H3A1338
+3A1338:lI116|H3A140C
+3A140C:lI105|H3A14E8
+3A14E8:lI111|H3A15BC
+3A15BC:lI110|H3A1688
+3A1688:lI47|H3A1754
+3A1754:lI120|H3A1810
+3A1810:lI45|H3A18CC
+3A18CC:lI115|H3A1980
+3A1980:lI118|H3A1A34
+3A1A34:lI52|H3A1AE8
+3A1AE8:lI99|H3A1BAC
+3A1BAC:lI112|H3A1C78
+3A1C78:lI105|H3A1D3C
+3A1D3C:lI111|N
+3A0DF4:lI115|H3A0E98
+3A0E98:lI118|H3A0F4C
+3A0F4C:lI52|H3A1008
+3A1008:lI99|H3A10D4
+3A10D4:lI112|H3A11A0
+3A11A0:lI105|H3A126C
+3A126C:lI111|N
+3A0D54:lH3A0E04|H3A0E10
+3A0E04:t2:H3A0EA8,H3A0EB0
+3A0EB0:lI97|H3A0F64
+3A0F64:lI112|H3A1020
+3A1020:lI112|H3A10E4
+3A10E4:lI108|H3A11B0
+3A11B0:lI105|H3A127C
+3A127C:lI99|H3A1340
+3A1340:lI97|H3A1414
+3A1414:lI116|H3A14F0
+3A14F0:lI105|H3A15C4
+3A15C4:lI111|H3A1690
+3A1690:lI110|H3A175C
+3A175C:lI47|H3A1818
+3A1818:lI120|H3A18D4
+3A18D4:lI45|H3A1988
+3A1988:lI115|H3A1A3C
+3A1A3C:lI116|H3A1AF0
+3A1AF0:lI117|H3A1BB4
+3A1BB4:lI102|H3A1C80
+3A1C80:lI102|H3A1D44
+3A1D44:lI105|H3A1E00
+3A1E00:lI116|N
+3A0EA8:lI115|H3A0F5C
+3A0F5C:lI105|H3A1018
+3A1018:lI116|N
+3A0E10:lH3A0EB8|H3A0EC4
+3A0EB8:t2:H3A0F6C,H3A0F74
+3A0F74:lI97|H3A1030
+3A1030:lI112|H3A10F4
+3A10F4:lI112|H3A11C0
+3A11C0:lI108|H3A1284
+3A1284:lI105|H3A1348
+3A1348:lI99|H3A141C
+3A141C:lI97|H3A14F8
+3A14F8:lI116|H3A15CC
+3A15CC:lI105|H3A1698
+3A1698:lI111|H3A1764
+3A1764:lI110|H3A1820
+3A1820:lI47|H3A18DC
+3A18DC:lI120|H3A1990
+3A1990:lI45|H3A1A44
+3A1A44:lI115|H3A1AF8
+3A1AF8:lI104|H3A1BBC
+3A1BBC:lI97|H3A1C88
+3A1C88:lI114|N
+3A0F6C:lI115|H3A1028
+3A1028:lI104|H3A10EC
+3A10EC:lI97|H3A11B8
+3A11B8:lI114|N
+3A0EC4:lH3A0F7C|H3A0F88
+3A0F7C:t2:H3A1038,H3A1040
+3A1040:lI97|H3A1104
+3A1104:lI112|H3A11C8
+3A11C8:lI112|H3A128C
+3A128C:lI108|H3A1350
+3A1350:lI105|H3A1424
+3A1424:lI99|H3A1500
+3A1500:lI97|H3A15D4
+3A15D4:lI116|H3A16A0
+3A16A0:lI105|H3A176C
+3A176C:lI111|H3A1828
+3A1828:lI110|H3A18E4
+3A18E4:lI47|H3A1998
+3A1998:lI120|H3A1A4C
+3A1A4C:lI45|H3A1B00
+3A1B00:lI115|H3A1BC4
+3A1BC4:lI104|N
+3A1038:lI115|H3A10FC
+3A10FC:lI104|N
+3A0F88:lH3A1048|H3A1054
+3A1048:t2:H3A110C,H3A1114
+3A1114:lI97|H3A11D8
+3A11D8:lI112|H3A1294
+3A1294:lI112|H3A1358
+3A1358:lI108|H3A142C
+3A142C:lI105|H3A1508
+3A1508:lI99|H3A15DC
+3A15DC:lI97|H3A16A8
+3A16A8:lI116|H3A1774
+3A1774:lI105|H3A1830
+3A1830:lI111|H3A18EC
+3A18EC:lI110|H3A19A0
+3A19A0:lI47|H3A1A54
+3A1A54:lI120|H3A1B08
+3A1B08:lI45|H3A1BCC
+3A1BCC:lI110|H3A1C90
+3A1C90:lI101|H3A1D4C
+3A1D4C:lI116|H3A1E08
+3A1E08:lI99|H3A1EC4
+3A1EC4:lI100|H3A1F88
+3A1F88:lI102|N
+3A110C:lI110|H3A11D0
+3A11D0:lI99|N
+3A1054:lH3A111C|H3A1128
+3A111C:t2:H3A11E0,H3A11E8
+3A11E8:lI97|H3A12A4
+3A12A4:lI112|H3A1368
+3A1368:lI112|H3A1434
+3A1434:lI108|H3A1510
+3A1510:lI105|H3A15E4
+3A15E4:lI99|H3A16B0
+3A16B0:lI97|H3A177C
+3A177C:lI116|H3A1838
+3A1838:lI105|H3A18F4
+3A18F4:lI111|H3A19A8
+3A19A8:lI110|H3A1A5C
+3A1A5C:lI47|H3A1B10
+3A1B10:lI120|H3A1BD4
+3A1BD4:lI45|H3A1C98
+3A1C98:lI110|H3A1D54
+3A1D54:lI101|H3A1E10
+3A1E10:lI116|H3A1ECC
+3A1ECC:lI99|H3A1F90
+3A1F90:lI100|H3A2044
+3A2044:lI102|N
+3A11E0:lI99|H3A129C
+3A129C:lI100|H3A1360
+3A1360:lI102|N
+3A1128:lH3A11F0|H3A11FC
+3A11F0:t2:H3A12AC,H3A12B4
+3A12B4:lI97|H3A1378
+3A1378:lI112|H3A1444
+3A1444:lI112|H3A1518
+3A1518:lI108|H3A15EC
+3A15EC:lI105|H3A16B8
+3A16B8:lI99|H3A1784
+3A1784:lI97|H3A1840
+3A1840:lI116|H3A18FC
+3A18FC:lI105|H3A19B0
+3A19B0:lI111|H3A1A64
+3A1A64:lI110|H3A1B18
+3A1B18:lI47|H3A1BDC
+3A1BDC:lI120|H3A1CA0
+3A1CA0:lI45|H3A1D5C
+3A1D5C:lI109|H3A1E18
+3A1E18:lI105|H3A1ED4
+3A1ED4:lI102|N
+3A12AC:lI109|H3A1370
+3A1370:lI105|H3A143C
+3A143C:lI102|N
+3A11FC:lH3A12BC|H3A12C8
+3A12BC:t2:H3A1380,H3A1388
+3A1388:lI97|H3A1454
+3A1454:lI112|H3A1528
+3A1528:lI112|H3A15FC
+3A15FC:lI108|H3A16C8
+3A16C8:lI105|H3A178C
+3A178C:lI99|H3A1848
+3A1848:lI97|H3A1904
+3A1904:lI116|H3A19B8
+3A19B8:lI105|H3A1A6C
+3A1A6C:lI111|H3A1B20
+3A1B20:lI110|H3A1BE4
+3A1BE4:lI47|H3A1CA8
+3A1CA8:lI120|H3A1D64
+3A1D64:lI45|H3A1E20
+3A1E20:lI108|H3A1EDC
+3A1EDC:lI97|H3A1F98
+3A1F98:lI116|H3A204C
+3A204C:lI101|H3A2108
+3A2108:lI120|N
+3A1380:lI108|H3A144C
+3A144C:lI97|H3A1520
+3A1520:lI116|H3A15F4
+3A15F4:lI101|H3A16C0
+3A16C0:lI120|N
+3A12C8:lH3A1390|H3A139C
+3A1390:t2:H3A145C,H3A1464
+3A1464:lI97|H3A1538
+3A1538:lI112|H3A160C
+3A160C:lI112|H3A16D0
+3A16D0:lI108|H3A1794
+3A1794:lI105|H3A1850
+3A1850:lI99|H3A190C
+3A190C:lI97|H3A19C0
+3A19C0:lI116|H3A1A74
+3A1A74:lI105|H3A1B28
+3A1B28:lI111|H3A1BEC
+3A1BEC:lI110|H3A1CB0
+3A1CB0:lI47|H3A1D6C
+3A1D6C:lI120|H3A1E28
+3A1E28:lI45|H3A1EE4
+3A1EE4:lI107|H3A1FA0
+3A1FA0:lI111|H3A2054
+3A2054:lI97|H3A2110
+3A2110:lI110|N
+3A145C:lI115|H3A1530
+3A1530:lI107|H3A1604
+3A1604:lI112|N
+3A139C:lH3A146C|H3A1478
+3A146C:t2:H3A1540,H3A1548
+3A1548:lI97|H3A161C
+3A161C:lI112|H3A16E0
+3A16E0:lI112|H3A179C
+3A179C:lI108|H3A1858
+3A1858:lI105|H3A1914
+3A1914:lI99|H3A19C8
+3A19C8:lI97|H3A1A7C
+3A1A7C:lI116|H3A1B30
+3A1B30:lI105|H3A1BF4
+3A1BF4:lI111|H3A1CB8
+3A1CB8:lI110|H3A1D74
+3A1D74:lI47|H3A1E30
+3A1E30:lI120|H3A1EEC
+3A1EEC:lI45|H3A1FA8
+3A1FA8:lI107|H3A205C
+3A205C:lI111|H3A2118
+3A2118:lI97|H3A21CC
+3A21CC:lI110|N
+3A1540:lI115|H3A1614
+3A1614:lI107|H3A16D8
+3A16D8:lI100|N
+3A1478:lH3A1550|H3A155C
+3A1550:t2:H3A1624,H3A162C
+3A162C:lI97|H3A16F0
+3A16F0:lI112|H3A17AC
+3A17AC:lI112|H3A1860
+3A1860:lI108|H3A191C
+3A191C:lI105|H3A19D0
+3A19D0:lI99|H3A1A84
+3A1A84:lI97|H3A1B38
+3A1B38:lI116|H3A1BFC
+3A1BFC:lI105|H3A1CC0
+3A1CC0:lI111|H3A1D7C
+3A1D7C:lI110|H3A1E38
+3A1E38:lI47|H3A1EF4
+3A1EF4:lI120|H3A1FB0
+3A1FB0:lI45|H3A2064
+3A2064:lI107|H3A2120
+3A2120:lI111|H3A21D4
+3A21D4:lI97|H3A2288
+3A2288:lI110|N
+3A1624:lI115|H3A16E8
+3A16E8:lI107|H3A17A4
+3A17A4:lI116|N
+3A155C:lH3A1634|H3A1640
+3A1634:t2:H3A16F8,H3A1700
+3A1700:lI97|H3A17BC
+3A17BC:lI112|H3A1870
+3A1870:lI112|H3A1924
+3A1924:lI108|H3A19D8
+3A19D8:lI105|H3A1A8C
+3A1A8C:lI99|H3A1B40
+3A1B40:lI97|H3A1C04
+3A1C04:lI116|H3A1CC8
+3A1CC8:lI105|H3A1D84
+3A1D84:lI111|H3A1E40
+3A1E40:lI110|H3A1EFC
+3A1EFC:lI47|H3A1FB8
+3A1FB8:lI120|H3A206C
+3A206C:lI45|H3A2128
+3A2128:lI107|H3A21DC
+3A21DC:lI111|H3A2290
+3A2290:lI97|H3A234C
+3A234C:lI110|N
+3A16F8:lI115|H3A17B4
+3A17B4:lI107|H3A1868
+3A1868:lI109|N
+3A1640:lH3A1708|H3A1714
+3A1708:t2:H3A17C4,H3A17CC
+3A17CC:lI97|H3A1880
+3A1880:lI112|H3A1934
+3A1934:lI112|H3A19E0
+3A19E0:lI108|H3A1A94
+3A1A94:lI105|H3A1B48
+3A1B48:lI99|H3A1C0C
+3A1C0C:lI97|H3A1CD0
+3A1CD0:lI116|H3A1D8C
+3A1D8C:lI105|H3A1E48
+3A1E48:lI111|H3A1F04
+3A1F04:lI110|H3A1FC0
+3A1FC0:lI47|H3A2074
+3A2074:lI120|H3A2130
+3A2130:lI45|H3A21E4
+3A21E4:lI104|H3A2298
+3A2298:lI116|H3A2354
+3A2354:lI116|H3A2410
+3A2410:lI112|H3A24C4
+3A24C4:lI100|H3A2580
+3A2580:lI45|H3A263C
+3A263C:lI99|H3A2700
+3A2700:lI103|H3A27BC
+3A27BC:lI105|N
+3A17C4:lI99|H3A1878
+3A1878:lI103|H3A192C
+3A192C:lI105|N
+3A1714:lH3A17D4|H3A17E0
+3A17D4:t2:H3A1888,H3A1890
+3A1890:lI97|H3A1944
+3A1944:lI112|H3A19F0
+3A19F0:lI112|H3A1A9C
+3A1A9C:lI108|H3A1B50
+3A1B50:lI105|H3A1C14
+3A1C14:lI99|H3A1CD8
+3A1CD8:lI97|H3A1D94
+3A1D94:lI116|H3A1E50
+3A1E50:lI105|H3A1F0C
+3A1F0C:lI111|H3A1FC8
+3A1FC8:lI110|H3A207C
+3A207C:lI47|H3A2138
+3A2138:lI120|H3A21EC
+3A21EC:lI45|H3A22A0
+3A22A0:lI104|H3A235C
+3A235C:lI100|H3A2418
+3A2418:lI102|N
+3A1888:lI104|H3A193C
+3A193C:lI100|H3A19E8
+3A19E8:lI102|N
+3A17E0:lH3A1898|H3A18A4
+3A1898:t2:H3A194C,H3A1954
+3A1954:lI97|H3A1A00
+3A1A00:lI112|H3A1AA4
+3A1AA4:lI112|H3A1B58
+3A1B58:lI108|H3A1C1C
+3A1C1C:lI105|H3A1CE0
+3A1CE0:lI99|H3A1D9C
+3A1D9C:lI97|H3A1E58
+3A1E58:lI116|H3A1F14
+3A1F14:lI105|H3A1FD0
+3A1FD0:lI111|H3A2084
+3A2084:lI110|H3A2140
+3A2140:lI47|H3A21F4
+3A21F4:lI120|H3A22A8
+3A22A8:lI45|H3A2364
+3A2364:lI103|H3A2420
+3A2420:lI122|H3A24CC
+3A24CC:lI105|H3A2588
+3A2588:lI112|N
+3A194C:lI103|H3A19F8
+3A19F8:lI122|N
+3A18A4:lH3A195C|H3A1968
+3A195C:t2:H3A1A08,H3A1A10
+3A1A10:lI97|H3A1AB4
+3A1AB4:lI112|H3A1B68
+3A1B68:lI112|H3A1C2C
+3A1C2C:lI108|H3A1CE8
+3A1CE8:lI105|H3A1DA4
+3A1DA4:lI99|H3A1E60
+3A1E60:lI97|H3A1F1C
+3A1F1C:lI116|H3A1FD8
+3A1FD8:lI105|H3A208C
+3A208C:lI111|H3A2148
+3A2148:lI110|H3A21FC
+3A21FC:lI47|H3A22B0
+3A22B0:lI120|H3A236C
+3A236C:lI45|H3A2428
+3A2428:lI103|H3A24D4
+3A24D4:lI116|H3A2590
+3A2590:lI97|H3A2644
+3A2644:lI114|N
+3A1A08:lI103|H3A1AAC
+3A1AAC:lI116|H3A1B60
+3A1B60:lI97|H3A1C24
+3A1C24:lI114|N
+3A1968:lH3A1A18|H3A1A24
+3A1A18:t2:H3A1ABC,H3A1AC4
+3A1AC4:lI97|H3A1B78
+3A1B78:lI112|H3A1C3C
+3A1C3C:lI112|H3A1CF0
+3A1CF0:lI108|H3A1DAC
+3A1DAC:lI105|H3A1E68
+3A1E68:lI99|H3A1F24
+3A1F24:lI97|H3A1FE0
+3A1FE0:lI116|H3A2094
+3A2094:lI105|H3A2150
+3A2150:lI111|H3A2204
+3A2204:lI110|H3A22B8
+3A22B8:lI47|H3A2374
+3A2374:lI120|H3A2430
+3A2430:lI45|H3A24DC
+3A24DC:lI100|H3A2598
+3A2598:lI118|H3A264C
+3A264C:lI105|N
+3A1ABC:lI100|H3A1B70
+3A1B70:lI118|H3A1C34
+3A1C34:lI105|N
+3A1A24:lH3A1ACC|H3A1AD8
+3A1ACC:t2:H3A1B80,H3A1B88
+3A1B88:lI97|H3A1C4C
+3A1C4C:lI112|H3A1D00
+3A1D00:lI112|H3A1DB4
+3A1DB4:lI108|H3A1E70
+3A1E70:lI105|H3A1F2C
+3A1F2C:lI99|H3A1FE8
+3A1FE8:lI97|H3A209C
+3A209C:lI116|H3A2158
+3A2158:lI105|H3A220C
+3A220C:lI111|H3A22C0
+3A22C0:lI110|H3A237C
+3A237C:lI47|H3A2438
+3A2438:lI120|H3A24E4
+3A24E4:lI45|H3A25A0
+3A25A0:lI100|H3A2654
+3A2654:lI105|H3A2708
+3A2708:lI114|H3A27C4
+3A27C4:lI101|H3A2880
+3A2880:lI99|H3A2944
+3A2944:lI116|H3A2A10
+3A2A10:lI111|H3A2ADC
+3A2ADC:lI114|N
+3A1B80:lI100|H3A1C44
+3A1C44:lI99|H3A1CF8
+3A1CF8:lI114|N
+3A1AD8:lH3A1B90|H3A1B9C
+3A1B90:t2:H3A1C54,H3A1C5C
+3A1C5C:lI97|H3A1D10
+3A1D10:lI112|H3A1DC4
+3A1DC4:lI112|H3A1E78
+3A1E78:lI108|H3A1F34
+3A1F34:lI105|H3A1FF0
+3A1FF0:lI99|H3A20A4
+3A20A4:lI97|H3A2160
+3A2160:lI116|H3A2214
+3A2214:lI105|H3A22C8
+3A22C8:lI111|H3A2384
+3A2384:lI110|H3A2440
+3A2440:lI47|H3A24EC
+3A24EC:lI120|H3A25A8
+3A25A8:lI45|H3A265C
+3A265C:lI100|H3A2710
+3A2710:lI105|H3A27CC
+3A27CC:lI114|H3A2888
+3A2888:lI101|H3A294C
+3A294C:lI99|H3A2A18
+3A2A18:lI116|H3A2AE4
+3A2AE4:lI111|H3A2BB0
+3A2BB0:lI114|N
+3A1C54:lI100|H3A1D08
+3A1D08:lI105|H3A1DBC
+3A1DBC:lI114|N
+3A1B9C:lH3A1C64|H3A1C70
+3A1C64:t2:H3A1D18,H3A1D20
+3A1D20:lI97|H3A1DD4
+3A1DD4:lI112|H3A1E88
+3A1E88:lI112|H3A1F3C
+3A1F3C:lI108|H3A1FF8
+3A1FF8:lI105|H3A20AC
+3A20AC:lI99|H3A2168
+3A2168:lI97|H3A221C
+3A221C:lI116|H3A22D0
+3A22D0:lI105|H3A238C
+3A238C:lI111|H3A2448
+3A2448:lI110|H3A24F4
+3A24F4:lI47|H3A25B0
+3A25B0:lI120|H3A2664
+3A2664:lI45|H3A2718
+3A2718:lI100|H3A27D4
+3A27D4:lI105|H3A2890
+3A2890:lI114|H3A2954
+3A2954:lI101|H3A2A20
+3A2A20:lI99|H3A2AEC
+3A2AEC:lI116|H3A2BB8
+3A2BB8:lI111|H3A2C74
+3A2C74:lI114|N
+3A1D18:lI100|H3A1DCC
+3A1DCC:lI120|H3A1E80
+3A1E80:lI114|N
+3A1C70:lH3A1D28|H3A1D34
+3A1D28:t2:H3A1DDC,H3A1DE4
+3A1DE4:lI97|H3A1E98
+3A1E98:lI112|H3A1F4C
+3A1F4C:lI112|H3A2000
+3A2000:lI108|H3A20B4
+3A20B4:lI105|H3A2170
+3A2170:lI99|H3A2224
+3A2224:lI97|H3A22D8
+3A22D8:lI116|H3A2394
+3A2394:lI105|H3A2450
+3A2450:lI111|H3A24FC
+3A24FC:lI110|H3A25B8
+3A25B8:lI47|H3A266C
+3A266C:lI120|H3A2720
+3A2720:lI45|H3A27DC
+3A27DC:lI99|H3A2898
+3A2898:lI115|H3A295C
+3A295C:lI104|N
+3A1DDC:lI99|H3A1E90
+3A1E90:lI115|H3A1F44
+3A1F44:lI104|N
+3A1D34:lH3A1DEC|H3A1DF8
+3A1DEC:t2:H3A1EA0,H3A1EA8
+3A1EA8:lI97|H3A1F5C
+3A1F5C:lI112|H3A2010
+3A2010:lI112|H3A20C4
+3A20C4:lI108|H3A2178
+3A2178:lI105|H3A222C
+3A222C:lI99|H3A22E0
+3A22E0:lI97|H3A239C
+3A239C:lI116|H3A2458
+3A2458:lI105|H3A2504
+3A2504:lI111|H3A25C0
+3A25C0:lI110|H3A2674
+3A2674:lI47|H3A2728
+3A2728:lI120|H3A27E4
+3A27E4:lI45|H3A28A0
+3A28A0:lI99|H3A2964
+3A2964:lI112|H3A2A28
+3A2A28:lI105|H3A2AF4
+3A2AF4:lI111|N
+3A1EA0:lI99|H3A1F54
+3A1F54:lI112|H3A2008
+3A2008:lI105|H3A20BC
+3A20BC:lI111|N
+3A1DF8:lH3A1EB0|H3A1EBC
+3A1EB0:t2:H3A1F64,H3A1F6C
+3A1F6C:lI97|H3A2018
+3A2018:lI112|H3A20CC
+3A20CC:lI112|H3A2180
+3A2180:lI108|H3A2234
+3A2234:lI105|H3A22E8
+3A22E8:lI99|H3A23A4
+3A23A4:lI97|H3A2460
+3A2460:lI116|H3A250C
+3A250C:lI105|H3A25C8
+3A25C8:lI111|H3A267C
+3A267C:lI110|H3A2730
+3A2730:lI47|H3A27EC
+3A27EC:lI120|H3A28A8
+3A28A8:lI45|H3A296C
+3A296C:lI99|H3A2A30
+3A2A30:lI111|H3A2AFC
+3A2AFC:lI109|H3A2BC0
+3A2BC0:lI112|H3A2C7C
+3A2C7C:lI114|H3A2D2C
+3A2D2C:lI101|H3A2DD4
+3A2DD4:lI115|H3A2E6C
+3A2E6C:lI115|N
+3A1F64:lI90|N
+3A1EBC:lH3A1F74|H3A1F80
+3A1F74:t2:H3A2020,H3A2028
+3A2028:lI97|H3A20DC
+3A20DC:lI112|H3A2190
+3A2190:lI112|H3A223C
+3A223C:lI108|H3A22F0
+3A22F0:lI105|H3A23AC
+3A23AC:lI99|H3A2468
+3A2468:lI97|H3A2514
+3A2514:lI116|H3A25D0
+3A25D0:lI105|H3A2684
+3A2684:lI111|H3A2738
+3A2738:lI110|H3A27F4
+3A27F4:lI47|H3A28B0
+3A28B0:lI120|H3A2974
+3A2974:lI45|H3A2A38
+3A2A38:lI99|H3A2B04
+3A2B04:lI100|H3A2BC8
+3A2BC8:lI108|H3A2C84
+3A2C84:lI105|H3A2D34
+3A2D34:lI110|H3A2DDC
+3A2DDC:lI107|N
+3A2020:lI118|H3A20D4
+3A20D4:lI99|H3A2188
+3A2188:lI100|N
+3A1F80:lH3A2030|H3A203C
+3A2030:t2:H3A20E4,H3A20EC
+3A20EC:lI97|H3A21A0
+3A21A0:lI112|H3A224C
+3A224C:lI112|H3A2300
+3A2300:lI108|H3A23BC
+3A23BC:lI105|H3A2470
+3A2470:lI99|H3A251C
+3A251C:lI97|H3A25D8
+3A25D8:lI116|H3A268C
+3A268C:lI105|H3A2740
+3A2740:lI111|H3A27FC
+3A27FC:lI110|H3A28B8
+3A28B8:lI47|H3A297C
+3A297C:lI120|H3A2A40
+3A2A40:lI45|H3A2B0C
+3A2B0C:lI98|H3A2BD0
+3A2BD0:lI99|H3A2C8C
+3A2C8C:lI112|H3A2D3C
+3A2D3C:lI105|H3A2DE4
+3A2DE4:lI111|N
+3A20E4:lI98|H3A2198
+3A2198:lI99|H3A2244
+3A2244:lI112|H3A22F8
+3A22F8:lI105|H3A23B4
+3A23B4:lI111|N
+3A203C:lH3A20F4|H3A2100
+3A20F4:t2:H3A21A8,H3A21B0
+3A21B0:lI97|H3A225C
+3A225C:lI112|H3A2310
+3A2310:lI112|H3A23C4
+3A23C4:lI108|H3A2478
+3A2478:lI105|H3A2524
+3A2524:lI99|H3A25E0
+3A25E0:lI97|H3A2694
+3A2694:lI116|H3A2748
+3A2748:lI105|H3A2804
+3A2804:lI111|H3A28C0
+3A28C0:lI110|H3A2984
+3A2984:lI47|H3A2A48
+3A2A48:lI114|H3A2B14
+3A2B14:lI116|H3A2BD8
+3A2BD8:lI102|N
+3A21A8:lI114|H3A2254
+3A2254:lI116|H3A2308
+3A2308:lI102|N
+3A2100:lH3A21B8|H3A21C4
+3A21B8:t2:H3A2264,H3A226C
+3A226C:lI97|H3A2320
+3A2320:lI112|H3A23D4
+3A23D4:lI112|H3A2480
+3A2480:lI108|H3A252C
+3A252C:lI105|H3A25E8
+3A25E8:lI99|H3A269C
+3A269C:lI97|H3A2750
+3A2750:lI116|H3A280C
+3A280C:lI105|H3A28C8
+3A28C8:lI111|H3A298C
+3A298C:lI110|H3A2A50
+3A2A50:lI47|H3A2B1C
+3A2B1C:lI112|H3A2BE0
+3A2BE0:lI111|H3A2C94
+3A2C94:lI119|H3A2D44
+3A2D44:lI101|H3A2DEC
+3A2DEC:lI114|H3A2E74
+3A2E74:lI112|H3A2EEC
+3A2EEC:lI111|H3A2F64
+3A2F64:lI105|H3A2FD4
+3A2FD4:lI110|H3A303C
+3A303C:lI116|N
+3A2264:lI112|H3A2318
+3A2318:lI112|H3A23CC
+3A23CC:lI116|N
+3A21C4:lH3A2274|H3A2280
+3A2274:t2:H3A2328,H3A2330
+3A2330:lI97|H3A23E4
+3A23E4:lI112|H3A2488
+3A2488:lI112|H3A2534
+3A2534:lI108|H3A25F0
+3A25F0:lI105|H3A26A4
+3A26A4:lI99|H3A2758
+3A2758:lI97|H3A2814
+3A2814:lI116|H3A28D0
+3A28D0:lI105|H3A2994
+3A2994:lI111|H3A2A58
+3A2A58:lI110|H3A2B24
+3A2B24:lI47|H3A2BE8
+3A2BE8:lI112|H3A2C9C
+3A2C9C:lI111|H3A2D4C
+3A2D4C:lI115|H3A2DF4
+3A2DF4:lI116|H3A2E7C
+3A2E7C:lI115|H3A2EF4
+3A2EF4:lI99|H3A2F6C
+3A2F6C:lI114|H3A2FDC
+3A2FDC:lI105|H3A3044
+3A3044:lI112|H3A30A4
+3A30A4:lI116|N
+3A2328:lI97|H3A23DC
+3A23DC:lI105|N
+3A2280:lH3A2338|H3A2344
+3A2338:t2:H3A23EC,H3A23F4
+3A23F4:lI97|H3A2498
+3A2498:lI112|H3A2544
+3A2544:lI112|H3A25F8
+3A25F8:lI108|H3A26AC
+3A26AC:lI105|H3A2760
+3A2760:lI99|H3A281C
+3A281C:lI97|H3A28D8
+3A28D8:lI116|H3A299C
+3A299C:lI105|H3A2A60
+3A2A60:lI111|H3A2B2C
+3A2B2C:lI110|H3A2BF0
+3A2BF0:lI47|H3A2CA4
+3A2CA4:lI112|H3A2D54
+3A2D54:lI111|H3A2DFC
+3A2DFC:lI115|H3A2E84
+3A2E84:lI116|H3A2EFC
+3A2EFC:lI115|H3A2F74
+3A2F74:lI99|H3A2FE4
+3A2FE4:lI114|H3A304C
+3A304C:lI105|H3A30AC
+3A30AC:lI112|H3A3104
+3A3104:lI116|N
+3A23EC:lI101|H3A2490
+3A2490:lI112|H3A253C
+3A253C:lI115|N
+3A2344:lH3A23FC|H3A2408
+3A23FC:t2:H3A24A0,H3A24A8
+3A24A8:lI97|H3A2554
+3A2554:lI112|H3A2600
+3A2600:lI112|H3A26B4
+3A26B4:lI108|H3A2768
+3A2768:lI105|H3A2824
+3A2824:lI99|H3A28E0
+3A28E0:lI97|H3A29A4
+3A29A4:lI116|H3A2A68
+3A2A68:lI105|H3A2B34
+3A2B34:lI111|H3A2BF8
+3A2BF8:lI110|H3A2CAC
+3A2CAC:lI47|H3A2D5C
+3A2D5C:lI112|H3A2E04
+3A2E04:lI111|H3A2E8C
+3A2E8C:lI115|H3A2F04
+3A2F04:lI116|H3A2F7C
+3A2F7C:lI115|H3A2FEC
+3A2FEC:lI99|H3A3054
+3A3054:lI114|H3A30B4
+3A30B4:lI105|H3A310C
+3A310C:lI112|H3A315C
+3A315C:lI116|N
+3A24A0:lI112|H3A254C
+3A254C:lI115|N
+3A2408:lH3A24B0|H3A24BC
+3A24B0:t2:H3A255C,H3A2564
+3A2564:lI97|H3A2610
+3A2610:lI112|H3A26C4
+3A26C4:lI112|H3A2770
+3A2770:lI108|H3A282C
+3A282C:lI105|H3A28E8
+3A28E8:lI99|H3A29AC
+3A29AC:lI97|H3A2A70
+3A2A70:lI116|H3A2B3C
+3A2B3C:lI105|H3A2C00
+3A2C00:lI111|H3A2CB4
+3A2CB4:lI110|H3A2D64
+3A2D64:lI47|H3A2E0C
+3A2E0C:lI112|H3A2E94
+3A2E94:lI100|H3A2F0C
+3A2F0C:lI102|N
+3A255C:lI112|H3A2608
+3A2608:lI100|H3A26BC
+3A26BC:lI102|N
+3A24BC:lH3A256C|H3A2578
+3A256C:t2:H3A2618,H3A2620
+3A2620:lI97|H3A26D4
+3A26D4:lI112|H3A2780
+3A2780:lI112|H3A2834
+3A2834:lI108|H3A28F0
+3A28F0:lI105|H3A29B4
+3A29B4:lI99|H3A2A78
+3A2A78:lI97|H3A2B44
+3A2B44:lI116|H3A2C08
+3A2C08:lI105|H3A2CBC
+3A2CBC:lI111|H3A2D6C
+3A2D6C:lI110|H3A2E14
+3A2E14:lI47|H3A2E9C
+3A2E9C:lI111|H3A2F14
+3A2F14:lI100|H3A2F84
+3A2F84:lI97|N
+3A2618:lI111|H3A26CC
+3A26CC:lI100|H3A2778
+3A2778:lI97|N
+3A2578:lH3A2628|H3A2634
+3A2628:t2:H3A26DC,H3A26E4
+3A26E4:lI97|H3A2790
+3A2790:lI112|H3A2844
+3A2844:lI112|H3A28F8
+3A28F8:lI108|H3A29BC
+3A29BC:lI105|H3A2A80
+3A2A80:lI99|H3A2B4C
+3A2B4C:lI97|H3A2C10
+3A2C10:lI116|H3A2CC4
+3A2CC4:lI105|H3A2D74
+3A2D74:lI111|H3A2E1C
+3A2E1C:lI110|H3A2EA4
+3A2EA4:lI47|H3A2F1C
+3A2F1C:lI111|H3A2F8C
+3A2F8C:lI99|H3A2FF4
+3A2FF4:lI116|H3A305C
+3A305C:lI101|H3A30BC
+3A30BC:lI116|H3A3114
+3A3114:lI45|H3A3164
+3A3164:lI115|H3A31AC
+3A31AC:lI116|H3A31F4
+3A31F4:lI114|H3A323C
+3A323C:lI101|H3A3284
+3A3284:lI97|H3A32CC
+3A32CC:lI109|N
+3A26DC:lI98|H3A2788
+3A2788:lI105|H3A283C
+3A283C:lI110|N
+3A2634:lH3A26EC|H3A26F8
+3A26EC:t2:H3A2798,H3A27A0
+3A27A0:lI97|H3A2854
+3A2854:lI112|H3A2908
+3A2908:lI112|H3A29C4
+3A29C4:lI108|H3A2A88
+3A2A88:lI105|H3A2B54
+3A2B54:lI99|H3A2C18
+3A2C18:lI97|H3A2CCC
+3A2CCC:lI116|H3A2D7C
+3A2D7C:lI105|H3A2E24
+3A2E24:lI111|H3A2EAC
+3A2EAC:lI110|H3A2F24
+3A2F24:lI47|H3A2F94
+3A2F94:lI111|H3A2FFC
+3A2FFC:lI99|H3A3064
+3A3064:lI116|H3A30C4
+3A30C4:lI101|H3A311C
+3A311C:lI116|H3A316C
+3A316C:lI45|H3A31B4
+3A31B4:lI115|H3A31FC
+3A31FC:lI116|H3A3244
+3A3244:lI114|H3A328C
+3A328C:lI101|H3A32D4
+3A32D4:lI97|H3A3314
+3A3314:lI109|N
+3A2798:lI100|H3A284C
+3A284C:lI109|H3A2900
+3A2900:lI115|N
+3A26F8:lH3A27A8|H3A27B4
+3A27A8:t2:H3A285C,H3A2864
+3A2864:lI97|H3A2918
+3A2918:lI112|H3A29D4
+3A29D4:lI112|H3A2A90
+3A2A90:lI108|H3A2B5C
+3A2B5C:lI105|H3A2C20
+3A2C20:lI99|H3A2CD4
+3A2CD4:lI97|H3A2D84
+3A2D84:lI116|H3A2E2C
+3A2E2C:lI105|H3A2EB4
+3A2EB4:lI111|H3A2F2C
+3A2F2C:lI110|H3A2F9C
+3A2F9C:lI47|H3A3004
+3A3004:lI111|H3A306C
+3A306C:lI99|H3A30CC
+3A30CC:lI116|H3A3124
+3A3124:lI101|H3A3174
+3A3174:lI116|H3A31BC
+3A31BC:lI45|H3A3204
+3A3204:lI115|H3A324C
+3A324C:lI116|H3A3294
+3A3294:lI114|H3A32DC
+3A32DC:lI101|H3A331C
+3A331C:lI97|H3A334C
+3A334C:lI109|N
+3A285C:lI108|H3A2910
+3A2910:lI104|H3A29CC
+3A29CC:lI97|N
+3A27B4:lH3A286C|H3A2878
+3A286C:t2:H3A2920,H3A2928
+3A2928:lI97|H3A29E4
+3A29E4:lI112|H3A2AA0
+3A2AA0:lI112|H3A2B64
+3A2B64:lI108|H3A2C28
+3A2C28:lI105|H3A2CDC
+3A2CDC:lI99|H3A2D8C
+3A2D8C:lI97|H3A2E34
+3A2E34:lI116|H3A2EBC
+3A2EBC:lI105|H3A2F34
+3A2F34:lI111|H3A2FA4
+3A2FA4:lI110|H3A300C
+3A300C:lI47|H3A3074
+3A3074:lI111|H3A30D4
+3A30D4:lI99|H3A312C
+3A312C:lI116|H3A317C
+3A317C:lI101|H3A31C4
+3A31C4:lI116|H3A320C
+3A320C:lI45|H3A3254
+3A3254:lI115|H3A329C
+3A329C:lI116|H3A32E4
+3A32E4:lI114|H3A3324
+3A3324:lI101|H3A3354
+3A3354:lI97|H3A337C
+3A337C:lI109|N
+3A2920:lI108|H3A29DC
+3A29DC:lI122|H3A2A98
+3A2A98:lI104|N
+3A2878:lH3A2930|H3A293C
+3A2930:t2:H3A29EC,H3A29F4
+3A29F4:lI97|H3A2AB0
+3A2AB0:lI112|H3A2B74
+3A2B74:lI112|H3A2C30
+3A2C30:lI108|H3A2CE4
+3A2CE4:lI105|H3A2D94
+3A2D94:lI99|H3A2E3C
+3A2E3C:lI97|H3A2EC4
+3A2EC4:lI116|H3A2F3C
+3A2F3C:lI105|H3A2FAC
+3A2FAC:lI111|H3A3014
+3A3014:lI110|H3A307C
+3A307C:lI47|H3A30DC
+3A30DC:lI111|H3A3134
+3A3134:lI99|H3A3184
+3A3184:lI116|H3A31CC
+3A31CC:lI101|H3A3214
+3A3214:lI116|H3A325C
+3A325C:lI45|H3A32A4
+3A32A4:lI115|H3A32EC
+3A32EC:lI116|H3A332C
+3A332C:lI114|H3A335C
+3A335C:lI101|H3A3384
+3A3384:lI97|H3A33A4
+3A33A4:lI109|N
+3A29EC:lI101|H3A2AA8
+3A2AA8:lI120|H3A2B6C
+3A2B6C:lI101|N
+3A293C:lH3A29FC|H3A2A08
+3A29FC:t2:H3A2AB8,H3A2AC0
+3A2AC0:lI97|H3A2B84
+3A2B84:lI112|H3A2C40
+3A2C40:lI112|H3A2CF4
+3A2CF4:lI108|H3A2DA4
+3A2DA4:lI105|H3A2E44
+3A2E44:lI99|H3A2ECC
+3A2ECC:lI97|H3A2F44
+3A2F44:lI116|H3A2FB4
+3A2FB4:lI105|H3A301C
+3A301C:lI111|H3A3084
+3A3084:lI110|H3A30E4
+3A30E4:lI47|H3A313C
+3A313C:lI111|H3A318C
+3A318C:lI99|H3A31D4
+3A31D4:lI116|H3A321C
+3A321C:lI101|H3A3264
+3A3264:lI116|H3A32AC
+3A32AC:lI45|H3A32F4
+3A32F4:lI115|H3A3334
+3A3334:lI116|H3A3364
+3A3364:lI114|H3A338C
+3A338C:lI101|H3A33AC
+3A33AC:lI97|H3A33C4
+3A33C4:lI109|N
+3A2AB8:lI99|H3A2B7C
+3A2B7C:lI108|H3A2C38
+3A2C38:lI97|H3A2CEC
+3A2CEC:lI115|H3A2D9C
+3A2D9C:lI115|N
+3A2A08:lH3A2AC8|H3A2AD4
+3A2AC8:t2:H3A2B8C,H3A2B94
+3A2B94:lI97|H3A2C50
+3A2C50:lI112|H3A2D04
+3A2D04:lI112|H3A2DAC
+3A2DAC:lI108|H3A2E4C
+3A2E4C:lI105|H3A2ED4
+3A2ED4:lI99|H3A2F4C
+3A2F4C:lI97|H3A2FBC
+3A2FBC:lI116|H3A3024
+3A3024:lI105|H3A308C
+3A308C:lI111|H3A30EC
+3A30EC:lI110|H3A3144
+3A3144:lI47|H3A3194
+3A3194:lI109|H3A31DC
+3A31DC:lI115|H3A3224
+3A3224:lI119|H3A326C
+3A326C:lI111|H3A32B4
+3A32B4:lI114|H3A32FC
+3A32FC:lI100|N
+3A2B8C:lI100|H3A2C48
+3A2C48:lI111|H3A2CFC
+3A2CFC:lI99|N
+3A2AD4:lH3A2B9C|H3A2BA8
+3A2B9C:t2:H3A2C58,H3A2C60
+3A2C60:lI97|H3A2D14
+3A2D14:lI112|H3A2DBC
+3A2DBC:lI112|H3A2E54
+3A2E54:lI108|H3A2EDC
+3A2EDC:lI105|H3A2F54
+3A2F54:lI99|H3A2FC4
+3A2FC4:lI97|H3A302C
+3A302C:lI116|H3A3094
+3A3094:lI105|H3A30F4
+3A30F4:lI111|H3A314C
+3A314C:lI110|H3A319C
+3A319C:lI47|H3A31E4
+3A31E4:lI109|H3A322C
+3A322C:lI97|H3A3274
+3A3274:lI99|H3A32BC
+3A32BC:lI45|H3A3304
+3A3304:lI99|H3A333C
+3A333C:lI111|H3A336C
+3A336C:lI109|H3A3394
+3A3394:lI112|H3A33B4
+3A33B4:lI97|H3A33CC
+3A33CC:lI99|H3A33DC
+3A33DC:lI116|H3A33EC
+3A33EC:lI112|H3A33FC
+3A33FC:lI114|H3A340C
+3A340C:lI111|N
+3A2C58:lI99|H3A2D0C
+3A2D0C:lI112|H3A2DB4
+3A2DB4:lI116|N
+3A2BA8:lH3A2C68|N
+3A2C68:t2:H3A2D1C,H3A2D24
+3A2D24:lI97|H3A2DCC
+3A2DCC:lI112|H3A2E64
+3A2E64:lI112|H3A2EE4
+3A2EE4:lI108|H3A2F5C
+3A2F5C:lI105|H3A2FCC
+3A2FCC:lI99|H3A3034
+3A3034:lI97|H3A309C
+3A309C:lI116|H3A30FC
+3A30FC:lI105|H3A3154
+3A3154:lI111|H3A31A4
+3A31A4:lI110|H3A31EC
+3A31EC:lI47|H3A3234
+3A3234:lI109|H3A327C
+3A327C:lI97|H3A32C4
+3A32C4:lI99|H3A330C
+3A330C:lI45|H3A3344
+3A3344:lI98|H3A3374
+3A3374:lI105|H3A339C
+3A339C:lI110|H3A33BC
+3A33BC:lI104|H3A33D4
+3A33D4:lI101|H3A33E4
+3A33E4:lI120|H3A33F4
+3A33F4:lI52|H3A3404
+3A3404:lI48|N
+3A2D1C:lI104|H3A2DC4
+3A2DC4:lI113|H3A2E5C
+3A2E5C:lI120|N
+39DC28:lH39DC68|H39DC74
+39DC68:t2:A4:port,I8888
+39DC74:lH39DCA8|H39DCB4
+39DCA8:t2:AC:bind_address,H39DCF8
+39DCF8:t4:I127,I0,I0,I1
+39DCB4:lH39DD0C|H39DD18
+39DD0C:t2:AB:server_name,H39DD6C
+39DD6C:lI108|H39DDE4
+39DDE4:lI111|H39DE5C
+39DE5C:lI99|H39DEE4
+39DEE4:lI97|H39DF6C
+39DF6C:lI108|H39E00C
+39E00C:lI104|H39E0B4
+39E0B4:lI111|H39E16C
+39E16C:lI115|H39E238
+39E238:lI116|N
+39DD18:lH39DD74|H39DD80
+39DD74:t2:AE:max_header_siz,I1024
+39DD80:lH39DDEC|H39DDF8
+39DDEC:t2:A11:max_header_action,A8:reply414
+39DDF8:lH39DE64|H39DE70
+39DE64:t2:A8:com_type,A7:ip_comm
+39DE70:lH39DEEC|H39DEF8
+39DEEC:t2:A7:modules,H39DF74
+39DF74:lA9:mod_alias|H39E014
+39E014:lA8:mod_auth|H39E0BC
+39E0BC:lA7:mod_esi|H39E174
+39E174:lAB:mod_actions|H39E240
+39E240:lA7:mod_cgi|H39E324
+39E324:lAB:mod_include|H39E418
+39E418:lA7:mod_dir|H39E51C
+39E51C:lA7:mod_get|H39E634
+39E634:lA8:mod_head|H39E748
+39E748:lA7:mod_log|H39E85C
+39E85C:lAC:mod_disk_log|N
+39DEF8:lH39DF7C|H39DF88
+39DF7C:t2:AF:directory_index,H39E01C
+39E01C:lH39E0C4|N
+39E0C4:lI105|H39E17C
+39E17C:lI110|H39E248
+39E248:lI100|H39E32C
+39E32C:lI101|H39E420
+39E420:lI120|H39E524
+39E524:lI46|H39E63C
+39E63C:lI104|H39E750
+39E750:lI116|H39E864
+39E864:lI109|H39E978
+39E978:lI108|N
+39DF88:lH39E024|H39E030
+39E024:t2:AC:default_type,H39E0CC
+39E0CC:lI116|H39E184
+39E184:lI101|H39E250
+39E250:lI120|H39E334
+39E334:lI116|H39E428
+39E428:lI47|H39E52C
+39E52C:lI112|H39E644
+39E644:lI108|H39E758
+39E758:lI97|H39E86C
+39E86C:lI105|H39E980
+39E980:lI110|N
+39E030:lH39E0D4|H39E0E0
+39E0D4:t2:A10:erl_script_alias,H39E18C
+39E18C:t2:H39E258,H39E260
+39E260:lH39E344|N
+39E344:lI119|H39E438
+39E438:lI101|H39E53C
+39E53C:lI98|H39E654
+39E654:lI116|H39E768
+39E768:lI111|H39E87C
+39E87C:lI111|H39E990
+39E990:lI108|N
+39E258:lI47|H39E33C
+39E33C:lI119|H39E430
+39E430:lI101|H39E534
+39E534:lI98|H39E64C
+39E64C:lI116|H39E760
+39E760:lI111|H39E874
+39E874:lI111|H39E988
+39E988:lI108|N
+39E0E0:lH39E198|H39E1A4
+39E198:t2:A5:alias,H39E268
+39E268:t2:H39E34C,H39E354
+39E354:lI47|H39E448
+39E448:lI99|H39E54C
+39E54C:lI108|H39E664
+39E664:lI101|H39E778
+39E778:lI97|H39E88C
+39E88C:lI114|H39E9A0
+39E9A0:lI99|H39EA94
+39EA94:lI97|H39EB88
+39EB88:lI115|H39EC7C
+39EC7C:lI101|H39ED70
+39ED70:lI47|H39EE4C
+39EE4C:lI111|H39EF20
+39EF20:lI116|H39EFFC
+39EFFC:lI112|H39F0E0
+39F0E0:lI47|H39F1B4
+39F1B4:lI101|H39F288
+39F288:lI114|H39F344
+39F344:lI116|H39F408
+39F408:lI115|H39F4D4
+39F4D4:lI47|H39F5A8
+39F5A8:lI108|H39F67C
+39F67C:lI105|H39F750
+39F750:lI98|H39F824
+39F824:lI47|H39F908
+39F908:lI111|H39F9E4
+39F9E4:lI98|H39FAC0
+39FAC0:lI115|H39FB9C
+39FB9C:lI101|H39FC68
+39FC68:lI114|H39FD2C
+39FD2C:lI118|H39FDF8
+39FDF8:lI101|H39FEB4
+39FEB4:lI114|H39FF70
+39FF70:lI47|H3A0024
+3A0024:lI112|H3A00D8
+3A00D8:lI114|H3A0184
+3A0184:lI105|H3A0238
+3A0238:lI118|H3A02F4
+3A02F4:lI47|H3A03A8
+3A03A8:lI99|H3A0444
+3A0444:lI114|H3A04E8
+3A04E8:lI97|H3A058C
+3A058C:lI115|H3A0638
+3A0638:lI104|H3A06EC
+3A06EC:lI100|H3A0798
+3A0798:lI117|H3A083C
+3A083C:lI109|H3A08C8
+3A08C8:lI112|H3A095C
+3A095C:lI95|H3A09F0
+3A09F0:lI118|H3A0A8C
+3A0A8C:lI105|H3A0B38
+3A0B38:lI101|H3A0BE4
+3A0BE4:lI119|H3A0CA0
+3A0CA0:lI101|H3A0D5C
+3A0D5C:lI114|N
+39E34C:lI47|H39E440
+39E440:lI99|H39E544
+39E544:lI114|H39E65C
+39E65C:lI97|H39E770
+39E770:lI115|H39E884
+39E884:lI104|H39E998
+39E998:lI100|H39EA8C
+39EA8C:lI117|H39EB80
+39EB80:lI109|H39EC74
+39EC74:lI112|H39ED68
+39ED68:lI95|H39EE44
+39EE44:lI118|H39EF18
+39EF18:lI105|H39EFF4
+39EFF4:lI101|H39F0D8
+39F0D8:lI119|H39F1AC
+39F1AC:lI101|H39F280
+39F280:lI114|N
+39E1A4:lH39E274|H39E280
+39E274:t2:A5:alias,H39E35C
+39E35C:t2:H39E450,H39E458
+39E458:lI47|H39E55C
+39E55C:lI99|H39E674
+39E674:lI108|H39E788
+39E788:lI101|H39E89C
+39E89C:lI97|H39E9B0
+39E9B0:lI114|H39EAA4
+39EAA4:lI99|H39EB98
+39EB98:lI97|H39EC8C
+39EC8C:lI115|H39ED80
+39ED80:lI101|H39EE5C
+39EE5C:lI47|H39EF30
+39EF30:lI111|H39F00C
+39F00C:lI116|H39F0F0
+39F0F0:lI112|H39F1C4
+39F1C4:lI47|H39F298
+39F298:lI101|H39F354
+39F354:lI114|H39F418
+39F418:lI116|H39F4E4
+39F4E4:lI115|H39F5B0
+39F5B0:lI47|H39F684
+39F684:lI101|H39F758
+39F758:lI114|H39F82C
+39F82C:lI116|H39F910
+39F910:lI115|H39F9EC
+39F9EC:lI47|H39FAC8
+39FAC8:lI100|H39FBA4
+39FBA4:lI111|H39FC70
+39FC70:lI99|H39FD34
+39FD34:lI47|H39FE00
+39FE00:lI104|H39FEBC
+39FEBC:lI116|H39FF78
+39FF78:lI109|H3A002C
+3A002C:lI108|N
+39E450:lI47|H39E554
+39E554:lI99|H39E66C
+39E66C:lI114|H39E780
+39E780:lI97|H39E894
+39E894:lI115|H39E9A8
+39E9A8:lI104|H39EA9C
+39EA9C:lI100|H39EB90
+39EB90:lI117|H39EC84
+39EC84:lI109|H39ED78
+39ED78:lI112|H39EE54
+39EE54:lI95|H39EF28
+39EF28:lI101|H39F004
+39F004:lI114|H39F0E8
+39F0E8:lI116|H39F1BC
+39F1BC:lI115|H39F290
+39F290:lI95|H39F34C
+39F34C:lI100|H39F410
+39F410:lI111|H39F4DC
+39F4DC:lI99|N
+39E280:lH39E368|H39E374
+39E368:t2:A5:alias,H39E460
+39E460:t2:H39E564,H39E56C
+39E56C:lI47|H39E684
+39E684:lI99|H39E798
+39E798:lI108|H39E8AC
+39E8AC:lI101|H39E9C0
+39E9C0:lI97|H39EAB4
+39EAB4:lI114|H39EBA8
+39EBA8:lI99|H39EC9C
+39EC9C:lI97|H39ED90
+39ED90:lI115|H39EE6C
+39EE6C:lI101|H39EF40
+39EF40:lI47|H39F01C
+39F01C:lI111|H39F100
+39F100:lI116|H39F1D4
+39F1D4:lI112|H39F2A0
+39F2A0:lI47|H39F35C
+39F35C:lI101|H39F420
+39F420:lI114|H39F4EC
+39F4EC:lI116|H39F5B8
+39F5B8:lI115|H39F68C
+39F68C:lI47|H39F760
+39F760:lI108|H39F834
+39F834:lI105|H39F918
+39F918:lI98|H39F9F4
+39F9F4:lI47|H39FAD0
+39FAD0:lI111|H39FBAC
+39FBAC:lI98|H39FC78
+39FC78:lI115|H39FD3C
+39FD3C:lI101|H39FE08
+39FE08:lI114|H39FEC4
+39FEC4:lI118|H39FF80
+39FF80:lI101|H3A0034
+3A0034:lI114|H3A00E0
+3A00E0:lI47|H3A018C
+3A018C:lI100|H3A0240
+3A0240:lI111|H3A02FC
+3A02FC:lI99|H3A03B0
+3A03B0:lI47|H3A044C
+3A044C:lI104|H3A04F0
+3A04F0:lI116|H3A0594
+3A0594:lI109|H3A0640
+3A0640:lI108|N
+39E564:lI47|H39E67C
+39E67C:lI99|H39E790
+39E790:lI114|H39E8A4
+39E8A4:lI97|H39E9B8
+39E9B8:lI115|H39EAAC
+39EAAC:lI104|H39EBA0
+39EBA0:lI100|H39EC94
+39EC94:lI117|H39ED88
+39ED88:lI109|H39EE64
+39EE64:lI112|H39EF38
+39EF38:lI95|H39F014
+39F014:lI100|H39F0F8
+39F0F8:lI111|H39F1CC
+39F1CC:lI99|N
+39E374:lH39E46C|N
+39E46C:t2:A10:erl_script_alias,H39E574
+39E574:t2:H39E68C,H39E694
+39E694:lH39E7A8|N
+39E7A8:lI99|H39E8BC
+39E8BC:lI114|H39E9D0
+39E9D0:lI97|H39EAC4
+39EAC4:lI115|H39EBB8
+39EBB8:lI104|H39ECAC
+39ECAC:lI100|H39EDA0
+39EDA0:lI117|H39EE74
+39EE74:lI109|H39EF48
+39EF48:lI112|H39F024
+39F024:lI95|H39F108
+39F108:lI118|H39F1DC
+39F1DC:lI105|H39F2A8
+39F2A8:lI101|H39F364
+39F364:lI119|H39F428
+39F428:lI101|H39F4F4
+39F4F4:lI114|N
+39E68C:lI47|H39E7A0
+39E7A0:lI99|H39E8B4
+39E8B4:lI100|H39E9C8
+39E9C8:lI118|H39EABC
+39EABC:lI95|H39EBB0
+39EBB0:lI101|H39ECA4
+39ECA4:lI114|H39ED98
+39ED98:lI108|N
+39DB58:lN|H39DB9C
+39DB9C:lH39D9FC|H39DBEC
+39D9FC:t4:I127,I0,I0,I1
+39DBEC:lI8888|N
+3A3E20:lH3A3DFC|H3A3704
+3A3DFC:t8:A5:child,P<0.46.0>,H39DAC8,H39DAD8,A9:permanent,I2000,A6:worker,H39DAE8
+39DAE8:lAD:httpd_manager|H39DB38
+39DB38:lAA:gen_server|N
+39DAD8:t3:AD:httpd_manager,AA:start_link,H39DB30
+39DB30:lA9:undefined|H39DB78
+39DB78:lH39DB50|H39DBC0
+39DBC0:lN|N
+39DAC8:t3:AD:httpd_manager,H39D9FC,I8888
+3A3704:lH3A36E0|H39D998
+3A36E0:t8:A5:child,P<0.45.0>,H39DA18,H39DA28,A9:permanent,I2000,AA:supervisor,H39DA38
+39DA38:lAE:httpd_misc_sup|H39DAC0
+39DAC0:lAA:supervisor|N
+39DA28:t3:AE:httpd_misc_sup,A5:start,H39D958
+39D958:lH39D9FC|H39DA10
+39DA10:lI8888|H39DAB8
+39DAB8:lA7:silence|N
+39DA18:t3:AE:httpd_misc_sup,H39D9FC,I8888
+39D998:lH39DA64|N
+39DA64:t8:A5:child,P<0.44.0>,H39DAF0,H39DB00,A9:permanent,I2000,AA:supervisor,H39DB10
+39DB10:lA12:httpd_acceptor_sup|H39DB48
+39DB48:lAA:supervisor|N
+39DB00:t3:A12:httpd_acceptor_sup,A5:start,H39DB40
+39DB40:lH39D9FC|H39DB80
+39DB80:lI8888|H39DBC8
+39DBC8:lA7:silence|N
+39DAF0:t3:A12:httpd_acceptor_sup,H39D9FC,I8888
+39D960:t2:A5:local,A1A:httpd_sup__127_0_0_1__8888
+39D9CC:lAA:gen_server|H39DA90
+39DA90:lP<0.33.0>|H39DB20
+39DB20:lP<0.33.0>|H39DB60
+39DB60:lH39DBA4|H39DBB0
+39DBA4:t2:A5:local,A1A:httpd_sup__127_0_0_1__8888
+39DBB0:lAA:supervisor|H39DBF4
+39DBF4:lH39DC30|H39DC40
+39DC30:t3:H39D960,A9:httpd_sup,H39DA88
+39DC40:lN|N
+39D940:t2:AD:$initial_call,H39D9E4
+39D9E4:t3:A3:gen,A7:init_it,H39D9CC
+39D94C:t2:AA:$ancestors,H39D9F4
+39D9F4:lA8:web_tool|H39DAB0
+39DAB0:lP<0.27.0>|N
+=proc_dictionary:<0.44.0>
+H3756A8
+H3756B4
+H3756C0
+H3756CC
+=proc_stack:<0.44.0>
+36c194:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AA:supervisor
+y3:H36C030
+y4:A1E:httpd_acc_sup__127_0_0_1__8888
+y5:P<0.43.0>
+36c1b0:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H375710
+=proc_heap:<0.44.0>
+36C030:tA:A5:state,H3756D8,AB:one_for_one,H36C028,N,I500,I100,N,A12:httpd_acceptor_sup,H375730
+375730:lA7:silence|N
+36C028:lH36C004|N
+36C004:t8:A5:child,P<0.47.0>,H36BE80,H36BE90,A9:permanent,I1000,A6:worker,H36BEA0
+36BEA0:lAE:httpd_acceptor|N
+36BE90:t3:AE:httpd_acceptor,AA:start_link,H36BEE8
+36BEE8:lP<0.46.0>|H36BEF0
+36BEF0:lA7:ip_comm|H36BEF8
+36BEF8:lH36BF00|H36BF14
+36BF00:t4:I127,I0,I0,I1
+36BF14:lI8888|H36BF1C
+36BF1C:lA1B:httpd_conf__127_0_0_1__8888|H36BF24
+36BF24:lA7:silence|N
+36BE80:t3:AE:httpd_acceptor,H36BED4,I8888
+36BED4:t4:I127,I0,I0,I1
+3756D8:t2:A5:local,A1E:httpd_acc_sup__127_0_0_1__8888
+375710:lAA:gen_server|H375738
+375738:lP<0.43.0>|H375748
+375748:lP<0.43.0>|H375758
+375758:lH375760|H37576C
+375760:t2:A5:local,A1E:httpd_acc_sup__127_0_0_1__8888
+37576C:lAA:supervisor|H375774
+375774:lH37577C|H37578C
+37577C:t3:H3756D8,A12:httpd_acceptor_sup,H375730
+37578C:lN|N
+3756A8:t2:AD:$initial_call,H375718
+375718:t3:A3:gen,A7:init_it,H375710
+3756B4:t2:A9:verbosity,A7:silence
+3756C0:t2:AA:$ancestors,H375728
+375728:lA1A:httpd_sup__127_0_0_1__8888|H375740
+375740:lA8:web_tool|H375750
+375750:lP<0.27.0>|N
+3756CC:t2:A5:sname,A7:acc_sup
+=proc_dictionary:<0.45.0>
+H36F484
+H36F4F4
+H36F468
+H36F500
+=proc_stack:<0.45.0>
+36f734:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AA:supervisor
+y3:H36F5D0
+y4:A1F:httpd_misc_sup__127_0_0_1__8888
+y5:P<0.43.0>
+36f750:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H36F430
+=proc_heap:<0.45.0>
+36F5D0:tA:A5:state,H36F3FC,AB:one_for_one,N,N,I0,I1,N,AE:httpd_misc_sup,H36F408
+36F408:lA7:silence|N
+36F3FC:t2:A5:local,A1F:httpd_misc_sup__127_0_0_1__8888
+36F430:lAA:gen_server|H36F428
+36F428:lP<0.43.0>|H36F420
+36F420:lP<0.43.0>|H36F3D0
+36F3D0:lH36F3E0|H36F418
+36F3E0:t2:A5:local,A1F:httpd_misc_sup__127_0_0_1__8888
+36F418:lAA:supervisor|H36F3D8
+36F3D8:lH36F3EC|H36F410
+36F3EC:t3:H36F3FC,AE:httpd_misc_sup,H36F408
+36F410:lN|N
+36F484:t2:AD:$initial_call,H36F474
+36F474:t3:A3:gen,A7:init_it,H36F430
+36F4F4:t2:A9:verbosity,A7:silence
+36F468:t2:AA:$ancestors,H36F460
+36F460:lA1A:httpd_sup__127_0_0_1__8888|H36F440
+36F440:lA8:web_tool|H36F438
+36F438:lP<0.27.0>|N
+36F500:t2:A5:sname,A8:misc_sup
+=proc_dictionary:<0.46.0>
+H3BDA50
+H3BDA5C
+H3BDAC8
+H3BDB28
+H3BDB9C
+H3BDC00
+H3BDADC
+H3BDB3C
+=proc_stack:<0.46.0>
+39d8f4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AD:httpd_manager
+y3:H39D5A4
+y4:A16:httpd__127_0_0_1__8888
+y5:P<0.43.0>
+39d910:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H3BDAB0
+=proc_heap:<0.46.0>
+39D5A4:t9:A5:state,A7:ip_comm,A9:undefined,A1B:httpd_conf__127_0_0_1__8888,N,A9:unblocked,A9:undefined,A9:undefined,H39D430
+39D430:lH39BF40|H39D428
+39BF40:t2:A8:max_conn,I1
+39D428:lH39BC80|H39D420
+39BC80:t2:AF:last_heavy_load,A5:never
+39D420:lH39D414|N
+39D414:t2:AF:last_connection,H39D408
+39D408:t2:H39D3E8,H39D3F8
+39D3F8:t3:I11,I22,I34
+39D3E8:t3:I2004,I4,I21
+3BDAB0:lAA:gen_server|H3BDB20
+3BDB20:lP<0.43.0>|H3BDB94
+3BDB94:lP<0.43.0>|H3BDBF8
+3BDBF8:lH3BDC48|H3BDC54
+3BDC48:t2:A5:local,A16:httpd__127_0_0_1__8888
+3BDC54:lAD:httpd_manager|H3BDCAC
+3BDCAC:lH3BDD14|H3BDD1C
+3BDD14:lA9:undefined|H3BDD9C
+3BDD9C:lH3BDA84|H3BDE2C
+3BDA84:lH3BDAF0|H3BDAFC
+3BDAF0:t2:AB:server_root,H3BDB48
+3BDB48:lI47|H3BDBB0
+3BDBB0:lI99|H3BDC0C
+3BDC0C:lI108|H3BDC64
+3BDC64:lI101|H3BDCBC
+3BDCBC:lI97|H3BDD2C
+3BDD2C:lI114|H3BDDA4
+3BDDA4:lI99|H3BDE34
+3BDE34:lI97|H3BDED4
+3BDED4:lI115|H3BDF90
+3BDF90:lI101|H3BE054
+3BE054:lI47|H3BE128
+3BE128:lI111|H3BE204
+3BE204:lI116|H3BE2EC
+3BE2EC:lI112|H3BE3E0
+3BE3E0:lI47|H3BE4E4
+3BE4E4:lI101|H3BE5E8
+3BE5E8:lI114|H3BE6EC
+3BE6EC:lI116|H3BE7E0
+3BE7E0:lI115|H3BE8CC
+3BE8CC:lI47|H3BE9B8
+3BE9B8:lI108|H3BEAAC
+3BEAAC:lI105|H3BEB98
+3BEB98:lI98|H3BEC84
+3BEC84:lI47|H3BED70
+3BED70:lI119|H3BEE5C
+3BEE5C:lI101|H3BEF30
+3BEF30:lI98|H3BEFFC
+3BEFFC:lI116|H3BF0C8
+3BF0C8:lI111|H3BF19C
+3BF19C:lI111|H3BF260
+3BF260:lI108|H3BF314
+3BF314:lI47|H3BF3C0
+3BF3C0:lI112|H3BF474
+3BF474:lI114|H3BF530
+3BF530:lI105|H3BF5F4
+3BF5F4:lI118|H3BF6C8
+3BF6C8:lI47|H3BF79C
+3BF79C:lI114|H3BF870
+3BF870:lI111|H3BF954
+3BF954:lI111|H3BFA30
+3BFA30:lI116|N
+3BDAFC:lH3BDB50|H3BDB5C
+3BDB50:t2:AD:document_root,H3BDBB8
+3BDBB8:lI47|H3BDC14
+3BDC14:lI99|H3BDC6C
+3BDC6C:lI108|H3BDCC4
+3BDCC4:lI101|H3BDD34
+3BDD34:lI97|H3BDDAC
+3BDDAC:lI114|H3BDE3C
+3BDE3C:lI99|H3BDEDC
+3BDEDC:lI97|H3BDF98
+3BDF98:lI115|H3BE05C
+3BE05C:lI101|H3BE130
+3BE130:lI47|H3BE20C
+3BE20C:lI111|H3BE2F4
+3BE2F4:lI116|H3BE3E8
+3BE3E8:lI112|H3BE4EC
+3BE4EC:lI47|H3BE5F0
+3BE5F0:lI101|H3BE6F4
+3BE6F4:lI114|H3BE7E8
+3BE7E8:lI116|H3BE8D4
+3BE8D4:lI115|H3BE9C0
+3BE9C0:lI47|H3BEAB4
+3BEAB4:lI108|H3BEBA0
+3BEBA0:lI105|H3BEC8C
+3BEC8C:lI98|H3BED78
+3BED78:lI47|H3BEE64
+3BEE64:lI119|H3BEF38
+3BEF38:lI101|H3BF004
+3BF004:lI98|H3BF0D0
+3BF0D0:lI116|H3BF1A4
+3BF1A4:lI111|H3BF268
+3BF268:lI111|H3BF31C
+3BF31C:lI108|H3BF3C8
+3BF3C8:lI47|H3BF47C
+3BF47C:lI112|H3BF538
+3BF538:lI114|H3BF5FC
+3BF5FC:lI105|H3BF6D0
+3BF6D0:lI118|H3BF7A4
+3BF7A4:lI47|H3BF878
+3BF878:lI114|H3BF95C
+3BF95C:lI111|H3BFA38
+3BFA38:lI111|H3BFB0C
+3BFB0C:lI116|H3BFBE8
+3BFBE8:lI47|H3BFCB4
+3BFCB4:lI100|H3BFD78
+3BFD78:lI111|H3BFE3C
+3BFE3C:lI99|N
+3BDB5C:lH3BDBC0|H3BDBCC
+3BDBC0:t2:AA:mime_types,H3BDC1C
+3BDC1C:lH3BDC74|H3BDC80
+3BDC74:t2:H3BDCCC,H3BDCD4
+3BDCD4:lI120|H3BDD44
+3BDD44:lI45|H3BDDBC
+3BDDBC:lI119|H3BDE44
+3BDE44:lI111|H3BDEE4
+3BDEE4:lI114|H3BDFA0
+3BDFA0:lI108|H3BE064
+3BE064:lI100|H3BE138
+3BE138:lI47|H3BE214
+3BE214:lI120|H3BE2FC
+3BE2FC:lI45|H3BE3F0
+3BE3F0:lI118|H3BE4F4
+3BE4F4:lI114|H3BE5F8
+3BE5F8:lI109|H3BE6FC
+3BE6FC:lI108|N
+3BDCCC:lI119|H3BDD3C
+3BDD3C:lI114|H3BDDB4
+3BDDB4:lI108|N
+3BDC80:lH3BDCDC|H3BDCE8
+3BDCDC:t2:H3BDD4C,H3BDD54
+3BDD54:lI120|H3BDDCC
+3BDDCC:lI45|H3BDE54
+3BDE54:lI119|H3BDEF4
+3BDEF4:lI111|H3BDFA8
+3BDFA8:lI114|H3BE06C
+3BE06C:lI108|H3BE140
+3BE140:lI100|H3BE21C
+3BE21C:lI47|H3BE304
+3BE304:lI120|H3BE3F8
+3BE3F8:lI45|H3BE4FC
+3BE4FC:lI118|H3BE600
+3BE600:lI114|H3BE704
+3BE704:lI109|H3BE7F0
+3BE7F0:lI108|N
+3BDD4C:lI118|H3BDDC4
+3BDDC4:lI114|H3BDE4C
+3BDE4C:lI109|H3BDEEC
+3BDEEC:lI108|N
+3BDCE8:lH3BDD5C|H3BDD68
+3BDD5C:t2:H3BDDD4,H3BDDDC
+3BDDDC:lI120|H3BDE64
+3BDE64:lI45|H3BDF04
+3BDF04:lI99|H3BDFB0
+3BDFB0:lI111|H3BE074
+3BE074:lI110|H3BE148
+3BE148:lI102|H3BE224
+3BE224:lI101|H3BE30C
+3BE30C:lI114|H3BE400
+3BE400:lI101|H3BE504
+3BE504:lI110|H3BE608
+3BE608:lI99|H3BE70C
+3BE70C:lI101|H3BE7F8
+3BE7F8:lI47|H3BE8DC
+3BE8DC:lI120|H3BE9C8
+3BE9C8:lI45|H3BEABC
+3BEABC:lI99|H3BEBA8
+3BEBA8:lI111|H3BEC94
+3BEC94:lI111|H3BED80
+3BED80:lI108|H3BEE6C
+3BEE6C:lI116|H3BEF40
+3BEF40:lI97|H3BF00C
+3BF00C:lI108|H3BF0D8
+3BF0D8:lI107|N
+3BDDD4:lI105|H3BDE5C
+3BDE5C:lI99|H3BDEFC
+3BDEFC:lI101|N
+3BDD68:lH3BDDE4|H3BDDF0
+3BDDE4:t2:H3BDE6C,H3BDE74
+3BDE74:lI118|H3BDF14
+3BDF14:lI105|H3BDFC0
+3BDFC0:lI100|H3BE084
+3BE084:lI101|H3BE158
+3BE158:lI111|H3BE22C
+3BE22C:lI47|H3BE314
+3BE314:lI120|H3BE408
+3BE408:lI45|H3BE50C
+3BE50C:lI115|H3BE610
+3BE610:lI103|H3BE714
+3BE714:lI105|H3BE800
+3BE800:lI45|H3BE8E4
+3BE8E4:lI109|H3BE9D0
+3BE9D0:lI111|H3BEAC4
+3BEAC4:lI118|H3BEBB0
+3BEBB0:lI105|H3BEC9C
+3BEC9C:lI101|N
+3BDE6C:lI109|H3BDF0C
+3BDF0C:lI111|H3BDFB8
+3BDFB8:lI118|H3BE07C
+3BE07C:lI105|H3BE150
+3BE150:lI101|N
+3BDDF0:lH3BDE7C|H3BDE88
+3BDE7C:t2:H3BDF1C,H3BDF24
+3BDF24:lI118|H3BDFD0
+3BDFD0:lI105|H3BE094
+3BE094:lI100|H3BE160
+3BE160:lI101|H3BE234
+3BE234:lI111|H3BE31C
+3BE31C:lI47|H3BE410
+3BE410:lI120|H3BE514
+3BE514:lI45|H3BE618
+3BE618:lI109|H3BE71C
+3BE71C:lI115|H3BE808
+3BE808:lI118|H3BE8EC
+3BE8EC:lI105|H3BE9D8
+3BE9D8:lI100|H3BEACC
+3BEACC:lI101|H3BEBB8
+3BEBB8:lI111|N
+3BDF1C:lI97|H3BDFC8
+3BDFC8:lI118|H3BE08C
+3BE08C:lI105|N
+3BDE88:lH3BDF2C|H3BDF38
+3BDF2C:t2:H3BDFD8,H3BDFE0
+3BDFE0:lI118|H3BE0A4
+3BE0A4:lI105|H3BE168
+3BE168:lI100|H3BE23C
+3BE23C:lI101|H3BE324
+3BE324:lI111|H3BE418
+3BE418:lI47|H3BE51C
+3BE51C:lI113|H3BE620
+3BE620:lI117|H3BE724
+3BE724:lI105|H3BE810
+3BE810:lI99|H3BE8F4
+3BE8F4:lI107|H3BE9E0
+3BE9E0:lI116|H3BEAD4
+3BEAD4:lI105|H3BEBC0
+3BEBC0:lI109|H3BECA4
+3BECA4:lI101|N
+3BDFD8:lI113|H3BE09C
+3BE09C:lI116|N
+3BDF38:lH3BDFE8|H3BDFF4
+3BDFE8:t2:H3BE0AC,H3BE0B4
+3BE0B4:lI118|H3BE178
+3BE178:lI105|H3BE24C
+3BE24C:lI100|H3BE32C
+3BE32C:lI101|H3BE420
+3BE420:lI111|H3BE524
+3BE524:lI47|H3BE628
+3BE628:lI113|H3BE72C
+3BE72C:lI117|H3BE818
+3BE818:lI105|H3BE8FC
+3BE8FC:lI99|H3BE9E8
+3BE9E8:lI107|H3BEADC
+3BEADC:lI116|H3BEBC8
+3BEBC8:lI105|H3BECAC
+3BECAC:lI109|H3BED88
+3BED88:lI101|N
+3BE0AC:lI109|H3BE170
+3BE170:lI111|H3BE244
+3BE244:lI118|N
+3BDFF4:lH3BE0BC|H3BE0C8
+3BE0BC:t2:H3BE180,H3BE188
+3BE188:lI118|H3BE25C
+3BE25C:lI105|H3BE33C
+3BE33C:lI100|H3BE430
+3BE430:lI101|H3BE52C
+3BE52C:lI111|H3BE630
+3BE630:lI47|H3BE734
+3BE734:lI109|H3BE820
+3BE820:lI112|H3BE904
+3BE904:lI101|H3BE9F0
+3BE9F0:lI103|N
+3BE180:lI109|H3BE254
+3BE254:lI112|H3BE334
+3BE334:lI101|H3BE428
+3BE428:lI103|N
+3BE0C8:lH3BE190|H3BE19C
+3BE190:t2:H3BE264,H3BE26C
+3BE26C:lI118|H3BE34C
+3BE34C:lI105|H3BE440
+3BE440:lI100|H3BE534
+3BE534:lI101|H3BE638
+3BE638:lI111|H3BE73C
+3BE73C:lI47|H3BE828
+3BE828:lI109|H3BE90C
+3BE90C:lI112|H3BE9F8
+3BE9F8:lI101|H3BEAE4
+3BEAE4:lI103|N
+3BE264:lI109|H3BE344
+3BE344:lI112|H3BE438
+3BE438:lI103|N
+3BE19C:lH3BE274|H3BE280
+3BE274:t2:H3BE354,H3BE35C
+3BE35C:lI118|H3BE450
+3BE450:lI105|H3BE544
+3BE544:lI100|H3BE640
+3BE640:lI101|H3BE744
+3BE744:lI111|H3BE830
+3BE830:lI47|H3BE914
+3BE914:lI109|H3BEA00
+3BEA00:lI112|H3BEAEC
+3BEAEC:lI101|H3BEBD0
+3BEBD0:lI103|N
+3BE354:lI109|H3BE448
+3BE448:lI112|H3BE53C
+3BE53C:lI101|N
+3BE280:lH3BE364|H3BE370
+3BE364:t2:H3BE458,H3BE460
+3BE460:lI116|H3BE554
+3BE554:lI101|H3BE650
+3BE650:lI120|H3BE754
+3BE754:lI116|H3BE838
+3BE838:lI47|H3BE91C
+3BE91C:lI120|H3BEA08
+3BEA08:lI45|H3BEAF4
+3BEAF4:lI115|H3BEBD8
+3BEBD8:lI103|H3BECB4
+3BECB4:lI109|H3BED90
+3BED90:lI108|N
+3BE458:lI115|H3BE54C
+3BE54C:lI103|H3BE648
+3BE648:lI109|H3BE74C
+3BE74C:lI108|N
+3BE370:lH3BE468|H3BE474
+3BE468:t2:H3BE55C,H3BE564
+3BE564:lI116|H3BE660
+3BE660:lI101|H3BE764
+3BE764:lI120|H3BE840
+3BE840:lI116|H3BE924
+3BE924:lI47|H3BEA10
+3BEA10:lI120|H3BEAFC
+3BEAFC:lI45|H3BEBE0
+3BEBE0:lI115|H3BECBC
+3BECBC:lI103|H3BED98
+3BED98:lI109|H3BEE74
+3BEE74:lI108|N
+3BE55C:lI115|H3BE658
+3BE658:lI103|H3BE75C
+3BE75C:lI109|N
+3BE474:lH3BE56C|H3BE578
+3BE56C:t2:H3BE668,H3BE670
+3BE670:lI116|H3BE774
+3BE774:lI101|H3BE850
+3BE850:lI120|H3BE92C
+3BE92C:lI116|H3BEA18
+3BEA18:lI47|H3BEB04
+3BEB04:lI120|H3BEBE8
+3BEBE8:lI45|H3BECC4
+3BECC4:lI115|H3BEDA0
+3BEDA0:lI101|H3BEE7C
+3BEE7C:lI116|H3BEF48
+3BEF48:lI101|H3BF014
+3BF014:lI120|H3BF0E0
+3BF0E0:lI116|N
+3BE668:lI101|H3BE76C
+3BE76C:lI116|H3BE848
+3BE848:lI120|N
+3BE578:lH3BE678|H3BE684
+3BE678:t2:H3BE77C,H3BE784
+3BE784:lI116|H3BE860
+3BE860:lI101|H3BE93C
+3BE93C:lI120|H3BEA20
+3BEA20:lI116|H3BEB0C
+3BEB0C:lI47|H3BEBF0
+3BEBF0:lI116|H3BECCC
+3BECCC:lI97|H3BEDA8
+3BEDA8:lI98|H3BEE84
+3BEE84:lI45|H3BEF50
+3BEF50:lI115|H3BF01C
+3BF01C:lI101|H3BF0E8
+3BF0E8:lI112|H3BF1AC
+3BF1AC:lI97|H3BF270
+3BF270:lI114|H3BF324
+3BF324:lI97|H3BF3D0
+3BF3D0:lI116|H3BF484
+3BF484:lI101|H3BF540
+3BF540:lI100|H3BF604
+3BF604:lI45|H3BF6D8
+3BF6D8:lI118|H3BF7AC
+3BF7AC:lI97|H3BF880
+3BF880:lI108|H3BF964
+3BF964:lI117|H3BFA40
+3BFA40:lI101|H3BFB14
+3BFB14:lI115|N
+3BE77C:lI116|H3BE858
+3BE858:lI115|H3BE934
+3BE934:lI118|N
+3BE684:lH3BE78C|H3BE798
+3BE78C:t2:H3BE868,H3BE870
+3BE870:lI116|H3BE94C
+3BE94C:lI101|H3BEA30
+3BEA30:lI120|H3BEB14
+3BEB14:lI116|H3BEBF8
+3BEBF8:lI47|H3BECD4
+3BECD4:lI114|H3BEDB0
+3BEDB0:lI105|H3BEE8C
+3BEE8C:lI99|H3BEF58
+3BEF58:lI104|H3BF024
+3BF024:lI116|H3BF0F0
+3BF0F0:lI101|H3BF1B4
+3BF1B4:lI120|H3BF278
+3BF278:lI116|N
+3BE868:lI114|H3BE944
+3BE944:lI116|H3BEA28
+3BEA28:lI120|N
+3BE798:lH3BE878|H3BE884
+3BE878:t2:H3BE954,H3BE95C
+3BE95C:lI116|H3BEA40
+3BEA40:lI101|H3BEB24
+3BEB24:lI120|H3BEC00
+3BEC00:lI116|H3BECDC
+3BECDC:lI47|H3BEDB8
+3BEDB8:lI112|H3BEE94
+3BEE94:lI108|H3BEF60
+3BEF60:lI97|H3BF02C
+3BF02C:lI105|H3BF0F8
+3BF0F8:lI110|N
+3BE954:lI116|H3BEA38
+3BEA38:lI120|H3BEB1C
+3BEB1C:lI116|N
+3BE884:lH3BE964|H3BE970
+3BE964:t2:H3BEA48,H3BEA50
+3BEA50:lI116|H3BEB34
+3BEB34:lI101|H3BEC10
+3BEC10:lI120|H3BECEC
+3BECEC:lI116|H3BEDC8
+3BEDC8:lI47|H3BEE9C
+3BEE9C:lI120|H3BEF68
+3BEF68:lI45|H3BF034
+3BF034:lI115|H3BF100
+3BF100:lI101|H3BF1BC
+3BF1BC:lI114|H3BF280
+3BF280:lI118|H3BF32C
+3BF32C:lI101|H3BF3D8
+3BF3D8:lI114|H3BF48C
+3BF48C:lI45|H3BF548
+3BF548:lI112|H3BF60C
+3BF60C:lI97|H3BF6E0
+3BF6E0:lI114|H3BF7B4
+3BF7B4:lI115|H3BF888
+3BF888:lI101|H3BF96C
+3BF96C:lI100|H3BFA48
+3BFA48:lI45|H3BFB1C
+3BFB1C:lI104|H3BFBF0
+3BFBF0:lI116|H3BFCBC
+3BFCBC:lI109|H3BFD80
+3BFD80:lI108|N
+3BEA48:lI115|H3BEB2C
+3BEB2C:lI104|H3BEC08
+3BEC08:lI116|H3BECE4
+3BECE4:lI109|H3BEDC0
+3BEDC0:lI108|N
+3BE970:lH3BEA58|H3BEA64
+3BEA58:t2:H3BEB3C,H3BEB44
+3BEB44:lI116|H3BEC20
+3BEC20:lI101|H3BECFC
+3BECFC:lI120|H3BEDD8
+3BEDD8:lI116|H3BEEA4
+3BEEA4:lI47|H3BEF70
+3BEF70:lI104|H3BF03C
+3BF03C:lI116|H3BF108
+3BF108:lI109|H3BF1C4
+3BF1C4:lI108|N
+3BEB3C:lI104|H3BEC18
+3BEC18:lI116|H3BECF4
+3BECF4:lI109|H3BEDD0
+3BEDD0:lI108|N
+3BEA64:lH3BEB4C|H3BEB58
+3BEB4C:t2:H3BEC28,H3BEC30
+3BEC30:lI116|H3BED0C
+3BED0C:lI101|H3BEDE8
+3BEDE8:lI120|H3BEEAC
+3BEEAC:lI116|H3BEF78
+3BEF78:lI47|H3BF044
+3BF044:lI104|H3BF110
+3BF110:lI116|H3BF1CC
+3BF1CC:lI109|H3BF288
+3BF288:lI108|N
+3BEC28:lI104|H3BED04
+3BED04:lI116|H3BEDE0
+3BEDE0:lI109|N
+3BEB58:lH3BEC38|H3BEC44
+3BEC38:t2:H3BED14,H3BED1C
+3BED1C:lI105|H3BEDF8
+3BEDF8:lI109|H3BEEBC
+3BEEBC:lI97|H3BEF80
+3BEF80:lI103|H3BF04C
+3BF04C:lI101|H3BF118
+3BF118:lI47|H3BF1D4
+3BF1D4:lI120|H3BF290
+3BF290:lI45|H3BF334
+3BF334:lI120|H3BF3E0
+3BF3E0:lI119|H3BF494
+3BF494:lI105|H3BF550
+3BF550:lI110|H3BF614
+3BF614:lI100|H3BF6E8
+3BF6E8:lI111|H3BF7BC
+3BF7BC:lI119|H3BF890
+3BF890:lI100|H3BF974
+3BF974:lI117|H3BFA50
+3BFA50:lI109|H3BFB24
+3BFB24:lI112|N
+3BED14:lI120|H3BEDF0
+3BEDF0:lI119|H3BEEB4
+3BEEB4:lI100|N
+3BEC44:lH3BED24|H3BED30
+3BED24:t2:H3BEE00,H3BEE08
+3BEE08:lI105|H3BEECC
+3BEECC:lI109|H3BEF90
+3BEF90:lI97|H3BF054
+3BF054:lI103|H3BF120
+3BF120:lI101|H3BF1DC
+3BF1DC:lI47|H3BF298
+3BF298:lI120|H3BF33C
+3BF33C:lI45|H3BF3E8
+3BF3E8:lI120|H3BF49C
+3BF49C:lI112|H3BF558
+3BF558:lI105|H3BF61C
+3BF61C:lI120|H3BF6F0
+3BF6F0:lI109|H3BF7C4
+3BF7C4:lI97|H3BF898
+3BF898:lI112|N
+3BEE00:lI120|H3BEEC4
+3BEEC4:lI112|H3BEF88
+3BEF88:lI109|N
+3BED30:lH3BEE10|H3BEE1C
+3BEE10:t2:H3BEED4,H3BEEDC
+3BEEDC:lI105|H3BEFA0
+3BEFA0:lI109|H3BF064
+3BF064:lI97|H3BF128
+3BF128:lI103|H3BF1E4
+3BF1E4:lI101|H3BF2A0
+3BF2A0:lI47|H3BF344
+3BF344:lI120|H3BF3F0
+3BF3F0:lI45|H3BF4A4
+3BF4A4:lI120|H3BF560
+3BF560:lI98|H3BF624
+3BF624:lI105|H3BF6F8
+3BF6F8:lI116|H3BF7CC
+3BF7CC:lI109|H3BF8A0
+3BF8A0:lI97|H3BF97C
+3BF97C:lI112|N
+3BEED4:lI120|H3BEF98
+3BEF98:lI98|H3BF05C
+3BF05C:lI109|N
+3BEE1C:lH3BEEE4|H3BEEF0
+3BEEE4:t2:H3BEFA8,H3BEFB0
+3BEFB0:lI105|H3BF074
+3BF074:lI109|H3BF138
+3BF138:lI97|H3BF1EC
+3BF1EC:lI103|H3BF2A8
+3BF2A8:lI101|H3BF34C
+3BF34C:lI47|H3BF3F8
+3BF3F8:lI120|H3BF4AC
+3BF4AC:lI45|H3BF568
+3BF568:lI114|H3BF62C
+3BF62C:lI103|H3BF700
+3BF700:lI98|N
+3BEFA8:lI114|H3BF06C
+3BF06C:lI103|H3BF130
+3BF130:lI98|N
+3BEEF0:lH3BEFB8|H3BEFC4
+3BEFB8:t2:H3BF07C,H3BF084
+3BF084:lI105|H3BF148
+3BF148:lI109|H3BF1FC
+3BF1FC:lI97|H3BF2B0
+3BF2B0:lI103|H3BF354
+3BF354:lI101|H3BF400
+3BF400:lI47|H3BF4B4
+3BF4B4:lI120|H3BF570
+3BF570:lI45|H3BF634
+3BF634:lI112|H3BF708
+3BF708:lI111|H3BF7D4
+3BF7D4:lI114|H3BF8A8
+3BF8A8:lI116|H3BF984
+3BF984:lI97|H3BFA58
+3BFA58:lI98|H3BFB2C
+3BFB2C:lI108|H3BFBF8
+3BFBF8:lI101|H3BFCC4
+3BFCC4:lI45|H3BFD88
+3BFD88:lI112|H3BFE44
+3BFE44:lI105|H3BFEF0
+3BFEF0:lI120|H3BFFA4
+3BFFA4:lI109|H3C0050
+3C0050:lI97|H3C00FC
+3C00FC:lI112|N
+3BF07C:lI112|H3BF140
+3BF140:lI112|H3BF1F4
+3BF1F4:lI109|N
+3BEFC4:lH3BF08C|H3BF098
+3BF08C:t2:H3BF150,H3BF158
+3BF158:lI105|H3BF20C
+3BF20C:lI109|H3BF2C0
+3BF2C0:lI97|H3BF35C
+3BF35C:lI103|H3BF408
+3BF408:lI101|H3BF4BC
+3BF4BC:lI47|H3BF578
+3BF578:lI120|H3BF63C
+3BF63C:lI45|H3BF710
+3BF710:lI112|H3BF7DC
+3BF7DC:lI111|H3BF8B0
+3BF8B0:lI114|H3BF98C
+3BF98C:lI116|H3BFA60
+3BFA60:lI97|H3BFB34
+3BFB34:lI98|H3BFC00
+3BFC00:lI108|H3BFCCC
+3BFCCC:lI101|H3BFD90
+3BFD90:lI45|H3BFE4C
+3BFE4C:lI103|H3BFEF8
+3BFEF8:lI114|H3BFFAC
+3BFFAC:lI97|H3C0058
+3C0058:lI121|H3C0104
+3C0104:lI109|H3C01A8
+3C01A8:lI97|H3C025C
+3C025C:lI112|N
+3BF150:lI112|H3BF204
+3BF204:lI103|H3BF2B8
+3BF2B8:lI109|N
+3BF098:lH3BF160|H3BF16C
+3BF160:t2:H3BF214,H3BF21C
+3BF21C:lI105|H3BF2D0
+3BF2D0:lI109|H3BF36C
+3BF36C:lI97|H3BF410
+3BF410:lI103|H3BF4C4
+3BF4C4:lI101|H3BF580
+3BF580:lI47|H3BF644
+3BF644:lI120|H3BF718
+3BF718:lI45|H3BF7E4
+3BF7E4:lI112|H3BF8B8
+3BF8B8:lI111|H3BF994
+3BF994:lI114|H3BFA68
+3BFA68:lI116|H3BFB3C
+3BFB3C:lI97|H3BFC08
+3BFC08:lI98|H3BFCD4
+3BFCD4:lI108|H3BFD98
+3BFD98:lI101|H3BFE54
+3BFE54:lI45|H3BFF00
+3BFF00:lI98|H3BFFB4
+3BFFB4:lI105|H3C0060
+3C0060:lI116|H3C010C
+3C010C:lI109|H3C01B0
+3C01B0:lI97|H3C0264
+3C0264:lI112|N
+3BF214:lI112|H3BF2C8
+3BF2C8:lI98|H3BF364
+3BF364:lI109|N
+3BF16C:lH3BF224|H3BF230
+3BF224:t2:H3BF2D8,H3BF2E0
+3BF2E0:lI105|H3BF37C
+3BF37C:lI109|H3BF420
+3BF420:lI97|H3BF4CC
+3BF4CC:lI103|H3BF588
+3BF588:lI101|H3BF64C
+3BF64C:lI47|H3BF720
+3BF720:lI120|H3BF7EC
+3BF7EC:lI45|H3BF8C0
+3BF8C0:lI112|H3BF99C
+3BF99C:lI111|H3BFA70
+3BFA70:lI114|H3BFB44
+3BFB44:lI116|H3BFC10
+3BFC10:lI97|H3BFCDC
+3BFCDC:lI98|H3BFDA0
+3BFDA0:lI108|H3BFE5C
+3BFE5C:lI101|H3BFF08
+3BFF08:lI45|H3BFFBC
+3BFFBC:lI97|H3C0068
+3C0068:lI110|H3C0114
+3C0114:lI121|H3C01B8
+3C01B8:lI109|H3C026C
+3C026C:lI97|H3C0318
+3C0318:lI112|N
+3BF2D8:lI112|H3BF374
+3BF374:lI110|H3BF418
+3BF418:lI109|N
+3BF230:lH3BF2E8|H3BF2F4
+3BF2E8:t2:H3BF384,H3BF38C
+3BF38C:lI105|H3BF430
+3BF430:lI109|H3BF4DC
+3BF4DC:lI97|H3BF590
+3BF590:lI103|H3BF654
+3BF654:lI101|H3BF728
+3BF728:lI47|H3BF7F4
+3BF7F4:lI120|H3BF8C8
+3BF8C8:lI45|H3BF9A4
+3BF9A4:lI99|H3BFA78
+3BFA78:lI109|H3BFB4C
+3BFB4C:lI117|H3BFC18
+3BFC18:lI45|H3BFCE4
+3BFCE4:lI114|H3BFDA8
+3BFDA8:lI97|H3BFE64
+3BFE64:lI115|H3BFF10
+3BFF10:lI116|H3BFFC4
+3BFFC4:lI101|H3C0070
+3C0070:lI114|N
+3BF384:lI114|H3BF428
+3BF428:lI97|H3BF4D4
+3BF4D4:lI115|N
+3BF2F4:lH3BF394|H3BF3A0
+3BF394:t2:H3BF438,H3BF440
+3BF440:lI105|H3BF4EC
+3BF4EC:lI109|H3BF5A0
+3BF5A0:lI97|H3BF664
+3BF664:lI103|H3BF730
+3BF730:lI101|H3BF7FC
+3BF7FC:lI47|H3BF8D0
+3BF8D0:lI116|H3BF9AC
+3BF9AC:lI105|H3BFA80
+3BFA80:lI102|H3BFB54
+3BFB54:lI102|N
+3BF438:lI116|H3BF4E4
+3BF4E4:lI105|H3BF598
+3BF598:lI102|H3BF65C
+3BF65C:lI102|N
+3BF3A0:lH3BF448|H3BF454
+3BF448:t2:H3BF4F4,H3BF4FC
+3BF4FC:lI105|H3BF5B0
+3BF5B0:lI109|H3BF674
+3BF674:lI97|H3BF738
+3BF738:lI103|H3BF804
+3BF804:lI101|H3BF8D8
+3BF8D8:lI47|H3BF9B4
+3BF9B4:lI116|H3BFA88
+3BFA88:lI105|H3BFB5C
+3BFB5C:lI102|H3BFC20
+3BFC20:lI102|N
+3BF4F4:lI116|H3BF5A8
+3BF5A8:lI105|H3BF66C
+3BF66C:lI102|N
+3BF454:lH3BF504|H3BF510
+3BF504:t2:H3BF5B8,H3BF5C0
+3BF5C0:lI105|H3BF684
+3BF684:lI109|H3BF748
+3BF748:lI97|H3BF80C
+3BF80C:lI103|H3BF8E0
+3BF8E0:lI101|H3BF9BC
+3BF9BC:lI47|H3BFA90
+3BFA90:lI112|H3BFB64
+3BFB64:lI110|H3BFC28
+3BFC28:lI103|N
+3BF5B8:lI112|H3BF67C
+3BF67C:lI110|H3BF740
+3BF740:lI103|N
+3BF510:lH3BF5C8|H3BF5D4
+3BF5C8:t2:H3BF68C,H3BF694
+3BF694:lI105|H3BF758
+3BF758:lI109|H3BF81C
+3BF81C:lI97|H3BF8F0
+3BF8F0:lI103|H3BF9C4
+3BF9C4:lI101|H3BFA98
+3BFA98:lI47|H3BFB6C
+3BFB6C:lI106|H3BFC30
+3BFC30:lI112|H3BFCEC
+3BFCEC:lI101|H3BFDB0
+3BFDB0:lI103|N
+3BF68C:lI106|H3BF750
+3BF750:lI112|H3BF814
+3BF814:lI101|H3BF8E8
+3BF8E8:lI103|N
+3BF5D4:lH3BF69C|H3BF6A8
+3BF69C:t2:H3BF760,H3BF768
+3BF768:lI105|H3BF82C
+3BF82C:lI109|H3BF900
+3BF900:lI97|H3BF9CC
+3BF9CC:lI103|H3BFAA0
+3BFAA0:lI101|H3BFB74
+3BFB74:lI47|H3BFC38
+3BFC38:lI106|H3BFCF4
+3BFCF4:lI112|H3BFDB8
+3BFDB8:lI101|H3BFE6C
+3BFE6C:lI103|N
+3BF760:lI106|H3BF824
+3BF824:lI112|H3BF8F8
+3BF8F8:lI103|N
+3BF6A8:lH3BF770|H3BF77C
+3BF770:t2:H3BF834,H3BF83C
+3BF83C:lI105|H3BF910
+3BF910:lI109|H3BF9DC
+3BF9DC:lI97|H3BFAA8
+3BFAA8:lI103|H3BFB7C
+3BFB7C:lI101|H3BFC40
+3BFC40:lI47|H3BFCFC
+3BFCFC:lI106|H3BFDC0
+3BFDC0:lI112|H3BFE74
+3BFE74:lI101|H3BFF18
+3BFF18:lI103|N
+3BF834:lI106|H3BF908
+3BF908:lI112|H3BF9D4
+3BF9D4:lI101|N
+3BF77C:lH3BF844|H3BF850
+3BF844:t2:H3BF918,H3BF920
+3BF920:lI105|H3BF9EC
+3BF9EC:lI109|H3BFAB8
+3BFAB8:lI97|H3BFB84
+3BFB84:lI103|H3BFC48
+3BFC48:lI101|H3BFD04
+3BFD04:lI47|H3BFDC8
+3BFDC8:lI105|H3BFE7C
+3BFE7C:lI101|H3BFF20
+3BFF20:lI102|N
+3BF918:lI105|H3BF9E4
+3BF9E4:lI101|H3BFAB0
+3BFAB0:lI102|N
+3BF850:lH3BF928|H3BF934
+3BF928:t2:H3BF9F4,H3BF9FC
+3BF9FC:lI105|H3BFAC8
+3BFAC8:lI109|H3BFB94
+3BFB94:lI97|H3BFC50
+3BFC50:lI103|H3BFD0C
+3BFD0C:lI101|H3BFDD0
+3BFDD0:lI47|H3BFE84
+3BFE84:lI103|H3BFF28
+3BFF28:lI105|H3BFFCC
+3BFFCC:lI102|N
+3BF9F4:lI103|H3BFAC0
+3BFAC0:lI105|H3BFB8C
+3BFB8C:lI102|N
+3BF934:lH3BFA04|H3BFA10
+3BFA04:t2:H3BFAD0,H3BFAD8
+3BFAD8:lI99|H3BFBA4
+3BFBA4:lI104|H3BFC60
+3BFC60:lI101|H3BFD14
+3BFD14:lI109|H3BFDD8
+3BFDD8:lI105|H3BFE8C
+3BFE8C:lI99|H3BFF30
+3BFF30:lI97|H3BFFD4
+3BFFD4:lI108|H3C0078
+3C0078:lI47|H3C011C
+3C011C:lI120|H3C01C0
+3C01C0:lI45|H3C0274
+3C0274:lI112|H3C0320
+3C0320:lI100|H3C03CC
+3C03CC:lI98|N
+3BFAD0:lI112|H3BFB9C
+3BFB9C:lI100|H3BFC58
+3BFC58:lI98|N
+3BFA10:lH3BFAE0|H3BFAEC
+3BFAE0:t2:H3BFBAC,H3BFBB4
+3BFBB4:lI99|H3BFC70
+3BFC70:lI104|H3BFD24
+3BFD24:lI101|H3BFDE0
+3BFDE0:lI109|H3BFE94
+3BFE94:lI105|H3BFF38
+3BFF38:lI99|H3BFFDC
+3BFFDC:lI97|H3C0080
+3C0080:lI108|H3C0124
+3C0124:lI47|H3C01C8
+3C01C8:lI120|H3C027C
+3C027C:lI45|H3C0328
+3C0328:lI112|H3C03D4
+3C03D4:lI100|H3C0460
+3C0460:lI98|N
+3BFBAC:lI120|H3BFC68
+3BFC68:lI121|H3BFD1C
+3BFD1C:lI122|N
+3BFAEC:lH3BFBBC|H3BFBC8
+3BFBBC:t2:H3BFC78,H3BFC80
+3BFC80:lI97|H3BFD34
+3BFD34:lI117|H3BFDF0
+3BFDF0:lI100|H3BFE9C
+3BFE9C:lI105|H3BFF40
+3BFF40:lI111|H3BFFE4
+3BFFE4:lI47|H3C0088
+3C0088:lI120|H3C012C
+3C012C:lI45|H3C01D0
+3C01D0:lI119|H3C0284
+3C0284:lI97|H3C0330
+3C0330:lI118|N
+3BFC78:lI119|H3BFD2C
+3BFD2C:lI97|H3BFDE8
+3BFDE8:lI118|N
+3BFBC8:lH3BFC88|H3BFC94
+3BFC88:t2:H3BFD3C,H3BFD44
+3BFD44:lI97|H3BFE00
+3BFE00:lI117|H3BFEA4
+3BFEA4:lI100|H3BFF48
+3BFF48:lI105|H3BFFEC
+3BFFEC:lI111|H3C0090
+3C0090:lI47|H3C0134
+3C0134:lI120|H3C01D8
+3C01D8:lI45|H3C028C
+3C028C:lI114|H3C0338
+3C0338:lI101|H3C03DC
+3C03DC:lI97|H3C0468
+3C0468:lI108|H3C04FC
+3C04FC:lI97|H3C0598
+3C0598:lI117|H3C063C
+3C063C:lI100|H3C06E8
+3C06E8:lI105|H3C0794
+3C0794:lI111|N
+3BFD3C:lI114|H3BFDF8
+3BFDF8:lI97|N
+3BFC94:lH3BFD4C|H3BFD58
+3BFD4C:t2:H3BFE08,H3BFE10
+3BFE10:lI97|H3BFEB4
+3BFEB4:lI117|H3BFF58
+3BFF58:lI100|H3BFFF4
+3BFFF4:lI105|H3C0098
+3C0098:lI111|H3C013C
+3C013C:lI47|H3C01E0
+3C01E0:lI120|H3C0294
+3C0294:lI45|H3C0340
+3C0340:lI112|H3C03E4
+3C03E4:lI110|H3C0470
+3C0470:lI45|H3C0504
+3C0504:lI114|H3C05A0
+3C05A0:lI101|H3C0644
+3C0644:lI97|H3C06F0
+3C06F0:lI108|H3C079C
+3C079C:lI97|H3C0838
+3C0838:lI117|H3C08C4
+3C08C4:lI100|H3C0958
+3C0958:lI105|H3C09EC
+3C09EC:lI111|H3C0A88
+3C0A88:lI45|H3C0B2C
+3C0B2C:lI112|H3C0BD0
+3C0BD0:lI108|H3C0C84
+3C0C84:lI117|H3C0D38
+3C0D38:lI103|H3C0DEC
+3C0DEC:lI105|H3C0EA0
+3C0EA0:lI110|N
+3BFE08:lI114|H3BFEAC
+3BFEAC:lI112|H3BFF50
+3BFF50:lI109|N
+3BFD58:lH3BFE18|H3BFE24
+3BFE18:t2:H3BFEBC,H3BFEC4
+3BFEC4:lI97|H3BFF68
+3BFF68:lI117|H3C0004
+3C0004:lI100|H3C00A0
+3C00A0:lI105|H3C0144
+3C0144:lI111|H3C01E8
+3C01E8:lI47|H3C029C
+3C029C:lI120|H3C0348
+3C0348:lI45|H3C03EC
+3C03EC:lI112|H3C0478
+3C0478:lI110|H3C050C
+3C050C:lI45|H3C05A8
+3C05A8:lI114|H3C064C
+3C064C:lI101|H3C06F8
+3C06F8:lI97|H3C07A4
+3C07A4:lI108|H3C0840
+3C0840:lI97|H3C08CC
+3C08CC:lI117|H3C0960
+3C0960:lI100|H3C09F4
+3C09F4:lI105|H3C0A90
+3C0A90:lI111|N
+3BFEBC:lI114|H3BFF60
+3BFF60:lI97|H3BFFFC
+3BFFFC:lI109|N
+3BFE24:lH3BFECC|H3BFED8
+3BFECC:t2:H3BFF70,H3BFF78
+3BFF78:lI97|H3C0014
+3C0014:lI117|H3C00B0
+3C00B0:lI100|H3C014C
+3C014C:lI105|H3C01F0
+3C01F0:lI111|H3C02A4
+3C02A4:lI47|H3C0350
+3C0350:lI120|H3C03F4
+3C03F4:lI45|H3C0480
+3C0480:lI97|H3C0514
+3C0514:lI105|H3C05B0
+3C05B0:lI102|H3C0654
+3C0654:lI102|N
+3BFF70:lI97|H3C000C
+3C000C:lI105|H3C00A8
+3C00A8:lI102|N
+3BFED8:lH3BFF80|H3BFF8C
+3BFF80:t2:H3C001C,H3C0024
+3C0024:lI97|H3C00C0
+3C00C0:lI117|H3C015C
+3C015C:lI100|H3C0200
+3C0200:lI105|H3C02AC
+3C02AC:lI111|H3C0358
+3C0358:lI47|H3C03FC
+3C03FC:lI120|H3C0488
+3C0488:lI45|H3C051C
+3C051C:lI97|H3C05B8
+3C05B8:lI105|H3C065C
+3C065C:lI102|H3C0700
+3C0700:lI102|N
+3C001C:lI97|H3C00B8
+3C00B8:lI105|H3C0154
+3C0154:lI102|H3C01F8
+3C01F8:lI102|N
+3BFF8C:lH3C002C|H3C0038
+3C002C:t2:H3C00C8,H3C00D0
+3C00D0:lI97|H3C016C
+3C016C:lI117|H3C0210
+3C0210:lI100|H3C02BC
+3C02BC:lI105|H3C0360
+3C0360:lI111|H3C0404
+3C0404:lI47|H3C0490
+3C0490:lI120|H3C0524
+3C0524:lI45|H3C05C0
+3C05C0:lI97|H3C0664
+3C0664:lI105|H3C0708
+3C0708:lI102|H3C07AC
+3C07AC:lI102|N
+3C00C8:lI97|H3C0164
+3C0164:lI105|H3C0208
+3C0208:lI102|H3C02B4
+3C02B4:lI99|N
+3C0038:lH3C00D8|H3C00E4
+3C00D8:t2:H3C0174,H3C017C
+3C017C:lI97|H3C0220
+3C0220:lI117|H3C02CC
+3C02CC:lI100|H3C0370
+3C0370:lI105|H3C040C
+3C040C:lI111|H3C0498
+3C0498:lI47|H3C052C
+3C052C:lI109|H3C05C8
+3C05C8:lI112|H3C066C
+3C066C:lI101|H3C0710
+3C0710:lI103|N
+3C0174:lI109|H3C0218
+3C0218:lI112|H3C02C4
+3C02C4:lI103|H3C0368
+3C0368:lI97|N
+3C00E4:lH3C0184|H3C0190
+3C0184:t2:H3C0228,H3C0230
+3C0230:lI97|H3C02DC
+3C02DC:lI117|H3C0380
+3C0380:lI100|H3C0414
+3C0414:lI105|H3C04A0
+3C04A0:lI111|H3C0534
+3C0534:lI47|H3C05D0
+3C05D0:lI109|H3C0674
+3C0674:lI112|H3C0718
+3C0718:lI101|H3C07B4
+3C07B4:lI103|N
+3C0228:lI109|H3C02D4
+3C02D4:lI112|H3C0378
+3C0378:lI50|N
+3C0190:lH3C0238|H3C0244
+3C0238:t2:H3C02E4,H3C02EC
+3C02EC:lI97|H3C0390
+3C0390:lI117|H3C041C
+3C041C:lI100|H3C04A8
+3C04A8:lI105|H3C053C
+3C053C:lI111|H3C05D8
+3C05D8:lI47|H3C067C
+3C067C:lI98|H3C0720
+3C0720:lI97|H3C07BC
+3C07BC:lI115|H3C0848
+3C0848:lI105|H3C08D4
+3C08D4:lI99|N
+3C02E4:lI97|H3C0388
+3C0388:lI117|N
+3C0244:lH3C02F4|H3C0300
+3C02F4:t2:H3C0398,H3C03A0
+3C03A0:lI97|H3C042C
+3C042C:lI117|H3C04B8
+3C04B8:lI100|H3C0544
+3C0544:lI105|H3C05E0
+3C05E0:lI111|H3C0684
+3C0684:lI47|H3C0728
+3C0728:lI98|H3C07C4
+3C07C4:lI97|H3C0850
+3C0850:lI115|H3C08DC
+3C08DC:lI105|H3C0968
+3C0968:lI99|N
+3C0398:lI115|H3C0424
+3C0424:lI110|H3C04B0
+3C04B0:lI100|N
+3C0300:lH3C03A8|H3C03B4
+3C03A8:t2:H3C0434,H3C043C
+3C043C:lI97|H3C04C8
+3C04C8:lI112|H3C0554
+3C0554:lI112|H3C05E8
+3C05E8:lI108|H3C068C
+3C068C:lI105|H3C0730
+3C0730:lI99|H3C07CC
+3C07CC:lI97|H3C0858
+3C0858:lI116|H3C08E4
+3C08E4:lI105|H3C0970
+3C0970:lI111|H3C09FC
+3C09FC:lI110|H3C0A98
+3C0A98:lI47|H3C0B34
+3C0B34:lI122|H3C0BD8
+3C0BD8:lI105|H3C0C8C
+3C0C8C:lI112|N
+3C0434:lI122|H3C04C0
+3C04C0:lI105|H3C054C
+3C054C:lI112|N
+3C03B4:lH3C0444|H3C0450
+3C0444:t2:H3C04D0,H3C04D8
+3C04D8:lI97|H3C0564
+3C0564:lI112|H3C05F8
+3C05F8:lI112|H3C0694
+3C0694:lI108|H3C0738
+3C0738:lI105|H3C07D4
+3C07D4:lI99|H3C0860
+3C0860:lI97|H3C08EC
+3C08EC:lI116|H3C0978
+3C0978:lI105|H3C0A04
+3C0A04:lI111|H3C0AA0
+3C0AA0:lI110|H3C0B3C
+3C0B3C:lI47|H3C0BE0
+3C0BE0:lI120|H3C0C94
+3C0C94:lI45|H3C0D40
+3C0D40:lI119|H3C0DF4
+3C0DF4:lI97|H3C0EA8
+3C0EA8:lI105|H3C0F64
+3C0F64:lI115|H3C1030
+3C1030:lI45|H3C1104
+3C1104:lI115|H3C11D8
+3C11D8:lI111|H3C12A4
+3C12A4:lI117|H3C1378
+3C1378:lI114|H3C1454
+3C1454:lI99|H3C1538
+3C1538:lI101|N
+3C04D0:lI115|H3C055C
+3C055C:lI114|H3C05F0
+3C05F0:lI99|N
+3C0450:lH3C04E0|H3C04EC
+3C04E0:t2:H3C056C,H3C0574
+3C0574:lI97|H3C0608
+3C0608:lI112|H3C06A4
+3C06A4:lI112|H3C0748
+3C0748:lI108|H3C07E4
+3C07E4:lI105|H3C0868
+3C0868:lI99|H3C08F4
+3C08F4:lI97|H3C0980
+3C0980:lI116|H3C0A0C
+3C0A0C:lI105|H3C0AA8
+3C0AA8:lI111|H3C0B44
+3C0B44:lI110|H3C0BE8
+3C0BE8:lI47|H3C0C9C
+3C0C9C:lI120|H3C0D48
+3C0D48:lI45|H3C0DFC
+3C0DFC:lI117|H3C0EB0
+3C0EB0:lI115|H3C0F6C
+3C0F6C:lI116|H3C1038
+3C1038:lI97|H3C110C
+3C110C:lI114|N
+3C056C:lI117|H3C0600
+3C0600:lI115|H3C069C
+3C069C:lI116|H3C0740
+3C0740:lI97|H3C07DC
+3C07DC:lI114|N
+3C04EC:lH3C057C|H3C0588
+3C057C:t2:H3C0610,H3C0618
+3C0618:lI97|H3C06B4
+3C06B4:lI112|H3C0750
+3C0750:lI112|H3C07EC
+3C07EC:lI108|H3C0870
+3C0870:lI105|H3C08FC
+3C08FC:lI99|H3C0988
+3C0988:lI97|H3C0A14
+3C0A14:lI116|H3C0AB0
+3C0AB0:lI105|H3C0B4C
+3C0B4C:lI111|H3C0BF0
+3C0BF0:lI110|H3C0CA4
+3C0CA4:lI47|H3C0D50
+3C0D50:lI120|H3C0E04
+3C0E04:lI45|H3C0EB8
+3C0EB8:lI116|H3C0F74
+3C0F74:lI114|H3C1040
+3C1040:lI111|H3C1114
+3C1114:lI102|H3C11E0
+3C11E0:lI102|H3C12AC
+3C12AC:lI45|H3C1380
+3C1380:lI109|H3C145C
+3C145C:lI115|N
+3C0610:lI109|H3C06AC
+3C06AC:lI115|N
+3C0588:lH3C0620|H3C062C
+3C0620:t2:H3C06BC,H3C06C4
+3C06C4:lI97|H3C0760
+3C0760:lI112|H3C07F4
+3C07F4:lI112|H3C0878
+3C0878:lI108|H3C0904
+3C0904:lI105|H3C0990
+3C0990:lI99|H3C0A1C
+3C0A1C:lI97|H3C0AB8
+3C0AB8:lI116|H3C0B54
+3C0B54:lI105|H3C0BF8
+3C0BF8:lI111|H3C0CAC
+3C0CAC:lI110|H3C0D58
+3C0D58:lI47|H3C0E0C
+3C0E0C:lI120|H3C0EC0
+3C0EC0:lI45|H3C0F7C
+3C0F7C:lI116|H3C1048
+3C1048:lI114|H3C111C
+3C111C:lI111|H3C11E8
+3C11E8:lI102|H3C12B4
+3C12B4:lI102|H3C1388
+3C1388:lI45|H3C1464
+3C1464:lI109|H3C1540
+3C1540:lI101|N
+3C06BC:lI109|H3C0758
+3C0758:lI101|N
+3C062C:lH3C06CC|H3C06D8
+3C06CC:t2:H3C0768,H3C0770
+3C0770:lI97|H3C0804
+3C0804:lI112|H3C0888
+3C0888:lI112|H3C090C
+3C090C:lI108|H3C0998
+3C0998:lI105|H3C0A24
+3C0A24:lI99|H3C0AC0
+3C0AC0:lI97|H3C0B5C
+3C0B5C:lI116|H3C0C00
+3C0C00:lI105|H3C0CB4
+3C0CB4:lI111|H3C0D60
+3C0D60:lI110|H3C0E14
+3C0E14:lI47|H3C0EC8
+3C0EC8:lI120|H3C0F84
+3C0F84:lI45|H3C1050
+3C1050:lI116|H3C1124
+3C1124:lI114|H3C11F0
+3C11F0:lI111|H3C12BC
+3C12BC:lI102|H3C1390
+3C1390:lI102|H3C146C
+3C146C:lI45|H3C1548
+3C1548:lI109|H3C161C
+3C161C:lI97|H3C16F0
+3C16F0:lI110|N
+3C0768:lI109|H3C07FC
+3C07FC:lI97|H3C0880
+3C0880:lI110|N
+3C06D8:lH3C0778|H3C0784
+3C0778:t2:H3C080C,H3C0814
+3C0814:lI97|H3C0890
+3C0890:lI112|H3C0914
+3C0914:lI112|H3C09A0
+3C09A0:lI108|H3C0A2C
+3C0A2C:lI105|H3C0AC8
+3C0AC8:lI99|H3C0B64
+3C0B64:lI97|H3C0C08
+3C0C08:lI116|H3C0CBC
+3C0CBC:lI105|H3C0D68
+3C0D68:lI111|H3C0E1C
+3C0E1C:lI110|H3C0ED0
+3C0ED0:lI47|H3C0F8C
+3C0F8C:lI120|H3C1058
+3C1058:lI45|H3C112C
+3C112C:lI116|H3C11F8
+3C11F8:lI114|H3C12C4
+3C12C4:lI111|H3C1398
+3C1398:lI102|H3C1474
+3C1474:lI102|N
+3C080C:lI116|N
+3C0784:lH3C081C|H3C0828
+3C081C:t2:H3C0898,H3C08A0
+3C08A0:lI97|H3C0924
+3C0924:lI112|H3C09A8
+3C09A8:lI112|H3C0A34
+3C0A34:lI108|H3C0AD0
+3C0AD0:lI105|H3C0B6C
+3C0B6C:lI99|H3C0C10
+3C0C10:lI97|H3C0CC4
+3C0CC4:lI116|H3C0D70
+3C0D70:lI105|H3C0E24
+3C0E24:lI111|H3C0ED8
+3C0ED8:lI110|H3C0F94
+3C0F94:lI47|H3C1060
+3C1060:lI120|H3C1134
+3C1134:lI45|H3C1200
+3C1200:lI116|H3C12CC
+3C12CC:lI114|H3C13A0
+3C13A0:lI111|H3C147C
+3C147C:lI102|H3C1550
+3C1550:lI102|N
+3C0898:lI116|H3C091C
+3C091C:lI114|N
+3C0828:lH3C08A8|H3C08B4
+3C08A8:t2:H3C092C,H3C0934
+3C0934:lI97|H3C09B8
+3C09B8:lI112|H3C0A44
+3C0A44:lI112|H3C0AE0
+3C0AE0:lI108|H3C0B74
+3C0B74:lI105|H3C0C18
+3C0C18:lI99|H3C0CCC
+3C0CCC:lI97|H3C0D78
+3C0D78:lI116|H3C0E2C
+3C0E2C:lI105|H3C0EE0
+3C0EE0:lI111|H3C0F9C
+3C0F9C:lI110|H3C1068
+3C1068:lI47|H3C113C
+3C113C:lI120|H3C1208
+3C1208:lI45|H3C12D4
+3C12D4:lI116|H3C13A8
+3C13A8:lI114|H3C1484
+3C1484:lI111|H3C1558
+3C1558:lI102|H3C1624
+3C1624:lI102|N
+3C092C:lI114|H3C09B0
+3C09B0:lI111|H3C0A3C
+3C0A3C:lI102|H3C0AD8
+3C0AD8:lI102|N
+3C08B4:lH3C093C|H3C0948
+3C093C:t2:H3C09C0,H3C09C8
+3C09C8:lI97|H3C0A54
+3C0A54:lI112|H3C0AF0
+3C0AF0:lI112|H3C0B84
+3C0B84:lI108|H3C0C28
+3C0C28:lI105|H3C0CDC
+3C0CDC:lI99|H3C0D88
+3C0D88:lI97|H3C0E34
+3C0E34:lI116|H3C0EE8
+3C0EE8:lI105|H3C0FA4
+3C0FA4:lI111|H3C1070
+3C1070:lI110|H3C1144
+3C1144:lI47|H3C1210
+3C1210:lI120|H3C12DC
+3C12DC:lI45|H3C13B0
+3C13B0:lI116|H3C148C
+3C148C:lI101|H3C1560
+3C1560:lI120|H3C162C
+3C162C:lI105|H3C16F8
+3C16F8:lI110|H3C17BC
+3C17BC:lI102|H3C1880
+3C1880:lI111|N
+3C09C0:lI116|H3C0A4C
+3C0A4C:lI101|H3C0AE8
+3C0AE8:lI120|H3C0B7C
+3C0B7C:lI105|H3C0C20
+3C0C20:lI110|H3C0CD4
+3C0CD4:lI102|H3C0D80
+3C0D80:lI111|N
+3C0948:lH3C09D0|H3C09DC
+3C09D0:t2:H3C0A5C,H3C0A64
+3C0A64:lI97|H3C0B00
+3C0B00:lI112|H3C0B94
+3C0B94:lI112|H3C0C38
+3C0C38:lI108|H3C0CE4
+3C0CE4:lI105|H3C0D90
+3C0D90:lI99|H3C0E3C
+3C0E3C:lI97|H3C0EF0
+3C0EF0:lI116|H3C0FAC
+3C0FAC:lI105|H3C1078
+3C1078:lI111|H3C114C
+3C114C:lI110|H3C1218
+3C1218:lI47|H3C12E4
+3C12E4:lI120|H3C13B8
+3C13B8:lI45|H3C1494
+3C1494:lI116|H3C1568
+3C1568:lI101|H3C1634
+3C1634:lI120|H3C1700
+3C1700:lI105|H3C17C4
+3C17C4:lI110|H3C1888
+3C1888:lI102|H3C1944
+3C1944:lI111|N
+3C0A5C:lI116|H3C0AF8
+3C0AF8:lI101|H3C0B8C
+3C0B8C:lI120|H3C0C30
+3C0C30:lI105|N
+3C09DC:lH3C0A6C|H3C0A78
+3C0A6C:t2:H3C0B08,H3C0B10
+3C0B10:lI97|H3C0BA4
+3C0BA4:lI112|H3C0C48
+3C0C48:lI112|H3C0CEC
+3C0CEC:lI108|H3C0D98
+3C0D98:lI105|H3C0E44
+3C0E44:lI99|H3C0EF8
+3C0EF8:lI97|H3C0FB4
+3C0FB4:lI116|H3C1080
+3C1080:lI105|H3C1154
+3C1154:lI111|H3C1220
+3C1220:lI110|H3C12EC
+3C12EC:lI47|H3C13C0
+3C13C0:lI120|H3C149C
+3C149C:lI45|H3C1570
+3C1570:lI116|H3C163C
+3C163C:lI101|H3C1708
+3C1708:lI120|N
+3C0B08:lI116|H3C0B9C
+3C0B9C:lI101|H3C0C40
+3C0C40:lI120|N
+3C0A78:lH3C0B18|H3C0B24
+3C0B18:t2:H3C0BAC,H3C0BB4
+3C0BB4:lI97|H3C0C58
+3C0C58:lI112|H3C0CFC
+3C0CFC:lI112|H3C0DA0
+3C0DA0:lI108|H3C0E4C
+3C0E4C:lI105|H3C0F00
+3C0F00:lI99|H3C0FBC
+3C0FBC:lI97|H3C1088
+3C1088:lI116|H3C115C
+3C115C:lI105|H3C1228
+3C1228:lI111|H3C12F4
+3C12F4:lI110|H3C13C8
+3C13C8:lI47|H3C14A4
+3C14A4:lI120|H3C1578
+3C1578:lI45|H3C1644
+3C1644:lI116|H3C1710
+3C1710:lI99|H3C17CC
+3C17CC:lI108|N
+3C0BAC:lI116|H3C0C50
+3C0C50:lI99|H3C0CF4
+3C0CF4:lI108|N
+3C0B24:lH3C0BBC|H3C0BC8
+3C0BBC:t2:H3C0C60,H3C0C68
+3C0C68:lI97|H3C0D0C
+3C0D0C:lI112|H3C0DB0
+3C0DB0:lI112|H3C0E54
+3C0E54:lI108|H3C0F08
+3C0F08:lI105|H3C0FC4
+3C0FC4:lI99|H3C1090
+3C1090:lI97|H3C1164
+3C1164:lI116|H3C1230
+3C1230:lI105|H3C12FC
+3C12FC:lI111|H3C13D0
+3C13D0:lI110|H3C14AC
+3C14AC:lI47|H3C1580
+3C1580:lI120|H3C164C
+3C164C:lI45|H3C1718
+3C1718:lI116|H3C17D4
+3C17D4:lI97|H3C1890
+3C1890:lI114|N
+3C0C60:lI116|H3C0D04
+3C0D04:lI97|H3C0DA8
+3C0DA8:lI114|N
+3C0BC8:lH3C0C70|H3C0C7C
+3C0C70:t2:H3C0D14,H3C0D1C
+3C0D1C:lI97|H3C0DC0
+3C0DC0:lI112|H3C0E64
+3C0E64:lI112|H3C0F18
+3C0F18:lI108|H3C0FD4
+3C0FD4:lI105|H3C10A0
+3C10A0:lI99|H3C116C
+3C116C:lI97|H3C1238
+3C1238:lI116|H3C1304
+3C1304:lI105|H3C13D8
+3C13D8:lI111|H3C14B4
+3C14B4:lI110|H3C1588
+3C1588:lI47|H3C1654
+3C1654:lI120|H3C1720
+3C1720:lI45|H3C17DC
+3C17DC:lI115|H3C1898
+3C1898:lI118|H3C194C
+3C194C:lI52|H3C1A00
+3C1A00:lI99|H3C1AB4
+3C1AB4:lI114|H3C1B78
+3C1B78:lI99|N
+3C0D14:lI115|H3C0DB8
+3C0DB8:lI118|H3C0E5C
+3C0E5C:lI52|H3C0F10
+3C0F10:lI99|H3C0FCC
+3C0FCC:lI114|H3C1098
+3C1098:lI99|N
+3C0C7C:lH3C0D24|H3C0D30
+3C0D24:t2:H3C0DC8,H3C0DD0
+3C0DD0:lI97|H3C0E74
+3C0E74:lI112|H3C0F28
+3C0F28:lI112|H3C0FE4
+3C0FE4:lI108|H3C10B0
+3C10B0:lI105|H3C117C
+3C117C:lI99|H3C1248
+3C1248:lI97|H3C130C
+3C130C:lI116|H3C13E0
+3C13E0:lI105|H3C14BC
+3C14BC:lI111|H3C1590
+3C1590:lI110|H3C165C
+3C165C:lI47|H3C1728
+3C1728:lI120|H3C17E4
+3C17E4:lI45|H3C18A0
+3C18A0:lI115|H3C1954
+3C1954:lI118|H3C1A08
+3C1A08:lI52|H3C1ABC
+3C1ABC:lI99|H3C1B80
+3C1B80:lI112|H3C1C4C
+3C1C4C:lI105|H3C1D10
+3C1D10:lI111|N
+3C0DC8:lI115|H3C0E6C
+3C0E6C:lI118|H3C0F20
+3C0F20:lI52|H3C0FDC
+3C0FDC:lI99|H3C10A8
+3C10A8:lI112|H3C1174
+3C1174:lI105|H3C1240
+3C1240:lI111|N
+3C0D30:lH3C0DD8|H3C0DE4
+3C0DD8:t2:H3C0E7C,H3C0E84
+3C0E84:lI97|H3C0F38
+3C0F38:lI112|H3C0FF4
+3C0FF4:lI112|H3C10B8
+3C10B8:lI108|H3C1184
+3C1184:lI105|H3C1250
+3C1250:lI99|H3C1314
+3C1314:lI97|H3C13E8
+3C13E8:lI116|H3C14C4
+3C14C4:lI105|H3C1598
+3C1598:lI111|H3C1664
+3C1664:lI110|H3C1730
+3C1730:lI47|H3C17EC
+3C17EC:lI120|H3C18A8
+3C18A8:lI45|H3C195C
+3C195C:lI115|H3C1A10
+3C1A10:lI116|H3C1AC4
+3C1AC4:lI117|H3C1B88
+3C1B88:lI102|H3C1C54
+3C1C54:lI102|H3C1D18
+3C1D18:lI105|H3C1DD4
+3C1DD4:lI116|N
+3C0E7C:lI115|H3C0F30
+3C0F30:lI105|H3C0FEC
+3C0FEC:lI116|N
+3C0DE4:lH3C0E8C|H3C0E98
+3C0E8C:t2:H3C0F40,H3C0F48
+3C0F48:lI97|H3C1004
+3C1004:lI112|H3C10C8
+3C10C8:lI112|H3C1194
+3C1194:lI108|H3C1258
+3C1258:lI105|H3C131C
+3C131C:lI99|H3C13F0
+3C13F0:lI97|H3C14CC
+3C14CC:lI116|H3C15A0
+3C15A0:lI105|H3C166C
+3C166C:lI111|H3C1738
+3C1738:lI110|H3C17F4
+3C17F4:lI47|H3C18B0
+3C18B0:lI120|H3C1964
+3C1964:lI45|H3C1A18
+3C1A18:lI115|H3C1ACC
+3C1ACC:lI104|H3C1B90
+3C1B90:lI97|H3C1C5C
+3C1C5C:lI114|N
+3C0F40:lI115|H3C0FFC
+3C0FFC:lI104|H3C10C0
+3C10C0:lI97|H3C118C
+3C118C:lI114|N
+3C0E98:lH3C0F50|H3C0F5C
+3C0F50:t2:H3C100C,H3C1014
+3C1014:lI97|H3C10D8
+3C10D8:lI112|H3C119C
+3C119C:lI112|H3C1260
+3C1260:lI108|H3C1324
+3C1324:lI105|H3C13F8
+3C13F8:lI99|H3C14D4
+3C14D4:lI97|H3C15A8
+3C15A8:lI116|H3C1674
+3C1674:lI105|H3C1740
+3C1740:lI111|H3C17FC
+3C17FC:lI110|H3C18B8
+3C18B8:lI47|H3C196C
+3C196C:lI120|H3C1A20
+3C1A20:lI45|H3C1AD4
+3C1AD4:lI115|H3C1B98
+3C1B98:lI104|N
+3C100C:lI115|H3C10D0
+3C10D0:lI104|N
+3C0F5C:lH3C101C|H3C1028
+3C101C:t2:H3C10E0,H3C10E8
+3C10E8:lI97|H3C11AC
+3C11AC:lI112|H3C1268
+3C1268:lI112|H3C132C
+3C132C:lI108|H3C1400
+3C1400:lI105|H3C14DC
+3C14DC:lI99|H3C15B0
+3C15B0:lI97|H3C167C
+3C167C:lI116|H3C1748
+3C1748:lI105|H3C1804
+3C1804:lI111|H3C18C0
+3C18C0:lI110|H3C1974
+3C1974:lI47|H3C1A28
+3C1A28:lI120|H3C1ADC
+3C1ADC:lI45|H3C1BA0
+3C1BA0:lI110|H3C1C64
+3C1C64:lI101|H3C1D20
+3C1D20:lI116|H3C1DDC
+3C1DDC:lI99|H3C1E98
+3C1E98:lI100|H3C1F5C
+3C1F5C:lI102|N
+3C10E0:lI110|H3C11A4
+3C11A4:lI99|N
+3C1028:lH3C10F0|H3C10FC
+3C10F0:t2:H3C11B4,H3C11BC
+3C11BC:lI97|H3C1278
+3C1278:lI112|H3C133C
+3C133C:lI112|H3C1408
+3C1408:lI108|H3C14E4
+3C14E4:lI105|H3C15B8
+3C15B8:lI99|H3C1684
+3C1684:lI97|H3C1750
+3C1750:lI116|H3C180C
+3C180C:lI105|H3C18C8
+3C18C8:lI111|H3C197C
+3C197C:lI110|H3C1A30
+3C1A30:lI47|H3C1AE4
+3C1AE4:lI120|H3C1BA8
+3C1BA8:lI45|H3C1C6C
+3C1C6C:lI110|H3C1D28
+3C1D28:lI101|H3C1DE4
+3C1DE4:lI116|H3C1EA0
+3C1EA0:lI99|H3C1F64
+3C1F64:lI100|H3C2018
+3C2018:lI102|N
+3C11B4:lI99|H3C1270
+3C1270:lI100|H3C1334
+3C1334:lI102|N
+3C10FC:lH3C11C4|H3C11D0
+3C11C4:t2:H3C1280,H3C1288
+3C1288:lI97|H3C134C
+3C134C:lI112|H3C1418
+3C1418:lI112|H3C14EC
+3C14EC:lI108|H3C15C0
+3C15C0:lI105|H3C168C
+3C168C:lI99|H3C1758
+3C1758:lI97|H3C1814
+3C1814:lI116|H3C18D0
+3C18D0:lI105|H3C1984
+3C1984:lI111|H3C1A38
+3C1A38:lI110|H3C1AEC
+3C1AEC:lI47|H3C1BB0
+3C1BB0:lI120|H3C1C74
+3C1C74:lI45|H3C1D30
+3C1D30:lI109|H3C1DEC
+3C1DEC:lI105|H3C1EA8
+3C1EA8:lI102|N
+3C1280:lI109|H3C1344
+3C1344:lI105|H3C1410
+3C1410:lI102|N
+3C11D0:lH3C1290|H3C129C
+3C1290:t2:H3C1354,H3C135C
+3C135C:lI97|H3C1428
+3C1428:lI112|H3C14FC
+3C14FC:lI112|H3C15D0
+3C15D0:lI108|H3C169C
+3C169C:lI105|H3C1760
+3C1760:lI99|H3C181C
+3C181C:lI97|H3C18D8
+3C18D8:lI116|H3C198C
+3C198C:lI105|H3C1A40
+3C1A40:lI111|H3C1AF4
+3C1AF4:lI110|H3C1BB8
+3C1BB8:lI47|H3C1C7C
+3C1C7C:lI120|H3C1D38
+3C1D38:lI45|H3C1DF4
+3C1DF4:lI108|H3C1EB0
+3C1EB0:lI97|H3C1F6C
+3C1F6C:lI116|H3C2020
+3C2020:lI101|H3C20DC
+3C20DC:lI120|N
+3C1354:lI108|H3C1420
+3C1420:lI97|H3C14F4
+3C14F4:lI116|H3C15C8
+3C15C8:lI101|H3C1694
+3C1694:lI120|N
+3C129C:lH3C1364|H3C1370
+3C1364:t2:H3C1430,H3C1438
+3C1438:lI97|H3C150C
+3C150C:lI112|H3C15E0
+3C15E0:lI112|H3C16A4
+3C16A4:lI108|H3C1768
+3C1768:lI105|H3C1824
+3C1824:lI99|H3C18E0
+3C18E0:lI97|H3C1994
+3C1994:lI116|H3C1A48
+3C1A48:lI105|H3C1AFC
+3C1AFC:lI111|H3C1BC0
+3C1BC0:lI110|H3C1C84
+3C1C84:lI47|H3C1D40
+3C1D40:lI120|H3C1DFC
+3C1DFC:lI45|H3C1EB8
+3C1EB8:lI107|H3C1F74
+3C1F74:lI111|H3C2028
+3C2028:lI97|H3C20E4
+3C20E4:lI110|N
+3C1430:lI115|H3C1504
+3C1504:lI107|H3C15D8
+3C15D8:lI112|N
+3C1370:lH3C1440|H3C144C
+3C1440:t2:H3C1514,H3C151C
+3C151C:lI97|H3C15F0
+3C15F0:lI112|H3C16B4
+3C16B4:lI112|H3C1770
+3C1770:lI108|H3C182C
+3C182C:lI105|H3C18E8
+3C18E8:lI99|H3C199C
+3C199C:lI97|H3C1A50
+3C1A50:lI116|H3C1B04
+3C1B04:lI105|H3C1BC8
+3C1BC8:lI111|H3C1C8C
+3C1C8C:lI110|H3C1D48
+3C1D48:lI47|H3C1E04
+3C1E04:lI120|H3C1EC0
+3C1EC0:lI45|H3C1F7C
+3C1F7C:lI107|H3C2030
+3C2030:lI111|H3C20EC
+3C20EC:lI97|H3C21A0
+3C21A0:lI110|N
+3C1514:lI115|H3C15E8
+3C15E8:lI107|H3C16AC
+3C16AC:lI100|N
+3C144C:lH3C1524|H3C1530
+3C1524:t2:H3C15F8,H3C1600
+3C1600:lI97|H3C16C4
+3C16C4:lI112|H3C1780
+3C1780:lI112|H3C1834
+3C1834:lI108|H3C18F0
+3C18F0:lI105|H3C19A4
+3C19A4:lI99|H3C1A58
+3C1A58:lI97|H3C1B0C
+3C1B0C:lI116|H3C1BD0
+3C1BD0:lI105|H3C1C94
+3C1C94:lI111|H3C1D50
+3C1D50:lI110|H3C1E0C
+3C1E0C:lI47|H3C1EC8
+3C1EC8:lI120|H3C1F84
+3C1F84:lI45|H3C2038
+3C2038:lI107|H3C20F4
+3C20F4:lI111|H3C21A8
+3C21A8:lI97|H3C225C
+3C225C:lI110|N
+3C15F8:lI115|H3C16BC
+3C16BC:lI107|H3C1778
+3C1778:lI116|N
+3C1530:lH3C1608|H3C1614
+3C1608:t2:H3C16CC,H3C16D4
+3C16D4:lI97|H3C1790
+3C1790:lI112|H3C1844
+3C1844:lI112|H3C18F8
+3C18F8:lI108|H3C19AC
+3C19AC:lI105|H3C1A60
+3C1A60:lI99|H3C1B14
+3C1B14:lI97|H3C1BD8
+3C1BD8:lI116|H3C1C9C
+3C1C9C:lI105|H3C1D58
+3C1D58:lI111|H3C1E14
+3C1E14:lI110|H3C1ED0
+3C1ED0:lI47|H3C1F8C
+3C1F8C:lI120|H3C2040
+3C2040:lI45|H3C20FC
+3C20FC:lI107|H3C21B0
+3C21B0:lI111|H3C2264
+3C2264:lI97|H3C2320
+3C2320:lI110|N
+3C16CC:lI115|H3C1788
+3C1788:lI107|H3C183C
+3C183C:lI109|N
+3C1614:lH3C16DC|H3C16E8
+3C16DC:t2:H3C1798,H3C17A0
+3C17A0:lI97|H3C1854
+3C1854:lI112|H3C1908
+3C1908:lI112|H3C19B4
+3C19B4:lI108|H3C1A68
+3C1A68:lI105|H3C1B1C
+3C1B1C:lI99|H3C1BE0
+3C1BE0:lI97|H3C1CA4
+3C1CA4:lI116|H3C1D60
+3C1D60:lI105|H3C1E1C
+3C1E1C:lI111|H3C1ED8
+3C1ED8:lI110|H3C1F94
+3C1F94:lI47|H3C2048
+3C2048:lI120|H3C2104
+3C2104:lI45|H3C21B8
+3C21B8:lI104|H3C226C
+3C226C:lI116|H3C2328
+3C2328:lI116|H3C23E4
+3C23E4:lI112|H3C2498
+3C2498:lI100|H3C2554
+3C2554:lI45|H3C2610
+3C2610:lI99|H3C26D4
+3C26D4:lI103|H3C2790
+3C2790:lI105|N
+3C1798:lI99|H3C184C
+3C184C:lI103|H3C1900
+3C1900:lI105|N
+3C16E8:lH3C17A8|H3C17B4
+3C17A8:t2:H3C185C,H3C1864
+3C1864:lI97|H3C1918
+3C1918:lI112|H3C19C4
+3C19C4:lI112|H3C1A70
+3C1A70:lI108|H3C1B24
+3C1B24:lI105|H3C1BE8
+3C1BE8:lI99|H3C1CAC
+3C1CAC:lI97|H3C1D68
+3C1D68:lI116|H3C1E24
+3C1E24:lI105|H3C1EE0
+3C1EE0:lI111|H3C1F9C
+3C1F9C:lI110|H3C2050
+3C2050:lI47|H3C210C
+3C210C:lI120|H3C21C0
+3C21C0:lI45|H3C2274
+3C2274:lI104|H3C2330
+3C2330:lI100|H3C23EC
+3C23EC:lI102|N
+3C185C:lI104|H3C1910
+3C1910:lI100|H3C19BC
+3C19BC:lI102|N
+3C17B4:lH3C186C|H3C1878
+3C186C:t2:H3C1920,H3C1928
+3C1928:lI97|H3C19D4
+3C19D4:lI112|H3C1A78
+3C1A78:lI112|H3C1B2C
+3C1B2C:lI108|H3C1BF0
+3C1BF0:lI105|H3C1CB4
+3C1CB4:lI99|H3C1D70
+3C1D70:lI97|H3C1E2C
+3C1E2C:lI116|H3C1EE8
+3C1EE8:lI105|H3C1FA4
+3C1FA4:lI111|H3C2058
+3C2058:lI110|H3C2114
+3C2114:lI47|H3C21C8
+3C21C8:lI120|H3C227C
+3C227C:lI45|H3C2338
+3C2338:lI103|H3C23F4
+3C23F4:lI122|H3C24A0
+3C24A0:lI105|H3C255C
+3C255C:lI112|N
+3C1920:lI103|H3C19CC
+3C19CC:lI122|N
+3C1878:lH3C1930|H3C193C
+3C1930:t2:H3C19DC,H3C19E4
+3C19E4:lI97|H3C1A88
+3C1A88:lI112|H3C1B3C
+3C1B3C:lI112|H3C1C00
+3C1C00:lI108|H3C1CBC
+3C1CBC:lI105|H3C1D78
+3C1D78:lI99|H3C1E34
+3C1E34:lI97|H3C1EF0
+3C1EF0:lI116|H3C1FAC
+3C1FAC:lI105|H3C2060
+3C2060:lI111|H3C211C
+3C211C:lI110|H3C21D0
+3C21D0:lI47|H3C2284
+3C2284:lI120|H3C2340
+3C2340:lI45|H3C23FC
+3C23FC:lI103|H3C24A8
+3C24A8:lI116|H3C2564
+3C2564:lI97|H3C2618
+3C2618:lI114|N
+3C19DC:lI103|H3C1A80
+3C1A80:lI116|H3C1B34
+3C1B34:lI97|H3C1BF8
+3C1BF8:lI114|N
+3C193C:lH3C19EC|H3C19F8
+3C19EC:t2:H3C1A90,H3C1A98
+3C1A98:lI97|H3C1B4C
+3C1B4C:lI112|H3C1C10
+3C1C10:lI112|H3C1CC4
+3C1CC4:lI108|H3C1D80
+3C1D80:lI105|H3C1E3C
+3C1E3C:lI99|H3C1EF8
+3C1EF8:lI97|H3C1FB4
+3C1FB4:lI116|H3C2068
+3C2068:lI105|H3C2124
+3C2124:lI111|H3C21D8
+3C21D8:lI110|H3C228C
+3C228C:lI47|H3C2348
+3C2348:lI120|H3C2404
+3C2404:lI45|H3C24B0
+3C24B0:lI100|H3C256C
+3C256C:lI118|H3C2620
+3C2620:lI105|N
+3C1A90:lI100|H3C1B44
+3C1B44:lI118|H3C1C08
+3C1C08:lI105|N
+3C19F8:lH3C1AA0|H3C1AAC
+3C1AA0:t2:H3C1B54,H3C1B5C
+3C1B5C:lI97|H3C1C20
+3C1C20:lI112|H3C1CD4
+3C1CD4:lI112|H3C1D88
+3C1D88:lI108|H3C1E44
+3C1E44:lI105|H3C1F00
+3C1F00:lI99|H3C1FBC
+3C1FBC:lI97|H3C2070
+3C2070:lI116|H3C212C
+3C212C:lI105|H3C21E0
+3C21E0:lI111|H3C2294
+3C2294:lI110|H3C2350
+3C2350:lI47|H3C240C
+3C240C:lI120|H3C24B8
+3C24B8:lI45|H3C2574
+3C2574:lI100|H3C2628
+3C2628:lI105|H3C26DC
+3C26DC:lI114|H3C2798
+3C2798:lI101|H3C2854
+3C2854:lI99|H3C2918
+3C2918:lI116|H3C29E4
+3C29E4:lI111|H3C2AB0
+3C2AB0:lI114|N
+3C1B54:lI100|H3C1C18
+3C1C18:lI99|H3C1CCC
+3C1CCC:lI114|N
+3C1AAC:lH3C1B64|H3C1B70
+3C1B64:t2:H3C1C28,H3C1C30
+3C1C30:lI97|H3C1CE4
+3C1CE4:lI112|H3C1D98
+3C1D98:lI112|H3C1E4C
+3C1E4C:lI108|H3C1F08
+3C1F08:lI105|H3C1FC4
+3C1FC4:lI99|H3C2078
+3C2078:lI97|H3C2134
+3C2134:lI116|H3C21E8
+3C21E8:lI105|H3C229C
+3C229C:lI111|H3C2358
+3C2358:lI110|H3C2414
+3C2414:lI47|H3C24C0
+3C24C0:lI120|H3C257C
+3C257C:lI45|H3C2630
+3C2630:lI100|H3C26E4
+3C26E4:lI105|H3C27A0
+3C27A0:lI114|H3C285C
+3C285C:lI101|H3C2920
+3C2920:lI99|H3C29EC
+3C29EC:lI116|H3C2AB8
+3C2AB8:lI111|H3C2B84
+3C2B84:lI114|N
+3C1C28:lI100|H3C1CDC
+3C1CDC:lI105|H3C1D90
+3C1D90:lI114|N
+3C1B70:lH3C1C38|H3C1C44
+3C1C38:t2:H3C1CEC,H3C1CF4
+3C1CF4:lI97|H3C1DA8
+3C1DA8:lI112|H3C1E5C
+3C1E5C:lI112|H3C1F10
+3C1F10:lI108|H3C1FCC
+3C1FCC:lI105|H3C2080
+3C2080:lI99|H3C213C
+3C213C:lI97|H3C21F0
+3C21F0:lI116|H3C22A4
+3C22A4:lI105|H3C2360
+3C2360:lI111|H3C241C
+3C241C:lI110|H3C24C8
+3C24C8:lI47|H3C2584
+3C2584:lI120|H3C2638
+3C2638:lI45|H3C26EC
+3C26EC:lI100|H3C27A8
+3C27A8:lI105|H3C2864
+3C2864:lI114|H3C2928
+3C2928:lI101|H3C29F4
+3C29F4:lI99|H3C2AC0
+3C2AC0:lI116|H3C2B8C
+3C2B8C:lI111|H3C2C48
+3C2C48:lI114|N
+3C1CEC:lI100|H3C1DA0
+3C1DA0:lI120|H3C1E54
+3C1E54:lI114|N
+3C1C44:lH3C1CFC|H3C1D08
+3C1CFC:t2:H3C1DB0,H3C1DB8
+3C1DB8:lI97|H3C1E6C
+3C1E6C:lI112|H3C1F20
+3C1F20:lI112|H3C1FD4
+3C1FD4:lI108|H3C2088
+3C2088:lI105|H3C2144
+3C2144:lI99|H3C21F8
+3C21F8:lI97|H3C22AC
+3C22AC:lI116|H3C2368
+3C2368:lI105|H3C2424
+3C2424:lI111|H3C24D0
+3C24D0:lI110|H3C258C
+3C258C:lI47|H3C2640
+3C2640:lI120|H3C26F4
+3C26F4:lI45|H3C27B0
+3C27B0:lI99|H3C286C
+3C286C:lI115|H3C2930
+3C2930:lI104|N
+3C1DB0:lI99|H3C1E64
+3C1E64:lI115|H3C1F18
+3C1F18:lI104|N
+3C1D08:lH3C1DC0|H3C1DCC
+3C1DC0:t2:H3C1E74,H3C1E7C
+3C1E7C:lI97|H3C1F30
+3C1F30:lI112|H3C1FE4
+3C1FE4:lI112|H3C2098
+3C2098:lI108|H3C214C
+3C214C:lI105|H3C2200
+3C2200:lI99|H3C22B4
+3C22B4:lI97|H3C2370
+3C2370:lI116|H3C242C
+3C242C:lI105|H3C24D8
+3C24D8:lI111|H3C2594
+3C2594:lI110|H3C2648
+3C2648:lI47|H3C26FC
+3C26FC:lI120|H3C27B8
+3C27B8:lI45|H3C2874
+3C2874:lI99|H3C2938
+3C2938:lI112|H3C29FC
+3C29FC:lI105|H3C2AC8
+3C2AC8:lI111|N
+3C1E74:lI99|H3C1F28
+3C1F28:lI112|H3C1FDC
+3C1FDC:lI105|H3C2090
+3C2090:lI111|N
+3C1DCC:lH3C1E84|H3C1E90
+3C1E84:t2:H3C1F38,H3C1F40
+3C1F40:lI97|H3C1FEC
+3C1FEC:lI112|H3C20A0
+3C20A0:lI112|H3C2154
+3C2154:lI108|H3C2208
+3C2208:lI105|H3C22BC
+3C22BC:lI99|H3C2378
+3C2378:lI97|H3C2434
+3C2434:lI116|H3C24E0
+3C24E0:lI105|H3C259C
+3C259C:lI111|H3C2650
+3C2650:lI110|H3C2704
+3C2704:lI47|H3C27C0
+3C27C0:lI120|H3C287C
+3C287C:lI45|H3C2940
+3C2940:lI99|H3C2A04
+3C2A04:lI111|H3C2AD0
+3C2AD0:lI109|H3C2B94
+3C2B94:lI112|H3C2C50
+3C2C50:lI114|H3C2D00
+3C2D00:lI101|H3C2DA8
+3C2DA8:lI115|H3C2E40
+3C2E40:lI115|N
+3C1F38:lI90|N
+3C1E90:lH3C1F48|H3C1F54
+3C1F48:t2:H3C1FF4,H3C1FFC
+3C1FFC:lI97|H3C20B0
+3C20B0:lI112|H3C2164
+3C2164:lI112|H3C2210
+3C2210:lI108|H3C22C4
+3C22C4:lI105|H3C2380
+3C2380:lI99|H3C243C
+3C243C:lI97|H3C24E8
+3C24E8:lI116|H3C25A4
+3C25A4:lI105|H3C2658
+3C2658:lI111|H3C270C
+3C270C:lI110|H3C27C8
+3C27C8:lI47|H3C2884
+3C2884:lI120|H3C2948
+3C2948:lI45|H3C2A0C
+3C2A0C:lI99|H3C2AD8
+3C2AD8:lI100|H3C2B9C
+3C2B9C:lI108|H3C2C58
+3C2C58:lI105|H3C2D08
+3C2D08:lI110|H3C2DB0
+3C2DB0:lI107|N
+3C1FF4:lI118|H3C20A8
+3C20A8:lI99|H3C215C
+3C215C:lI100|N
+3C1F54:lH3C2004|H3C2010
+3C2004:t2:H3C20B8,H3C20C0
+3C20C0:lI97|H3C2174
+3C2174:lI112|H3C2220
+3C2220:lI112|H3C22D4
+3C22D4:lI108|H3C2390
+3C2390:lI105|H3C2444
+3C2444:lI99|H3C24F0
+3C24F0:lI97|H3C25AC
+3C25AC:lI116|H3C2660
+3C2660:lI105|H3C2714
+3C2714:lI111|H3C27D0
+3C27D0:lI110|H3C288C
+3C288C:lI47|H3C2950
+3C2950:lI120|H3C2A14
+3C2A14:lI45|H3C2AE0
+3C2AE0:lI98|H3C2BA4
+3C2BA4:lI99|H3C2C60
+3C2C60:lI112|H3C2D10
+3C2D10:lI105|H3C2DB8
+3C2DB8:lI111|N
+3C20B8:lI98|H3C216C
+3C216C:lI99|H3C2218
+3C2218:lI112|H3C22CC
+3C22CC:lI105|H3C2388
+3C2388:lI111|N
+3C2010:lH3C20C8|H3C20D4
+3C20C8:t2:H3C217C,H3C2184
+3C2184:lI97|H3C2230
+3C2230:lI112|H3C22E4
+3C22E4:lI112|H3C2398
+3C2398:lI108|H3C244C
+3C244C:lI105|H3C24F8
+3C24F8:lI99|H3C25B4
+3C25B4:lI97|H3C2668
+3C2668:lI116|H3C271C
+3C271C:lI105|H3C27D8
+3C27D8:lI111|H3C2894
+3C2894:lI110|H3C2958
+3C2958:lI47|H3C2A1C
+3C2A1C:lI114|H3C2AE8
+3C2AE8:lI116|H3C2BAC
+3C2BAC:lI102|N
+3C217C:lI114|H3C2228
+3C2228:lI116|H3C22DC
+3C22DC:lI102|N
+3C20D4:lH3C218C|H3C2198
+3C218C:t2:H3C2238,H3C2240
+3C2240:lI97|H3C22F4
+3C22F4:lI112|H3C23A8
+3C23A8:lI112|H3C2454
+3C2454:lI108|H3C2500
+3C2500:lI105|H3C25BC
+3C25BC:lI99|H3C2670
+3C2670:lI97|H3C2724
+3C2724:lI116|H3C27E0
+3C27E0:lI105|H3C289C
+3C289C:lI111|H3C2960
+3C2960:lI110|H3C2A24
+3C2A24:lI47|H3C2AF0
+3C2AF0:lI112|H3C2BB4
+3C2BB4:lI111|H3C2C68
+3C2C68:lI119|H3C2D18
+3C2D18:lI101|H3C2DC0
+3C2DC0:lI114|H3C2E48
+3C2E48:lI112|H3C2EC0
+3C2EC0:lI111|H3C2F38
+3C2F38:lI105|H3C2FA8
+3C2FA8:lI110|H3C3010
+3C3010:lI116|N
+3C2238:lI112|H3C22EC
+3C22EC:lI112|H3C23A0
+3C23A0:lI116|N
+3C2198:lH3C2248|H3C2254
+3C2248:t2:H3C22FC,H3C2304
+3C2304:lI97|H3C23B8
+3C23B8:lI112|H3C245C
+3C245C:lI112|H3C2508
+3C2508:lI108|H3C25C4
+3C25C4:lI105|H3C2678
+3C2678:lI99|H3C272C
+3C272C:lI97|H3C27E8
+3C27E8:lI116|H3C28A4
+3C28A4:lI105|H3C2968
+3C2968:lI111|H3C2A2C
+3C2A2C:lI110|H3C2AF8
+3C2AF8:lI47|H3C2BBC
+3C2BBC:lI112|H3C2C70
+3C2C70:lI111|H3C2D20
+3C2D20:lI115|H3C2DC8
+3C2DC8:lI116|H3C2E50
+3C2E50:lI115|H3C2EC8
+3C2EC8:lI99|H3C2F40
+3C2F40:lI114|H3C2FB0
+3C2FB0:lI105|H3C3018
+3C3018:lI112|H3C3078
+3C3078:lI116|N
+3C22FC:lI97|H3C23B0
+3C23B0:lI105|N
+3C2254:lH3C230C|H3C2318
+3C230C:t2:H3C23C0,H3C23C8
+3C23C8:lI97|H3C246C
+3C246C:lI112|H3C2518
+3C2518:lI112|H3C25CC
+3C25CC:lI108|H3C2680
+3C2680:lI105|H3C2734
+3C2734:lI99|H3C27F0
+3C27F0:lI97|H3C28AC
+3C28AC:lI116|H3C2970
+3C2970:lI105|H3C2A34
+3C2A34:lI111|H3C2B00
+3C2B00:lI110|H3C2BC4
+3C2BC4:lI47|H3C2C78
+3C2C78:lI112|H3C2D28
+3C2D28:lI111|H3C2DD0
+3C2DD0:lI115|H3C2E58
+3C2E58:lI116|H3C2ED0
+3C2ED0:lI115|H3C2F48
+3C2F48:lI99|H3C2FB8
+3C2FB8:lI114|H3C3020
+3C3020:lI105|H3C3080
+3C3080:lI112|H3C30D8
+3C30D8:lI116|N
+3C23C0:lI101|H3C2464
+3C2464:lI112|H3C2510
+3C2510:lI115|N
+3C2318:lH3C23D0|H3C23DC
+3C23D0:t2:H3C2474,H3C247C
+3C247C:lI97|H3C2528
+3C2528:lI112|H3C25D4
+3C25D4:lI112|H3C2688
+3C2688:lI108|H3C273C
+3C273C:lI105|H3C27F8
+3C27F8:lI99|H3C28B4
+3C28B4:lI97|H3C2978
+3C2978:lI116|H3C2A3C
+3C2A3C:lI105|H3C2B08
+3C2B08:lI111|H3C2BCC
+3C2BCC:lI110|H3C2C80
+3C2C80:lI47|H3C2D30
+3C2D30:lI112|H3C2DD8
+3C2DD8:lI111|H3C2E60
+3C2E60:lI115|H3C2ED8
+3C2ED8:lI116|H3C2F50
+3C2F50:lI115|H3C2FC0
+3C2FC0:lI99|H3C3028
+3C3028:lI114|H3C3088
+3C3088:lI105|H3C30E0
+3C30E0:lI112|H3C3130
+3C3130:lI116|N
+3C2474:lI112|H3C2520
+3C2520:lI115|N
+3C23DC:lH3C2484|H3C2490
+3C2484:t2:H3C2530,H3C2538
+3C2538:lI97|H3C25E4
+3C25E4:lI112|H3C2698
+3C2698:lI112|H3C2744
+3C2744:lI108|H3C2800
+3C2800:lI105|H3C28BC
+3C28BC:lI99|H3C2980
+3C2980:lI97|H3C2A44
+3C2A44:lI116|H3C2B10
+3C2B10:lI105|H3C2BD4
+3C2BD4:lI111|H3C2C88
+3C2C88:lI110|H3C2D38
+3C2D38:lI47|H3C2DE0
+3C2DE0:lI112|H3C2E68
+3C2E68:lI100|H3C2EE0
+3C2EE0:lI102|N
+3C2530:lI112|H3C25DC
+3C25DC:lI100|H3C2690
+3C2690:lI102|N
+3C2490:lH3C2540|H3C254C
+3C2540:t2:H3C25EC,H3C25F4
+3C25F4:lI97|H3C26A8
+3C26A8:lI112|H3C2754
+3C2754:lI112|H3C2808
+3C2808:lI108|H3C28C4
+3C28C4:lI105|H3C2988
+3C2988:lI99|H3C2A4C
+3C2A4C:lI97|H3C2B18
+3C2B18:lI116|H3C2BDC
+3C2BDC:lI105|H3C2C90
+3C2C90:lI111|H3C2D40
+3C2D40:lI110|H3C2DE8
+3C2DE8:lI47|H3C2E70
+3C2E70:lI111|H3C2EE8
+3C2EE8:lI100|H3C2F58
+3C2F58:lI97|N
+3C25EC:lI111|H3C26A0
+3C26A0:lI100|H3C274C
+3C274C:lI97|N
+3C254C:lH3C25FC|H3C2608
+3C25FC:t2:H3C26B0,H3C26B8
+3C26B8:lI97|H3C2764
+3C2764:lI112|H3C2818
+3C2818:lI112|H3C28CC
+3C28CC:lI108|H3C2990
+3C2990:lI105|H3C2A54
+3C2A54:lI99|H3C2B20
+3C2B20:lI97|H3C2BE4
+3C2BE4:lI116|H3C2C98
+3C2C98:lI105|H3C2D48
+3C2D48:lI111|H3C2DF0
+3C2DF0:lI110|H3C2E78
+3C2E78:lI47|H3C2EF0
+3C2EF0:lI111|H3C2F60
+3C2F60:lI99|H3C2FC8
+3C2FC8:lI116|H3C3030
+3C3030:lI101|H3C3090
+3C3090:lI116|H3C30E8
+3C30E8:lI45|H3C3138
+3C3138:lI115|H3C3180
+3C3180:lI116|H3C31C8
+3C31C8:lI114|H3C3210
+3C3210:lI101|H3C3258
+3C3258:lI97|H3C32A0
+3C32A0:lI109|N
+3C26B0:lI98|H3C275C
+3C275C:lI105|H3C2810
+3C2810:lI110|N
+3C2608:lH3C26C0|H3C26CC
+3C26C0:t2:H3C276C,H3C2774
+3C2774:lI97|H3C2828
+3C2828:lI112|H3C28DC
+3C28DC:lI112|H3C2998
+3C2998:lI108|H3C2A5C
+3C2A5C:lI105|H3C2B28
+3C2B28:lI99|H3C2BEC
+3C2BEC:lI97|H3C2CA0
+3C2CA0:lI116|H3C2D50
+3C2D50:lI105|H3C2DF8
+3C2DF8:lI111|H3C2E80
+3C2E80:lI110|H3C2EF8
+3C2EF8:lI47|H3C2F68
+3C2F68:lI111|H3C2FD0
+3C2FD0:lI99|H3C3038
+3C3038:lI116|H3C3098
+3C3098:lI101|H3C30F0
+3C30F0:lI116|H3C3140
+3C3140:lI45|H3C3188
+3C3188:lI115|H3C31D0
+3C31D0:lI116|H3C3218
+3C3218:lI114|H3C3260
+3C3260:lI101|H3C32A8
+3C32A8:lI97|H3C32E8
+3C32E8:lI109|N
+3C276C:lI100|H3C2820
+3C2820:lI109|H3C28D4
+3C28D4:lI115|N
+3C26CC:lH3C277C|H3C2788
+3C277C:t2:H3C2830,H3C2838
+3C2838:lI97|H3C28EC
+3C28EC:lI112|H3C29A8
+3C29A8:lI112|H3C2A64
+3C2A64:lI108|H3C2B30
+3C2B30:lI105|H3C2BF4
+3C2BF4:lI99|H3C2CA8
+3C2CA8:lI97|H3C2D58
+3C2D58:lI116|H3C2E00
+3C2E00:lI105|H3C2E88
+3C2E88:lI111|H3C2F00
+3C2F00:lI110|H3C2F70
+3C2F70:lI47|H3C2FD8
+3C2FD8:lI111|H3C3040
+3C3040:lI99|H3C30A0
+3C30A0:lI116|H3C30F8
+3C30F8:lI101|H3C3148
+3C3148:lI116|H3C3190
+3C3190:lI45|H3C31D8
+3C31D8:lI115|H3C3220
+3C3220:lI116|H3C3268
+3C3268:lI114|H3C32B0
+3C32B0:lI101|H3C32F0
+3C32F0:lI97|H3C3320
+3C3320:lI109|N
+3C2830:lI108|H3C28E4
+3C28E4:lI104|H3C29A0
+3C29A0:lI97|N
+3C2788:lH3C2840|H3C284C
+3C2840:t2:H3C28F4,H3C28FC
+3C28FC:lI97|H3C29B8
+3C29B8:lI112|H3C2A74
+3C2A74:lI112|H3C2B38
+3C2B38:lI108|H3C2BFC
+3C2BFC:lI105|H3C2CB0
+3C2CB0:lI99|H3C2D60
+3C2D60:lI97|H3C2E08
+3C2E08:lI116|H3C2E90
+3C2E90:lI105|H3C2F08
+3C2F08:lI111|H3C2F78
+3C2F78:lI110|H3C2FE0
+3C2FE0:lI47|H3C3048
+3C3048:lI111|H3C30A8
+3C30A8:lI99|H3C3100
+3C3100:lI116|H3C3150
+3C3150:lI101|H3C3198
+3C3198:lI116|H3C31E0
+3C31E0:lI45|H3C3228
+3C3228:lI115|H3C3270
+3C3270:lI116|H3C32B8
+3C32B8:lI114|H3C32F8
+3C32F8:lI101|H3C3328
+3C3328:lI97|H3C3350
+3C3350:lI109|N
+3C28F4:lI108|H3C29B0
+3C29B0:lI122|H3C2A6C
+3C2A6C:lI104|N
+3C284C:lH3C2904|H3C2910
+3C2904:t2:H3C29C0,H3C29C8
+3C29C8:lI97|H3C2A84
+3C2A84:lI112|H3C2B48
+3C2B48:lI112|H3C2C04
+3C2C04:lI108|H3C2CB8
+3C2CB8:lI105|H3C2D68
+3C2D68:lI99|H3C2E10
+3C2E10:lI97|H3C2E98
+3C2E98:lI116|H3C2F10
+3C2F10:lI105|H3C2F80
+3C2F80:lI111|H3C2FE8
+3C2FE8:lI110|H3C3050
+3C3050:lI47|H3C30B0
+3C30B0:lI111|H3C3108
+3C3108:lI99|H3C3158
+3C3158:lI116|H3C31A0
+3C31A0:lI101|H3C31E8
+3C31E8:lI116|H3C3230
+3C3230:lI45|H3C3278
+3C3278:lI115|H3C32C0
+3C32C0:lI116|H3C3300
+3C3300:lI114|H3C3330
+3C3330:lI101|H3C3358
+3C3358:lI97|H3C3378
+3C3378:lI109|N
+3C29C0:lI101|H3C2A7C
+3C2A7C:lI120|H3C2B40
+3C2B40:lI101|N
+3C2910:lH3C29D0|H3C29DC
+3C29D0:t2:H3C2A8C,H3C2A94
+3C2A94:lI97|H3C2B58
+3C2B58:lI112|H3C2C14
+3C2C14:lI112|H3C2CC8
+3C2CC8:lI108|H3C2D78
+3C2D78:lI105|H3C2E18
+3C2E18:lI99|H3C2EA0
+3C2EA0:lI97|H3C2F18
+3C2F18:lI116|H3C2F88
+3C2F88:lI105|H3C2FF0
+3C2FF0:lI111|H3C3058
+3C3058:lI110|H3C30B8
+3C30B8:lI47|H3C3110
+3C3110:lI111|H3C3160
+3C3160:lI99|H3C31A8
+3C31A8:lI116|H3C31F0
+3C31F0:lI101|H3C3238
+3C3238:lI116|H3C3280
+3C3280:lI45|H3C32C8
+3C32C8:lI115|H3C3308
+3C3308:lI116|H3C3338
+3C3338:lI114|H3C3360
+3C3360:lI101|H3C3380
+3C3380:lI97|H3C3398
+3C3398:lI109|N
+3C2A8C:lI99|H3C2B50
+3C2B50:lI108|H3C2C0C
+3C2C0C:lI97|H3C2CC0
+3C2CC0:lI115|H3C2D70
+3C2D70:lI115|N
+3C29DC:lH3C2A9C|H3C2AA8
+3C2A9C:t2:H3C2B60,H3C2B68
+3C2B68:lI97|H3C2C24
+3C2C24:lI112|H3C2CD8
+3C2CD8:lI112|H3C2D80
+3C2D80:lI108|H3C2E20
+3C2E20:lI105|H3C2EA8
+3C2EA8:lI99|H3C2F20
+3C2F20:lI97|H3C2F90
+3C2F90:lI116|H3C2FF8
+3C2FF8:lI105|H3C3060
+3C3060:lI111|H3C30C0
+3C30C0:lI110|H3C3118
+3C3118:lI47|H3C3168
+3C3168:lI109|H3C31B0
+3C31B0:lI115|H3C31F8
+3C31F8:lI119|H3C3240
+3C3240:lI111|H3C3288
+3C3288:lI114|H3C32D0
+3C32D0:lI100|N
+3C2B60:lI100|H3C2C1C
+3C2C1C:lI111|H3C2CD0
+3C2CD0:lI99|N
+3C2AA8:lH3C2B70|H3C2B7C
+3C2B70:t2:H3C2C2C,H3C2C34
+3C2C34:lI97|H3C2CE8
+3C2CE8:lI112|H3C2D90
+3C2D90:lI112|H3C2E28
+3C2E28:lI108|H3C2EB0
+3C2EB0:lI105|H3C2F28
+3C2F28:lI99|H3C2F98
+3C2F98:lI97|H3C3000
+3C3000:lI116|H3C3068
+3C3068:lI105|H3C30C8
+3C30C8:lI111|H3C3120
+3C3120:lI110|H3C3170
+3C3170:lI47|H3C31B8
+3C31B8:lI109|H3C3200
+3C3200:lI97|H3C3248
+3C3248:lI99|H3C3290
+3C3290:lI45|H3C32D8
+3C32D8:lI99|H3C3310
+3C3310:lI111|H3C3340
+3C3340:lI109|H3C3368
+3C3368:lI112|H3C3388
+3C3388:lI97|H3C33A0
+3C33A0:lI99|H3C33B0
+3C33B0:lI116|H3C33C0
+3C33C0:lI112|H3C33D0
+3C33D0:lI114|H3C33E0
+3C33E0:lI111|N
+3C2C2C:lI99|H3C2CE0
+3C2CE0:lI112|H3C2D88
+3C2D88:lI116|N
+3C2B7C:lH3C2C3C|N
+3C2C3C:t2:H3C2CF0,H3C2CF8
+3C2CF8:lI97|H3C2DA0
+3C2DA0:lI112|H3C2E38
+3C2E38:lI112|H3C2EB8
+3C2EB8:lI108|H3C2F30
+3C2F30:lI105|H3C2FA0
+3C2FA0:lI99|H3C3008
+3C3008:lI97|H3C3070
+3C3070:lI116|H3C30D0
+3C30D0:lI105|H3C3128
+3C3128:lI111|H3C3178
+3C3178:lI110|H3C31C0
+3C31C0:lI47|H3C3208
+3C3208:lI109|H3C3250
+3C3250:lI97|H3C3298
+3C3298:lI99|H3C32E0
+3C32E0:lI45|H3C3318
+3C3318:lI98|H3C3348
+3C3348:lI105|H3C3370
+3C3370:lI110|H3C3390
+3C3390:lI104|H3C33A8
+3C33A8:lI101|H3C33B8
+3C33B8:lI120|H3C33C8
+3C33C8:lI52|H3C33D8
+3C33D8:lI48|N
+3C2CF0:lI104|H3C2D98
+3C2D98:lI113|H3C2E30
+3C2E30:lI120|N
+3BDBCC:lH3BDA78|H3BDA8C
+3BDA78:t2:A4:port,I8888
+3BDA8C:lH3BDB04|H3BDB10
+3BDB04:t2:AC:bind_address,H3BDB64
+3BDB64:t4:I127,I0,I0,I1
+3BDB10:lH3BDB78|H3BDB84
+3BDB78:t2:AB:server_name,H3BDBD4
+3BDBD4:lI108|H3BDC24
+3BDC24:lI111|H3BDC88
+3BDC88:lI99|H3BDCF0
+3BDCF0:lI97|H3BDD70
+3BDD70:lI108|H3BDDF8
+3BDDF8:lI104|H3BDE90
+3BDE90:lI111|H3BDF40
+3BDF40:lI115|H3BDFFC
+3BDFFC:lI116|N
+3BDB84:lH3BDBDC|H3BDBE8
+3BDBDC:t2:AE:max_header_siz,I1024
+3BDBE8:lH3BDC2C|H3BDC38
+3BDC2C:t2:A11:max_header_action,A8:reply414
+3BDC38:lH3BDC90|H3BDC9C
+3BDC90:t2:A8:com_type,A7:ip_comm
+3BDC9C:lH3BDCF8|H3BDD04
+3BDCF8:t2:A7:modules,H3BDD78
+3BDD78:lA9:mod_alias|H3BDE00
+3BDE00:lA8:mod_auth|H3BDE98
+3BDE98:lA7:mod_esi|H3BDF48
+3BDF48:lAB:mod_actions|H3BE004
+3BE004:lA7:mod_cgi|H3BE0D0
+3BE0D0:lAB:mod_include|H3BE1A4
+3BE1A4:lA7:mod_dir|H3BE288
+3BE288:lA7:mod_get|H3BE378
+3BE378:lA8:mod_head|H3BE47C
+3BE47C:lA7:mod_log|H3BE580
+3BE580:lAC:mod_disk_log|N
+3BDD04:lH3BDD80|H3BDD8C
+3BDD80:t2:AF:directory_index,H3BDE08
+3BDE08:lH3BDEA0|N
+3BDEA0:lI105|H3BDF50
+3BDF50:lI110|H3BE00C
+3BE00C:lI100|H3BE0D8
+3BE0D8:lI101|H3BE1AC
+3BE1AC:lI120|H3BE290
+3BE290:lI46|H3BE380
+3BE380:lI104|H3BE484
+3BE484:lI116|H3BE588
+3BE588:lI109|H3BE68C
+3BE68C:lI108|N
+3BDD8C:lH3BDE10|H3BDE1C
+3BDE10:t2:AC:default_type,H3BDEA8
+3BDEA8:lI116|H3BDF58
+3BDF58:lI101|H3BE014
+3BE014:lI120|H3BE0E0
+3BE0E0:lI116|H3BE1B4
+3BE1B4:lI47|H3BE298
+3BE298:lI112|H3BE388
+3BE388:lI108|H3BE48C
+3BE48C:lI97|H3BE590
+3BE590:lI105|H3BE694
+3BE694:lI110|N
+3BDE1C:lH3BDEB0|H3BDEBC
+3BDEB0:t2:A10:erl_script_alias,H3BDF60
+3BDF60:t2:H3BE01C,H3BE024
+3BE024:lH3BE0F0|N
+3BE0F0:lI119|H3BE1C4
+3BE1C4:lI101|H3BE2A8
+3BE2A8:lI98|H3BE398
+3BE398:lI116|H3BE49C
+3BE49C:lI111|H3BE5A0
+3BE5A0:lI111|H3BE6A4
+3BE6A4:lI108|N
+3BE01C:lI47|H3BE0E8
+3BE0E8:lI119|H3BE1BC
+3BE1BC:lI101|H3BE2A0
+3BE2A0:lI98|H3BE390
+3BE390:lI116|H3BE494
+3BE494:lI111|H3BE598
+3BE598:lI111|H3BE69C
+3BE69C:lI108|N
+3BDEBC:lH3BDF6C|H3BDF78
+3BDF6C:t2:A5:alias,H3BE02C
+3BE02C:t2:H3BE0F8,H3BE100
+3BE100:lI47|H3BE1D4
+3BE1D4:lI99|H3BE2B8
+3BE2B8:lI108|H3BE3A8
+3BE3A8:lI101|H3BE4AC
+3BE4AC:lI97|H3BE5B0
+3BE5B0:lI114|H3BE6B4
+3BE6B4:lI99|H3BE7A8
+3BE7A8:lI97|H3BE894
+3BE894:lI115|H3BE980
+3BE980:lI101|H3BEA74
+3BEA74:lI47|H3BEB68
+3BEB68:lI111|H3BEC54
+3BEC54:lI116|H3BED40
+3BED40:lI112|H3BEE2C
+3BEE2C:lI47|H3BEF00
+3BEF00:lI101|H3BEFD4
+3BEFD4:lI114|H3BF0A0
+3BF0A0:lI116|H3BF174
+3BF174:lI115|H3BF238
+3BF238:lI47|H3BF2FC
+3BF2FC:lI108|H3BF3A8
+3BF3A8:lI105|H3BF45C
+3BF45C:lI98|H3BF518
+3BF518:lI47|H3BF5DC
+3BF5DC:lI111|H3BF6B0
+3BF6B0:lI98|H3BF784
+3BF784:lI115|H3BF858
+3BF858:lI101|H3BF93C
+3BF93C:lI114|H3BFA18
+3BFA18:lI118|H3BFAF4
+3BFAF4:lI101|H3BFBD0
+3BFBD0:lI114|H3BFC9C
+3BFC9C:lI47|H3BFD60
+3BFD60:lI112|H3BFE2C
+3BFE2C:lI114|H3BFEE0
+3BFEE0:lI105|H3BFF94
+3BFF94:lI118|H3C0040
+3C0040:lI47|H3C00EC
+3C00EC:lI99|H3C0198
+3C0198:lI114|H3C024C
+3C024C:lI97|H3C0308
+3C0308:lI115|H3C03BC
+3C03BC:lI104|H3C0458
+3C0458:lI100|H3C04F4
+3C04F4:lI117|H3C0590
+3C0590:lI109|H3C0634
+3C0634:lI112|H3C06E0
+3C06E0:lI95|H3C078C
+3C078C:lI118|H3C0830
+3C0830:lI105|H3C08BC
+3C08BC:lI101|H3C0950
+3C0950:lI119|H3C09E4
+3C09E4:lI101|H3C0A80
+3C0A80:lI114|N
+3BE0F8:lI47|H3BE1CC
+3BE1CC:lI99|H3BE2B0
+3BE2B0:lI114|H3BE3A0
+3BE3A0:lI97|H3BE4A4
+3BE4A4:lI115|H3BE5A8
+3BE5A8:lI104|H3BE6AC
+3BE6AC:lI100|H3BE7A0
+3BE7A0:lI117|H3BE88C
+3BE88C:lI109|H3BE978
+3BE978:lI112|H3BEA6C
+3BEA6C:lI95|H3BEB60
+3BEB60:lI118|H3BEC4C
+3BEC4C:lI105|H3BED38
+3BED38:lI101|H3BEE24
+3BEE24:lI119|H3BEEF8
+3BEEF8:lI101|H3BEFCC
+3BEFCC:lI114|N
+3BDF78:lH3BE038|H3BE044
+3BE038:t2:A5:alias,H3BE108
+3BE108:t2:H3BE1DC,H3BE1E4
+3BE1E4:lI47|H3BE2C8
+3BE2C8:lI99|H3BE3B8
+3BE3B8:lI108|H3BE4BC
+3BE4BC:lI101|H3BE5C0
+3BE5C0:lI97|H3BE6C4
+3BE6C4:lI114|H3BE7B8
+3BE7B8:lI99|H3BE8A4
+3BE8A4:lI97|H3BE990
+3BE990:lI115|H3BEA84
+3BEA84:lI101|H3BEB78
+3BEB78:lI47|H3BEC64
+3BEC64:lI111|H3BED50
+3BED50:lI116|H3BEE3C
+3BEE3C:lI112|H3BEF10
+3BEF10:lI47|H3BEFE4
+3BEFE4:lI101|H3BF0B0
+3BF0B0:lI114|H3BF184
+3BF184:lI116|H3BF248
+3BF248:lI115|H3BF304
+3BF304:lI47|H3BF3B0
+3BF3B0:lI101|H3BF464
+3BF464:lI114|H3BF520
+3BF520:lI116|H3BF5E4
+3BF5E4:lI115|H3BF6B8
+3BF6B8:lI47|H3BF78C
+3BF78C:lI100|H3BF860
+3BF860:lI111|H3BF944
+3BF944:lI99|H3BFA20
+3BFA20:lI47|H3BFAFC
+3BFAFC:lI104|H3BFBD8
+3BFBD8:lI116|H3BFCA4
+3BFCA4:lI109|H3BFD68
+3BFD68:lI108|N
+3BE1DC:lI47|H3BE2C0
+3BE2C0:lI99|H3BE3B0
+3BE3B0:lI114|H3BE4B4
+3BE4B4:lI97|H3BE5B8
+3BE5B8:lI115|H3BE6BC
+3BE6BC:lI104|H3BE7B0
+3BE7B0:lI100|H3BE89C
+3BE89C:lI117|H3BE988
+3BE988:lI109|H3BEA7C
+3BEA7C:lI112|H3BEB70
+3BEB70:lI95|H3BEC5C
+3BEC5C:lI101|H3BED48
+3BED48:lI114|H3BEE34
+3BEE34:lI116|H3BEF08
+3BEF08:lI115|H3BEFDC
+3BEFDC:lI95|H3BF0A8
+3BF0A8:lI100|H3BF17C
+3BF17C:lI111|H3BF240
+3BF240:lI99|N
+3BE044:lH3BE114|H3BE120
+3BE114:t2:A5:alias,H3BE1EC
+3BE1EC:t2:H3BE2D0,H3BE2D8
+3BE2D8:lI47|H3BE3C8
+3BE3C8:lI99|H3BE4CC
+3BE4CC:lI108|H3BE5D0
+3BE5D0:lI101|H3BE6D4
+3BE6D4:lI97|H3BE7C8
+3BE7C8:lI114|H3BE8B4
+3BE8B4:lI99|H3BE9A0
+3BE9A0:lI97|H3BEA94
+3BEA94:lI115|H3BEB88
+3BEB88:lI101|H3BEC74
+3BEC74:lI47|H3BED60
+3BED60:lI111|H3BEE4C
+3BEE4C:lI116|H3BEF20
+3BEF20:lI112|H3BEFEC
+3BEFEC:lI47|H3BF0B8
+3BF0B8:lI101|H3BF18C
+3BF18C:lI114|H3BF250
+3BF250:lI116|H3BF30C
+3BF30C:lI115|H3BF3B8
+3BF3B8:lI47|H3BF46C
+3BF46C:lI108|H3BF528
+3BF528:lI105|H3BF5EC
+3BF5EC:lI98|H3BF6C0
+3BF6C0:lI47|H3BF794
+3BF794:lI111|H3BF868
+3BF868:lI98|H3BF94C
+3BF94C:lI115|H3BFA28
+3BFA28:lI101|H3BFB04
+3BFB04:lI114|H3BFBE0
+3BFBE0:lI118|H3BFCAC
+3BFCAC:lI101|H3BFD70
+3BFD70:lI114|H3BFE34
+3BFE34:lI47|H3BFEE8
+3BFEE8:lI100|H3BFF9C
+3BFF9C:lI111|H3C0048
+3C0048:lI99|H3C00F4
+3C00F4:lI47|H3C01A0
+3C01A0:lI104|H3C0254
+3C0254:lI116|H3C0310
+3C0310:lI109|H3C03C4
+3C03C4:lI108|N
+3BE2D0:lI47|H3BE3C0
+3BE3C0:lI99|H3BE4C4
+3BE4C4:lI114|H3BE5C8
+3BE5C8:lI97|H3BE6CC
+3BE6CC:lI115|H3BE7C0
+3BE7C0:lI104|H3BE8AC
+3BE8AC:lI100|H3BE998
+3BE998:lI117|H3BEA8C
+3BEA8C:lI109|H3BEB80
+3BEB80:lI112|H3BEC6C
+3BEC6C:lI95|H3BED58
+3BED58:lI100|H3BEE44
+3BEE44:lI111|H3BEF18
+3BEF18:lI99|N
+3BE120:lH3BE1F8|N
+3BE1F8:t2:A10:erl_script_alias,H3BE2E0
+3BE2E0:t2:H3BE3D0,H3BE3D8
+3BE3D8:lH3BE4DC|N
+3BE4DC:lI99|H3BE5E0
+3BE5E0:lI114|H3BE6E4
+3BE6E4:lI97|H3BE7D8
+3BE7D8:lI115|H3BE8C4
+3BE8C4:lI104|H3BE9B0
+3BE9B0:lI100|H3BEAA4
+3BEAA4:lI117|H3BEB90
+3BEB90:lI109|H3BEC7C
+3BEC7C:lI112|H3BED68
+3BED68:lI95|H3BEE54
+3BEE54:lI118|H3BEF28
+3BEF28:lI105|H3BEFF4
+3BEFF4:lI101|H3BF0C0
+3BF0C0:lI119|H3BF194
+3BF194:lI101|H3BF258
+3BF258:lI114|N
+3BE3D0:lI47|H3BE4D4
+3BE4D4:lI99|H3BE5D8
+3BE5D8:lI100|H3BE6DC
+3BE6DC:lI118|H3BE7D0
+3BE7D0:lI95|H3BE8BC
+3BE8BC:lI101|H3BE9A8
+3BE9A8:lI114|H3BEA9C
+3BEA9C:lI108|N
+3BDE2C:lH3BDA9C|H3BDECC
+3BDA9C:t4:I127,I0,I0,I1
+3BDECC:lI8888|H3BDF88
+3BDF88:lN|N
+3BDD1C:lN|N
+3BDA50:t2:AD:$initial_call,H3BDAB8
+3BDAB8:t3:A3:gen,A7:init_it,H3BDAB0
+3BDA5C:t2:A9:verbosity,A7:silence
+3BDAC8:t2:AE:auth_verbosity,A7:silence
+3BDB28:t2:A12:security_verbosity,A7:silence
+3BDB9C:t2:A12:acceptor_verbosity,A7:silence
+3BDC00:t2:AA:$ancestors,H3BDC5C
+3BDC5C:lA1A:httpd_sup__127_0_0_1__8888|H3BDCB4
+3BDCB4:lA8:web_tool|H3BDD24
+3BDD24:lP<0.27.0>|N
+3BDADC:t2:A19:request_handler_verbosity,A7:silence
+3BDB3C:t2:A5:sname,A3:man
+=proc_dictionary:<0.47.0>
+H36E688
+H36E694
+H36E6A0
+H36E6AC
+=proc_stack:<0.47.0>
+36c520:SReturn addr 0x362C9C (inet_tcp:accept/2 + 20)
+y0:I5
+y1:p<0.161>
+y2:p<0.141>
+36c530:SReturn addr 0x500C5C (httpd_socket:accept/3 + 280)
+y0:N
+36c538:SReturn addr 0x502BFC (httpd_acceptor:acceptor/4 + 164)
+y0:N
+36c540:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:SCatch 0x502BFC (httpd_acceptor:acceptor/4 + 164)
+y1:P<0.46.0>
+y2:A7:ip_comm
+y3:p<0.141>
+y4:A1B:httpd_conf__127_0_0_1__8888
+36c558:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:AE:httpd_acceptor
+y2:A8:acceptor
+y3:H36E6C8
+=proc_heap:<0.47.0>
+36E6C8:lP<0.44.0>|H36E724
+36E724:lP<0.46.0>|H36E748
+36E748:lA7:ip_comm|H36E760
+36E760:lH36E6D0|H36E778
+36E6D0:t4:I127,I0,I0,I1
+36E778:lI8888|H36E788
+36E788:lA1B:httpd_conf__127_0_0_1__8888|H36E798
+36E798:lA7:silence|N
+36E688:t2:AD:$initial_call,H36E6F0
+36E6F0:t3:AE:httpd_acceptor,A8:acceptor,H36E6C8
+36E694:t2:A9:verbosity,A7:silence
+36E6A0:t2:AA:$ancestors,H36E700
+36E700:lA1E:httpd_acc_sup__127_0_0_1__8888|H36E72C
+36E72C:lA1A:httpd_sup__127_0_0_1__8888|H36E750
+36E750:lA8:web_tool|H36E768
+36E768:lP<0.27.0>|N
+36E6AC:t2:A5:sname,A3:acc
+=proc_dictionary:<0.48.0>
+H385E48
+H385E54
+=proc_stack:<0.48.0>
+3ac1bc:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A10:crashdump_viewer
+y3:H3AB280
+y4:A17:crashdump_viewer_server
+y5:P<0.41.0>
+3ac1d8:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H385E90
+=proc_heap:<0.48.0>
+3AB280:t8:A5:state,A9:undefined,A9:undefined,A9:undefined,A5:false,I4,A9:undefined,P<0.56.0>
+385E90:lAA:gen_server|H385ED8
+385ED8:lP<0.41.0>|H385F10
+385F10:lP<0.41.0>|H385F58
+385F58:lH385FA8|H385FB4
+385FA8:t2:A5:local,A17:crashdump_viewer_server
+385FB4:lA10:crashdump_viewer|H386014
+386014:lN|H38606C
+38606C:lN|N
+385E48:t2:AD:$initial_call,H385EB0
+385EB0:t3:A3:gen,A7:init_it,H385E90
+385E54:t2:AA:$ancestors,H385EC0
+385EC0:lA6:websup|H385F08
+385F08:lA8:web_tool|H385F50
+385F50:lP<0.27.0>|N
+=proc_stack:<0.49.0>
+36a114:SReturn addr 0x30174C (io:parse_erl_exprs/3 + 92)
+y0:H369E10
+y1:P<0.22.0>
+36a120:SReturn addr 0x2E5360 (shell:'-get_command/4-fun-0-'/1 + 20)
+y0:N
+36a128:SReturn addr 0x156F90 (<terminate process normally>)
+=proc_heap:<0.49.0>
+369E10:E21:8372000364000D6E6F6E6F6465406E6F686F737400000001330000000000000000
+=atoms
+http_cache_control
+copy_word
+drop_line
+copy_line
+write_rest_of_line
+drop_to_empty_line
+read_to_empty_line_reverse
+set_pos
+read_line_backwards
+jumped
+jump_to_empty_line_or_eof
+get_pos
+translate_atoms
+translate_fun
+translate_funs
+translate_loaded_modules2
+translate_loaded_modules_totals
+translate_loaded_modules
+translate_links
+get_all_creations
+translate_node_info2
+translate_node_info
+translate_dist_info2
+translate_dist_info
+get_msg
+translate_timers
+translate_ets
+translate_ets_tables
+do_translate_sl_alloc_r7_r8
+translate_sl_alloc_r7_r8
+translate_sl_alloc_line
+do_translate_sl_alloc
+translate_sl_alloc
+translate_memory_and_allocated_area_r9b
+translate_allocated_areas
+translate_internal_table_line
+translate_index_table
+translate_hash_table
+translate_internal_tables
+translate_ports
+write_last_calls
+write_msg_q_stuff
+translate_process
+translate_processes
+erts_vsn
+translate_summary
+'Send'
+erl_crash_dump
+internal_tables
+mods
diff --git a/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.noatoms b/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.noatoms
new file mode 100644
index 0000000000..9f20ef3e44
--- /dev/null
+++ b/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.noatoms
@@ -0,0 +1,13035 @@
+=erl_crash_dump:0.1
+Wed Apr 21 13:22:44 2004
+Slogan: eheap_alloc: Cannot allocate 785672 bytes of memory (of type "heap").
+System version: Erlang (BEAM) emulator version 5.4 [source] [hipe] [threads:0]
+Compiled: Thu Dec 18 14:07:45 2003
+Atoms: 5614
+=memory
+total: 653336887
+processes: 1768396
+processes_used: 1765460
+system: 651568491
+atom: 244837
+atom_used: 237116
+binary: 648618369
+code: 2158413
+ets: 225620
+=hash_table:atom_tab
+size: 4813
+used: 3304
+objs: 5614
+depth: 7
+=index_table:atom_tab
+size: 5700
+limit: 1048576
+used: 5614
+rate: 100
+=hash_table:module_code
+size: 97
+used: 69
+objs: 107
+depth: 5
+=index_table:module_code
+size: 110
+limit: 65536
+used: 107
+rate: 10
+=hash_table:export_list
+size: 2411
+used: 1674
+objs: 2843
+depth: 6
+=index_table:export_list
+size: 2900
+limit: 65536
+used: 2843
+rate: 100
+=hash_table:process_reg
+size: 47
+used: 16
+objs: 23
+depth: 3
+=hash_table:fun_table
+size: 397
+used: 261
+objs: 400
+depth: 4
+=hash_table:node_table
+size: 11
+used: 1
+objs: 1
+depth: 1
+=hash_table:dist_table
+size: 11
+used: 1
+objs: 1
+depth: 1
+=allocated_areas
+processes: 1765460 1768396
+ets: 225620
+sys_misc: 24634
+static: 295033
+atom_space: 65544 57967
+binary: 648618369
+atom_table: 42141
+module_table: 920
+export_table: 21336
+register_table: 252
+fun_table: 1650
+module_refs: 1024
+loaded_code: 1968915
+dist_table: 159
+node_table: 131
+bits_bufs_size: 19
+bif_timer: 13392
+link_lh: 0
+dist_buf: 0
+proc: 15080 13576
+atom_entry: 137152 137008
+export_entry: 138448 137632
+module_entry: 4872 4352
+reg_proc: 1000 592
+link_nh: 2464 2080
+link_sh: 832 192
+proc_list: 24 24
+fun_entry: 22584 22584
+db_tab: 1632 1632
+=allocator:sys_alloc
+option e: true
+option m: libc
+=allocator:temp_alloc
+versions: 0.9 2.1
+option e: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 90
+option rsbcmt: 80
+option mmbcs: 65536
+option mmsbc: 256
+option mmmbc: 10
+option lmbcs: 5242880
+option smbcs: 1048576
+option mbcgs: 10
+option as: af
+mbcs blocks: 0 9 9
+mbcs blocks size: 0 35376 35376
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 65568 65568 65568
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 65568
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+temp_alloc calls: 6155
+temp_free calls: 6155
+temp_realloc calls: 29
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:sl_alloc
+option e: false
+=allocator:std_alloc
+option e: false
+=allocator:ll_alloc
+versions: 0.9 2.1
+option e: true
+option sbct: 4294967295
+option asbcst: 0
+option rsbcst: 0
+option rsbcmt: 0
+option mmbcs: 2097152
+option mmsbc: 0
+option mmmbc: 0
+option lmbcs: 5242880
+option smbcs: 1048576
+option mbcgs: 10
+option as: aobf
+mbcs blocks: 592 592 592
+mbcs blocks size: 2838520 2863304 2863304
+mbcs carriers: 2 2 2
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 2
+mbcs carriers size: 3145760 3145760 3145760
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 3145760
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ll_alloc calls: 592
+ll_free calls: 0
+ll_realloc calls: 235
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 2
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:eheap_alloc
+versions: 2.1 2.1
+option e: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 50
+option rsbcmt: 80
+option mmbcs: 524288
+option mmsbc: 256
+option mmmbc: 10
+option lmbcs: 5242880
+option smbcs: 1048576
+option mbcgs: 10
+option mbsd: 3
+option as: gf
+mbcs blocks: 56 102 102
+mbcs blocks size: 833280 1638920 1638920
+mbcs carriers: 2 3 3
+mbcs mseg carriers: 1
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 1998880 3047456 3047456
+mbcs mseg carriers size: 1474560
+mbcs sys_alloc carriers size: 524320
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+eheap_alloc calls: 6971
+eheap_free calls: 6914
+eheap_realloc calls: 461
+mseg_alloc calls: 16
+mseg_dealloc calls: 14
+mseg_realloc calls: 0
+sys_alloc calls: 3
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:binary_alloc
+option e: false
+=allocator:ets_alloc
+option e: false
+=allocator:fix_alloc
+option e: true
+proc: 15080 13576
+atom_entry: 137152 137008
+export_entry: 138448 137632
+module_entry: 4872 4352
+reg_proc: 1000 592
+link_nh: 2464 2080
+link_sh: 832 192
+proc_list: 24 24
+fun_entry: 22584 22584
+db_tab: 1632 1632
+=allocator:mseg_alloc
+version: 0.9
+option amcbf: 4194304
+option rmcbf: 20
+option mcs: 5
+option cci: 1000
+cached_segments: 0
+cache_hits: 13
+segments: 2
+segments_watermark: 2
+mseg_alloc calls: 16
+mseg_dealloc calls: 14
+mseg_realloc calls: 0
+mseg_create calls: 4
+mseg_destroy calls: 1
+mseg_clear_cache calls: 6
+mseg_check_cache calls: 2
+=allocator:alloc_util
+option mmc: 1024
+option ycs: 1048576
+=allocator:instr
+option m: false
+option s: false
+option t: false
+=proc:<0.0.0>
+State: Waiting
+Name: init
+Spawned as: otp_ring0:start/2
+Spawned by: []
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.5.0>,<0.4.0>,<0.2.0>]
+Reductions: 3851
+Stack+heap: 377
+OldHeap: 610
+Heap unused: 53
+OldHeap unused: 610
+Program counter: 0x1f496c (init:loop/1 + 20)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.2.0>
+State: Waiting
+Name: erl_prim_loader
+Spawned as: erlang:apply/2
+Spawned by: <0.1.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.0.0>,#Port<0.2>]
+Reductions: 201036
+Stack+heap: 987
+OldHeap: 987
+Heap unused: 923
+OldHeap unused: 987
+Program counter: 0x20cc94 (erl_prim_loader:loop/3 + 52)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.4.0>
+State: Waiting
+Name: error_logger
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.1.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.21.0>,<0.0.0>]
+Reductions: 296
+Stack+heap: 6765
+OldHeap: 0
+Heap unused: 851
+OldHeap unused: 0
+Program counter: 0x21f5b8 (gen_event:loop/4 + 40)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.5.0>
+State: Waiting
+Name: application_controller
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.1.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.7.0>,<0.0.0>]
+Reductions: 1508
+Stack+heap: 1597
+OldHeap: 0
+Heap unused: 835
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.7.0>
+State: Waiting
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.6.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.8.0>,<0.5.0>]
+Reductions: 23
+Stack+heap: 377
+OldHeap: 0
+Heap unused: 79
+OldHeap unused: 0
+Program counter: 0x248d04 (application_master:main_loop/2 + 28)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.8.0>
+State: Waiting
+Spawned as: application_master:start_it/4
+Spawned by: <0.7.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>,<0.7.0>]
+Reductions: 91
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 177
+OldHeap unused: 0
+Program counter: 0x24a26c (application_master:loop_it/4 + 40)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.9.0>
+State: Waiting
+Name: kernel_sup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.8.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.24.0>,<0.23.0>,<0.19.0>,<0.18.0>,<0.17.0>,<0.16.0>,<0.15.0>,<0.14.0>,<0.11.0>,<0.10.0>,<0.8.0>]
+Reductions: 7402
+Stack+heap: 610
+OldHeap: 987
+Heap unused: 311
+OldHeap unused: 987
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.10.0>
+State: Waiting
+Name: rex
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>]
+Reductions: 44
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 144
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.11.0>
+State: Waiting
+Name: global_name_server
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.13.0>,<0.12.0>,<0.9.0>]
+Reductions: 47
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 98
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.12.0>
+State: Waiting
+Spawned as: global:init_the_locker/1
+Spawned by: <0.11.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.11.0>]
+Reductions: 3
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 227
+OldHeap unused: 0
+Program counter: 0x261340 (global:loop_the_locker/2 + 92)
+CP: 0x261184 (global:init_the_locker/1 + 112)
+arity = 0
+=proc:<0.13.0>
+State: Waiting
+Spawned as: erlang:apply/2
+Spawned by: <0.11.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.11.0>]
+Reductions: 4
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 221
+OldHeap unused: 0
+Program counter: 0x265288 (global:collect_deletions/2 + 76)
+CP: 0x2651ac (global:loop_the_deleter/1 + 36)
+arity = 0
+=proc:<0.14.0>
+State: Waiting
+Name: inet_db
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>]
+Reductions: 376
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 30
+OldHeap unused: 233
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.15.0>
+State: Waiting
+Name: global_group
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>]
+Reductions: 71
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 92
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.16.0>
+State: Waiting
+Name: file_server_2
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 1
+Heap fragment data: 119
+Link list: [{from,<0.17.0>,#Ref<0.0.0.22>},#Port<0.4>,<0.9.0>]
+Reductions: 83605
+Stack+heap: 4181
+OldHeap: 4181
+Heap unused: 1720
+OldHeap unused: 4181
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.17.0>
+State: Waiting
+Name: file_server
+Spawned as: erlang:apply/2
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [{to,<0.16.0>,#Ref<0.0.0.22>},<0.9.0>]
+Reductions: 12
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 207
+OldHeap unused: 0
+Program counter: 0x2a18e8 (old_file_server:relay_loop/3 + 32)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.18.0>
+State: Waiting
+Name: code_server
+Spawned as: erlang:apply/2
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:07 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>]
+Reductions: 108900
+Stack+heap: 6765
+OldHeap: 6765
+Heap unused: 4389
+OldHeap unused: 6765
+Program counter: 0x2a6e64 (code_server:loop/1 + 64)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.19.0>
+State: Waiting
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.21.0>,<0.9.0>]
+Reductions: 74
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 180
+OldHeap unused: 233
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.20.0>
+State: Waiting
+Spawned as: user_drv:server/2
+Spawned by: <0.19.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.22.0>,<0.21.0>,#Port<0.72>]
+Reductions: 596
+Stack+heap: 233
+OldHeap: 377
+Heap unused: 214
+OldHeap unused: 377
+Program counter: 0x2ca4e0 (user_drv:server_loop/5 + 56)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.21.0>
+State: Waiting
+Name: user
+Spawned as: group:server/2
+Spawned by: <0.20.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.4.0>,<0.19.0>,<0.20.0>]
+Reductions: 26
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 202
+OldHeap unused: 0
+Program counter: 0x2cd9d8 (group:server_loop/3 + 32)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.22.0>
+State: Waiting
+Spawned as: group:server/2
+Spawned by: <0.20.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [{from,<0.49.0>,#Ref<0.0.0.307>},<0.25.0>,<0.20.0>]
+Reductions: 1244
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 40
+OldHeap unused: 233
+Program counter: 0x2cf238 (group:get_line1/3 + 1652)
+CP: 0x2cf230 (group:get_line1/3 + 1644)
+arity = 0
+=proc:<0.23.0>
+State: Waiting
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>]
+Reductions: 45
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 63
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.24.0>
+State: Waiting
+Name: kernel_safe_sup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.31.0>,<0.9.0>]
+Reductions: 133
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 198
+OldHeap unused: 233
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.25.0>
+State: Waiting
+Spawned as: erlang:apply/2
+Spawned by: <0.22.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.49.0>,<0.27.0>,<0.22.0>]
+Reductions: 161
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 169
+OldHeap unused: 0
+Program counter: 0x2e0d00 (shell:get_command1/4 + 40)
+CP: 0x2e06fc (shell:server_loop/6 + 140)
+arity = 0
+=proc:<0.27.0>
+State: Waiting
+Spawned as: erlang:apply/2
+Spawned by: <0.25.0>
+Started: Wed Apr 21 13:22:08 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.25.0>]
+Reductions: 506
+Stack+heap: 4181
+OldHeap: 0
+Heap unused: 1131
+OldHeap unused: 0
+Program counter: 0x2e2bbc (shell:eval_loop/2 + 32)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.31.0>
+State: Waiting
+Name: inet_gethost_native_sup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.24.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.32.0>,<0.24.0>]
+Reductions: 49
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 87
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.32.0>
+State: Waiting
+Name: inet_gethost_native
+Spawned as: inet_gethost_native:server_init/2
+Spawned by: <0.31.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 1
+Heap fragment data: 118
+Link list: [#Port<0.105>,<0.31.0>]
+Reductions: 65
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 13
+OldHeap unused: 0
+Program counter: 0x4ad840 (inet_gethost_native:main_loop/1 + 20)
+CP: 0x156f90 (<terminate process normally>)
+arity = 0
+=proc:<0.33.0>
+State: Waiting
+Name: web_tool
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.27.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.41.0>]
+Reductions: 131773
+Stack+heap: 6765
+OldHeap: 6765
+Heap unused: 2941
+OldHeap unused: 6765
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.41.0>
+State: Waiting
+Name: websup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.33.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.48.0>,<0.33.0>]
+Reductions: 118
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 205
+OldHeap unused: 233
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.43.0>
+State: Waiting
+Name: httpd_sup__127_0_0_1__8888
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.33.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.46.0>,<0.45.0>,<0.44.0>]
+Reductions: 1220
+Stack+heap: 6765
+OldHeap: 0
+Heap unused: 277
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.44.0>
+State: Waiting
+Name: httpd_acc_sup__127_0_0_1__8888
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.43.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.47.0>,<0.43.0>]
+Reductions: 147
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 77
+OldHeap unused: 233
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.45.0>
+State: Waiting
+Name: httpd_misc_sup__127_0_0_1__8888
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.43.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.43.0>]
+Reductions: 52
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 80
+OldHeap unused: 0
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.46.0>
+State: Waiting
+Name: httpd__127_0_0_1__8888
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.43.0>
+Started: Wed Apr 21 13:22:17 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.43.0>]
+Reductions: 2905
+Stack+heap: 6765
+OldHeap: 10946
+Heap unused: 138
+OldHeap unused: 10946
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.47.0>
+State: Waiting
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.44.0>
+Started: Wed Apr 21 13:22:18 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [#Port<0.161>,#Port<0.141>,<0.44.0>]
+Reductions: 874
+Stack+heap: 233
+OldHeap: 233
+Heap unused: 190
+OldHeap unused: 233
+Program counter: 0x1fe798 (prim_inet:accept0/2 + 96)
+CP: 0x1feb04 (prim_inet:async_accept/2 + 380)
+arity = 0
+=proc:<0.48.0>
+State: Waiting
+Name: crashdump_viewer_server
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.41.0>
+Started: Wed Apr 21 13:22:18 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.56.0>,<0.41.0>]
+Reductions: 1913
+Stack+heap: 987
+OldHeap: 987
+Heap unused: 524
+OldHeap unused: 987
+Program counter: 0x239d50 (gen_server:loop/6 + 52)
+CP: 0x225860 (proc_lib:init_p/5 + 164)
+arity = 0
+=proc:<0.49.0>
+State: Waiting
+Spawned as: erlang:apply/2
+Spawned by: <0.25.0>
+Started: Wed Apr 21 13:22:18 2004
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [{to,<0.22.0>,#Ref<0.0.0.307>},<0.25.0>]
+Reductions: 15
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 190
+OldHeap unused: 0
+Program counter: 0x301d58 (io:wait_io_mon_reply/2 + 28)
+CP: 0x30174c (io:parse_erl_exprs/3 + 92)
+arity = 0
+=proc:<0.56.0>
+State: Garbing
+Spawned as: erlang:apply/2
+Last scheduled in for: erlang:garbage_collect/0
+Spawned by: <0.48.0>
+Started: Wed Apr 21 13:22:27 2004
+Message queue length: 0
+Number of heap fragments: 1
+Heap fragment data: 121
+Link list: [#Port<0.158>,#Port<0.157>,<0.48.0>]
+Reductions: 2420470
+Stack+heap: 121393
+OldHeap: 0
+Heap unused: 22172
+OldHeap unused: 0
+New heap start: FE5768E0
+New heap top: FE5D7734
+Stack top: FE5ED130
+Stack end: FE5ED1A4
+Old heap start: 0
+Old heap top: 0
+Old heap end: 0
+Program counter: 0x1a4980 (unknown function)
+CP: 0x20710c (prim_file:read/2 + 436)
+=port:#Port<0.1>
+Slot: 1
+Connected: #Port<0.0>
+Port controls linked-in driver: async
+=port:#Port<0.2>
+Slot: 2
+Connected: <0.2.0>
+Links: <0.2.0>
+Port controls linked-in driver: efile
+=port:#Port<0.4>
+Slot: 4
+Connected: <0.16.0>
+Links: <0.16.0>
+Port controls linked-in driver: efile
+=port:#Port<0.72>
+Slot: 72
+Connected: <0.20.0>
+Links: <0.20.0>
+Port controls linked-in driver: tty_sl -c -e
+=port:#Port<0.105>
+Slot: 105
+Connected: <0.32.0>
+Links: <0.32.0>
+Port controls external process: inet_gethost 4
+=port:#Port<0.141>
+Slot: 141
+Connected: <0.47.0>
+Links: <0.47.0>
+Port controls linked-in driver: tcp_inet
+=port:#Port<0.157>
+Slot: 157
+Connected: <0.56.0>
+Links: <0.56.0>
+Port controls linked-in driver: efile
+=port:#Port<0.158>
+Slot: 158
+Connected: <0.56.0>
+Links: <0.56.0>
+Port controls linked-in driver: efile
+=port:#Port<0.161>
+Slot: 161
+Connected: <0.47.0>
+Links: <0.47.0>
+Port controls linked-in driver: tcp_inet
+=ets:<0.18.0>
+Slot: 9
+Table: 9
+Name: code
+Buckets: 256
+Objects: 289
+Words: 14108
+=ets:<0.18.0>
+Slot: 10
+Table: 10
+Name: code_names
+Buckets: 256
+Objects: 47
+Words: 4334
+=ets:<0.32.0>
+Slot: 11
+Table: 11
+Name: ign_requests
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.32.0>
+Slot: 12
+Table: 12
+Name: ign_req_index
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.33.0>
+Slot: 13
+Table: 13
+Name: app_data
+Buckets: 256
+Objects: 7
+Words: 952
+=ets:<0.46.0>
+Slot: 15
+Table: 15
+Name: httpd_mime__127_0_0_1__8888
+Buckets: 256
+Objects: 105
+Words: 5742
+=ets:<0.11.0>
+Slot: 84
+Table: global_names
+Name: global_names
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.11.0>
+Slot: 95
+Table: global_locks
+Name: global_locks
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.11.0>
+Slot: 96
+Table: global_names_ext
+Name: global_names_ext
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.14.0>
+Slot: 316
+Table: inet_cache
+Name: inet_cache
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.48.0>
+Slot: 340
+Table: cdv_menu_table
+Name: cdv_menu_table
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.48.0>
+Slot: 341
+Table: cdv_dump_index_table
+Name: cdv_dump_index_table
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.48.0>
+Slot: 342
+Table: cdv_decode_heap_table
+Name: cdv_decode_heap_table
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.16.0>
+Slot: 780
+Table: file_io_servers
+Name: file_io_servers
+Buckets: 256
+Objects: 0
+Words: 277
+=ets:<0.46.0>
+Slot: 984
+Table: httpd_conf__127_0_0_1__8888
+Name: httpd_conf__127_0_0_1__8888
+Buckets: 256
+Objects: 17
+Words: 1176
+=ets:<0.14.0>
+Slot: 1342
+Table: inet_hosts
+Name: inet_hosts
+Buckets: 256
+Objects: 4
+Words: 421
+=ets:<0.14.0>
+Slot: 1362
+Table: inet_db
+Name: inet_db
+Buckets: 256
+Objects: 20
+Words: 671
+=ets:<0.5.0>
+Slot: 1655
+Table: ac_tab
+Name: ac_tab
+Buckets: 256
+Objects: 6
+Words: 843
+=timer:<0.14.0>
+Message: refresh_timeout
+Time left: 3565692 ms
+=node:'nonode@nohost'
+=no_distribution
+=loaded_modules
+Current code: 1968915
+Old code: 0
+=mod:otp_ring0
+Current size: 489
+=mod:init
+Current size: 30110
+=mod:prim_inet
+Current size: 35532
+=mod:prim_file
+Current size: 24965
+=mod:erl_prim_loader
+Current size: 19607
+=mod:erlang
+Current size: 11137
+=mod:error_handler
+Current size: 2389
+Current attributes: 836C00000001680264000376736E6C000000016E100030769A34345F26EF6D3433254FF2AE576A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161216802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6572726F725F68616E646C65722E65726C6A
+=mod:heart
+Current size: 6687
+Current attributes: 836C00000001680264000376736E6C000000016E10003094F7BECF345494DDBB4D7186E694186A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261086802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F68656172742E65726C6A
+=mod:error_logger
+Current size: 7051
+Current attributes: 836C00000001680264000376736E6C000000016E10004E3347F841DEAE2EB6A74389E6E127146A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161246802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6572726F725F6C6F676765722E65726C6A
+=mod:gen_event
+Current size: 18288
+Current attributes: 836C00000001680264000376736E6C000000016E1000336F22DF1EA75E0EA4AE65D3B8C34F946A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61346802640006736F757263656B00302F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E5F6576656E742E65726C6A
+=mod:gen
+Current size: 7129
+Current attributes: 836C00000001680264000376736E6C000000016E10007BE6AEB66EF48D8B33323C89C9936A526A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61316802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E2E65726C6A
+=mod:proc_lib
+Current size: 11658
+Current attributes: 836C00000001680264000376736E6C000000016E10005C589A8C9BD2E1F2E895E765CAE983406A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E612D6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F70726F635F6C69622E65726C6A
+=mod:application_controller
+Current size: 55249
+Current attributes: 836C00000002680264000376736E6C000000016E10003372E1AB0410565065FA086086A721316A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061246802640006736F757263656B003D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F636F6E74726F6C6C65722E65726C6A
+=mod:gen_server
+Current size: 18728
+Current attributes: 836C00000001680264000376736E6C000000016E10004C5E93533036DAC7698FC4112F59CF236A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61396802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E5F7365727665722E65726C6A
+=mod:sys
+Current size: 11589
+Current attributes: 836C00000001680264000376736E6C000000016E1000E12B0E8267551204BD5924BAB9629ADF6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61176802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7379732E65726C6A
+=mod:lists
+Current size: 18638
+Current attributes: 836C00000002680264000376736E6C000000016E10001E95B32C30E4CDAF0BDD1ABA58CBB5F36A680264000A646570726563617465646C0000000B68026400066B65796D617061046802640003616C6C61036802640003616E79610368026400036D617061036802640007666C61746D617061036802640005666F6C646C61046802640005666F6C64726104680264000666696C746572610368026400086D6170666F6C646C610468026400086D6170666F6C647261046802640007666F726561636861036A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61116802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6C697374732E65726C6A
+=mod:application
+Current size: 2666
+Current attributes: 836C00000001680264000376736E6C000000016E1000C0C5A7B67B306300FEFF9D91AA50ECB36A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6130611F6802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E2E65726C6A
+=mod:application_master
+Current size: 10912
+Current attributes: 836C00000001680264000376736E6C000000016E1000360420F5CEB80AD7DD51B3A8A0E2AFA26A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061266802640006736F757263656B00392F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F6D61737465722E65726C6A
+=mod:kernel
+Current size: 7639
+Current attributes: 836C00000002680264000376736E6C000000016E10004D418ACCB0F948D4D3CA6B9A81B462746A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261336802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6B65726E656C2E65726C6A
+=mod:supervisor
+Current size: 24469
+Current attributes: 836C00000002680264000376736E6C000000016E1000979F65727577135484BE0892A35087CC6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61126802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F73757065727669736F722E65726C6A
+=mod:rpc
+Current size: 14539
+Current attributes: 836C00000002680264000376736E6C000000016E10008C5D6242D36B3201E3B11E82D5E1581E6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6133610F6802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F7270632E65726C6A
+=mod:gb_trees
+Current size: 8274
+Current attributes: 836C00000001680264000376736E6C000000016E1000094BEFDE7B866EF2CB6FCD895AC2EE056A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D612B6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67625F74726565732E65726C6A
+=mod:global
+Current size: 40753
+Current attributes: 836C00000002680264000376736E6C000000016E10001D02C89BDE6CB2052F099894683C14CA6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161386802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F676C6F62616C2E65726C6A
+=mod:inet_db
+Current size: 34555
+Current attributes: 836C00000001680264000376736E6C000000016E1000C1CF6A6F2E83D4EBC23D2CCECBF376226A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132611A6802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F64622E65726C6A
+=mod:inet_config
+Current size: 13575
+Current attributes: 836C00000001680264000376736E6C000000016E1000650F6571C03BC9C16BB7973A747565066A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261166802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F636F6E6669672E65726C6A
+=mod:os
+Current size: 5997
+Current attributes: 836C00000001680264000376736E6C000000016E100017144CD766A604A9DFBA0B58C8FCA78B6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361056802640006736F757263656B00292F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6F732E65726C6A
+=mod:inet_udp
+Current size: 2451
+Current attributes: 836C00000001680264000376736E6C000000016E1000ACB163E87A687A6683B50B331C6E289B6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261306802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F7564702E65726C6A
+=mod:inet
+Current size: 28288
+Current attributes: 836C00000001680264000376736E6C000000016E10009B9AD400F0BAF6AAF17A4788A4EFF11E6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132610C6802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65742E65726C6A
+=mod:inet_parse
+Current size: 21928
+Current attributes: 836C00000001680264000376736E6C000000016E1000E0E65454C096847749930EDC1C53C80B6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261266802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F70617273652E65726C6A
+=mod:filename
+Current size: 17411
+Current attributes: 836C00000001680264000376736E6C000000016E100068085214F459D51A3E08819BF8D7698A6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61296802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F66696C656E616D652E65726C6A
+=mod:inet_hosts
+Current size: 3745
+Current attributes: 836C00000001680264000376736E6C000000016E1000E7430304E86230057150DEE5D279881F6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261226802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F686F7374732E65726C6A
+=mod:erl_distribution
+Current size: 2512
+Current attributes: 836C00000002680264000376736E6C000000016E1000CDE49D63ACA767E0D49679657E99D2046A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161186802640006736F757263656B00372F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F65726C5F646973747269627574696F6E2E65726C6A
+=mod:global_group
+Current size: 30960
+Current attributes: 836C00000002680264000376736E6C000000016E10008ECE759E5920988CA3ACFF34B32F86736A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131613B6802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F676C6F62616C5F67726F75702E65726C6A
+=mod:net_kernel
+Current size: 37648
+Current attributes: 836C00000002680264000376736E6C000000016E1000967CE7DE41F9B39906CCCF3225E6E5286A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361026802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6E65745F6B65726E656C2E65726C6A
+=mod:file_server
+Current size: 8372
+Current attributes: 836C00000002680264000376736E6C000000016E1000EF90906EC6204204AC0A77C4A25B65236A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612D6802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C655F7365727665722E65726C6A
+=mod:old_file_server
+Current size: 3074
+Current attributes: 836C00000001680264000376736E6C000000016E1000C802085DD76D4EFBA6A8F528FECB94B36A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612F6802640006736F757263656B00362F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6F6C645F66696C655F7365727665722E65726C6A
+=mod:code
+Current size: 7419
+Current attributes: 836C00000001680264000376736E6C000000016E1000AE618E3041C8E3807A3719CD5140DF5E6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6130612E6802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64652E65726C6A
+=mod:code_server
+Current size: 30811
+Current attributes: 836C00000001680264000376736E6C000000016E0F00BFB96248C2CA8601B4CB7F543F52E26A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061346802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64655F7365727665722E65726C6A
+=mod:code_aux
+Current size: 1736
+Current attributes: 836C00000001680264000376736E6C000000016E10007A90DB53FCCECD52504F20E7A3B6BAE26A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061316802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64655F6175782E65726C6A
+=mod:packages
+Current size: 3119
+Current attributes: 836C00000001680264000376736E6C000000016E1000044DC8EEB65F178AE23EF2465E1954496A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361076802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F7061636B616765732E65726C6A
+=mod:hipe_unified_loader
+Current size: 37330
+Current attributes: 836C00000001680264000376736E6C000000016E1000DABD57945702E56F4B3AA7B7B19C1D166A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361326802640006736F757263656B003A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F686970655F756E69666965645F6C6F616465722E65726C6A
+=mod:hipe_sparc_loader
+Current size: 1821
+Current attributes: 836C00000001680264000376736E6C000000016E1000582BC55E9FADFF879C2C45D25A6CB7E56A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F6D61696E6802640001696B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F72746C6802640001696B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F737061726364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6133612B6802640006736F757263656B00382F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F686970655F73706172635F6C6F616465722E65726C6A
+=mod:ets
+Current size: 16577
+Current attributes: 836C00000002680264000376736E6C000000016E100033D982AC91129E5FC35E0AC3337A4EB56A680264000A646570726563617465646C0000000168026400086669787461626C6561026A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D611C6802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6574732E65726C6A
+=mod:lists_sort
+Current size: 38692
+Current attributes: 836C00000001680264000376736E6C000000016E1000E17EC92FA9AA3199DD71701C215044616A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000B68026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736802640006696E6C696E656C0000000468026400096D65726765335F3132610768026400096D65726765335F32316107680264000A726D65726765335F31326107680264000A726D65726765335F323161076A6802640006696E6C696E656C00000004680264000A756D65726765335F31326108680264000A756D65726765335F32316108680264000C72756D65726765335F3132616107680264000C72756D65726765335F31326261086A6802640006696E6C696E656C00000004680264000C6B65796D65726765335F3132610C680264000C6B65796D65726765335F3231610C680264000D726B65796D65726765335F3132610C680264000D726B65796D65726765335F3231610C6A6802640006696E6C696E656C00000006680264000D756B65796D65726765335F3132610D680264000D756B65796D65726765335F3231610D680264000F72756B65796D65726765335F313261610B680264000F72756B65796D65726765335F323161610D680264000F72756B65796D65726765335F313262610D680264000F72756B65796D65726765335F323162610C6A6A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61166802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6C697374735F736F72742E65726C6A
+=mod:user_sup
+Current size: 2355
+Current attributes: 836C00000002680264000376736E6C000000016E100074BA860804CB4D60D6908C705E6544BD6A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361246802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F757365725F7375702E65726C6A
+=mod:supervisor_bridge
+Current size: 2944
+Current attributes: 836C00000002680264000376736E6C000000016E10001590DDC10CF8A9D09763CDB7479678ED6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61156802640006736F757263656B00382F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F73757065727669736F725F6272696467652E65726C6A
+=mod:user_drv
+Current size: 14630
+Current attributes: 836C00000001680264000376736E6C000000016E1000F29F3B193A1EB1ADA9975D97E51BF0E86A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361216802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F757365725F6472762E65726C6A
+=mod:group
+Current size: 10165
+Current attributes: 836C00000001680264000376736E6C000000016E1000F6427D0DA330BBFAD5D4C19058516FF36A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261066802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F67726F75702E65726C6A
+=mod:io_lib
+Current size: 12601
+Current attributes: 836C00000002680264000376736E6C000000016E10004160DD78F37EE7C72F7C5B6A751DB7F56A680264000A646570726563617465646C0000000468026400047363616E610168026400047363616E610268026400047363616E6103680264000D72657365727665645F776F726461016A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61036802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69622E65726C6A
+=mod:edlin
+Current size: 18178
+Current attributes: 836C00000001680264000376736E6C000000016E100035D752FCBA8ED7F4D26990EF3E6A1A526A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C61016802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65646C696E2E65726C6A
+=mod:io_lib_format
+Current size: 16189
+Current attributes: 836C00000001680264000376736E6C000000016E10004F382F327C456F83F33C3D5EBFBD87906A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61066802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69625F666F726D61742E65726C6A
+=mod:kernel_config
+Current size: 3295
+Current attributes: 836C00000002680264000376736E6C000000016E100077B8EE6C9E95FBBE5DB0371F6DB235226A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261356802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6B65726E656C5F636F6E6669672E65726C6A
+=mod:shell
+Current size: 22571
+Current attributes: 836C00000001680264000376736E6C000000016E10007D1354325618EB98A5BD4E8F41E6A0226A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61016802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7368656C6C2E65726C6A
+=mod:error_logger_tty_h
+Current size: 7773
+Current attributes: 836C00000002680264000376736E6C000000016E10001502D55D6C1777F07E2E05CDD91D16986A68026400096265686176696F75726C0000000164000967656E5F6576656E746A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61196802640006736F757263656B00392F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6572726F725F6C6F676765725F7474795F682E65726C6A
+=mod:erl_eval
+Current size: 33481
+Current attributes: 836C00000002680264000376736E6C000000016E1000D06903753C86BBC49A5CBD789CCB09B66A680264000A646570726563617465646C00000004680264000373657161026802640003736571610368026400086172675F6C697374610268026400086172675F6C69737461036A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C610D6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F6576616C2E65726C6A
+=mod:orddict
+Current size: 4872
+Current attributes: 836C00000002680264000376736E6C000000016E100078DCF69F3949D79BC54168266A3ABF566A680264000A646570726563617465646C00000002680264000C646963745F746F5F6C6973746101680264000C6C6973745F746F5F6469637461016A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61236802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F7264646963742E65726C6A
+=mod:c
+Current size: 19555
+Current attributes: 836C00000001680264000376736E6C000000016E10003FACCF5DE16ABBC988ABF0811980C33B6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61136802640006736F757263656B00282F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F632E65726C6A
+=mod:io
+Current size: 7417
+Current attributes: 836C00000002680264000376736E6C000000016E1000E2F2A6094B3C3D945865225D0620E7546A680264000A646570726563617465646C00000007680264000B70617273655F65787072736102680264000C7363616E5F65726C5F7365716101680264000C7363616E5F65726C5F7365716102680264000C7363616E5F65726C5F7365716103680264000D70617273655F65726C5F7365716101680264000D70617273655F65726C5F7365716102680264000D70617273655F65726C5F73657161036A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61006802640006736F757263656B00292F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F2E65726C6A
+=mod:file
+Current size: 20795
+Current attributes: 836C00000002680264000376736E6C000000016E1000D291AF77EE8B08B792B7FE99274504506A680264000A646570726563617465646C00000001680264000966696C655F696E666F61016A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161276802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C652E65726C6A
+=mod:file_io_server
+Current size: 12071
+Current attributes: 836C00000001680264000376736E6C000000016E1000A5A8C4E2B2646855AD5C617CB216CB966A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612A6802640006736F757263656B00352F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C655F696F5F7365727665722E65726C6A
+=mod:erl_scan
+Current size: 21891
+Current attributes: 836C00000001680264000376736E6C000000016E100094F386F0C378B258E5D9CEADD4F03B6A6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61116802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F7363616E2E65726C6A
+=mod:erl_parse
+Current size: 161233
+Current attributes: 836C00000001680264000376736E6C000000016E10000E8CBC32C293BFC1FBC721CE918062236A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000968026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F76617273640006696E6C696E656802640004686970656C000000016802640008726567616C6C6F6364000B6C696E6561725F7363616E6A6A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61076802640006736F757263656B00302F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F70617273652E65726C6A
+=mod:erl_lint
+Current size: 73159
+Current attributes: 836C00000001680264000376736E6C000000016E1000D1D2A7D6DDFD1195CB180993C76FD2CD6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C61156802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F6C696E742E65726C6A
+=mod:ordsets
+Current size: 3257
+Current attributes: 836C00000002680264000376736E6C000000016E1000FD39D8FD846511128F5670BA28600F676A680264000A646570726563617465646C0000000468026400076E65775F7365746100680264000B7365745F746F5F6C6973746101680264000B6C6973745F746F5F7365746101680264000673756273657461026A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61256802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F7264736574732E65726C6A
+=mod:dict
+Current size: 15637
+Current attributes: 836C00000002680264000376736E6C000000016E1000BC846E7EF85045A5D76190CE9B1AE97C6A680264000A646570726563617465646C00000002680264000C646963745F746F5F6C6973746101680264000C6C6973745F746F5F6469637461016A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61356802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F646963742E65726C6A
+=mod:otp_internal
+Current size: 7133
+Current attributes: 836C00000001680264000376736E6C000000016E1000DC494F64DE590AFC4919DFEB0EB026B66A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61206802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F74705F696E7465726E616C2E65726C6A
+=mod:user_default
+Current size: 1261
+Current attributes: 836C00000002680264000376736E6C000000016E1000505078ACD9B84D514FC6DA2BE249E6756A6802640006617574686F726C0000000164001765656973686E6E406565692E6572696373736F6E2E73656A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000368026400036377646B00112F686F6D652F736972692F65726C616E6768026400066F75746469726B00112F686F6D652F736972692F65726C616E676400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461036116610D612C61126802640006736F757263656B00222F686F6D652F736972692F65726C616E672F757365725F64656661756C742E65726C6A
+=mod:tt
+Current size: 2959
+Current attributes: 836C00000002680264000376736E6C000000016E10001D71FD5A55D3BCBF06BFEDF2426C3C386A6802640006617574686F726C0000000164001765656973686E6E406565692E6572696373736F6E2E73656A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000368026400036377646B00112F686F6D652F736972692F65726C616E6768026400066F75746469726B00112F686F6D652F736972692F65726C616E676400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461036116610D612B610C6802640006736F757263656B00182F686F6D652F736972692F65726C616E672F74742E65726C6A
+=mod:distel
+Current size: 18214
+Current attributes: 836C00000002680264000376736E6C000000016E1000CC9C9EF141459249C1CCA00993B2E29A6A6802640006617574686F726C000000016400116C756B6540626C75657461696C2E636F6D6A6A
+Current compilation info: 836C0000000368026400076F7074696F6E736C0000000664000276336400107761726E5F756E757365645F7661727364000A64656275675F696E666F68026400066F75746469726B00046562696E68026400036377646B001C2F6C6469736B2F736972692F746F6F6C732F64697374656C2D332E3164000A6578706F72745F616C6C6A680264000776657273696F6E6B0003342E31680264000474696D65680662000007D2610B6114610B610361336A
+=mod:crashdump_viewer
+Current size: 125756
+Current attributes: 836C00000001680264000376736E6C000000016E10002DC5D9D96190A2D5F27FAC3FA3D5C7956A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F76617273680264000F70617273655F7472616E73666F726D64000C6D735F7472616E73666F726D6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461146108611B61366802640006736F757263656B00362F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7669657765722E65726C6A
+=mod:webtool
+Current size: 29229
+Current attributes: 836C00000002680264000376736E6C000000016E10008AEEF06B60527A3390CBC2C98083CC0A6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00202F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F73726368026400066F75746469726B00282F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F2E2E2F6562696E64000A64656275675F696E666F6400107761726E5F756E757365645F76617273680264000F70617273655F7472616E73666F726D64000C6D735F7472616E73666F726D6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104610661086106612D6802640006736F757263656B002C2F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F776562746F6F6C2E65726C6A
+=mod:gen_tcp
+Current size: 3574
+Current attributes: 836C00000001680264000376736E6C000000016E1000C965E4EAFDAA94D7F21EDCBE30B21E7B6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161316802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F67656E5F7463702E65726C6A
+=mod:inet_tcp
+Current size: 2743
+Current attributes: 836C00000001680264000376736E6C000000016E1000C4AFE0B49768E4CF78B2C42EA1D3DB7F6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132612B6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F7463702E65726C6A
+=mod:inet_gethost_native
+Current size: 15611
+Current attributes: 836C00000002680264000376736E6C000000016E10005D8CD4277D0BD2425B9C26036AE314506A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261206802640006736F757263656B003A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F676574686F73745F6E61746976652E65726C6A
+=mod:filelib
+Current size: 7202
+Current attributes: 836C00000001680264000376736E6C000000016E10007B42AA23FF99DF2CD9D586635B77556A6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61266802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F66696C656C69622E65726C6A
+=mod:httpd_util
+Current size: 24068
+Current attributes: 836C00000002680264000376736E6C000000016E10008D99E096221B88D542E52CB9C8377F6D6A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128613B6802640006736F757263656B00312F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F7574696C2E65726C6A
+=mod:webtool_sup
+Current size: 695
+Current attributes: 836C00000002680264000376736E6C000000016E1000FA5449E12816CF3AD0A3085BB26CDB9B6A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400036377646B00202F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F73726368026400066F75746469726B00282F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F2E2E2F6562696E64000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461066108610761236802640006736F757263656B00302F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F776562746F6F6C5F7375702E65726C6A
+=mod:httpd_conf
+Current size: 33659
+Current attributes: 836C00000002680264000376736E6C000000016E1000E3198FBDC73BC48CB7D0C1C762B8F1AB6A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861116802640006736F757263656B00312F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F636F6E662E65726C6A
+=mod:regexp
+Current size: 13698
+Current attributes: 836C00000001680264000376736E6C000000016E10009DD44F3D02F8328BE3ABF4DDA89E0CAE6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61376802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7265676578702E65726C6A
+=mod:string
+Current size: 7740
+Current attributes: 836C00000002680264000376736E6C000000016E10005521DDF38903D46D7C53DB864266F7456A680264000A646570726563617465646C00000007680264000C72655F73685F746F5F61776B6101680264000872655F70617273656101680264000872655F6D617463686102680264000672655F7375626103680264000772655F677375626103680264000872655F73706C697461026802640005696E64657861026A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F610F6802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F737472696E672E65726C6A
+=mod:httpd
+Current size: 7563
+Current attributes: 836C00000002680264000376736E6C000000016E1000BFD190D951EB3CAD2CC72ADEF20886906A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861036802640006736F757263656B002C2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470642E65726C6A
+=mod:httpd_sup
+Current size: 4068
+Current attributes: 836C00000003680264000376736E6C000000016E10007FA5C790118F18F3D20A2BFAF0229F0A6A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861366802640006736F757263656B00302F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F7375702E65726C6A
+=mod:httpd_acceptor_sup
+Current size: 2161
+Current attributes: 836C00000003680264000376736E6C000000016E10003E6F9289B64C13F1EC8A1184BACF055F6A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128610C6802640006736F757263656B00392F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6163636570746F725F7375702E65726C6A
+=mod:httpd_verbosity
+Current size: 2672
+Current attributes: 836C00000002680264000376736E6C000000016E100018B6F407D391872421748F87877DAAF36A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961036802640006736F757263656B00362F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F766572626F736974792E65726C6A
+=mod:timer
+Current size: 8223
+Current attributes: 836C00000001680264000376736E6C000000016E10001D0D64DB1B923D1B3B9497655C43B4AD6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F611A6802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F74696D65722E65726C6A
+=mod:httpd_misc_sup
+Current size: 2066
+Current attributes: 836C00000003680264000376736E6C000000016E100092342F38AC16C074DDC21532FBFB52C26A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128611F6802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6D6973635F7375702E65726C6A
+=mod:httpd_manager
+Current size: 28916
+Current attributes: 836C00000003680264000376736E6C000000016E100013F7A1E6A4B6407A0A1892A794EE10A36A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128611B6802640006736F757263656B00342F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6D616E616765722E65726C6A
+=mod:mod_alias
+Current size: 6720
+Current attributes: 836C00000002680264000376736E6C000000016E10002F35C36060B4AC45474440381D146AB96A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961106802640006736F757263656B00302F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F616C6961732E65726C6A
+=mod:mod_auth
+Current size: 25168
+Current attributes: 836C00000002680264000376736E6C000000016E100083F3CA0C7A3E7B5E19A635A7F916595D6A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961166802640006736F757263656B002F2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F617574682E65726C6A
+=mod:mod_esi
+Current size: 22534
+Current attributes: 836C00000002680264000376736E6C000000016E1000513E3FF733E1E6592B86CB55B9C14E086A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61026802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6573692E65726C6A
+=mod:mod_actions
+Current size: 3625
+Current attributes: 836C00000002680264000376736E6C000000016E10008E5437921662830490CA76DFF88548966A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066129610C6802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F616374696F6E732E65726C6A
+=mod:mod_cgi
+Current size: 25891
+Current attributes: 836C00000002680264000376736E6C000000016E1000F91D405488188F1BD25110B4ED9EE8786A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961306802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6367692E65726C6A
+=mod:mod_include
+Current size: 34923
+Current attributes: 836C00000002680264000376736E6C000000016E1000B9CCE88D63DD6AC49D5DF533C46B97D56A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61176802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F696E636C7564652E65726C6A
+=mod:mod_dir
+Current size: 13488
+Current attributes: 836C00000002680264000376736E6C000000016E1000EF620CB4B5DE5586ED681347496DA1C86A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961356802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6469722E65726C6A
+=mod:mod_get
+Current size: 4672
+Current attributes: 836C00000002680264000376736E6C000000016E1000AD2730B6BE6AF875A500AF4857C4D7F86A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61076802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6765742E65726C6A
+=mod:mod_head
+Current size: 3074
+Current attributes: 836C00000002680264000376736E6C000000016E1000CAF803B9FA6A28D4153BC109B00D7DF96A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A610B6802640006736F757263656B002F2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F686561642E65726C6A
+=mod:mod_log
+Current size: 8546
+Current attributes: 836C00000002680264000376736E6C000000016E1000F9664B54861260DEA081249379219AF86A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A611B6802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6C6F672E65726C6A
+=mod:mod_disk_log
+Current size: 15160
+Current attributes: 836C00000002680264000376736E6C000000016E1000DDA1E88A9C423A2866B56425DF36F5C66A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961396802640006736F757263656B00332F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6469736B5F6C6F672E65726C6A
+=mod:httpd_socket
+Current size: 7426
+Current attributes: 836C00000002680264000376736E6C000000016E1000B831219096661E4D2E200A07C4A9A7776A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861326802640006736F757263656B00332F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F736F636B65742E65726C6A
+=mod:httpd_acceptor
+Current size: 4472
+Current attributes: 836C00000002680264000376736E6C000000016E1000A501686DF4E4053E7D978E0CA162BEC56A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861076802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6163636570746F722E65726C6A
+=mod:io_lib_pretty
+Current size: 8171
+Current attributes: 836C00000001680264000376736E6C000000016E1000CD397E11D2D380D02A4BC6EE309B98CB6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E610C6802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69625F7072657474792E65726C6A
+=mod:httpd_request_handler
+Current size: 26393
+Current attributes: 836C00000002680264000376736E6C000000016E100021C280A5EB5B9CCD00A2C418A341202A6A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861296802640006736F757263656B003C2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F726571756573745F68616E646C65722E65726C6A
+=mod:calendar
+Current size: 7158
+Current attributes: 836C00000002680264000376736E6C000000016E10008C44498546709037F8D72DA4AF8B7FB76A680264000A646570726563617465646C00000001680264001C6C6F63616C5F74696D655F746F5F756E6976657273616C5F74696D6561016A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61166802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F63616C656E6461722E65726C6A
+=mod:httpd_parse
+Current size: 9977
+Current attributes: 836C00000002680264000376736E6C000000016E1000174653BAA652261FEB44FFDED99E50B76A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861246802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F70617273652E65726C6A
+=mod:httpd_response
+Current size: 13535
+Current attributes: 836C00000002680264000376736E6C000000016E1000785B247D894BA08A40D814EF11F848976A68026400076170705F76736E6B000B696E6574732D332E302E376A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128612D6802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F726573706F6E73652E65726C6A
+=mod:crashdump_viewer_html
+Current size: 68343
+Current attributes: 836C00000001680264000376736E6C000000016E1000AE414770FDB0806C5583FF8D6D71DC766A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461146108611C61026802640006736F757263656B003B2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7669657765725F68746D6C2E65726C6A
+=mod:crashdump_translate
+Current size: 89840
+Current attributes: 836C00000001680264000376736E6C000000016E100038F332287181E933A76CEF4799BDB6416A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000668026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461046115610B611661106802640006736F757263656B00392F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7472616E736C6174652E65726C6A
+=fun
+Module: crashdump_viewer_html
+Uniq: 9122590
+Index: 0
+Address: 526308
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 77168418
+Index: 14
+Address: 26541c
+Native_address: bcf04
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 88083515
+Index: 9
+Address: 284c30
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 36747896
+Index: 4
+Address: 26df84
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 80395734
+Index: 8
+Address: 265838
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 103184573
+Index: 5
+Address: 2fa59c
+Native_address: bce80
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 88265811
+Index: 24
+Address: 34f6a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global_group
+Uniq: 9644262
+Index: 2
+Address: 292cec
+Native_address: bcef4
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 100885585
+Index: 0
+Address: 29eb2c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 128335479
+Index: 6
+Address: 26de84
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 42988083
+Index: 1
+Address: 210c14
+Native_address: bcf04
+Refc: 1
+=fun
+Module: dict
+Uniq: 7105125
+Index: 7
+Address: 354f84
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 29030584
+Index: 8
+Address: 234978
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 29214351
+Index: 2
+Address: 285660
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 5158633
+Index: 4
+Address: 274034
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 74624950
+Index: 25
+Address: 34f63c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 6477018
+Index: 3
+Address: 2adb6c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 117885138
+Index: 7
+Address: 2ffff8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: dict
+Uniq: 47566924
+Index: 6
+Address: 354fb8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 114637756
+Index: 12
+Address: 313c60
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 121316204
+Index: 31
+Address: 313a68
+Native_address: bced4
+Refc: 1
+=fun
+Module: code_server
+Uniq: 61363639
+Index: 12
+Address: 2ad6a4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 116208699
+Index: 3
+Address: 274094
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global_group
+Uniq: 113750737
+Index: 0
+Address: 292d54
+Native_address: bcefc
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 12853672
+Index: 0
+Address: 222e74
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 108046357
+Index: 12
+Address: 4ab0b0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 111569299
+Index: 47
+Address: 34e80c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 20108653
+Index: 15
+Address: 2f9f94
+Native_address: bcea4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 45252965
+Index: 15
+Address: 313c0c
+Native_address: bced4
+Refc: 1
+=fun
+Module: webtool
+Uniq: 12437425
+Index: 9
+Address: 4ab3e0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 30942993
+Index: 22
+Address: 34f6ec
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_parse
+Uniq: 93430337
+Index: 3
+Address: 33b100
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_parse
+Uniq: 6604883
+Index: 2
+Address: 33b16c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: rpc
+Uniq: 36867745
+Index: 5
+Address: 255e28
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 90563105
+Index: 1
+Address: 285708
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 18519297
+Index: 7
+Address: 26ddfc
+Native_address: bcef4
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 8058975
+Index: 16
+Address: 4a36b4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 30694569
+Index: 7
+Address: 27d018
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 76933943
+Index: 0
+Address: 2741b4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 9033258
+Index: 6
+Address: 4a4690
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 74851752
+Index: 5
+Address: 4a4798
+Native_address: bcef4
+Refc: 1
+=fun
+Module: global
+Uniq: 50855382
+Index: 4
+Address: 2659a8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 39211582
+Index: 52
+Address: 34e504
+Native_address: bceec
+Refc: 1
+=fun
+Module: file_server
+Uniq: 77665472
+Index: 0
+Address: 2a0dec
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 57487277
+Index: 8
+Address: 2fa3c4
+Native_address: bce94
+Refc: 1
+=fun
+Module: webtool
+Uniq: 87386575
+Index: 11
+Address: 4ab1c8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 58991950
+Index: 8
+Address: 4a4338
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 118859163
+Index: 17
+Address: 4a34d4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: dict
+Uniq: 38265609
+Index: 12
+Address: 354dec
+Native_address: bcefc
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 56903339
+Index: 1
+Address: 2527c4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_hosts
+Uniq: 129504763
+Index: 0
+Address: 28aae8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: dict
+Uniq: 44817307
+Index: 10
+Address: 354e3c
+Native_address: bceec
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 52856894
+Index: 41
+Address: 34eb70
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 22623360
+Index: 23
+Address: 34f5d4
+Native_address: bceec
+Refc: 1
+=fun
+Module: orddict
+Uniq: 34963136
+Index: 0
+Address: 2fbbbc
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erlang
+Uniq: 24496633
+Index: 0
+Address: 213744
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 99313855
+Index: 27
+Address: 2f9914
+Native_address: bcef4
+Refc: 1
+=fun
+Module: httpd_util
+Uniq: 99137703
+Index: 3
+Address: 4b5dfc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 124043500
+Index: 3
+Address: 222b84
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 102650878
+Index: 22
+Address: 313b48
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 13333720
+Index: 12
+Address: 34fb2c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: global_group
+Uniq: 133457
+Index: 5
+Address: 292a80
+Native_address: bcefc
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 64640983
+Index: 4
+Address: 29e944
+Native_address: bcefc
+Refc: 1
+=fun
+Module: rpc
+Uniq: 7580218
+Index: 2
+Address: 255f08
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 131850870
+Index: 59
+Address: 34e6b8
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 56617403
+Index: 10
+Address: 284b40
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 108680306
+Index: 4
+Address: 4ab5e0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 90880071
+Index: 2
+Address: 26e150
+Native_address: bcefc
+Refc: 1
+=fun
+Module: file_io_server
+Uniq: 23980778
+Index: 0
+Address: 30ac30
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 12006418
+Index: 19
+Address: 2f9d54
+Native_address: bce80
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 81701030
+Index: 8
+Address: 526228
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 71013875
+Index: 1
+Address: 4a4ddc
+Native_address: bcf04
+Refc: 1
+=fun
+Module: distel
+Uniq: 87740845
+Index: 2
+Address: 35c0e0
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 90782401
+Index: 17
+Address: 2f9e8c
+Native_address: bced4
+Refc: 1
+=fun
+Module: shell
+Uniq: 133882676
+Index: 6
+Address: 2e52ac
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 105698088
+Index: 3
+Address: 2855b4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 58370899
+Index: 0
+Address: 27d370
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 15274536
+Index: 25
+Address: 2f9a94
+Native_address: bcef4
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 94349557
+Index: 0
+Address: 252844
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_parse
+Uniq: 33328185
+Index: 1
+Address: 33b1d8
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 86971387
+Index: 16
+Address: 313db0
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 53364473
+Index: 38
+Address: 34ee84
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 128145687
+Index: 0
+Address: 4ab944
+Native_address: bcee4
+Refc: 1
+=fun
+Module: c
+Uniq: 98651404
+Index: 10
+Address: 2fff20
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 78224618
+Index: 0
+Address: 313dcc
+Native_address: bced4
+Refc: 1
+=fun
+Module: shell
+Uniq: 40779085
+Index: 11
+Address: 2e50c8
+Native_address: bcef4
+Refc: 1
+=fun
+Module: c
+Uniq: 93517350
+Index: 4
+Address: 300090
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 58551291
+Index: 0
+Address: 234f14
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 10055518
+Index: 17
+Address: 526170
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 15795706
+Index: 19
+Address: 313bd4
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 31129467
+Index: 13
+Address: 313c44
+Native_address: bced4
+Refc: 1
+=fun
+Module: old_file_server
+Uniq: 115635393
+Index: 0
+Address: 2a1a4c
+Native_address: bcf04
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 65839696
+Index: 22
+Address: 2f9c00
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 69275064
+Index: 28
+Address: 313aa0
+Native_address: bced4
+Refc: 1
+=fun
+Module: dict
+Uniq: 55938066
+Index: 11
+Address: 354d6c
+Native_address: bceec
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 22323433
+Index: 3
+Address: 252688
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 129726129
+Index: 29
+Address: 313abc
+Native_address: bced4
+Refc: 1
+=fun
+Module: dict
+Uniq: 84346832
+Index: 0
+Address: 3550fc
+Native_address: bceec
+Refc: 1
+=fun
+Module: shell
+Uniq: 102096820
+Index: 7
+Address: 2e5290
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 70385762
+Index: 11
+Address: 27cf44
+Native_address: bcefc
+Refc: 1
+=fun
+Module: mod_cgi
+Uniq: 1483038
+Index: 0
+Address: 4ec2e8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: dict
+Uniq: 3664813
+Index: 1
+Address: 3550b4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet
+Uniq: 131143671
+Index: 6
+Address: 27d08c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 46286977
+Index: 2
+Address: 2740b0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: mod_esi
+Uniq: 49099432
+Index: 0
+Address: 4e522c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_master
+Uniq: 95764905
+Index: 2
+Address: 24aaa8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: packages
+Uniq: 62890926
+Index: 0
+Address: 2ae814
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 41564771
+Index: 35
+Address: 3139f8
+Native_address: bced4
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 95490768
+Index: 0
+Address: 4a4dc0
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 121559432
+Index: 3
+Address: 313d78
+Native_address: bced4
+Refc: 1
+=fun
+Module: httpd_conf
+Uniq: 21152662
+Index: 0
+Address: 4be5a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 41630916
+Index: 5
+Address: 29e914
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 19747201
+Index: 5
+Address: 313d24
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 100584837
+Index: 36
+Address: 34f0f4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64635712
+Index: 15
+Address: 34f94c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 46398361
+Index: 3
+Address: 29e9a4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 86699817
+Index: 27
+Address: 313b2c
+Native_address: bced4
+Refc: 1
+=fun
+Module: distel
+Uniq: 40869731
+Index: 0
+Address: 35c12c
+Native_address: bcf04
+Refc: 1
+=fun
+Module: inet
+Uniq: 83701641
+Index: 1
+Address: 27d33c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: mod_auth
+Uniq: 85845790
+Index: 0
+Address: 4dfd84
+Native_address: bcefc
+Refc: 1
+=fun
+Module: shell
+Uniq: 101292714
+Index: 9
+Address: 2e519c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 134173702
+Index: 1
+Address: 265b68
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 92433687
+Index: 6
+Address: 2ad9f4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: dict
+Uniq: 62315241
+Index: 8
+Address: 354f38
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 11615541
+Index: 12
+Address: 265530
+Native_address: bcefc
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 11160090
+Index: 2
+Address: 2b6bb4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 12116524
+Index: 15
+Address: 2342c4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: mod_log
+Uniq: 61620901
+Index: 2
+Address: 4fc670
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 23665189
+Index: 12
+Address: 4a3b94
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 43844413
+Index: 0
+Address: 300100
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 100514258
+Index: 6
+Address: 313d08
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 54271286
+Index: 17
+Address: 34f8a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 47017252
+Index: 3
+Address: 26dfa0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 1228304
+Index: 7
+Address: 4a45a4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 127131470
+Index: 10
+Address: 2655a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: file_server
+Uniq: 22638227
+Index: 1
+Address: 2a0e20
+Native_address: bcf04
+Refc: 1
+=fun
+Module: code_server
+Uniq: 112704920
+Index: 15
+Address: 2ad488
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 88302875
+Index: 2
+Address: 2fa76c
+Native_address: bceb4
+Refc: 1
+=fun
+Module: inet_hosts
+Uniq: 85808984
+Index: 1
+Address: 28ab18
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_parse
+Uniq: 106391799
+Index: 0
+Address: 33b22c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 25830519
+Index: 5
+Address: 27d0c0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: shell
+Uniq: 110491036
+Index: 1
+Address: 2e5398
+Native_address: bcef4
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 13128736
+Index: 5
+Address: 52627c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 84644982
+Index: 21
+Address: 313b9c
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 120577486
+Index: 3
+Address: 34fffc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 4504456
+Index: 44
+Address: 34e938
+Native_address: bceec
+Refc: 1
+=fun
+Module: mod_disk_log
+Uniq: 28754183
+Index: 0
+Address: 500140
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 88043334
+Index: 14
+Address: 313c28
+Native_address: bced4
+Refc: 1
+=fun
+Module: code_server
+Uniq: 61592373
+Index: 0
+Address: 2adc28
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 74468346
+Index: 26
+Address: 313ad8
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 69896253
+Index: 21
+Address: 2f9c40
+Native_address: bce80
+Refc: 1
+=fun
+Module: global_group
+Uniq: 59656873
+Index: 4
+Address: 292ac0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 103891261
+Index: 2
+Address: 4a4d70
+Native_address: bcefc
+Refc: 1
+=fun
+Module: httpd_util
+Uniq: 89619733
+Index: 0
+Address: 4b5e64
+Native_address: bcefc
+Refc: 1
+=fun
+Module: shell
+Uniq: 133201466
+Index: 10
+Address: 2e5180
+Native_address: bceec
+Refc: 1
+=fun
+Module: webtool
+Uniq: 32159369
+Index: 2
+Address: 4ab820
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 76861396
+Index: 2
+Address: 2adbb0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: mod_log
+Uniq: 48206487
+Index: 0
+Address: 4fc6f0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 118996551
+Index: 28
+Address: 34f384
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 12593774
+Index: 50
+Address: 34e60c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: httpd_request_handler
+Uniq: 48542841
+Index: 1
+Address: 50e88c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 56178490
+Index: 9
+Address: 4a420c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: distel
+Uniq: 88212576
+Index: 4
+Address: 35bf44
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 79562132
+Index: 29
+Address: 34f368
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 129524917
+Index: 32
+Address: 34f2c0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 54029891
+Index: 23
+Address: 2f9af0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 108872092
+Index: 4
+Address: 27d0f0
+Native_address: bcef4
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 40905124
+Index: 6
+Address: 234ac0
+Native_address: bcef4
+Refc: 1
+=fun
+Module: code_server
+Uniq: 50124876
+Index: 10
+Address: 2ad760
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 791358
+Index: 48
+Address: 34e7b0
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 18404828
+Index: 24
+Address: 313af4
+Native_address: bced4
+Refc: 1
+=fun
+Module: httpd_util
+Uniq: 13278653
+Index: 1
+Address: 4b5e48
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 110307423
+Index: 13
+Address: 284a7c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: rpc
+Uniq: 99592247
+Index: 0
+Address: 256118
+Native_address: bcf04
+Refc: 1
+=fun
+Module: global
+Uniq: 99918211
+Index: 2
+Address: 265af4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 71442319
+Index: 27
+Address: 34f510
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 7612785
+Index: 13
+Address: 2fa0fc
+Native_address: bce80
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 56095795
+Index: 15
+Address: 4a38a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 23626796
+Index: 25
+Address: 313b10
+Native_address: bced4
+Refc: 1
+=fun
+Module: file_server
+Uniq: 126074974
+Index: 2
+Address: 2a0cac
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 104278122
+Index: 1
+Address: 274154
+Native_address: bcefc
+Refc: 1
+=fun
+Module: sys
+Uniq: 90854051
+Index: 0
+Address: 240344
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 113334594
+Index: 2
+Address: 313d5c
+Native_address: bced4
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 8832142
+Index: 7
+Address: 284e30
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 9159706
+Index: 42
+Address: 34eb54
+Native_address: bceec
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 123946665
+Index: 8
+Address: 26e494
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 3149789
+Index: 1
+Address: 5262d0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 48288621
+Index: 11
+Address: 2ffed8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 8953292
+Index: 20
+Address: 4a4d54
+Native_address: bcee4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 9632158
+Index: 4
+Address: 34ff88
+Native_address: bcefc
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 31111567
+Index: 7
+Address: 29e8c8
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 85307443
+Index: 10
+Address: 2fa29c
+Native_address: bcec4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 104417191
+Index: 7
+Address: 313cd0
+Native_address: bced4
+Refc: 1
+=fun
+Module: dict
+Uniq: 43625777
+Index: 5
+Address: 354fec
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 92698798
+Index: 3
+Address: 4ab780
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 39074546
+Index: 6
+Address: 2fa54c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 71451126
+Index: 5
+Address: 234b98
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 122084387
+Index: 6
+Address: 300038
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 9625924
+Index: 14
+Address: 284a60
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 128777368
+Index: 11
+Address: 313c7c
+Native_address: bced4
+Refc: 1
+=fun
+Module: webtool
+Uniq: 10203723
+Index: 7
+Address: 4ab4f8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 35032400
+Index: 10
+Address: 313c98
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 17252586
+Index: 34
+Address: 313a14
+Native_address: bced4
+Refc: 1
+=fun
+Module: code_server
+Uniq: 7177165
+Index: 11
+Address: 2ad734
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 115778175
+Index: 3
+Address: 4a4930
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 96440880
+Index: 51
+Address: 34e590
+Native_address: bcefc
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 68275407
+Index: 0
+Address: 2b7340
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 88854488
+Index: 16
+Address: 2f9f04
+Native_address: bcebc
+Refc: 1
+=fun
+Module: global
+Uniq: 26353848
+Index: 13
+Address: 2654e8
+Native_address: bcf04
+Refc: 3
+=fun
+Module: global
+Uniq: 93414722
+Index: 11
+Address: 265568
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 11194189
+Index: 60
+Address: 34fe0c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: c
+Uniq: 125189992
+Index: 8
+Address: 2fffdc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: dict
+Uniq: 112472016
+Index: 2
+Address: 355088
+Native_address: bceec
+Refc: 1
+=fun
+Module: shell
+Uniq: 104426442
+Index: 5
+Address: 2e52e0
+Native_address: bceec
+Refc: 1
+=fun
+Module: global
+Uniq: 17426458
+Index: 0
+Address: 265bc4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 81191039
+Index: 5
+Address: 2ada48
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 71765042
+Index: 5
+Address: 284f74
+Native_address: bcefc
+Refc: 1
+=fun
+Module: init
+Uniq: 85855821
+Index: 2
+Address: 1fa298
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 70586122
+Index: 10
+Address: 4a3fe4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 87067911
+Index: 49
+Address: 34e708
+Native_address: bcef4
+Refc: 1
+=fun
+Module: distel
+Uniq: 63126735
+Index: 1
+Address: 35c0fc
+Native_address: bcf04
+Refc: 1
+=fun
+Module: c
+Uniq: 58270309
+Index: 1
+Address: 3000e4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: ets
+Uniq: 80538457
+Index: 1
+Address: 2bc1a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 69827241
+Index: 9
+Address: 34fd70
+Native_address: bcef4
+Refc: 1
+=fun
+Module: dict
+Uniq: 103968752
+Index: 3
+Address: 355054
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 117175573
+Index: 21
+Address: 34f728
+Native_address: bcef4
+Refc: 1
+=fun
+Module: shell
+Uniq: 57865450
+Index: 2
+Address: 2e537c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 14705965
+Index: 20
+Address: 313b80
+Native_address: bced4
+Refc: 1
+=fun
+Module: webtool
+Uniq: 85360931
+Index: 6
+Address: 4ab56c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: kernel_config
+Uniq: 41755598
+Index: 0
+Address: 2d9e20
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 7110547
+Index: 37
+Address: 34ef14
+Native_address: bcef4
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 28091577
+Index: 16
+Address: 234244
+Native_address: bcef4
+Refc: 2
+=fun
+Module: code_server
+Uniq: 96448152
+Index: 14
+Address: 2ad4e4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 40177568
+Index: 13
+Address: 4a39a4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 31948320
+Index: 58
+Address: 34dfdc
+Native_address: bcef4
+Refc: 1
+=fun
+Module: global
+Uniq: 54153760
+Index: 7
+Address: 265854
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 60156260
+Index: 3
+Address: 5262b4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 1010616
+Index: 2
+Address: 350064
+Native_address: bcef4
+Refc: 1
+=fun
+Module: init
+Uniq: 96784459
+Index: 1
+Address: 1fa2b4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 48691771
+Index: 18
+Address: 313bb8
+Native_address: bced4
+Refc: 1
+=fun
+Module: global
+Uniq: 26895060
+Index: 9
+Address: 265710
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 109625093
+Index: 7
+Address: 2ad8fc
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 59436171
+Index: 1
+Address: 3500dc
+Native_address: bcef4
+Refc: 1
+=fun
+Module: dict
+Uniq: 92768306
+Index: 9
+Address: 354f04
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global_group
+Uniq: 106430008
+Index: 3
+Address: 292b38
+Native_address: bcefc
+Refc: 1
+=fun
+Module: init
+Uniq: 79749196
+Index: 6
+Address: 1fa01c
+Native_address: bceec
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 6014929
+Index: 9
+Address: 2fa324
+Native_address: bceac
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 57051922
+Index: 7
+Address: 234a28
+Native_address: bcef4
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 77043468
+Index: 6
+Address: 29e8e4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 36176045
+Index: 9
+Address: 52620c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: rpc
+Uniq: 35862809
+Index: 3
+Address: 255edc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113649451
+Index: 4
+Address: 2850a0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 67943969
+Index: 5
+Address: 2658f4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 109003032
+Index: 16
+Address: 5260d0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 104711447
+Index: 13
+Address: 525f5c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 107666872
+Index: 9
+Address: 27cfb0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 89410000
+Index: 10
+Address: 5261f0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 47356870
+Index: 11
+Address: 284ab4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 17873449
+Index: 56
+Address: 34e1e8
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 8839441
+Index: 33
+Address: 34f25c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 82513204
+Index: 2
+Address: 222c18
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_master
+Uniq: 5973059
+Index: 0
+Address: 24ab7c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_gethost_native
+Uniq: 127832132
+Index: 0
+Address: 4b065c
+Native_address: bcefc
+Refc: 2
+=fun
+Module: crashdump_viewer_html
+Uniq: 39322658
+Index: 14
+Address: 525f40
+Native_address: bcefc
+Refc: 1
+=fun
+Module: gen_server
+Uniq: 100284021
+Index: 0
+Address: 23d288
+Native_address: bcf04
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 17430070
+Index: 12
+Address: 284a98
+Native_address: bcefc
+Refc: 1
+=fun
+Module: init
+Uniq: 97509773
+Index: 3
+Address: 1fa27c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: distel
+Uniq: 32364818
+Index: 3
+Address: 35c050
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 58576084
+Index: 32
+Address: 313a4c
+Native_address: bced4
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 38384851
+Index: 14
+Address: 4a3988
+Native_address: bceec
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 14139883
+Index: 4
+Address: 234d78
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 122590256
+Index: 0
+Address: 2fa8b4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 14705629
+Index: 11
+Address: 2fa22c
+Native_address: bcedc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 9273769
+Index: 4
+Address: 2fa684
+Native_address: bcee4
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 87950142
+Index: 11
+Address: 5261d4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: mod_log
+Uniq: 54913678
+Index: 1
+Address: 4fc6b0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 28370334
+Index: 0
+Address: 26e4b0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 24927227
+Index: 40
+Address: 34ed4c
+Native_address: bceec
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 105437500
+Index: 33
+Address: 313a30
+Native_address: bced4
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 10921695
+Index: 1
+Address: 234eac
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 112431564
+Index: 55
+Address: 34e22c
+Native_address: bceec
+Refc: 1
+=fun
+Module: webtool
+Uniq: 129460863
+Index: 5
+Address: 4ab5c4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 89001648
+Index: 3
+Address: 27d2ec
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 36199507
+Index: 8
+Address: 27cfe4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 35620771
+Index: 2
+Address: 5262ec
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 83214871
+Index: 18
+Address: 2f9e34
+Native_address: bceec
+Refc: 1
+=fun
+Module: code_server
+Uniq: 122455383
+Index: 1
+Address: 2adc0c
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 22389488
+Index: 31
+Address: 34f1b8
+Native_address: bceec
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 41869059
+Index: 12
+Address: 2fa1d4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 18130505
+Index: 45
+Address: 34e904
+Native_address: bcefc
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 107414126
+Index: 1
+Address: 2b706c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 116638945
+Index: 28
+Address: 2f98f8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 48465762
+Index: 9
+Address: 2348c8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: httpd_request_handler
+Uniq: 87633852
+Index: 0
+Address: 50e97c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 28213098
+Index: 8
+Address: 4ab42c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 123630574
+Index: 4
+Address: 222b58
+Native_address: bcefc
+Refc: 1
+=fun
+Module: dict
+Uniq: 127425508
+Index: 13
+Address: 354eb4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 95048118
+Index: 16
+Address: 2ad46c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 108661978
+Index: 19
+Address: 34f75c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 21272619
+Index: 13
+Address: 34fad8
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 29943747
+Index: 17
+Address: 313bf0
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 120240397
+Index: 4
+Address: 313d94
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 124060676
+Index: 0
+Address: 350124
+Native_address: bcef4
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 100975346
+Index: 6
+Address: 526260
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 61421476
+Index: 4
+Address: 2ada9c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 45197232
+Index: 7
+Address: 34fe5c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 3151900
+Index: 15
+Address: 525f24
+Native_address: bcefc
+Refc: 1
+=fun
+Module: httpd_util
+Uniq: 77509245
+Index: 2
+Address: 4b5e2c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 94110229
+Index: 8
+Address: 2ad7e4
+Native_address: bcef4
+Refc: 3
+=fun
+Module: rpc
+Uniq: 101217130
+Index: 1
+Address: 2560c4
+Native_address: bcf04
+Refc: 1
+=fun
+Module: lists
+Uniq: 103647452
+Index: 0
+Address: 244b7c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 37841211
+Index: 9
+Address: 2ad77c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 40109251
+Index: 54
+Address: 34e2b4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: init
+Uniq: 98012300
+Index: 0
+Address: 1fa2d0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 73604759
+Index: 10
+Address: 4ab270
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 12042434
+Index: 1
+Address: 313d40
+Native_address: bced4
+Refc: 1
+=fun
+Module: shell
+Uniq: 127137775
+Index: 4
+Address: 2e531c
+Native_address: bcf04
+Refc: 1
+=fun
+Module: inet
+Uniq: 45498037
+Index: 12
+Address: 27cec0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 122441107
+Index: 34
+Address: 34f1d4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 70933889
+Index: 46
+Address: 34e8d0
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet
+Uniq: 69850797
+Index: 2
+Address: 27d308
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 103965539
+Index: 13
+Address: 234684
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 29979659
+Index: 30
+Address: 313a84
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 17148721
+Index: 20
+Address: 34f778
+Native_address: bcefc
+Refc: 1
+=fun
+Module: httpd_response
+Uniq: 100673049
+Index: 0
+Address: 5165dc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_gethost_native
+Uniq: 10508176
+Index: 1
+Address: 4b04dc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 32476064
+Index: 57
+Address: 34e1c4
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 74835078
+Index: 9
+Address: 313cec
+Native_address: bced4
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 60689814
+Index: 19
+Address: 4a3b78
+Native_address: bceec
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 39269715
+Index: 5
+Address: 34ff14
+Native_address: bcef4
+Refc: 1
+=fun
+Module: shell
+Uniq: 112923172
+Index: 0
+Address: 2e5404
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 43010824
+Index: 14
+Address: 2fa03c
+Native_address: bce8c
+Refc: 1
+=fun
+Module: global
+Uniq: 82495254
+Index: 3
+Address: 265ac8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: shell
+Uniq: 48568081
+Index: 8
+Address: 2e5220
+Native_address: bcefc
+Refc: 1
+=fun
+Module: init
+Uniq: 77236637
+Index: 7
+Address: 1fa000
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 109386574
+Index: 1
+Address: 2fa804
+Native_address: bce9c
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 42613220
+Index: 14
+Address: 34f980
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 67093144
+Index: 23
+Address: 313b64
+Native_address: bced4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 86833790
+Index: 11
+Address: 34fbe8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 6344855
+Index: 1
+Address: 29eabc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 5149749
+Index: 35
+Address: 34f220
+Native_address: bcefc
+Refc: 1
+=fun
+Module: init
+Uniq: 93451769
+Index: 5
+Address: 1fa120
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 117428568
+Index: 11
+Address: 234758
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 15225890
+Index: 4
+Address: 526298
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 120760477
+Index: 2
+Address: 234cdc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 88561919
+Index: 3
+Address: 3000ac
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 108931174
+Index: 8
+Address: 313cb4
+Native_address: bced4
+Refc: 1
+=fun
+Module: rpc
+Uniq: 122901192
+Index: 4
+Address: 255e44
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 32985930
+Index: 10
+Address: 34fc40
+Native_address: bcef4
+Refc: 1
+=fun
+Module: global_group
+Uniq: 97968498
+Index: 1
+Address: 292b7c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 45671671
+Index: 18
+Address: 4a32d0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 117968056
+Index: 3
+Address: 2fa6ec
+Native_address: bcecc
+Refc: 1
+=fun
+Module: init
+Uniq: 108717591
+Index: 4
+Address: 1fa194
+Native_address: bcf04
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 15091954
+Index: 2
+Address: 2526dc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 65707495
+Index: 6
+Address: 2658a4
+Native_address: bcefc
+Refc: 1
+=fun
+Module: code_server
+Uniq: 34473969
+Index: 17
+Address: 2ad450
+Native_address: bcef4
+Refc: 2
+=fun
+Module: crashdump_viewer_html
+Uniq: 124296602
+Index: 7
+Address: 526244
+Native_address: bcefc
+Refc: 1
+=fun
+Module: global
+Uniq: 23074707
+Index: 15
+Address: 265460
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet
+Uniq: 25972856
+Index: 10
+Address: 27cf74
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 43110452
+Index: 24
+Address: 2f9ad4
+Native_address: bceec
+Refc: 1
+=fun
+Module: code_server
+Uniq: 106445918
+Index: 13
+Address: 2ad660
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer_html
+Uniq: 116071286
+Index: 12
+Address: 5261b8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 130814477
+Index: 8
+Address: 284cfc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 121017037
+Index: 39
+Address: 34ed80
+Native_address: bcef4
+Refc: 1
+=fun
+Module: ets
+Uniq: 104895267
+Index: 0
+Address: 2bc1bc
+Native_address: bcefc
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 104682437
+Index: 11
+Address: 4a3de0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 70248777
+Index: 30
+Address: 34f30c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 13274975
+Index: 5
+Address: 300074
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 98442771
+Index: 53
+Address: 34e2d0
+Native_address: bceec
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 69829006
+Index: 7
+Address: 2fa47c
+Native_address: bce80
+Refc: 1
+=fun
+Module: old_file_server
+Uniq: 36444943
+Index: 1
+Address: 2a1a80
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 58719455
+Index: 26
+Address: 34f5f0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: timer
+Uniq: 42505885
+Index: 0
+Address: 4cd62c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 54682479
+Index: 20
+Address: 2f9d08
+Native_address: bcf04
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 86070332
+Index: 1
+Address: 222d7c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 54728136
+Index: 9
+Address: 2fff68
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 16474219
+Index: 3
+Address: 234c60
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 108831556
+Index: 10
+Address: 234810
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 72053761
+Index: 16
+Address: 34f8ec
+Native_address: bcef4
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 65127616
+Index: 2
+Address: 29ea04
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 126167637
+Index: 14
+Address: 234640
+Native_address: bcef4
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113704917
+Index: 0
+Address: 285788
+Native_address: bcefc
+Refc: 1
+=fun
+Module: mod_disk_log
+Uniq: 75279647
+Index: 1
+Address: 500100
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 119218247
+Index: 5
+Address: 26df68
+Native_address: bcef4
+Refc: 1
+=fun
+Module: httpd_util
+Uniq: 85690044
+Index: 4
+Address: 4b5d6c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 53075592
+Index: 1
+Address: 26e16c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: c
+Uniq: 39490182
+Index: 2
+Address: 3000c8
+Native_address: bcefc
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 75189006
+Index: 12
+Address: 234714
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 14980808
+Index: 43
+Address: 34eb38
+Native_address: bceec
+Refc: 1
+=fun
+Module: crashdump_viewer
+Uniq: 16463468
+Index: 4
+Address: 4a4914
+Native_address: bcee4
+Refc: 1
+=fun
+Module: dict
+Uniq: 99965326
+Index: 4
+Address: 355020
+Native_address: bcefc
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 36900786
+Index: 6
+Address: 284f3c
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 45447147
+Index: 18
+Address: 34f794
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 32353825
+Index: 6
+Address: 34fe78
+Native_address: bcef4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 134052338
+Index: 8
+Address: 34fdc0
+Native_address: bceec
+Refc: 1
+=fun
+Module: application_master
+Uniq: 23840924
+Index: 1
+Address: 24aae0
+Native_address: bcefc
+Refc: 1
+=fun
+Module: webtool
+Uniq: 108282500
+Index: 1
+Address: 4ab918
+Native_address: bcefc
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 31081110
+Index: 0
+Address: 210c68
+Native_address: bcf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 54275742
+Index: 26
+Address: 2f9a4c
+Native_address: bcef4
+Refc: 1
+=fun
+Module: shell
+Uniq: 45083091
+Index: 3
+Address: 2e5350
+Native_address: bcf04
+Refc: 3
+=proc_stack:<0.0.0>
+3a48bc:SReturn addr 0x156F90 (<terminate process normally>)
+y0:H371264
+=proc_heap:<0.0.0>
+371264:t9:A5:state,H3710D8,N,N,H3710F4,P<0.1.0>,H37128C,H3710FC,N
+3710FC:t2:H371138,H371140
+371140:lI80|H371194
+371194:lI49|H3711E0
+3711E0:lI48|H371204
+371204:lI66|N
+371138:lI79|H37118C
+37118C:lI84|H3711D8
+3711D8:lI80|H3711FC
+3711FC:lI32|H37120C
+37120C:lI32|H371214
+371214:lI65|H37121C
+37121C:lI80|H371224
+371224:lI78|H37122C
+37122C:lI32|H371234
+371234:lI49|H37123C
+37123C:lI56|H371244
+371244:lI49|H37124C
+37124C:lI32|H371254
+371254:lI48|H37125C
+37125C:lI49|N
+37128C:t2:A7:started,A7:started
+3710F4:lH371124|H371130
+371124:t2:A16:application_controller,P<0.5.0>
+371130:lH371178|H371184
+371178:t2:AC:error_logger,P<0.4.0>
+371184:lH3711CC|N
+3711CC:t2:AF:erl_prim_loader,P<0.2.0>
+3710D8:lH3710E0|H3710EC
+3710E0:t2:A5:-root,H371108
+371108:lH371148|N
+371148:Yh13:2F636C656172636173652F6F74702F65727473
+3710EC:lH371110|H37111C
+371110:t2:A9:-progname,H371164
+371164:lH37119C|N
+37119C:Yh1D:2F636C656172636173652F6F74702F657274732F62696E2F6365726C20
+37111C:lH37116C|N
+37116C:t2:A5:-home,H3711C4
+3711C4:lH3711E8|N
+3711E8:YhA:2F686F6D652F73697269
+=proc_stack:<0.2.0>
+38eca8:SReturn addr 0x156F90 (<terminate process normally>)
+y0:H367D20
+y1:P<0.1.0>
+y2:H367D28
+y3:A8:infinity
+=proc_heap:<0.2.0>
+367D20:lH367D48|H367D50
+367D48:lI47|H367D58
+367D58:lI99|H367D68
+367D68:lI108|H367D78
+367D78:lI101|H367D88
+367D88:lI97|H367D98
+367D98:lI114|H367DA8
+367DA8:lI99|H367DB8
+367DB8:lI97|H367DC8
+367DC8:lI115|H367DD8
+367DD8:lI101|H367DE8
+367DE8:lI47|H367DF8
+367DF8:lI111|H367E08
+367E08:lI116|H367E18
+367E18:lI112|H367E28
+367E28:lI47|H367E38
+367E38:lI101|H367E48
+367E48:lI114|H367E58
+367E58:lI116|H367E68
+367E68:lI115|H367E78
+367E78:lI47|H367E88
+367E88:lI108|H367E98
+367E98:lI105|H367EA8
+367EA8:lI98|H367EB8
+367EB8:lI47|H367EC8
+367EC8:lI107|H367ED8
+367ED8:lI101|H367EE8
+367EE8:lI114|H367EF8
+367EF8:lI110|H367F08
+367F08:lI101|H367F18
+367F18:lI108|H367F28
+367F28:lI47|H367F38
+367F38:lI101|H367F48
+367F48:lI98|H367F58
+367F58:lI105|H367F68
+367F68:lI110|N
+367D50:lH367D60|N
+367D60:lI47|H367D70
+367D70:lI99|H367D80
+367D80:lI108|H367D90
+367D90:lI101|H367DA0
+367DA0:lI97|H367DB0
+367DB0:lI114|H367DC0
+367DC0:lI99|H367DD0
+367DD0:lI97|H367DE0
+367DE0:lI115|H367DF0
+367DF0:lI101|H367E00
+367E00:lI47|H367E10
+367E10:lI111|H367E20
+367E20:lI116|H367E30
+367E30:lI112|H367E40
+367E40:lI47|H367E50
+367E50:lI101|H367E60
+367E60:lI114|H367E70
+367E70:lI116|H367E80
+367E80:lI115|H367E90
+367E90:lI47|H367EA0
+367EA0:lI108|H367EB0
+367EB0:lI105|H367EC0
+367EC0:lI98|H367ED0
+367ED0:lI47|H367EE0
+367EE0:lI115|H367EF0
+367EF0:lI116|H367F00
+367F00:lI100|H367F10
+367F10:lI108|H367F20
+367F20:lI105|H367F30
+367F30:lI98|H367F40
+367F40:lI47|H367F50
+367F50:lI101|H367F60
+367F60:lI98|H367F70
+367F70:lI105|H367F78
+367F78:lI110|N
+367D28:t7:A5:state,A5:efile,N,A4:none,p<0.2>,A8:infinity,A5:false
+=proc_dictionary:<0.4.0>
+H3AC588
+H3AC594
+=proc_stack:<0.4.0>
+3b2f14:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:H3B21E8
+y2:AC:error_logger
+y3:P<0.1.0>
+3b2f28:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H3AC5A8
+=proc_heap:<0.4.0>
+3B21E8:lH3B2144|H3B21E0
+3B2144:t5:A7:handler,AC:error_logger,A5:false,N,A5:false
+3B21E0:lH3B21BC|N
+3B21BC:t5:A7:handler,A12:error_logger_tty_h,A5:false,H3AC610,A5:false
+3AC610:t2:P<0.21.0>,AC:error_logger
+3AC5A8:lA9:gen_event|H3AC5E8
+3AC5E8:lP<0.1.0>|H3AC608
+3AC608:lP<0.1.0>|H3AC61C
+3AC61C:lH3AC624|H3AC630
+3AC624:t2:A5:local,AC:error_logger
+3AC630:lN|H3AC638
+3AC638:lN|H3AC640
+3AC640:lN|N
+3AC588:t2:AD:$initial_call,H3AC5B0
+3AC5B0:t3:A3:gen,A7:init_it,H3AC5A8
+3AC594:t2:AA:$ancestors,H3AC5C0
+3AC5C0:lP<0.1.0>|N
+=proc_dictionary:<0.5.0>
+H372E4C
+H372E58
+=proc_stack:<0.5.0>
+374704:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A16:application_controller
+y3:H3739F4
+y4:A16:application_controller
+y5:P<0.1.0>
+374720:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H372ED0
+=proc_heap:<0.5.0>
+3739F4:t9:A5:state,N,N,N,H373914,N,H373928,N,N
+373928:lH37391C|H372F54
+37391C:t2:A6:stdlib,A9:permanent
+372F54:lH372F90|N
+372F90:t2:A6:kernel,A9:permanent
+373914:lH373908|H372F4C
+373908:t2:A6:stdlib,A9:undefined
+372F4C:lH372F84|N
+372F84:t2:A6:kernel,P<0.7.0>
+372ED0:lAA:gen_server|H372F5C
+372F5C:lP<0.1.0>|H372F9C
+372F9C:lP<0.1.0>|H372FC4
+372FC4:lH372FEC|H372FF8
+372FEC:t2:A5:local,A16:application_controller
+372FF8:lA16:application_controller|H373018
+373018:lH373038|H373048
+373038:t3:AB:application,A6:kernel,H373060
+373060:lH373078|H373084
+373078:t2:AB:description,H37309C
+37309C:lI69|H3730C8
+3730C8:lI82|H3730FC
+3730FC:lI84|H373130
+373130:lI83|H37316C
+37316C:lI32|H3731A8
+3731A8:lI32|H3731E4
+3731E4:lI67|H373220
+373220:lI88|H37325C
+37325C:lI67|H37329C
+37329C:lI32|H3732D0
+3732D0:lI49|H3732FC
+3732FC:lI51|H373328
+373328:lI56|H373348
+373348:lI32|H373368
+373368:lI49|H373388
+373388:lI48|N
+373084:lH3730A4|H3730B0
+3730A4:t2:A3:vsn,H3730D0
+3730D0:lI50|H373104
+373104:lI46|H373138
+373138:lI57|N
+3730B0:lH3730D8|H3730E4
+3730D8:t2:A2:id,N
+3730E4:lH37310C|H373118
+37310C:t2:A7:modules,H373140
+373140:lAB:application|H373174
+373174:lA16:application_controller|H3731B0
+3731B0:lA12:application_master|H3731EC
+3731EC:lA13:application_starter|H373228
+373228:lA4:auth|H373264
+373264:lA4:code|H3732A4
+3732A4:lA8:code_aux|H3732D8
+3732D8:lA8:packages|H373304
+373304:lAB:code_server|H373330
+373330:lA9:dist_util|H373350
+373350:lAF:erl_boot_server|H373370
+373370:lA10:erl_distribution|H373390
+373390:lAF:erl_prim_loader|H3733A8
+3733A8:lA9:erl_reply|H3733C0
+3733C0:lA6:erlang|H3733D8
+3733D8:lAD:error_handler|H3733F0
+3733F0:lAC:error_logger|H373408
+373408:lA4:file|H373420
+373420:lAB:file_server|H373438
+373438:lAF:old_file_server|H373450
+373450:lAE:file_io_server|H373468
+373468:lA9:prim_file|H373480
+373480:lA6:global|H373498
+373498:lAC:global_group|H3734B0
+3734B0:lAD:global_search|H3734C8
+3734C8:lA5:group|H3734E0
+3734E0:lA5:heart|H3734F8
+3734F8:lA13:hipe_unified_loader|H373510
+373510:lA11:hipe_sparc_loader|H373520
+373520:lAF:hipe_x86_loader|H373530
+373530:lA9:inet6_tcp|H373540
+373540:lAE:inet6_tcp_dist|H373550
+373550:lA9:inet6_udp|H373560
+373560:lAB:inet_config|H373570
+373570:lAA:inet_hosts|H373580
+373580:lA13:inet_gethost_native|H373590
+373590:lAD:inet_tcp_dist|H3735A0
+3735A0:lA4:init|H3735B0
+3735B0:lA6:kernel|H3735C0
+3735C0:lAD:kernel_config|H3735D0
+3735D0:lA3:net|H3735E0
+3735E0:lA7:net_adm|H3735F0
+3735F0:lAA:net_kernel|H373600
+373600:lA2:os|H373610
+373610:lA8:ram_file|H373620
+373620:lA3:rpc|H373630
+373630:lA4:user|H373640
+373640:lA8:user_drv|H373650
+373650:lA8:user_sup|H373660
+373660:lA8:disk_log|H373670
+373670:lAA:disk_log_1|H373680
+373680:lAF:disk_log_server|H373690
+373690:lAC:disk_log_sup|H3736A0
+3736A0:lA7:dist_ac|H3736B0
+3736B0:lA8:erl_ddll|H3736C0
+3736C0:lA8:erl_epmd|H3736D0
+3736D0:lAA:erts_debug|H3736E0
+3736E0:lA7:gen_tcp|H3736F0
+3736F0:lA7:gen_udp|H373700
+373700:lA9:prim_inet|H373708
+373708:lA4:inet|H373710
+373710:lA7:inet_db|H373718
+373718:lA8:inet_dns|H373720
+373720:lAA:inet_parse|H373728
+373728:lA8:inet_res|H373730
+373730:lA8:inet_tcp|H373738
+373738:lA8:inet_udp|H373740
+373740:lA3:pg2|H373748
+373748:lA9:seq_trace|H373750
+373750:lA6:socks5|H373758
+373758:lAB:socks5_auth|H373760
+373760:lAA:socks5_tcp|H373768
+373768:lAA:socks5_udp|H373770
+373770:lAF:wrap_log_reader|H373778
+373778:lA4:zlib|H373780
+373780:lA9:otp_ring0|N
+373118:lH373148|H373154
+373148:t2:AA:registered,H37317C
+37317C:lA16:application_controller|H3731B8
+3731B8:lA9:erl_reply|H3731F4
+3731F4:lA4:auth|H373230
+373230:lAB:boot_server|H37326C
+37326C:lAB:code_server|H3732AC
+3732AC:lAF:disk_log_server|H3732E0
+3732E0:lAC:disk_log_sup|H37330C
+37330C:lAF:erl_prim_loader|H373338
+373338:lAC:error_logger|H373358
+373358:lAB:file_server|H373378
+373378:lAD:file_server_2|H373398
+373398:lAF:fixtable_server|H3733B0
+3733B0:lAC:global_group|H3733C8
+3733C8:lA12:global_name_server|H3733E0
+3733E0:lA5:heart|H3733F8
+3733F8:lA4:init|H373410
+373410:lAD:kernel_config|H373428
+373428:lAA:kernel_sup|H373440
+373440:lAA:net_kernel|H373458
+373458:lA7:net_sup|H373470
+373470:lA3:rex|H373488
+373488:lA4:user|H3734A0
+3734A0:lA9:os_server|H3734B8
+3734B8:lAB:ddll_server|H3734D0
+3734D0:lA8:erl_epmd|H3734E8
+3734E8:lA7:inet_db|H373500
+373500:lA3:pg2|N
+373154:lH373184|H373190
+373184:t2:AC:applications,N
+373190:lH3731C0|H3731CC
+3731C0:t2:A15:included_applications,N
+3731CC:lH3731FC|H373208
+3731FC:t2:A3:env,H373238
+373238:lH373274|N
+373274:t2:AC:error_logger,A3:tty
+373208:lH373240|H37324C
+373240:t2:AC:start_phases,A9:undefined
+37324C:lH373280|H37328C
+373280:t2:A4:maxT,A8:infinity
+37328C:lH3732B4|H3732C0
+3732B4:t2:A4:maxP,A8:infinity
+3732C0:lH3732E8|N
+3732E8:t2:A3:mod,H373314
+373314:t2:A6:kernel,N
+373048:lN|N
+372E4C:t2:AD:$initial_call,H372EE4
+372EE4:t3:A3:gen,A7:init_it,H372ED0
+372E58:t2:AA:$ancestors,H372EF4
+372EF4:lP<0.1.0>|N
+=proc_dictionary:<0.7.0>
+H369B78
+H369B5C
+=proc_stack:<0.7.0>
+369d64:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:H369C2C
+y1:P<0.5.0>
+369d70:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A12:application_master
+y2:A4:init
+y3:H369B2C
+=proc_heap:<0.7.0>
+369C2C:t6:A5:state,P<0.8.0>,H3697B0,N,I0,P<0.0.0>
+3697B0:t9:A9:appl_data,A6:kernel,H369B14,A9:undefined,H3697D8,H369A3C,N,A8:infinity,A8:infinity
+369A3C:lAB:application|H369A34
+369A34:lA16:application_controller|H369A2C
+369A2C:lA12:application_master|H369A24
+369A24:lA13:application_starter|H369A1C
+369A1C:lA4:auth|H369A14
+369A14:lA4:code|H369A0C
+369A0C:lA8:code_aux|H369A04
+369A04:lA8:packages|H3699FC
+3699FC:lAB:code_server|H3699F4
+3699F4:lA9:dist_util|H3699EC
+3699EC:lAF:erl_boot_server|H3699E4
+3699E4:lA10:erl_distribution|H3699DC
+3699DC:lAF:erl_prim_loader|H3699D4
+3699D4:lA9:erl_reply|H3699CC
+3699CC:lA6:erlang|H3699C4
+3699C4:lAD:error_handler|H3699BC
+3699BC:lAC:error_logger|H3699B4
+3699B4:lA4:file|H3699AC
+3699AC:lAB:file_server|H3699A4
+3699A4:lAF:old_file_server|H36999C
+36999C:lAE:file_io_server|H369994
+369994:lA9:prim_file|H36998C
+36998C:lA6:global|H369984
+369984:lAC:global_group|H36997C
+36997C:lAD:global_search|H369974
+369974:lA5:group|H36996C
+36996C:lA5:heart|H369964
+369964:lA13:hipe_unified_loader|H36995C
+36995C:lA11:hipe_sparc_loader|H369954
+369954:lAF:hipe_x86_loader|H36994C
+36994C:lA9:inet6_tcp|H369944
+369944:lAE:inet6_tcp_dist|H36993C
+36993C:lA9:inet6_udp|H369934
+369934:lAB:inet_config|H36992C
+36992C:lAA:inet_hosts|H369924
+369924:lA13:inet_gethost_native|H36991C
+36991C:lAD:inet_tcp_dist|H369914
+369914:lA4:init|H36990C
+36990C:lA6:kernel|H369904
+369904:lAD:kernel_config|H3698FC
+3698FC:lA3:net|H3698F4
+3698F4:lA7:net_adm|H3698EC
+3698EC:lAA:net_kernel|H3698E4
+3698E4:lA2:os|H3698DC
+3698DC:lA8:ram_file|H3698D4
+3698D4:lA3:rpc|H3698CC
+3698CC:lA4:user|H3698C4
+3698C4:lA8:user_drv|H3698BC
+3698BC:lA8:user_sup|H3698B4
+3698B4:lA8:disk_log|H3698AC
+3698AC:lAA:disk_log_1|H3698A4
+3698A4:lAF:disk_log_server|H36989C
+36989C:lAC:disk_log_sup|H369894
+369894:lA7:dist_ac|H36988C
+36988C:lA8:erl_ddll|H369884
+369884:lA8:erl_epmd|H36987C
+36987C:lAA:erts_debug|H369874
+369874:lA7:gen_tcp|H36986C
+36986C:lA7:gen_udp|H369864
+369864:lA9:prim_inet|H36985C
+36985C:lA4:inet|H369854
+369854:lA7:inet_db|H36984C
+36984C:lA8:inet_dns|H369844
+369844:lAA:inet_parse|H36983C
+36983C:lA8:inet_res|H369834
+369834:lA8:inet_tcp|H36982C
+36982C:lA8:inet_udp|H369824
+369824:lA3:pg2|H36981C
+36981C:lA9:seq_trace|H369814
+369814:lA6:socks5|H36980C
+36980C:lAB:socks5_auth|H369804
+369804:lAA:socks5_tcp|H3697FC
+3697FC:lAA:socks5_udp|H3697F4
+3697F4:lAF:wrap_log_reader|H3697EC
+3697EC:lA4:zlib|H3697E4
+3697E4:lA9:otp_ring0|N
+3697D8:t2:A6:kernel,N
+369B14:lA16:application_controller|H369B0C
+369B0C:lA9:erl_reply|H369B04
+369B04:lA4:auth|H369AFC
+369AFC:lAB:boot_server|H369AF4
+369AF4:lAB:code_server|H369AEC
+369AEC:lAF:disk_log_server|H369AE4
+369AE4:lAC:disk_log_sup|H369ADC
+369ADC:lAF:erl_prim_loader|H369AD4
+369AD4:lAC:error_logger|H369ACC
+369ACC:lAB:file_server|H369AC4
+369AC4:lAD:file_server_2|H369ABC
+369ABC:lAF:fixtable_server|H369AB4
+369AB4:lAC:global_group|H369AAC
+369AAC:lA12:global_name_server|H369AA4
+369AA4:lA5:heart|H369A9C
+369A9C:lA4:init|H369A94
+369A94:lAD:kernel_config|H369A8C
+369A8C:lAA:kernel_sup|H369A84
+369A84:lAA:net_kernel|H369A7C
+369A7C:lA7:net_sup|H369A74
+369A74:lA3:rex|H369A6C
+369A6C:lA4:user|H369A64
+369A64:lA9:os_server|H369A5C
+369A5C:lAB:ddll_server|H369A54
+369A54:lA8:erl_epmd|H369A4C
+369A4C:lA7:inet_db|H369A44
+369A44:lA3:pg2|N
+369B2C:lP<0.5.0>|H369B24
+369B24:lP<0.6.0>|H3697A8
+3697A8:lH3697B0|H369B1C
+369B1C:lA6:normal|N
+369B78:t2:AD:$initial_call,H369B68
+369B68:t3:A12:application_master,A4:init,H369B2C
+369B5C:t2:AA:$ancestors,H369B54
+369B54:lP<0.6.0>|N
+=proc_stack:<0.8.0>
+384ec0:SReturn addr 0x156F90 (<terminate process normally>)
+y0:H384BDC
+y1:A6:kernel
+y2:P<0.9.0>
+y3:P<0.7.0>
+=proc_heap:<0.8.0>
+384BDC:t2:A5:state,A3:tty
+=proc_dictionary:<0.9.0>
+H376850
+H37685C
+=proc_stack:<0.9.0>
+36bde8:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AA:supervisor
+y3:H36B8E8
+y4:AA:kernel_sup
+y5:P<0.8.0>
+36be04:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H3768D4
+=proc_heap:<0.9.0>
+36B8E8:tA:A5:state,H376868,AB:one_for_all,H36B8D4,N,I0,I1,N,A6:kernel,N
+36B8D4:lH36B8B0|H36B6E8
+36B8B0:t8:A5:child,P<0.24.0>,AF:kernel_safe_sup,H376BF0,A9:permanent,A8:infinity,AA:supervisor,H376C00
+376C00:lA6:kernel|N
+376BF0:t3:AA:supervisor,AA:start_link,H376C08
+376C08:lH376C10|H376C1C
+376C10:t2:A5:local,AF:kernel_safe_sup
+376C1C:lA6:kernel|H376C24
+376C24:lA4:safe|N
+36B6E8:lH36B6C4|H36B490
+36B6C4:t8:A5:child,P<0.23.0>,AD:kernel_config,H376BB4,A9:permanent,I2000,A6:worker,H376BC4
+376BC4:lAD:kernel_config|N
+376BB4:t3:AD:kernel_config,AA:start_link,N
+36B490:lH36B498|H36B4BC
+36B498:t8:A5:child,P<0.19.0>,A4:user,H376B70,A9:temporary,I2000,AA:supervisor,H376B80
+376B80:lA8:user_sup|N
+376B70:t3:A8:user_sup,A5:start,N
+36B4BC:lH36B4C4|H376CB0
+36B4C4:t8:A5:child,P<0.18.0>,AB:code_server,H376B0C,A9:permanent,I2000,A6:worker,H376B1C
+376B1C:lA4:code|N
+376B0C:t3:A4:code,AA:start_link,N
+376CB0:lH376CB8|H376CDC
+376CB8:t8:A5:child,P<0.17.0>,AB:file_server,H376AB8,A9:permanent,I2000,A6:worker,H376AC8
+376AC8:lAF:old_file_server|N
+376AB8:t3:AF:old_file_server,AA:start_link,N
+376CDC:lH376CE4|H376C2C
+376CE4:t8:A5:child,P<0.16.0>,AD:file_server_2,H376A58,A9:permanent,I2000,A6:worker,H376A68
+376A68:lA4:file|H376AB0
+376AB0:lAB:file_server|H376B04
+376B04:lAE:file_io_server|H376B68
+376B68:lA9:prim_file|N
+376A58:t3:AB:file_server,AA:start_link,N
+376C2C:lH376C34|H376C58
+376C34:t8:A5:child,P<0.15.0>,AC:global_group,H3769F4,A9:permanent,I2000,A6:worker,H376A04
+376A04:lAC:global_group|N
+3769F4:t3:AC:global_group,AA:start_link,N
+376C58:lH376C60|H376C84
+376C60:t8:A5:child,A9:undefined,A7:net_sup,H37696C,A9:permanent,A8:infinity,AA:supervisor,H37697C
+37697C:lA10:erl_distribution|N
+37696C:t3:A10:erl_distribution,AA:start_link,N
+376C84:lH376C8C|H3768A0
+376C8C:t8:A5:child,P<0.14.0>,A7:inet_db,H3768F4,A9:permanent,I2000,A6:worker,H376904
+376904:lA7:inet_db|N
+3768F4:t3:A7:inet_db,AA:start_link,N
+3768A0:lH376938|H37695C
+376938:t8:A5:child,P<0.11.0>,A12:global_name_server,H3769B0,A9:permanent,I2000,A6:worker,H3769C0
+3769C0:lA6:global|N
+3769B0:t3:A6:global,AA:start_link,N
+37695C:lH3769C8|N
+3769C8:t8:A5:child,P<0.10.0>,A3:rex,H376A38,A9:permanent,I2000,A6:worker,H376A48
+376A48:lA3:rpc|N
+376A38:t3:A3:rpc,AA:start_link,N
+376868:t2:A5:local,AA:kernel_sup
+3768D4:lAA:gen_server|H376964
+376964:lP<0.8.0>|H3769EC
+3769EC:lP<0.8.0>|H376A50
+376A50:lH376A9C|H376AA8
+376A9C:t2:A5:local,AA:kernel_sup
+376AA8:lAA:supervisor|H376AFC
+376AFC:lH376B50|H376B60
+376B50:t3:H376868,A6:kernel,N
+376B60:lN|N
+376850:t2:AD:$initial_call,H3768DC
+3768DC:t3:A3:gen,A7:init_it,H3768D4
+37685C:t2:AA:$ancestors,H3768EC
+3768EC:lP<0.8.0>|N
+=proc_dictionary:<0.10.0>
+H367A10
+H3679F4
+=proc_stack:<0.10.0>
+367cec:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A3:rpc
+y3:H367AA8
+y4:A3:rex
+y5:P<0.9.0>
+367d08:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H3679C4
+=proc_heap:<0.10.0>
+367AA8:t2:I0,A3:nil
+3679C4:lAA:gen_server|H3679BC
+3679BC:lP<0.9.0>|H3679B4
+3679B4:lP<0.9.0>|H367988
+367988:lH367990|H3679AC
+367990:t2:A5:local,A3:rex
+3679AC:lA3:rpc|H3679A4
+3679A4:lN|H36799C
+36799C:lN|N
+367A10:t2:AD:$initial_call,H367A00
+367A00:t3:A3:gen,A7:init_it,H3679C4
+3679F4:t2:AA:$ancestors,H3679EC
+3679EC:lAA:kernel_sup|H3679CC
+3679CC:lP<0.8.0>|N
+=proc_dictionary:<0.11.0>
+H36ADD8
+H36ADBC
+=proc_stack:<0.11.0>
+36b0b4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A6:global
+y3:H36AF0C
+y4:A12:global_name_server
+y5:P<0.9.0>
+36b0d0:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H36AD8C
+=proc_heap:<0.11.0>
+36AF0C:t9:A5:state,A4:true,N,N,N,N,AD:nonode@nohost,P<0.12.0>,P<0.13.0>
+36AD8C:lAA:gen_server|H36AD84
+36AD84:lP<0.9.0>|H36AD7C
+36AD7C:lP<0.9.0>|H36AD50
+36AD50:lH36AD58|H36AD74
+36AD58:t2:A5:local,A12:global_name_server
+36AD74:lA6:global|H36AD6C
+36AD6C:lN|H36AD64
+36AD64:lN|N
+36ADD8:t2:AD:$initial_call,H36ADC8
+36ADC8:t3:A3:gen,A7:init_it,H36AD8C
+36ADBC:t2:AA:$ancestors,H36ADB4
+36ADB4:lAA:kernel_sup|H36AD94
+36AD94:lP<0.8.0>|N
+=proc_stack:<0.12.0>
+36921c:SReturn addr 0x261184 (global:init_the_locker/1 + 112)
+y0:N
+y1:N
+y2:N
+y3:N
+y4:N
+y5:N
+y6:A8:infinity
+y7:H368EB0
+y8:P<0.11.0>
+369244:SReturn addr 0x156F90 (<terminate process normally>)
+y0:N
+=proc_heap:<0.12.0>
+368EB0:t3:A5:multi,A9:undefined,N
+=proc_stack:<0.13.0>
+3695d0:SReturn addr 0x2651AC (global:loop_the_deleter/1 + 36)
+y0:A8:infinity
+y1:N
+y2:P<0.11.0>
+3695e0:SReturn addr 0x2654F8 (global:'-start_the_deleter/1-fun-0-'/1 + 20)
+y0:N
+y1:N
+y2:P<0.11.0>
+3695f0:SReturn addr 0x156F90 (<terminate process normally>)
+=proc_heap:<0.13.0>
+=proc_dictionary:<0.14.0>
+H36A998
+H36A9A4
+=proc_stack:<0.14.0>
+372e0c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A7:inet_db
+y3:H36A9B0
+y4:A7:inet_db
+y5:P<0.9.0>
+372e28:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H36A9C8
+=proc_heap:<0.14.0>
+36A9B0:t5:A5:state,A7:inet_db,AA:inet_cache,AA:inet_hosts,H36A9E8
+36A9E8:E21:8372000364000D6E6F6E6F6465406E6F686F737400000000060000000000000000
+36A9C8:lAA:gen_server|H36A9F8
+36A9F8:lP<0.9.0>|H36AA08
+36AA08:lP<0.9.0>|H36AA10
+36AA10:lH36AA18|H36AA24
+36AA18:t2:A5:local,A7:inet_db
+36AA24:lA7:inet_db|H36AA2C
+36AA2C:lN|H36AA34
+36AA34:lN|N
+36A998:t2:AD:$initial_call,H36A9D0
+36A9D0:t3:A3:gen,A7:init_it,H36A9C8
+36A9A4:t2:AA:$ancestors,H36A9E0
+36A9E0:lAA:kernel_sup|H36AA00
+36AA00:lP<0.8.0>|N
+=proc_dictionary:<0.15.0>
+H372788
+H3727F8
+H37276C
+H37280C
+H372820
+=proc_stack:<0.15.0>
+372a64:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AC:global_group
+y3:H3728C8
+y4:AC:global_group
+y5:P<0.9.0>
+372a80:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H37273C
+=proc_heap:<0.15.0>
+3728C8:tC:A5:state,A7:no_conf,A4:true,N,N,N,N,N,AD:nonode@nohost,N,A6:normal,A6:normal
+37273C:lAA:gen_server|H372734
+372734:lP<0.9.0>|H37272C
+37272C:lP<0.9.0>|H372700
+372700:lH372708|H372724
+372708:t2:A5:local,AC:global_group
+372724:lAC:global_group|H37271C
+37271C:lN|H372714
+372714:lN|N
+372788:t2:AD:$initial_call,H372778
+372778:t3:A3:gen,A7:init_it,H37273C
+3727F8:t2:A10:registered_names,H3727F0
+3727F0:lA9:undefined|N
+37276C:t2:AA:$ancestors,H372764
+372764:lAA:kernel_sup|H372744
+372744:lP<0.8.0>|N
+37280C:t2:A4:send,H372804
+372804:lA9:undefined|N
+372820:t2:AC:whereis_name,H372818
+372818:lA9:undefined|N
+=proc_dictionary:<0.16.0>
+H37B918
+H37B924
+=proc_stack:<0.16.0>
+3d303c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AB:file_server
+y3:p<0.4>
+y4:AD:file_server_2
+y5:P<0.9.0>
+3d3058:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H37B930
+=proc_heap:<0.16.0>
+37B930:lAA:gen_server|H37B950
+37B950:lP<0.9.0>|H37B960
+37B960:lP<0.9.0>|H37B968
+37B968:lH37B970|H37B97C
+37B970:t2:A5:local,AD:file_server_2
+37B97C:lAB:file_server|H37B984
+37B984:lN|H37B98C
+37B98C:lN|N
+37B918:t2:AD:$initial_call,H37B938
+37B938:t3:A3:gen,A7:init_it,H37B930
+37B924:t2:AA:$ancestors,H37B948
+37B948:lAA:kernel_sup|H37B958
+37B958:lP<0.8.0>|N
+=proc_stack:<0.17.0>
+3763cc:SReturn addr 0x156F90 (<terminate process normally>)
+y0:H376084
+y1:P<0.16.0>
+y2:P<0.9.0>
+=proc_heap:<0.17.0>
+376084:E21:8372000364000D6E6F6E6F6465406E6F686F737400000000160000000000000000
+=proc_stack:<0.18.0>
+3b98e8:SReturn addr 0x156F90 (<terminate process normally>)
+y0:H38AE84
+y1:P<0.9.0>
+=proc_heap:<0.18.0>
+38AE84:t8:A5:state,P<0.9.0>,H3873BC,H38AEB8,I9,I10,A8:no_cache,AB:interactive
+38AEB8:lH3873D4|H38AEE0
+3873D4:lI46|N
+38AEE0:lH3873EC|H38AF10
+3873EC:lI47|H387404
+387404:lI99|H387424
+387424:lI108|H38744C
+38744C:lI101|H38747C
+38747C:lI97|H3874B4
+3874B4:lI114|H3874F4
+3874F4:lI99|H38753C
+38753C:lI97|H38758C
+38758C:lI115|H3875E4
+3875E4:lI101|H387644
+387644:lI47|H3876AC
+3876AC:lI111|H38771C
+38771C:lI116|H387794
+387794:lI112|H387814
+387814:lI47|H38789C
+38789C:lI101|H38792C
+38792C:lI114|H3879BC
+3879BC:lI116|H387A54
+387A54:lI115|H387AF4
+387AF4:lI47|H387B9C
+387B9C:lI108|H387C4C
+387C4C:lI105|H387D04
+387D04:lI98|H387DC4
+387DC4:lI47|H387E8C
+387E8C:lI107|H387F5C
+387F5C:lI101|H388034
+388034:lI114|H388114
+388114:lI110|H3881FC
+3881FC:lI101|H3882EC
+3882EC:lI108|H3883E4
+3883E4:lI47|H3884E4
+3884E4:lI101|H3885EC
+3885EC:lI98|H3886FC
+3886FC:lI105|H388814
+388814:lI110|N
+38AF10:lH38740C|H38AF48
+38740C:lI47|H38742C
+38742C:lI99|H387454
+387454:lI108|H387484
+387484:lI101|H3874BC
+3874BC:lI97|H3874FC
+3874FC:lI114|H387544
+387544:lI99|H387594
+387594:lI97|H3875EC
+3875EC:lI115|H38764C
+38764C:lI101|H3876B4
+3876B4:lI47|H387724
+387724:lI111|H38779C
+38779C:lI116|H38781C
+38781C:lI112|H3878A4
+3878A4:lI47|H387934
+387934:lI101|H3879C4
+3879C4:lI114|H387A5C
+387A5C:lI116|H387AFC
+387AFC:lI115|H387BA4
+387BA4:lI47|H387C54
+387C54:lI108|H387D0C
+387D0C:lI105|H387DCC
+387DCC:lI98|H387E94
+387E94:lI47|H387F64
+387F64:lI115|H38803C
+38803C:lI116|H38811C
+38811C:lI100|H388204
+388204:lI108|H3882F4
+3882F4:lI105|H3883EC
+3883EC:lI98|H3884EC
+3884EC:lI47|H3885F4
+3885F4:lI101|H388704
+388704:lI98|H38881C
+38881C:lI105|H38892C
+38892C:lI110|N
+38AF48:lH387434|H38AF70
+387434:lI47|H38745C
+38745C:lI99|H38748C
+38748C:lI108|H3874C4
+3874C4:lI101|H387504
+387504:lI97|H38754C
+38754C:lI114|H38759C
+38759C:lI99|H3875F4
+3875F4:lI97|H387654
+387654:lI115|H3876BC
+3876BC:lI101|H38772C
+38772C:lI47|H3877A4
+3877A4:lI111|H387824
+387824:lI116|H3878AC
+3878AC:lI112|H38793C
+38793C:lI47|H3879CC
+3879CC:lI101|H387A64
+387A64:lI114|H387B04
+387B04:lI116|H387BAC
+387BAC:lI115|H387C5C
+387C5C:lI47|H387D14
+387D14:lI108|H387DD4
+387DD4:lI105|H387E9C
+387E9C:lI98|H387F6C
+387F6C:lI47|H388044
+388044:lI119|H388124
+388124:lI101|H38820C
+38820C:lI98|H3882FC
+3882FC:lI116|H3883F4
+3883F4:lI111|H3884F4
+3884F4:lI111|H3885FC
+3885FC:lI108|H38870C
+38870C:lI47|H388824
+388824:lI101|H388934
+388934:lI98|H388A44
+388A44:lI105|H388B54
+388B54:lI110|N
+38AF70:lH387464|H38AF98
+387464:lI47|H387494
+387494:lI99|H3874CC
+3874CC:lI108|H38750C
+38750C:lI101|H387554
+387554:lI97|H3875A4
+3875A4:lI114|H3875FC
+3875FC:lI99|H38765C
+38765C:lI97|H3876C4
+3876C4:lI115|H387734
+387734:lI101|H3877AC
+3877AC:lI47|H38782C
+38782C:lI111|H3878B4
+3878B4:lI116|H387944
+387944:lI112|H3879D4
+3879D4:lI47|H387A6C
+387A6C:lI101|H387B0C
+387B0C:lI114|H387BB4
+387BB4:lI116|H387C64
+387C64:lI115|H387D1C
+387D1C:lI47|H387DDC
+387DDC:lI108|H387EA4
+387EA4:lI105|H387F74
+387F74:lI98|H38804C
+38804C:lI47|H38812C
+38812C:lI116|H388214
+388214:lI118|H388304
+388304:lI47|H3883FC
+3883FC:lI101|H3884FC
+3884FC:lI98|H388604
+388604:lI105|H388714
+388714:lI110|N
+38AF98:lH38749C|H38AFC0
+38749C:lI47|H3874D4
+3874D4:lI99|H387514
+387514:lI108|H38755C
+38755C:lI101|H3875AC
+3875AC:lI97|H387604
+387604:lI114|H387664
+387664:lI99|H3876CC
+3876CC:lI97|H38773C
+38773C:lI115|H3877B4
+3877B4:lI101|H387834
+387834:lI47|H3878BC
+3878BC:lI111|H38794C
+38794C:lI116|H3879DC
+3879DC:lI112|H387A74
+387A74:lI47|H387B14
+387B14:lI101|H387BBC
+387BBC:lI114|H387C6C
+387C6C:lI116|H387D24
+387D24:lI115|H387DE4
+387DE4:lI47|H387EAC
+387EAC:lI108|H387F7C
+387F7C:lI105|H388054
+388054:lI98|H388134
+388134:lI47|H38821C
+38821C:lI116|H38830C
+38830C:lI115|H388404
+388404:lI112|H388504
+388504:lI47|H38860C
+38860C:lI101|H38871C
+38871C:lI98|H38882C
+38882C:lI105|H38893C
+38893C:lI110|N
+38AFC0:lH3874DC|H38AFE8
+3874DC:lI47|H38751C
+38751C:lI99|H387564
+387564:lI108|H3875B4
+3875B4:lI101|H38760C
+38760C:lI97|H38766C
+38766C:lI114|H3876D4
+3876D4:lI99|H387744
+387744:lI97|H3877BC
+3877BC:lI115|H38783C
+38783C:lI101|H3878C4
+3878C4:lI47|H387954
+387954:lI111|H3879E4
+3879E4:lI116|H387A7C
+387A7C:lI112|H387B1C
+387B1C:lI47|H387BC4
+387BC4:lI101|H387C74
+387C74:lI114|H387D2C
+387D2C:lI116|H387DEC
+387DEC:lI115|H387EB4
+387EB4:lI47|H387F84
+387F84:lI108|H38805C
+38805C:lI105|H38813C
+38813C:lI98|H388224
+388224:lI47|H388314
+388314:lI116|H38840C
+38840C:lI111|H38850C
+38850C:lI111|H388614
+388614:lI108|H388724
+388724:lI115|H388834
+388834:lI47|H388944
+388944:lI101|H388A4C
+388A4C:lI98|H388B5C
+388B5C:lI105|H388C6C
+388C6C:lI110|N
+38AFE8:lH387524|H38B008
+387524:lI47|H38756C
+38756C:lI99|H3875BC
+3875BC:lI108|H387614
+387614:lI101|H387674
+387674:lI97|H3876DC
+3876DC:lI114|H38774C
+38774C:lI99|H3877C4
+3877C4:lI97|H387844
+387844:lI115|H3878CC
+3878CC:lI101|H38795C
+38795C:lI47|H3879EC
+3879EC:lI111|H387A84
+387A84:lI116|H387B24
+387B24:lI112|H387BCC
+387BCC:lI47|H387C7C
+387C7C:lI101|H387D34
+387D34:lI114|H387DF4
+387DF4:lI116|H387EBC
+387EBC:lI115|H387F8C
+387F8C:lI47|H388064
+388064:lI108|H388144
+388144:lI105|H38822C
+38822C:lI98|H38831C
+38831C:lI47|H388414
+388414:lI116|H388514
+388514:lI111|H38861C
+38861C:lI111|H38872C
+38872C:lI108|H38883C
+38883C:lI98|H38894C
+38894C:lI97|H388A54
+388A54:lI114|H388B64
+388B64:lI47|H388C74
+388C74:lI101|H388D84
+388D84:lI98|H388E9C
+388E9C:lI105|H388FB4
+388FB4:lI110|N
+38B008:lH387574|H38B018
+387574:lI47|H3875C4
+3875C4:lI99|H38761C
+38761C:lI108|H38767C
+38767C:lI101|H3876E4
+3876E4:lI97|H387754
+387754:lI114|H3877CC
+3877CC:lI99|H38784C
+38784C:lI97|H3878D4
+3878D4:lI115|H387964
+387964:lI101|H3879F4
+3879F4:lI47|H387A8C
+387A8C:lI111|H387B2C
+387B2C:lI116|H387BD4
+387BD4:lI112|H387C84
+387C84:lI47|H387D3C
+387D3C:lI101|H387DFC
+387DFC:lI114|H387EC4
+387EC4:lI116|H387F94
+387F94:lI115|H38806C
+38806C:lI47|H38814C
+38814C:lI108|H388234
+388234:lI105|H388324
+388324:lI98|H38841C
+38841C:lI47|H38851C
+38851C:lI116|H388624
+388624:lI101|H388734
+388734:lI115|H388844
+388844:lI116|H388954
+388954:lI95|H388A5C
+388A5C:lI115|H388B6C
+388B6C:lI101|H388C7C
+388C7C:lI114|H388D8C
+388D8C:lI118|H388EA4
+388EA4:lI101|H388FBC
+388FBC:lI114|H3890D4
+3890D4:lI47|H3891EC
+3891EC:lI101|H3892FC
+3892FC:lI98|H38940C
+38940C:lI105|H38951C
+38951C:lI110|N
+38B018:lH3875CC|H38AE7C
+3875CC:lI47|H387624
+387624:lI99|H387684
+387684:lI108|H3876EC
+3876EC:lI101|H38775C
+38775C:lI97|H3877D4
+3877D4:lI114|H387854
+387854:lI99|H3878DC
+3878DC:lI97|H38796C
+38796C:lI115|H3879FC
+3879FC:lI101|H387A94
+387A94:lI47|H387B34
+387B34:lI111|H387BDC
+387BDC:lI116|H387C8C
+387C8C:lI112|H387D44
+387D44:lI47|H387E04
+387E04:lI101|H387ECC
+387ECC:lI114|H387F9C
+387F9C:lI116|H388074
+388074:lI115|H388154
+388154:lI47|H38823C
+38823C:lI108|H38832C
+38832C:lI105|H388424
+388424:lI98|H388524
+388524:lI47|H38862C
+38862C:lI115|H38873C
+38873C:lI115|H38884C
+38884C:lI108|H38895C
+38895C:lI47|H388A64
+388A64:lI101|H388B74
+388B74:lI98|H388C84
+388C84:lI105|H388D94
+388D94:lI110|N
+38AE7C:lH38762C|H38AEB0
+38762C:lI47|H38768C
+38768C:lI99|H3876F4
+3876F4:lI108|H387764
+387764:lI101|H3877DC
+3877DC:lI97|H38785C
+38785C:lI114|H3878E4
+3878E4:lI99|H387974
+387974:lI97|H387A04
+387A04:lI115|H387A9C
+387A9C:lI101|H387B3C
+387B3C:lI47|H387BE4
+387BE4:lI111|H387C94
+387C94:lI116|H387D4C
+387D4C:lI112|H387E0C
+387E0C:lI47|H387ED4
+387ED4:lI101|H387FA4
+387FA4:lI114|H38807C
+38807C:lI116|H38815C
+38815C:lI115|H388244
+388244:lI47|H388334
+388334:lI108|H38842C
+38842C:lI105|H38852C
+38852C:lI98|H388634
+388634:lI47|H388744
+388744:lI115|H388854
+388854:lI110|H388964
+388964:lI109|H388A6C
+388A6C:lI112|H388B7C
+388B7C:lI47|H388C8C
+388C8C:lI101|H388D9C
+388D9C:lI98|H388EAC
+388EAC:lI105|H388FC4
+388FC4:lI110|N
+38AEB0:lH387694|H38AED8
+387694:lI47|H3876FC
+3876FC:lI99|H38776C
+38776C:lI108|H3877E4
+3877E4:lI101|H387864
+387864:lI97|H3878EC
+3878EC:lI114|H38797C
+38797C:lI99|H387A0C
+387A0C:lI97|H387AA4
+387AA4:lI115|H387B44
+387B44:lI101|H387BEC
+387BEC:lI47|H387C9C
+387C9C:lI111|H387D54
+387D54:lI116|H387E14
+387E14:lI112|H387EDC
+387EDC:lI47|H387FAC
+387FAC:lI101|H388084
+388084:lI114|H388164
+388164:lI116|H38824C
+38824C:lI115|H38833C
+38833C:lI47|H388434
+388434:lI108|H388534
+388534:lI105|H38863C
+38863C:lI98|H38874C
+38874C:lI47|H38885C
+38885C:lI115|H38896C
+38896C:lI97|H388A74
+388A74:lI115|H388B84
+388B84:lI108|H388C94
+388C94:lI47|H388DA4
+388DA4:lI101|H388EB4
+388EB4:lI98|H388FCC
+388FCC:lI105|H3890DC
+3890DC:lI110|N
+38AED8:lH387704|H38AF08
+387704:lI47|H387774
+387774:lI99|H3877EC
+3877EC:lI108|H38786C
+38786C:lI101|H3878F4
+3878F4:lI97|H387984
+387984:lI114|H387A14
+387A14:lI99|H387AAC
+387AAC:lI97|H387B4C
+387B4C:lI115|H387BF4
+387BF4:lI101|H387CA4
+387CA4:lI47|H387D5C
+387D5C:lI111|H387E1C
+387E1C:lI116|H387EE4
+387EE4:lI112|H387FB4
+387FB4:lI47|H38808C
+38808C:lI101|H38816C
+38816C:lI114|H388254
+388254:lI116|H388344
+388344:lI115|H38843C
+38843C:lI47|H38853C
+38853C:lI108|H388644
+388644:lI105|H388754
+388754:lI98|H388864
+388864:lI47|H388974
+388974:lI114|H388A7C
+388A7C:lI117|H388B8C
+388B8C:lI110|H388C9C
+388C9C:lI116|H388DAC
+388DAC:lI105|H388EBC
+388EBC:lI109|H388FD4
+388FD4:lI101|H3890E4
+3890E4:lI95|H3891F4
+3891F4:lI116|H389304
+389304:lI111|H389414
+389414:lI111|H389524
+389524:lI108|H389624
+389624:lI115|H38971C
+38971C:lI47|H389814
+389814:lI101|H38990C
+38990C:lI98|H389A04
+389A04:lI105|H389AE4
+389AE4:lI110|N
+38AF08:lH38777C|H38AF40
+38777C:lI47|H3877F4
+3877F4:lI99|H387874
+387874:lI108|H3878FC
+3878FC:lI101|H38798C
+38798C:lI97|H387A1C
+387A1C:lI114|H387AB4
+387AB4:lI99|H387B54
+387B54:lI97|H387BFC
+387BFC:lI115|H387CAC
+387CAC:lI101|H387D64
+387D64:lI47|H387E24
+387E24:lI111|H387EEC
+387EEC:lI116|H387FBC
+387FBC:lI112|H388094
+388094:lI47|H388174
+388174:lI101|H38825C
+38825C:lI114|H38834C
+38834C:lI116|H388444
+388444:lI115|H388544
+388544:lI47|H38864C
+38864C:lI108|H38875C
+38875C:lI105|H38886C
+38886C:lI98|H38897C
+38897C:lI47|H388A84
+388A84:lI114|H388B94
+388B94:lI115|H388CA4
+388CA4:lI104|H388DB4
+388DB4:lI101|H388EC4
+388EC4:lI108|H388FDC
+388FDC:lI108|H3890EC
+3890EC:lI47|H3891FC
+3891FC:lI101|H38930C
+38930C:lI98|H38941C
+38941C:lI105|H38952C
+38952C:lI110|N
+38AF40:lH3877FC|H38AF68
+3877FC:lI47|H38787C
+38787C:lI99|H387904
+387904:lI108|H387994
+387994:lI101|H387A24
+387A24:lI97|H387ABC
+387ABC:lI114|H387B5C
+387B5C:lI99|H387C04
+387C04:lI97|H387CB4
+387CB4:lI115|H387D6C
+387D6C:lI101|H387E2C
+387E2C:lI47|H387EF4
+387EF4:lI111|H387FC4
+387FC4:lI116|H38809C
+38809C:lI112|H38817C
+38817C:lI47|H388264
+388264:lI101|H388354
+388354:lI114|H38844C
+38844C:lI116|H38854C
+38854C:lI115|H388654
+388654:lI47|H388764
+388764:lI108|H388874
+388874:lI105|H388984
+388984:lI98|H388A8C
+388A8C:lI47|H388B9C
+388B9C:lI112|H388CAC
+388CAC:lI109|H388DBC
+388DBC:lI97|H388ECC
+388ECC:lI110|H388FE4
+388FE4:lI47|H3890F4
+3890F4:lI101|H389204
+389204:lI98|H389314
+389314:lI105|H389424
+389424:lI110|N
+38AF68:lH387884|H38AF90
+387884:lI47|H38790C
+38790C:lI99|H38799C
+38799C:lI108|H387A2C
+387A2C:lI101|H387AC4
+387AC4:lI97|H387B64
+387B64:lI114|H387C0C
+387C0C:lI99|H387CBC
+387CBC:lI97|H387D74
+387D74:lI115|H387E34
+387E34:lI101|H387EFC
+387EFC:lI47|H387FCC
+387FCC:lI111|H3880A4
+3880A4:lI116|H388184
+388184:lI112|H38826C
+38826C:lI47|H38835C
+38835C:lI101|H388454
+388454:lI114|H388554
+388554:lI116|H38865C
+38865C:lI115|H38876C
+38876C:lI47|H38887C
+38887C:lI108|H38898C
+38898C:lI105|H388A94
+388A94:lI98|H388BA4
+388BA4:lI47|H388CB4
+388CB4:lI112|H388DC4
+388DC4:lI97|H388ED4
+388ED4:lI114|H388FEC
+388FEC:lI115|H3890FC
+3890FC:lI101|H38920C
+38920C:lI116|H38931C
+38931C:lI111|H38942C
+38942C:lI111|H389534
+389534:lI108|H38962C
+38962C:lI115|H389724
+389724:lI47|H38981C
+38981C:lI101|H389914
+389914:lI98|H389A0C
+389A0C:lI105|H389AEC
+389AEC:lI110|N
+38AF90:lH387914|H38AFB8
+387914:lI47|H3879A4
+3879A4:lI99|H387A34
+387A34:lI108|H387ACC
+387ACC:lI101|H387B6C
+387B6C:lI97|H387C14
+387C14:lI114|H387CC4
+387CC4:lI99|H387D7C
+387D7C:lI97|H387E3C
+387E3C:lI115|H387F04
+387F04:lI101|H387FD4
+387FD4:lI47|H3880AC
+3880AC:lI111|H38818C
+38818C:lI116|H388274
+388274:lI112|H388364
+388364:lI47|H38845C
+38845C:lI101|H38855C
+38855C:lI114|H388664
+388664:lI116|H388774
+388774:lI115|H388884
+388884:lI47|H388994
+388994:lI108|H388A9C
+388A9C:lI105|H388BAC
+388BAC:lI98|H388CBC
+388CBC:lI47|H388DCC
+388DCC:lI111|H388EDC
+388EDC:lI116|H388FF4
+388FF4:lI112|H389104
+389104:lI95|H389214
+389214:lI109|H389324
+389324:lI105|H389434
+389434:lI98|H38953C
+38953C:lI115|H389634
+389634:lI47|H38972C
+38972C:lI101|H389824
+389824:lI98|H38991C
+38991C:lI105|H389A14
+389A14:lI110|N
+38AFB8:lH3879AC|H38AFE0
+3879AC:lI47|H387A3C
+387A3C:lI99|H387AD4
+387AD4:lI108|H387B74
+387B74:lI101|H387C1C
+387C1C:lI97|H387CCC
+387CCC:lI114|H387D84
+387D84:lI99|H387E44
+387E44:lI97|H387F0C
+387F0C:lI115|H387FDC
+387FDC:lI101|H3880B4
+3880B4:lI47|H388194
+388194:lI111|H38827C
+38827C:lI116|H38836C
+38836C:lI112|H388464
+388464:lI47|H388564
+388564:lI101|H38866C
+38866C:lI114|H38877C
+38877C:lI116|H38888C
+38888C:lI115|H38899C
+38899C:lI47|H388AA4
+388AA4:lI108|H388BB4
+388BB4:lI105|H388CC4
+388CC4:lI98|H388DD4
+388DD4:lI47|H388EE4
+388EE4:lI111|H388FFC
+388FFC:lI115|H38910C
+38910C:lI95|H38921C
+38921C:lI109|H38932C
+38932C:lI111|H38943C
+38943C:lI110|H389544
+389544:lI47|H38963C
+38963C:lI101|H389734
+389734:lI98|H38982C
+38982C:lI105|H389924
+389924:lI110|N
+38AFE0:lH387A44|H38B000
+387A44:lI47|H387ADC
+387ADC:lI99|H387B7C
+387B7C:lI108|H387C24
+387C24:lI101|H387CD4
+387CD4:lI97|H387D8C
+387D8C:lI114|H387E4C
+387E4C:lI99|H387F14
+387F14:lI97|H387FE4
+387FE4:lI115|H3880BC
+3880BC:lI101|H38819C
+38819C:lI47|H388284
+388284:lI111|H388374
+388374:lI116|H38846C
+38846C:lI112|H38856C
+38856C:lI47|H388674
+388674:lI101|H388784
+388784:lI114|H388894
+388894:lI116|H3889A4
+3889A4:lI115|H388AAC
+388AAC:lI47|H388BBC
+388BBC:lI108|H388CCC
+388CCC:lI105|H388DDC
+388DDC:lI98|H388EEC
+388EEC:lI47|H389004
+389004:lI111|H389114
+389114:lI114|H389224
+389224:lI98|H389334
+389334:lI101|H389444
+389444:lI114|H38954C
+38954C:lI47|H389644
+389644:lI101|H38973C
+38973C:lI98|H389834
+389834:lI105|H38992C
+38992C:lI110|N
+38B000:lH387AE4|H38B010
+387AE4:lI47|H387B84
+387B84:lI99|H387C2C
+387C2C:lI108|H387CDC
+387CDC:lI101|H387D94
+387D94:lI97|H387E54
+387E54:lI114|H387F1C
+387F1C:lI99|H387FEC
+387FEC:lI97|H3880C4
+3880C4:lI115|H3881A4
+3881A4:lI101|H38828C
+38828C:lI47|H38837C
+38837C:lI111|H388474
+388474:lI116|H388574
+388574:lI112|H38867C
+38867C:lI47|H38878C
+38878C:lI101|H38889C
+38889C:lI114|H3889AC
+3889AC:lI116|H388AB4
+388AB4:lI115|H388BC4
+388BC4:lI47|H388CD4
+388CD4:lI108|H388DE4
+388DE4:lI105|H388EF4
+388EF4:lI98|H38900C
+38900C:lI47|H38911C
+38911C:lI111|H38922C
+38922C:lI100|H38933C
+38933C:lI98|H38944C
+38944C:lI99|H389554
+389554:lI47|H38964C
+38964C:lI101|H389744
+389744:lI98|H38983C
+38983C:lI105|H389934
+389934:lI110|N
+38B010:lH387B8C|H38B020
+387B8C:lI47|H387C34
+387C34:lI99|H387CE4
+387CE4:lI108|H387D9C
+387D9C:lI101|H387E5C
+387E5C:lI97|H387F24
+387F24:lI114|H387FF4
+387FF4:lI99|H3880CC
+3880CC:lI97|H3881AC
+3881AC:lI115|H388294
+388294:lI101|H388384
+388384:lI47|H38847C
+38847C:lI111|H38857C
+38857C:lI116|H388684
+388684:lI112|H388794
+388794:lI47|H3888A4
+3888A4:lI101|H3889B4
+3889B4:lI114|H388ABC
+388ABC:lI116|H388BCC
+388BCC:lI115|H388CDC
+388CDC:lI47|H388DEC
+388DEC:lI108|H388EFC
+388EFC:lI105|H389014
+389014:lI98|H389124
+389124:lI47|H389234
+389234:lI111|H389344
+389344:lI98|H389454
+389454:lI115|H38955C
+38955C:lI101|H389654
+389654:lI114|H38974C
+38974C:lI118|H389844
+389844:lI101|H38993C
+38993C:lI114|H389A1C
+389A1C:lI47|H389AF4
+389AF4:lI101|H389BBC
+389BBC:lI98|H389C84
+389C84:lI105|H389D4C
+389D4C:lI110|N
+38B020:lH387C3C|H38B028
+387C3C:lI47|H387CEC
+387CEC:lI99|H387DA4
+387DA4:lI108|H387E64
+387E64:lI101|H387F2C
+387F2C:lI97|H387FFC
+387FFC:lI114|H3880D4
+3880D4:lI99|H3881B4
+3881B4:lI97|H38829C
+38829C:lI115|H38838C
+38838C:lI101|H388484
+388484:lI47|H388584
+388584:lI111|H38868C
+38868C:lI116|H38879C
+38879C:lI112|H3888AC
+3888AC:lI47|H3889BC
+3889BC:lI101|H388AC4
+388AC4:lI114|H388BD4
+388BD4:lI116|H388CE4
+388CE4:lI115|H388DF4
+388DF4:lI47|H388F04
+388F04:lI108|H38901C
+38901C:lI105|H38912C
+38912C:lI98|H38923C
+38923C:lI47|H38934C
+38934C:lI109|H38945C
+38945C:lI110|H389564
+389564:lI101|H38965C
+38965C:lI115|H389754
+389754:lI105|H38984C
+38984C:lI97|H389944
+389944:lI95|H389A24
+389A24:lI115|H389AFC
+389AFC:lI101|H389BC4
+389BC4:lI115|H389C8C
+389C8C:lI115|H389D54
+389D54:lI105|H389E14
+389E14:lI111|H389ECC
+389ECC:lI110|H389F7C
+389F7C:lI47|H38A01C
+38A01C:lI101|H38A0AC
+38A0AC:lI98|H38A12C
+38A12C:lI105|H38A19C
+38A19C:lI110|N
+38B028:lH387CF4|H38B030
+387CF4:lI47|H387DAC
+387DAC:lI99|H387E6C
+387E6C:lI108|H387F34
+387F34:lI101|H388004
+388004:lI97|H3880DC
+3880DC:lI114|H3881BC
+3881BC:lI99|H3882A4
+3882A4:lI97|H388394
+388394:lI115|H38848C
+38848C:lI101|H38858C
+38858C:lI47|H388694
+388694:lI111|H3887A4
+3887A4:lI116|H3888B4
+3888B4:lI112|H3889C4
+3889C4:lI47|H388ACC
+388ACC:lI101|H388BDC
+388BDC:lI114|H388CEC
+388CEC:lI116|H388DFC
+388DFC:lI115|H388F0C
+388F0C:lI47|H389024
+389024:lI108|H389134
+389134:lI105|H389244
+389244:lI98|H389354
+389354:lI47|H389464
+389464:lI109|H38956C
+38956C:lI110|H389664
+389664:lI101|H38975C
+38975C:lI115|H389854
+389854:lI105|H38994C
+38994C:lI97|H389A2C
+389A2C:lI47|H389B04
+389B04:lI101|H389BCC
+389BCC:lI98|H389C94
+389C94:lI105|H389D5C
+389D5C:lI110|N
+38B030:lH387DB4|H38B038
+387DB4:lI47|H387E74
+387E74:lI99|H387F3C
+387F3C:lI108|H38800C
+38800C:lI101|H3880E4
+3880E4:lI97|H3881C4
+3881C4:lI114|H3882AC
+3882AC:lI99|H38839C
+38839C:lI97|H388494
+388494:lI115|H388594
+388594:lI101|H38869C
+38869C:lI47|H3887AC
+3887AC:lI111|H3888BC
+3888BC:lI116|H3889CC
+3889CC:lI112|H388AD4
+388AD4:lI47|H388BE4
+388BE4:lI101|H388CF4
+388CF4:lI114|H388E04
+388E04:lI116|H388F14
+388F14:lI115|H38902C
+38902C:lI47|H38913C
+38913C:lI108|H38924C
+38924C:lI105|H38935C
+38935C:lI98|H38946C
+38946C:lI47|H389574
+389574:lI109|H38966C
+38966C:lI110|H389764
+389764:lI101|H38985C
+38985C:lI109|H389954
+389954:lI111|H389A34
+389A34:lI115|H389B0C
+389B0C:lI121|H389BD4
+389BD4:lI110|H389C9C
+389C9C:lI101|H389D64
+389D64:lI47|H389E1C
+389E1C:lI101|H389ED4
+389ED4:lI98|H389F84
+389F84:lI105|H38A024
+38A024:lI110|N
+38B038:lH387E7C|H38B040
+387E7C:lI47|H387F44
+387F44:lI99|H388014
+388014:lI108|H3880EC
+3880EC:lI101|H3881CC
+3881CC:lI97|H3882B4
+3882B4:lI114|H3883A4
+3883A4:lI99|H38849C
+38849C:lI97|H38859C
+38859C:lI115|H3886A4
+3886A4:lI101|H3887B4
+3887B4:lI47|H3888C4
+3888C4:lI111|H3889D4
+3889D4:lI116|H388ADC
+388ADC:lI112|H388BEC
+388BEC:lI47|H388CFC
+388CFC:lI101|H388E0C
+388E0C:lI114|H388F1C
+388F1C:lI116|H389034
+389034:lI115|H389144
+389144:lI47|H389254
+389254:lI108|H389364
+389364:lI105|H389474
+389474:lI98|H38957C
+38957C:lI47|H389674
+389674:lI109|H38976C
+38976C:lI101|H389864
+389864:lI103|H38995C
+38995C:lI97|H389A3C
+389A3C:lI99|H389B14
+389B14:lI111|H389BDC
+389BDC:lI47|H389CA4
+389CA4:lI101|H389D6C
+389D6C:lI98|H389E24
+389E24:lI105|H389EDC
+389EDC:lI110|N
+38B040:lH387F4C|H38B048
+387F4C:lI47|H38801C
+38801C:lI99|H3880F4
+3880F4:lI108|H3881D4
+3881D4:lI101|H3882BC
+3882BC:lI97|H3883AC
+3883AC:lI114|H3884A4
+3884A4:lI99|H3885A4
+3885A4:lI97|H3886AC
+3886AC:lI115|H3887BC
+3887BC:lI101|H3888CC
+3888CC:lI47|H3889DC
+3889DC:lI111|H388AE4
+388AE4:lI116|H388BF4
+388BF4:lI112|H388D04
+388D04:lI47|H388E14
+388E14:lI101|H388F24
+388F24:lI114|H38903C
+38903C:lI116|H38914C
+38914C:lI115|H38925C
+38925C:lI47|H38936C
+38936C:lI108|H38947C
+38947C:lI105|H389584
+389584:lI98|H38967C
+38967C:lI47|H389774
+389774:lI106|H38986C
+38986C:lI105|H389964
+389964:lI110|H389A44
+389A44:lI116|H389B1C
+389B1C:lI101|H389BE4
+389BE4:lI114|H389CAC
+389CAC:lI102|H389D74
+389D74:lI97|H389E2C
+389E2C:lI99|H389EE4
+389EE4:lI101|N
+38B048:lH388024|H38B050
+388024:lI47|H3880FC
+3880FC:lI99|H3881DC
+3881DC:lI108|H3882C4
+3882C4:lI101|H3883B4
+3883B4:lI97|H3884AC
+3884AC:lI114|H3885AC
+3885AC:lI99|H3886B4
+3886B4:lI97|H3887C4
+3887C4:lI115|H3888D4
+3888D4:lI101|H3889E4
+3889E4:lI47|H388AEC
+388AEC:lI111|H388BFC
+388BFC:lI116|H388D0C
+388D0C:lI112|H388E1C
+388E1C:lI47|H388F2C
+388F2C:lI101|H389044
+389044:lI114|H389154
+389154:lI116|H389264
+389264:lI115|H389374
+389374:lI47|H389484
+389484:lI108|H38958C
+38958C:lI105|H389684
+389684:lI98|H38977C
+38977C:lI47|H389874
+389874:lI105|H38996C
+38996C:lI110|H389A4C
+389A4C:lI101|H389B24
+389B24:lI116|H389BEC
+389BEC:lI115|H389CB4
+389CB4:lI47|H389D7C
+389D7C:lI101|H389E34
+389E34:lI98|H389EEC
+389EEC:lI105|H389F8C
+389F8C:lI110|N
+38B050:lH388104|H38B058
+388104:lI47|H3881E4
+3881E4:lI99|H3882CC
+3882CC:lI108|H3883BC
+3883BC:lI101|H3884B4
+3884B4:lI97|H3885B4
+3885B4:lI114|H3886BC
+3886BC:lI99|H3887CC
+3887CC:lI97|H3888DC
+3888DC:lI115|H3889EC
+3889EC:lI101|H388AF4
+388AF4:lI47|H388C04
+388C04:lI111|H388D14
+388D14:lI116|H388E24
+388E24:lI112|H388F34
+388F34:lI47|H38904C
+38904C:lI101|H38915C
+38915C:lI114|H38926C
+38926C:lI116|H38937C
+38937C:lI115|H38948C
+38948C:lI47|H389594
+389594:lI108|H38968C
+38968C:lI105|H389784
+389784:lI98|H38987C
+38987C:lI47|H389974
+389974:lI105|H389A54
+389A54:lI99|H389B2C
+389B2C:lI47|H389BF4
+389BF4:lI101|H389CBC
+389CBC:lI98|H389D84
+389D84:lI105|H389E3C
+389E3C:lI110|N
+38B058:lH3881EC|H38B060
+3881EC:lI47|H3882D4
+3882D4:lI99|H3883C4
+3883C4:lI108|H3884BC
+3884BC:lI101|H3885BC
+3885BC:lI97|H3886C4
+3886C4:lI114|H3887D4
+3887D4:lI99|H3888E4
+3888E4:lI97|H3889F4
+3889F4:lI115|H388AFC
+388AFC:lI101|H388C0C
+388C0C:lI47|H388D1C
+388D1C:lI111|H388E2C
+388E2C:lI116|H388F3C
+388F3C:lI112|H389054
+389054:lI47|H389164
+389164:lI101|H389274
+389274:lI114|H389384
+389384:lI116|H389494
+389494:lI115|H38959C
+38959C:lI47|H389694
+389694:lI108|H38978C
+38978C:lI105|H389884
+389884:lI98|H38997C
+38997C:lI47|H389A5C
+389A5C:lI104|H389B34
+389B34:lI105|H389BFC
+389BFC:lI112|H389CC4
+389CC4:lI101|H389D8C
+389D8C:lI47|H389E44
+389E44:lI101|H389EF4
+389EF4:lI98|H389F94
+389F94:lI105|H38A02C
+38A02C:lI110|N
+38B060:lH3882DC|H38B068
+3882DC:lI47|H3883CC
+3883CC:lI99|H3884C4
+3884C4:lI108|H3885C4
+3885C4:lI101|H3886CC
+3886CC:lI97|H3887DC
+3887DC:lI114|H3888EC
+3888EC:lI99|H3889FC
+3889FC:lI97|H388B04
+388B04:lI115|H388C14
+388C14:lI101|H388D24
+388D24:lI47|H388E34
+388E34:lI111|H388F44
+388F44:lI116|H38905C
+38905C:lI112|H38916C
+38916C:lI47|H38927C
+38927C:lI101|H38938C
+38938C:lI114|H38949C
+38949C:lI116|H3895A4
+3895A4:lI115|H38969C
+38969C:lI47|H389794
+389794:lI108|H38988C
+38988C:lI105|H389984
+389984:lI98|H389A64
+389A64:lI47|H389B3C
+389B3C:lI103|H389C04
+389C04:lI115|H389CCC
+389CCC:lI47|H389D94
+389D94:lI101|H389E4C
+389E4C:lI98|H389EFC
+389EFC:lI105|H389F9C
+389F9C:lI110|N
+38B068:lH3883D4|H38B070
+3883D4:lI47|H3884CC
+3884CC:lI99|H3885CC
+3885CC:lI108|H3886D4
+3886D4:lI101|H3887E4
+3887E4:lI97|H3888F4
+3888F4:lI114|H388A04
+388A04:lI99|H388B0C
+388B0C:lI97|H388C1C
+388C1C:lI115|H388D2C
+388D2C:lI101|H388E3C
+388E3C:lI47|H388F4C
+388F4C:lI111|H389064
+389064:lI116|H389174
+389174:lI112|H389284
+389284:lI47|H389394
+389394:lI101|H3894A4
+3894A4:lI114|H3895AC
+3895AC:lI116|H3896A4
+3896A4:lI115|H38979C
+38979C:lI47|H389894
+389894:lI108|H38998C
+38998C:lI105|H389A6C
+389A6C:lI98|H389B44
+389B44:lI47|H389C0C
+389C0C:lI101|H389CD4
+389CD4:lI118|H389D9C
+389D9C:lI97|H389E54
+389E54:lI47|H389F04
+389F04:lI101|H389FA4
+389FA4:lI98|H38A034
+38A034:lI105|H38A0B4
+38A0B4:lI110|N
+38B070:lH3884D4|H38B078
+3884D4:lI47|H3885D4
+3885D4:lI99|H3886DC
+3886DC:lI108|H3887EC
+3887EC:lI101|H3888FC
+3888FC:lI97|H388A0C
+388A0C:lI114|H388B14
+388B14:lI99|H388C24
+388C24:lI97|H388D34
+388D34:lI115|H388E44
+388E44:lI101|H388F54
+388F54:lI47|H38906C
+38906C:lI111|H38917C
+38917C:lI116|H38928C
+38928C:lI112|H38939C
+38939C:lI47|H3894AC
+3894AC:lI101|H3895B4
+3895B4:lI114|H3896AC
+3896AC:lI116|H3897A4
+3897A4:lI115|H38989C
+38989C:lI47|H389994
+389994:lI108|H389A74
+389A74:lI105|H389B4C
+389B4C:lI98|H389C14
+389C14:lI47|H389CDC
+389CDC:lI101|H389DA4
+389DA4:lI116|H389E5C
+389E5C:lI47|H389F0C
+389F0C:lI101|H389FAC
+389FAC:lI98|H38A03C
+38A03C:lI105|H38A0BC
+38A0BC:lI110|N
+38B078:lH3885DC|H38B080
+3885DC:lI47|H3886E4
+3886E4:lI99|H3887F4
+3887F4:lI108|H388904
+388904:lI101|H388A14
+388A14:lI97|H388B1C
+388B1C:lI114|H388C2C
+388C2C:lI99|H388D3C
+388D3C:lI97|H388E4C
+388E4C:lI115|H388F5C
+388F5C:lI101|H389074
+389074:lI47|H389184
+389184:lI111|H389294
+389294:lI116|H3893A4
+3893A4:lI112|H3894B4
+3894B4:lI47|H3895BC
+3895BC:lI101|H3896B4
+3896B4:lI114|H3897AC
+3897AC:lI116|H3898A4
+3898A4:lI115|H38999C
+38999C:lI47|H389A7C
+389A7C:lI108|H389B54
+389B54:lI105|H389C1C
+389C1C:lI98|H389CE4
+389CE4:lI47|H389DAC
+389DAC:lI101|H389E64
+389E64:lI114|H389F14
+389F14:lI108|H389FB4
+389FB4:lI95|H38A044
+38A044:lI105|H38A0C4
+38A0C4:lI110|H38A134
+38A134:lI116|H38A1A4
+38A1A4:lI101|H38A20C
+38A20C:lI114|H38A274
+38A274:lI102|H38A2DC
+38A2DC:lI97|H38A344
+38A344:lI99|H38A3AC
+38A3AC:lI101|N
+38B080:lH3886EC|H38B088
+3886EC:lI47|H3887FC
+3887FC:lI99|H38890C
+38890C:lI108|H388A1C
+388A1C:lI101|H388B24
+388B24:lI97|H388C34
+388C34:lI114|H388D44
+388D44:lI99|H388E54
+388E54:lI97|H388F64
+388F64:lI115|H38907C
+38907C:lI101|H38918C
+38918C:lI47|H38929C
+38929C:lI111|H3893AC
+3893AC:lI116|H3894BC
+3894BC:lI112|H3895C4
+3895C4:lI47|H3896BC
+3896BC:lI101|H3897B4
+3897B4:lI114|H3898AC
+3898AC:lI116|H3899A4
+3899A4:lI115|H389A84
+389A84:lI47|H389B5C
+389B5C:lI108|H389C24
+389C24:lI105|H389CEC
+389CEC:lI98|H389DB4
+389DB4:lI47|H389E6C
+389E6C:lI100|H389F1C
+389F1C:lI101|H389FBC
+389FBC:lI98|H38A04C
+38A04C:lI117|H38A0CC
+38A0CC:lI103|H38A13C
+38A13C:lI103|H38A1AC
+38A1AC:lI101|H38A214
+38A214:lI114|H38A27C
+38A27C:lI47|H38A2E4
+38A2E4:lI101|H38A34C
+38A34C:lI98|H38A3B4
+38A3B4:lI105|H38A414
+38A414:lI110|N
+38B088:lH388804|H38B090
+388804:lI47|H388914
+388914:lI99|H388A24
+388A24:lI108|H388B2C
+388B2C:lI101|H388C3C
+388C3C:lI97|H388D4C
+388D4C:lI114|H388E5C
+388E5C:lI99|H388F6C
+388F6C:lI97|H389084
+389084:lI115|H389194
+389194:lI101|H3892A4
+3892A4:lI47|H3893B4
+3893B4:lI111|H3894C4
+3894C4:lI116|H3895CC
+3895CC:lI112|H3896C4
+3896C4:lI47|H3897BC
+3897BC:lI101|H3898B4
+3898B4:lI114|H3899AC
+3899AC:lI116|H389A8C
+389A8C:lI115|H389B64
+389B64:lI47|H389C2C
+389C2C:lI108|H389CF4
+389CF4:lI105|H389DBC
+389DBC:lI98|H389E74
+389E74:lI47|H389F24
+389F24:lI99|H389FC4
+389FC4:lI114|H38A054
+38A054:lI121|H38A0D4
+38A0D4:lI112|H38A144
+38A144:lI116|H38A1B4
+38A1B4:lI111|H38A21C
+38A21C:lI47|H38A284
+38A284:lI101|H38A2EC
+38A2EC:lI98|H38A354
+38A354:lI105|H38A3BC
+38A3BC:lI110|N
+38B090:lH38891C|H38B098
+38891C:lI47|H388A2C
+388A2C:lI99|H388B34
+388B34:lI108|H388C44
+388C44:lI101|H388D54
+388D54:lI97|H388E64
+388E64:lI114|H388F74
+388F74:lI99|H38908C
+38908C:lI97|H38919C
+38919C:lI115|H3892AC
+3892AC:lI101|H3893BC
+3893BC:lI47|H3894CC
+3894CC:lI111|H3895D4
+3895D4:lI116|H3896CC
+3896CC:lI112|H3897C4
+3897C4:lI47|H3898BC
+3898BC:lI101|H3899B4
+3899B4:lI114|H389A94
+389A94:lI116|H389B6C
+389B6C:lI115|H389C34
+389C34:lI47|H389CFC
+389CFC:lI108|H389DC4
+389DC4:lI105|H389E7C
+389E7C:lI98|H389F2C
+389F2C:lI47|H389FCC
+389FCC:lI99|H38A05C
+38A05C:lI111|H38A0DC
+38A0DC:lI115|H38A14C
+38A14C:lI84|H38A1BC
+38A1BC:lI114|H38A224
+38A224:lI97|H38A28C
+38A28C:lI110|H38A2F4
+38A2F4:lI115|H38A35C
+38A35C:lI97|H38A3C4
+38A3C4:lI99|H38A41C
+38A41C:lI116|H38A46C
+38A46C:lI105|H38A4BC
+38A4BC:lI111|H38A50C
+38A50C:lI110|H38A554
+38A554:lI115|H38A59C
+38A59C:lI47|H38A5E4
+38A5E4:lI101|H38A62C
+38A62C:lI98|H38A66C
+38A66C:lI105|H38A6A4
+38A6A4:lI110|N
+38B098:lH388A34|H38B0A0
+388A34:lI47|H388B3C
+388B3C:lI99|H388C4C
+388C4C:lI108|H388D5C
+388D5C:lI101|H388E6C
+388E6C:lI97|H388F7C
+388F7C:lI114|H389094
+389094:lI99|H3891A4
+3891A4:lI97|H3892B4
+3892B4:lI115|H3893C4
+3893C4:lI101|H3894D4
+3894D4:lI47|H3895DC
+3895DC:lI111|H3896D4
+3896D4:lI116|H3897CC
+3897CC:lI112|H3898C4
+3898C4:lI47|H3899BC
+3899BC:lI101|H389A9C
+389A9C:lI114|H389B74
+389B74:lI116|H389C3C
+389C3C:lI115|H389D04
+389D04:lI47|H389DCC
+389DCC:lI108|H389E84
+389E84:lI105|H389F34
+389F34:lI98|H389FD4
+389FD4:lI47|H38A064
+38A064:lI99|H38A0E4
+38A0E4:lI111|H38A154
+38A154:lI115|H38A1C4
+38A1C4:lI84|H38A22C
+38A22C:lI105|H38A294
+38A294:lI109|H38A2FC
+38A2FC:lI101|H38A364
+38A364:lI47|H38A3CC
+38A3CC:lI101|H38A424
+38A424:lI98|H38A474
+38A474:lI105|H38A4C4
+38A4C4:lI110|N
+38B0A0:lH388B44|H38B0A8
+388B44:lI47|H388C54
+388C54:lI99|H388D64
+388D64:lI108|H388E74
+388E74:lI101|H388F84
+388F84:lI97|H38909C
+38909C:lI114|H3891AC
+3891AC:lI99|H3892BC
+3892BC:lI97|H3893CC
+3893CC:lI115|H3894DC
+3894DC:lI101|H3895E4
+3895E4:lI47|H3896DC
+3896DC:lI111|H3897D4
+3897D4:lI116|H3898CC
+3898CC:lI112|H3899C4
+3899C4:lI47|H389AA4
+389AA4:lI101|H389B7C
+389B7C:lI114|H389C44
+389C44:lI116|H389D0C
+389D0C:lI115|H389DD4
+389DD4:lI47|H389E8C
+389E8C:lI108|H389F3C
+389F3C:lI105|H389FDC
+389FDC:lI98|H38A06C
+38A06C:lI47|H38A0EC
+38A0EC:lI99|H38A15C
+38A15C:lI111|H38A1CC
+38A1CC:lI115|H38A234
+38A234:lI80|H38A29C
+38A29C:lI114|H38A304
+38A304:lI111|H38A36C
+38A36C:lI112|H38A3D4
+38A3D4:lI101|H38A42C
+38A42C:lI114|H38A47C
+38A47C:lI116|H38A4CC
+38A4CC:lI121|H38A514
+38A514:lI47|H38A55C
+38A55C:lI101|H38A5A4
+38A5A4:lI98|H38A5EC
+38A5EC:lI105|H38A634
+38A634:lI110|N
+38B0A8:lH388C5C|H38B0B0
+388C5C:lI47|H388D6C
+388D6C:lI99|H388E7C
+388E7C:lI108|H388F8C
+388F8C:lI101|H3890A4
+3890A4:lI97|H3891B4
+3891B4:lI114|H3892C4
+3892C4:lI99|H3893D4
+3893D4:lI97|H3894E4
+3894E4:lI115|H3895EC
+3895EC:lI101|H3896E4
+3896E4:lI47|H3897DC
+3897DC:lI111|H3898D4
+3898D4:lI116|H3899CC
+3899CC:lI112|H389AAC
+389AAC:lI47|H389B84
+389B84:lI101|H389C4C
+389C4C:lI114|H389D14
+389D14:lI116|H389DDC
+389DDC:lI115|H389E94
+389E94:lI47|H389F44
+389F44:lI108|H389FE4
+389FE4:lI105|H38A074
+38A074:lI98|H38A0F4
+38A0F4:lI47|H38A164
+38A164:lI99|H38A1D4
+38A1D4:lI111|H38A23C
+38A23C:lI115|H38A2A4
+38A2A4:lI78|H38A30C
+38A30C:lI111|H38A374
+38A374:lI116|H38A3DC
+38A3DC:lI105|H38A434
+38A434:lI102|H38A484
+38A484:lI105|H38A4D4
+38A4D4:lI99|H38A51C
+38A51C:lI97|H38A564
+38A564:lI116|H38A5AC
+38A5AC:lI105|H38A5F4
+38A5F4:lI111|H38A63C
+38A63C:lI110|H38A674
+38A674:lI47|H38A6AC
+38A6AC:lI101|H38A6D4
+38A6D4:lI98|H38A6EC
+38A6EC:lI105|H38A704
+38A704:lI110|N
+38B0B0:lH388D74|H38B0B8
+388D74:lI47|H388E84
+388E84:lI99|H388F94
+388F94:lI108|H3890AC
+3890AC:lI101|H3891BC
+3891BC:lI97|H3892CC
+3892CC:lI114|H3893DC
+3893DC:lI99|H3894EC
+3894EC:lI97|H3895F4
+3895F4:lI115|H3896EC
+3896EC:lI101|H3897E4
+3897E4:lI47|H3898DC
+3898DC:lI111|H3899D4
+3899D4:lI116|H389AB4
+389AB4:lI112|H389B8C
+389B8C:lI47|H389C54
+389C54:lI101|H389D1C
+389D1C:lI114|H389DE4
+389DE4:lI116|H389E9C
+389E9C:lI115|H389F4C
+389F4C:lI47|H389FEC
+389FEC:lI108|H38A07C
+38A07C:lI105|H38A0FC
+38A0FC:lI98|H38A16C
+38A16C:lI47|H38A1DC
+38A1DC:lI99|H38A244
+38A244:lI111|H38A2AC
+38A2AC:lI115|H38A314
+38A314:lI70|H38A37C
+38A37C:lI105|H38A3E4
+38A3E4:lI108|H38A43C
+38A43C:lI101|H38A48C
+38A48C:lI84|H38A4DC
+38A4DC:lI114|H38A524
+38A524:lI97|H38A56C
+38A56C:lI110|H38A5B4
+38A5B4:lI115|H38A5FC
+38A5FC:lI102|H38A644
+38A644:lI101|H38A67C
+38A67C:lI114|H38A6B4
+38A6B4:lI47|H38A6DC
+38A6DC:lI101|H38A6F4
+38A6F4:lI98|H38A70C
+38A70C:lI105|H38A71C
+38A71C:lI110|N
+38B0B8:lH388E8C|H38B0C0
+388E8C:lI47|H388F9C
+388F9C:lI99|H3890B4
+3890B4:lI108|H3891C4
+3891C4:lI101|H3892D4
+3892D4:lI97|H3893E4
+3893E4:lI114|H3894F4
+3894F4:lI99|H3895FC
+3895FC:lI97|H3896F4
+3896F4:lI115|H3897EC
+3897EC:lI101|H3898E4
+3898E4:lI47|H3899DC
+3899DC:lI111|H389ABC
+389ABC:lI116|H389B94
+389B94:lI112|H389C5C
+389C5C:lI47|H389D24
+389D24:lI101|H389DEC
+389DEC:lI114|H389EA4
+389EA4:lI116|H389F54
+389F54:lI115|H389FF4
+389FF4:lI47|H38A084
+38A084:lI108|H38A104
+38A104:lI105|H38A174
+38A174:lI98|H38A1E4
+38A1E4:lI47|H38A24C
+38A24C:lI99|H38A2B4
+38A2B4:lI111|H38A31C
+38A31C:lI115|H38A384
+38A384:lI69|H38A3EC
+38A3EC:lI118|H38A444
+38A444:lI101|H38A494
+38A494:lI110|H38A4E4
+38A4E4:lI116|H38A52C
+38A52C:lI68|H38A574
+38A574:lI111|H38A5BC
+38A5BC:lI109|H38A604
+38A604:lI97|H38A64C
+38A64C:lI105|H38A684
+38A684:lI110|H38A6BC
+38A6BC:lI47|H38A6E4
+38A6E4:lI101|H38A6FC
+38A6FC:lI98|H38A714
+38A714:lI105|H38A724
+38A724:lI110|N
+38B0C0:lH388FA4|H38B0C8
+388FA4:lI47|H3890BC
+3890BC:lI99|H3891CC
+3891CC:lI108|H3892DC
+3892DC:lI101|H3893EC
+3893EC:lI97|H3894FC
+3894FC:lI114|H389604
+389604:lI99|H3896FC
+3896FC:lI97|H3897F4
+3897F4:lI115|H3898EC
+3898EC:lI101|H3899E4
+3899E4:lI47|H389AC4
+389AC4:lI111|H389B9C
+389B9C:lI116|H389C64
+389C64:lI112|H389D2C
+389D2C:lI47|H389DF4
+389DF4:lI101|H389EAC
+389EAC:lI114|H389F5C
+389F5C:lI116|H389FFC
+389FFC:lI115|H38A08C
+38A08C:lI47|H38A10C
+38A10C:lI108|H38A17C
+38A17C:lI105|H38A1EC
+38A1EC:lI98|H38A254
+38A254:lI47|H38A2BC
+38A2BC:lI99|H38A324
+38A324:lI111|H38A38C
+38A38C:lI115|H38A3F4
+38A3F4:lI69|H38A44C
+38A44C:lI118|H38A49C
+38A49C:lI101|H38A4EC
+38A4EC:lI110|H38A534
+38A534:lI116|H38A57C
+38A57C:lI47|H38A5C4
+38A5C4:lI101|H38A60C
+38A60C:lI98|H38A654
+38A654:lI105|H38A68C
+38A68C:lI110|N
+38B0C8:lH3890C4|H38B0D0
+3890C4:lI47|H3891D4
+3891D4:lI99|H3892E4
+3892E4:lI108|H3893F4
+3893F4:lI101|H389504
+389504:lI97|H38960C
+38960C:lI114|H389704
+389704:lI99|H3897FC
+3897FC:lI97|H3898F4
+3898F4:lI115|H3899EC
+3899EC:lI101|H389ACC
+389ACC:lI47|H389BA4
+389BA4:lI111|H389C6C
+389C6C:lI116|H389D34
+389D34:lI112|H389DFC
+389DFC:lI47|H389EB4
+389EB4:lI101|H389F64
+389F64:lI114|H38A004
+38A004:lI116|H38A094
+38A094:lI115|H38A114
+38A114:lI47|H38A184
+38A184:lI108|H38A1F4
+38A1F4:lI105|H38A25C
+38A25C:lI98|H38A2C4
+38A2C4:lI47|H38A32C
+38A32C:lI99|H38A394
+38A394:lI111|H38A3FC
+38A3FC:lI109|H38A454
+38A454:lI112|H38A4A4
+38A4A4:lI105|H38A4F4
+38A4F4:lI108|H38A53C
+38A53C:lI101|H38A584
+38A584:lI114|H38A5CC
+38A5CC:lI47|H38A614
+38A614:lI101|H38A65C
+38A65C:lI98|H38A694
+38A694:lI105|H38A6C4
+38A6C4:lI110|N
+38B0D0:lH3891DC|H38B0D8
+3891DC:lI47|H3892EC
+3892EC:lI99|H3893FC
+3893FC:lI108|H38950C
+38950C:lI101|H389614
+389614:lI97|H38970C
+38970C:lI114|H389804
+389804:lI99|H3898FC
+3898FC:lI97|H3899F4
+3899F4:lI115|H389AD4
+389AD4:lI101|H389BAC
+389BAC:lI47|H389C74
+389C74:lI111|H389D3C
+389D3C:lI116|H389E04
+389E04:lI112|H389EBC
+389EBC:lI47|H389F6C
+389F6C:lI101|H38A00C
+38A00C:lI114|H38A09C
+38A09C:lI116|H38A11C
+38A11C:lI115|H38A18C
+38A18C:lI47|H38A1FC
+38A1FC:lI108|H38A264
+38A264:lI105|H38A2CC
+38A2CC:lI98|H38A334
+38A334:lI47|H38A39C
+38A39C:lI97|H38A404
+38A404:lI115|H38A45C
+38A45C:lI110|H38A4AC
+38A4AC:lI49|H38A4FC
+38A4FC:lI47|H38A544
+38A544:lI101|H38A58C
+38A58C:lI98|H38A5D4
+38A5D4:lI105|H38A61C
+38A61C:lI110|N
+38B0D8:lH3892F4|H38B0E0
+3892F4:lI47|H389404
+389404:lI99|H389514
+389514:lI108|H38961C
+38961C:lI101|H389714
+389714:lI97|H38980C
+38980C:lI114|H389904
+389904:lI99|H3899FC
+3899FC:lI97|H389ADC
+389ADC:lI115|H389BB4
+389BB4:lI101|H389C7C
+389C7C:lI47|H389D44
+389D44:lI111|H389E0C
+389E0C:lI116|H389EC4
+389EC4:lI112|H389F74
+389F74:lI47|H38A014
+38A014:lI101|H38A0A4
+38A0A4:lI114|H38A124
+38A124:lI116|H38A194
+38A194:lI115|H38A204
+38A204:lI47|H38A26C
+38A26C:lI108|H38A2D4
+38A2D4:lI105|H38A33C
+38A33C:lI98|H38A3A4
+38A3A4:lI47|H38A40C
+38A40C:lI97|H38A464
+38A464:lI112|H38A4B4
+38A4B4:lI112|H38A504
+38A504:lI109|H38A54C
+38A54C:lI111|H38A594
+38A594:lI110|H38A5DC
+38A5DC:lI47|H38A624
+38A624:lI101|H38A664
+38A664:lI98|H38A69C
+38A69C:lI105|H38A6CC
+38A6CC:lI110|N
+38B0E0:lH38AA88|H38B0E8
+38AA88:lI47|H38AA90
+38AA90:lI104|H38AA98
+38AA98:lI111|H38AAA0
+38AAA0:lI109|H38AAA8
+38AAA8:lI101|H38AAB0
+38AAB0:lI47|H38AAB8
+38AAB8:lI115|H38AAC0
+38AAC0:lI105|H38AAC8
+38AAC8:lI114|H38AAD0
+38AAD0:lI105|H38AAD8
+38AAD8:lI47|H38AAE0
+38AAE0:lI101|H38AAE8
+38AAE8:lI114|H38AAF0
+38AAF0:lI108|H38AAF8
+38AAF8:lI97|H38AB00
+38AB00:lI110|H38AB08
+38AB08:lI103|N
+38B0E8:lH38AB1C|H38B0F0
+38AB1C:lI47|H38AB2C
+38AB2C:lI104|H38AB4C
+38AB4C:lI111|H38AB74
+38AB74:lI109|H38ABA4
+38ABA4:lI101|H38ABC4
+38ABC4:lI47|H38ABE4
+38ABE4:lI115|H38AC04
+38AC04:lI105|H38AC24
+38AC24:lI114|H38AC3C
+38AC3C:lI105|H38AC44
+38AC44:lI47|H38AC4C
+38AC4C:lI116|H38AC54
+38AC54:lI111|H38AC5C
+38AC5C:lI111|H38AC64
+38AC64:lI108|H38AC6C
+38AC6C:lI115|H38AC74
+38AC74:lI47|H38AC7C
+38AC7C:lI100|H38AC84
+38AC84:lI105|H38AC8C
+38AC8C:lI115|H38AC94
+38AC94:lI116|H38AC9C
+38AC9C:lI101|H38ACA4
+38ACA4:lI108|H38ACAC
+38ACAC:lI47|H38ACB4
+38ACB4:lI101|H38ACBC
+38ACBC:lI98|H38ACC4
+38ACC4:lI105|H38ACCC
+38ACCC:lI110|N
+38B0F0:lH38B0F8|N
+38B0F8:lI47|H38B100
+38B100:lI104|H38B108
+38B108:lI111|H38B110
+38B110:lI109|H38B118
+38B118:lI101|H38B120
+38B120:lI47|H38B128
+38B128:lI115|H38B130
+38B130:lI105|H38B138
+38B138:lI114|H38B140
+38B140:lI105|H38B148
+38B148:lI47|H38B150
+38B150:lI79|H38B158
+38B158:lI84|H38B160
+38B160:lI80|H38B168
+38B168:lI47|H38B170
+38B170:lI103|H38B178
+38B178:lI112|H38B180
+38B180:lI114|H38B188
+38B188:lI115|H38B190
+38B190:lI95|H38B198
+38B198:lI116|H38B1A0
+38B1A0:lI114|H38B1A8
+38B1A8:lI97|H38B1B0
+38B1B0:lI99|H38B1B8
+38B1B8:lI101|H38B1C0
+38B1C0:lI47|H38B1C8
+38B1C8:lI106|H38B1D0
+38B1D0:lI97|H38B1D8
+38B1D8:lI110|N
+3873BC:lI47|H3873CC
+3873CC:lI99|H3873E4
+3873E4:lI108|H3873FC
+3873FC:lI101|H38741C
+38741C:lI97|H387444
+387444:lI114|H387474
+387474:lI99|H3874AC
+3874AC:lI97|H3874EC
+3874EC:lI115|H387534
+387534:lI101|H387584
+387584:lI47|H3875DC
+3875DC:lI111|H38763C
+38763C:lI116|H3876A4
+3876A4:lI112|H387714
+387714:lI47|H38778C
+38778C:lI101|H38780C
+38780C:lI114|H387894
+387894:lI116|H387924
+387924:lI115|N
+=proc_dictionary:<0.19.0>
+H370244
+H370250
+=proc_stack:<0.19.0>
+36b45c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A11:supervisor_bridge
+y3:H36B17C
+y4:P<0.19.0>
+y5:P<0.9.0>
+36b478:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H37025C
+=proc_heap:<0.19.0>
+36B17C:t5:A5:state,A8:user_sup,P<0.21.0>,P<0.21.0>,H370238
+370238:t2:P<0.19.0>,A8:user_sup
+37025C:lAA:gen_server|H37027C
+37027C:lP<0.9.0>|H37028C
+37028C:lP<0.9.0>|H370294
+370294:lA11:supervisor_bridge|H37029C
+37029C:lH3702A4|H3702AC
+3702A4:lA8:user_sup|H3702B4
+3702B4:lN|H3702BC
+3702BC:lA4:self|N
+3702AC:lN|N
+370244:t2:AD:$initial_call,H370264
+370264:t3:A3:gen,A7:init_it,H37025C
+370250:t2:AA:$ancestors,H370274
+370274:lAA:kernel_sup|H370284
+370284:lP<0.8.0>|N
+=proc_dictionary:<0.20.0>
+H36F8A8
+=proc_stack:<0.20.0>
+36a714:SReturn addr 0x156F90 (<terminate process normally>)
+y0:N
+y1:N
+y2:H36F8C4
+y3:P<0.21.0>
+y4:P<0.22.0>
+y5:p<0.72>
+y6:p<0.72>
+=proc_heap:<0.20.0>
+36F8C4:t4:I3,I2,P<0.22.0>,H36F8F0
+36F8F0:lH36F900|H36F910
+36F900:t3:I1,P<0.21.0>,H36F920
+36F920:t0:
+36F910:lH36F924|N
+36F924:t3:I2,P<0.22.0>,H36F93C
+36F93C:t3:A5:shell,A5:start,N
+36F8A8:t2:A3:eof,A5:false
+=proc_dictionary:<0.21.0>
+H3709DC
+H3709D0
+H3709F8
+=proc_stack:<0.21.0>
+370d1c:SReturn addr 0x156F90 (<terminate process normally>)
+y0:N
+y1:A9:undefined
+y2:P<0.20.0>
+=proc_heap:<0.21.0>
+3709DC:t2:AB:line_buffer,N
+3709D0:t2:AB:kill_buffer,N
+3709F8:t2:A9:read_mode,A4:list
+=proc_dictionary:<0.22.0>
+H370D44
+H370D60
+H370D7C
+H370D38
+=proc_stack:<0.22.0>
+374a88:SReturn addr 0x2CE718 (group:get_chars_loop/7 + 80)
+y0:N
+y1:N
+y2:A8:infinity
+y3:H374A00
+y4:P<0.20.0>
+y5:H374A28
+374aa4:SReturn addr 0x2CDC18 (group:io_request/5 + 48)
+y0:H37499C
+y1:A6:io_lib
+y2:A9:get_until
+y3:H3748B8
+y4:P<0.20.0>
+y5:A5:start
+374ac0:SReturn addr 0x2CDB2C (group:server_loop/3 + 372)
+y0:P<0.49.0>
+y1:P<0.22.0>
+374acc:SReturn addr 0x156F90 (<terminate process normally>)
+y0:N
+y1:P<0.25.0>
+y2:P<0.20.0>
+=proc_heap:<0.22.0>
+374A00:t4:A4:line,H37499C,H3749A4,A4:none
+3749A4:t2:N,N
+37499C:lI50|H374994
+374994:lI62|H37498C
+37498C:lI32|N
+374A28:t4:A5:stack,H370D58,H374A24,N
+374A24:t0:
+370D58:lH370D74|N
+370D74:lI99|H370D88
+370D88:lI114|H370D90
+370D90:lI97|H370D98
+370D98:lI115|H370DA0
+370DA0:lI104|H370DA8
+370DA8:lI100|H370DB0
+370DB0:lI117|H370DB8
+370DB8:lI109|H370DC0
+370DC0:lI112|H370DC8
+370DC8:lI95|H370DD0
+370DD0:lI118|H370DD8
+370DD8:lI105|H370DE0
+370DE0:lI101|H370DE8
+370DE8:lI119|H370DF0
+370DF0:lI101|H370DF8
+370DF8:lI114|H370E00
+370E00:lI58|H370E08
+370E08:lI115|H370E10
+370E10:lI116|H370E18
+370E18:lI97|H370E20
+370E20:lI114|H370E28
+370E28:lI116|H370E30
+370E30:lI40|H370E38
+370E38:lI41|H370E40
+370E40:lI46|H370E48
+370E48:lI10|N
+3748B8:t3:A8:erl_scan,A6:tokens,H3748B0
+3748B0:lI1|N
+370D44:t2:AB:line_buffer,H370D58
+370D60:t2:A5:shell,P<0.25.0>
+370D7C:t2:AB:kill_buffer,N
+370D38:t2:A9:read_mode,A4:list
+=proc_dictionary:<0.23.0>
+H376464
+H376448
+=proc_stack:<0.23.0>
+376754:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AD:kernel_config
+y3:N
+y4:P<0.23.0>
+y5:P<0.9.0>
+376770:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H376418
+=proc_heap:<0.23.0>
+376418:lAA:gen_server|H376410
+376410:lP<0.9.0>|H376408
+376408:lP<0.9.0>|H376400
+376400:lAD:kernel_config|H3763F8
+3763F8:lN|H3763F0
+3763F0:lN|N
+376464:t2:AD:$initial_call,H376454
+376454:t3:A3:gen,A7:init_it,H376418
+376448:t2:AA:$ancestors,H376440
+376440:lAA:kernel_sup|H376420
+376420:lP<0.8.0>|N
+=proc_dictionary:<0.24.0>
+H3705E0
+H3705EC
+=proc_stack:<0.24.0>
+36f38c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AA:supervisor
+y3:H36F018
+y4:AF:kernel_safe_sup
+y5:P<0.9.0>
+36f3a8:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H37063C
+=proc_heap:<0.24.0>
+36F018:tA:A5:state,H370644,AB:one_for_one,H36F044,N,I4,I3600,N,A6:kernel,A4:safe
+36F044:lH36F04C|N
+36F04C:t8:A5:child,P<0.31.0>,A17:inet_gethost_native_sup,H370650,A9:temporary,I1000,A6:worker,H370660
+370660:lA13:inet_gethost_native|N
+370650:t3:A13:inet_gethost_native,AA:start_link,N
+370644:t2:A5:local,AF:kernel_safe_sup
+37063C:lAA:gen_server|H3706AC
+3706AC:lP<0.9.0>|H3706BC
+3706BC:lP<0.9.0>|H3706C4
+3706C4:lH3706CC|H3706D8
+3706CC:t2:A5:local,AF:kernel_safe_sup
+3706D8:lAA:supervisor|H3706E0
+3706E0:lH3706E8|H3706F8
+3706E8:t3:H370644,A6:kernel,A4:safe
+3706F8:lN|N
+3705E0:t2:AD:$initial_call,H370668
+370668:t3:A3:gen,A7:init_it,H37063C
+3705EC:t2:AA:$ancestors,H370678
+370678:lAA:kernel_sup|H3706B4
+3706B4:lP<0.8.0>|N
+=proc_dictionary:<0.25.0>
+H36E304
+H36E31C
+=proc_stack:<0.25.0>
+36e610:SReturn addr 0x2E06FC (shell:server_loop/6 + 140)
+y0:N
+y1:N
+y2:P<0.27.0>
+y3:P<0.49.0>
+36e624:SReturn addr 0x156F90 (<terminate process normally>)
+y0:N
+y1:N
+y2:I2
+y3:I1
+y4:N
+y5:N
+y6:N
+y7:I20
+y8:I20
+=proc_heap:<0.25.0>
+36E304:t2:H36E2F8,H36E2A8
+36E2A8:lH36E2B0|N
+36E2B0:t4:A4:call,I1,H36E2C4,N
+36E2C4:t4:A6:remote,I1,H36E2D8,H36E2E8
+36E2E8:t3:A4:atom,I1,A5:start
+36E2D8:t3:A4:atom,I1,A10:crashdump_viewer
+36E2F8:t2:A7:command,I1
+36E31C:t2:H36E310,A2:ok
+36E310:t2:A6:result,I1
+=proc_stack:<0.27.0>
+3bda3c:SReturn addr 0x156F90 (<terminate process normally>)
+y0:N
+y1:N
+y2:P<0.25.0>
+=proc_heap:<0.27.0>
+=proc_dictionary:<0.31.0>
+H36DA24
+H36DA08
+=proc_stack:<0.31.0>
+36dcd4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A11:supervisor_bridge
+y3:H36DB68
+y4:A17:inet_gethost_native_sup
+y5:P<0.24.0>
+36dcf0:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H36D9D0
+=proc_heap:<0.31.0>
+36DB68:t5:A5:state,A13:inet_gethost_native,P<0.32.0>,P<0.32.0>,H36D994
+36D994:t2:A5:local,A17:inet_gethost_native_sup
+36D9D0:lAA:gen_server|H36D9C8
+36D9C8:lP<0.24.0>|H36D9C0
+36D9C0:lP<0.24.0>|H36D970
+36D970:lH36D980|H36D9B8
+36D980:t2:A5:local,A17:inet_gethost_native_sup
+36D9B8:lA11:supervisor_bridge|H36D978
+36D978:lH36D9A8|H36D9B0
+36D9A8:lA13:inet_gethost_native|H36D9A0
+36D9A0:lN|H36D98C
+36D98C:lH36D994|N
+36D9B0:lN|N
+36DA24:t2:AD:$initial_call,H36DA14
+36DA14:t3:A3:gen,A7:init_it,H36D9D0
+36DA08:t2:AA:$ancestors,H36DA00
+36DA00:lAF:kernel_safe_sup|H36D9E0
+36D9E0:lAA:kernel_sup|H36D9D8
+36D9D8:lP<0.8.0>|N
+=proc_dictionary:<0.32.0>
+H36CFD4
+H36D0BC
+=proc_stack:<0.32.0>
+36d12c:SReturn addr 0x156F90 (<terminate process normally>)
+y0:H36CF18
+=proc_heap:<0.32.0>
+36CF18:t8:A5:state,p<0.105>,I8000,I11,I12,P<0.31.0>,I4,H36CEF0
+36CEF0:t9:AA:statistics,I0,I0,I0,I0,I0,I0,I0,I0
+36CFD4:t2:A3:rid,I1
+36D0BC:t2:AC:num_requests,I0
+=proc_dictionary:<0.33.0>
+H3905C4
+H3905D0
+=proc_stack:<0.33.0>
+3ceee4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A7:webtool
+y3:H3C8570
+y4:A8:web_tool
+y5:P<0.33.0>
+3cef00:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H3905FC
+=proc_heap:<0.33.0>
+3C8570:t6:A5:state,H3905EC,I13,P<0.41.0>,H3905F4,H3C85D4
+3C85D4:lA10:crashdump_viewer|N
+3905F4:lH390650|H39065C
+390650:t2:A4:port,I8888
+39065C:lH3906C8|H3906D4
+3906C8:t2:AC:bind_address,H390760
+390760:t4:I127,I0,I0,I1
+3906D4:lH390774|H390780
+390774:t2:AB:server_name,H39082C
+39082C:lI108|H390908
+390908:lI111|H3909DC
+3909DC:lI99|H390AC0
+390AC0:lI97|H390B98
+390B98:lI108|H390C78
+390C78:lI104|H390D58
+390D58:lI111|H390E2C
+390E2C:lI115|H390F10
+390F10:lI116|N
+390780:lH390834|H390840
+390834:t2:AE:max_header_siz,I1024
+390840:lH390910|H39091C
+390910:t2:A11:max_header_action,A8:reply414
+39091C:lH3909E4|H3909F0
+3909E4:t2:A8:com_type,A7:ip_comm
+3909F0:lH390AC8|H390AD4
+390AC8:t2:A7:modules,H390BA0
+390BA0:lA9:mod_alias|H390C80
+390C80:lA8:mod_auth|H390D60
+390D60:lA7:mod_esi|H390E34
+390E34:lAB:mod_actions|H390F18
+390F18:lA7:mod_cgi|H390FF4
+390FF4:lAB:mod_include|H3910D8
+3910D8:lA7:mod_dir|H3911B4
+3911B4:lA7:mod_get|H3912A0
+3912A0:lA8:mod_head|H39139C
+39139C:lA7:mod_log|H3914A0
+3914A0:lAC:mod_disk_log|N
+390AD4:lH390BA8|H390BB4
+390BA8:t2:AF:directory_index,H390C88
+390C88:lH390D68|N
+390D68:lI105|H390E3C
+390E3C:lI110|H390F20
+390F20:lI100|H390FFC
+390FFC:lI101|H3910E0
+3910E0:lI120|H3911BC
+3911BC:lI46|H3912A8
+3912A8:lI104|H3913A4
+3913A4:lI116|H3914A8
+3914A8:lI109|H39159C
+39159C:lI108|N
+390BB4:lH390C90|N
+390C90:t2:AC:default_type,H390D70
+390D70:lI116|H390E44
+390E44:lI101|H390F28
+390F28:lI120|H391004
+391004:lI116|H3910E8
+3910E8:lI47|H3911C4
+3911C4:lI112|H3912B0
+3912B0:lI108|H3913AC
+3913AC:lI97|H3914B0
+3914B0:lI105|H3915A4
+3915A4:lI110|N
+3905EC:lI47|H390648
+390648:lI99|H3906C0
+3906C0:lI108|H390758
+390758:lI101|H390824
+390824:lI97|H390900
+390900:lI114|H3909D4
+3909D4:lI99|H390AB8
+390AB8:lI97|H390B90
+390B90:lI115|H390C70
+390C70:lI101|H390D50
+390D50:lI47|H390E24
+390E24:lI111|H390F08
+390F08:lI116|H390FEC
+390FEC:lI112|H3910D0
+3910D0:lI47|H3911AC
+3911AC:lI101|H391298
+391298:lI114|H391394
+391394:lI116|H391498
+391498:lI115|H391594
+391594:lI47|H391680
+391680:lI108|H39175C
+39175C:lI105|H391840
+391840:lI98|H391924
+391924:lI47|H3919F8
+3919F8:lI119|H391AC4
+391AC4:lI101|H391B90
+391B90:lI98|H391C54
+391C54:lI116|H391D18
+391D18:lI111|H391DD4
+391DD4:lI111|H391E90
+391E90:lI108|H391F5C
+391F5C:lI47|H392030
+392030:lI112|H3920EC
+3920EC:lI114|H3921A8
+3921A8:lI105|H392264
+392264:lI118|N
+3905FC:lAA:gen_server|H390664
+390664:lP<0.27.0>|H3906DC
+3906DC:lA4:self|H390788
+390788:lH390848|H390854
+390848:t2:A5:local,A8:web_tool
+390854:lA7:webtool|H390924
+390924:lH3909F8|H390A04
+3909F8:t2:H3905EC,H3905F4
+390A04:lN|N
+3905C4:t2:AD:$initial_call,H390614
+390614:t3:A3:gen,A7:init_it,H3905FC
+3905D0:t2:AA:$ancestors,H390624
+390624:lP<0.27.0>|N
+=proc_dictionary:<0.41.0>
+H36DF0C
+H36DF18
+=proc_stack:<0.41.0>
+36eda4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AA:supervisor
+y3:H36EA3C
+y4:A6:websup
+y5:P<0.33.0>
+36edc0:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H36DF24
+=proc_heap:<0.41.0>
+36EA3C:tA:A5:state,H36DF2C,AB:one_for_one,H36EA68,N,I100,I10,N,AB:webtool_sup,N
+36EA68:lH36EA70|N
+36EA70:t8:A5:child,P<0.48.0>,H36DF38,H36DF44,A9:permanent,I100,A6:worker,H36DF54
+36DF54:lA10:crashdump_viewer|N
+36DF44:t3:A10:crashdump_viewer,AA:start_link,N
+36DF38:t2:A5:local,A17:crashdump_viewer_server
+36DF2C:t2:A5:local,A6:websup
+36DF24:lAA:gen_server|H36DF84
+36DF84:lP<0.33.0>|H36DF94
+36DF94:lP<0.33.0>|H36DF9C
+36DF9C:lH36DFA4|H36DFB0
+36DFA4:t2:A5:local,A6:websup
+36DFB0:lAA:supervisor|H36DFB8
+36DFB8:lH36DFC0|H36DFD0
+36DFC0:t3:H36DF2C,AB:webtool_sup,N
+36DFD0:lN|N
+36DF0C:t2:AD:$initial_call,H36DF6C
+36DF6C:t3:A3:gen,A7:init_it,H36DF24
+36DF18:t2:AA:$ancestors,H36DF7C
+36DF7C:lA8:web_tool|H36DF8C
+36DF8C:lP<0.27.0>|N
+=proc_dictionary:<0.43.0>
+H39D940
+H39D94C
+=proc_stack:<0.43.0>
+3a42ac:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AA:supervisor
+y3:H3A3E34
+y4:A1A:httpd_sup__127_0_0_1__8888
+y5:P<0.33.0>
+3a42c8:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H39D9CC
+=proc_heap:<0.43.0>
+3A3E34:tA:A5:state,H39D960,AB:one_for_one,H3A3E20,N,I0,I1,N,A9:httpd_sup,H39DA88
+39DA88:lA9:undefined|H39DB18
+39DB18:lH39DB50|H39DB58
+39DB50:lH39DB88|H39DB94
+39DB88:t2:AB:server_root,H39DBD0
+39DBD0:lI47|H39DC0C
+39DC0C:lI99|H39DC50
+39DC50:lI108|H39DC84
+39DC84:lI101|H39DCC4
+39DCC4:lI97|H39DD28
+39DD28:lI114|H39DD90
+39DD90:lI99|H39DE00
+39DE00:lI97|H39DE78
+39DE78:lI115|H39DF00
+39DF00:lI101|H39DF90
+39DF90:lI47|H39E038
+39E038:lI111|H39E0E8
+39E0E8:lI116|H39E1AC
+39E1AC:lI112|H39E288
+39E288:lI47|H39E37C
+39E37C:lI101|H39E478
+39E478:lI114|H39E580
+39E580:lI116|H39E69C
+39E69C:lI115|H39E7B0
+39E7B0:lI47|H39E8C4
+39E8C4:lI108|H39E9D8
+39E9D8:lI105|H39EACC
+39EACC:lI98|H39EBC0
+39EBC0:lI47|H39ECB4
+39ECB4:lI119|H39EDA8
+39EDA8:lI101|H39EE7C
+39EE7C:lI98|H39EF50
+39EF50:lI116|H39F02C
+39F02C:lI111|H39F110
+39F110:lI111|H39F1E4
+39F1E4:lI108|H39F2B0
+39F2B0:lI47|H39F36C
+39F36C:lI112|H39F430
+39F430:lI114|H39F4FC
+39F4FC:lI105|H39F5C0
+39F5C0:lI118|H39F694
+39F694:lI47|H39F768
+39F768:lI114|H39F83C
+39F83C:lI111|H39F920
+39F920:lI111|H39F9FC
+39F9FC:lI116|N
+39DB94:lH39DBD8|H39DBE4
+39DBD8:t2:AD:document_root,H39DC14
+39DC14:lI47|H39DC58
+39DC58:lI99|H39DC8C
+39DC8C:lI108|H39DCCC
+39DCCC:lI101|H39DD30
+39DD30:lI97|H39DD98
+39DD98:lI114|H39DE08
+39DE08:lI99|H39DE80
+39DE80:lI97|H39DF08
+39DF08:lI115|H39DF98
+39DF98:lI101|H39E040
+39E040:lI47|H39E0F0
+39E0F0:lI111|H39E1B4
+39E1B4:lI116|H39E290
+39E290:lI112|H39E384
+39E384:lI47|H39E480
+39E480:lI101|H39E588
+39E588:lI114|H39E6A4
+39E6A4:lI116|H39E7B8
+39E7B8:lI115|H39E8CC
+39E8CC:lI47|H39E9E0
+39E9E0:lI108|H39EAD4
+39EAD4:lI105|H39EBC8
+39EBC8:lI98|H39ECBC
+39ECBC:lI47|H39EDB0
+39EDB0:lI119|H39EE84
+39EE84:lI101|H39EF58
+39EF58:lI98|H39F034
+39F034:lI116|H39F118
+39F118:lI111|H39F1EC
+39F1EC:lI111|H39F2B8
+39F2B8:lI108|H39F374
+39F374:lI47|H39F438
+39F438:lI112|H39F504
+39F504:lI114|H39F5C8
+39F5C8:lI105|H39F69C
+39F69C:lI118|H39F770
+39F770:lI47|H39F844
+39F844:lI114|H39F928
+39F928:lI111|H39FA04
+39FA04:lI111|H39FAD8
+39FAD8:lI116|H39FBB4
+39FBB4:lI47|H39FC80
+39FC80:lI100|H39FD44
+39FD44:lI111|H39FE10
+39FE10:lI99|N
+39DBE4:lH39DC1C|H39DC28
+39DC1C:t2:AA:mime_types,H39DC60
+39DC60:lH39DC94|H39DCA0
+39DC94:t2:H39DCD4,H39DCDC
+39DCDC:lI120|H39DD40
+39DD40:lI45|H39DDA8
+39DDA8:lI119|H39DE10
+39DE10:lI111|H39DE88
+39DE88:lI114|H39DF10
+39DF10:lI108|H39DFA0
+39DFA0:lI100|H39E048
+39E048:lI47|H39E0F8
+39E0F8:lI120|H39E1BC
+39E1BC:lI45|H39E298
+39E298:lI118|H39E38C
+39E38C:lI114|H39E488
+39E488:lI109|H39E590
+39E590:lI108|N
+39DCD4:lI119|H39DD38
+39DD38:lI114|H39DDA0
+39DDA0:lI108|N
+39DCA0:lH39DCE4|H39DCF0
+39DCE4:t2:H39DD48,H39DD50
+39DD50:lI120|H39DDB8
+39DDB8:lI45|H39DE20
+39DE20:lI119|H39DE98
+39DE98:lI111|H39DF18
+39DF18:lI114|H39DFA8
+39DFA8:lI108|H39E050
+39E050:lI100|H39E100
+39E100:lI47|H39E1C4
+39E1C4:lI120|H39E2A0
+39E2A0:lI45|H39E394
+39E394:lI118|H39E490
+39E490:lI114|H39E598
+39E598:lI109|H39E6AC
+39E6AC:lI108|N
+39DD48:lI118|H39DDB0
+39DDB0:lI114|H39DE18
+39DE18:lI109|H39DE90
+39DE90:lI108|N
+39DCF0:lH39DD58|H39DD64
+39DD58:t2:H39DDC0,H39DDC8
+39DDC8:lI120|H39DE30
+39DE30:lI45|H39DEA8
+39DEA8:lI99|H39DF20
+39DF20:lI111|H39DFB0
+39DFB0:lI110|H39E058
+39E058:lI102|H39E108
+39E108:lI101|H39E1CC
+39E1CC:lI114|H39E2A8
+39E2A8:lI101|H39E39C
+39E39C:lI110|H39E498
+39E498:lI99|H39E5A0
+39E5A0:lI101|H39E6B4
+39E6B4:lI47|H39E7C0
+39E7C0:lI120|H39E8D4
+39E8D4:lI45|H39E9E8
+39E9E8:lI99|H39EADC
+39EADC:lI111|H39EBD0
+39EBD0:lI111|H39ECC4
+39ECC4:lI108|H39EDB8
+39EDB8:lI116|H39EE8C
+39EE8C:lI97|H39EF60
+39EF60:lI108|H39F03C
+39F03C:lI107|N
+39DDC0:lI105|H39DE28
+39DE28:lI99|H39DEA0
+39DEA0:lI101|N
+39DD64:lH39DDD0|H39DDDC
+39DDD0:t2:H39DE38,H39DE40
+39DE40:lI118|H39DEB8
+39DEB8:lI105|H39DF30
+39DF30:lI100|H39DFC0
+39DFC0:lI101|H39E068
+39E068:lI111|H39E110
+39E110:lI47|H39E1D4
+39E1D4:lI120|H39E2B0
+39E2B0:lI45|H39E3A4
+39E3A4:lI115|H39E4A0
+39E4A0:lI103|H39E5A8
+39E5A8:lI105|H39E6BC
+39E6BC:lI45|H39E7C8
+39E7C8:lI109|H39E8DC
+39E8DC:lI111|H39E9F0
+39E9F0:lI118|H39EAE4
+39EAE4:lI105|H39EBD8
+39EBD8:lI101|N
+39DE38:lI109|H39DEB0
+39DEB0:lI111|H39DF28
+39DF28:lI118|H39DFB8
+39DFB8:lI105|H39E060
+39E060:lI101|N
+39DDDC:lH39DE48|H39DE54
+39DE48:t2:H39DEC0,H39DEC8
+39DEC8:lI118|H39DF40
+39DF40:lI105|H39DFD0
+39DFD0:lI100|H39E070
+39E070:lI101|H39E118
+39E118:lI111|H39E1DC
+39E1DC:lI47|H39E2B8
+39E2B8:lI120|H39E3AC
+39E3AC:lI45|H39E4A8
+39E4A8:lI109|H39E5B0
+39E5B0:lI115|H39E6C4
+39E6C4:lI118|H39E7D0
+39E7D0:lI105|H39E8E4
+39E8E4:lI100|H39E9F8
+39E9F8:lI101|H39EAEC
+39EAEC:lI111|N
+39DEC0:lI97|H39DF38
+39DF38:lI118|H39DFC8
+39DFC8:lI105|N
+39DE54:lH39DED0|H39DEDC
+39DED0:t2:H39DF48,H39DF50
+39DF50:lI118|H39DFE0
+39DFE0:lI105|H39E078
+39E078:lI100|H39E120
+39E120:lI101|H39E1E4
+39E1E4:lI111|H39E2C0
+39E2C0:lI47|H39E3B4
+39E3B4:lI113|H39E4B0
+39E4B0:lI117|H39E5B8
+39E5B8:lI105|H39E6CC
+39E6CC:lI99|H39E7D8
+39E7D8:lI107|H39E8EC
+39E8EC:lI116|H39EA00
+39EA00:lI105|H39EAF4
+39EAF4:lI109|H39EBE0
+39EBE0:lI101|N
+39DF48:lI113|H39DFD8
+39DFD8:lI116|N
+39DEDC:lH39DF58|H39DF64
+39DF58:t2:H39DFE8,H39DFF0
+39DFF0:lI118|H39E088
+39E088:lI105|H39E130
+39E130:lI100|H39E1EC
+39E1EC:lI101|H39E2C8
+39E2C8:lI111|H39E3BC
+39E3BC:lI47|H39E4B8
+39E4B8:lI113|H39E5C0
+39E5C0:lI117|H39E6D4
+39E6D4:lI105|H39E7E0
+39E7E0:lI99|H39E8F4
+39E8F4:lI107|H39EA08
+39EA08:lI116|H39EAFC
+39EAFC:lI105|H39EBE8
+39EBE8:lI109|H39ECCC
+39ECCC:lI101|N
+39DFE8:lI109|H39E080
+39E080:lI111|H39E128
+39E128:lI118|N
+39DF64:lH39DFF8|H39E004
+39DFF8:t2:H39E090,H39E098
+39E098:lI118|H39E140
+39E140:lI105|H39E1FC
+39E1FC:lI100|H39E2D8
+39E2D8:lI101|H39E3C4
+39E3C4:lI111|H39E4C0
+39E4C0:lI47|H39E5C8
+39E5C8:lI109|H39E6DC
+39E6DC:lI112|H39E7E8
+39E7E8:lI101|H39E8FC
+39E8FC:lI103|N
+39E090:lI109|H39E138
+39E138:lI112|H39E1F4
+39E1F4:lI101|H39E2D0
+39E2D0:lI103|N
+39E004:lH39E0A0|H39E0AC
+39E0A0:t2:H39E148,H39E150
+39E150:lI118|H39E20C
+39E20C:lI105|H39E2E8
+39E2E8:lI100|H39E3CC
+39E3CC:lI101|H39E4C8
+39E4C8:lI111|H39E5D0
+39E5D0:lI47|H39E6E4
+39E6E4:lI109|H39E7F0
+39E7F0:lI112|H39E904
+39E904:lI101|H39EA10
+39EA10:lI103|N
+39E148:lI109|H39E204
+39E204:lI112|H39E2E0
+39E2E0:lI103|N
+39E0AC:lH39E158|H39E164
+39E158:t2:H39E214,H39E21C
+39E21C:lI118|H39E2F8
+39E2F8:lI105|H39E3DC
+39E3DC:lI100|H39E4D0
+39E4D0:lI101|H39E5D8
+39E5D8:lI111|H39E6EC
+39E6EC:lI47|H39E7F8
+39E7F8:lI109|H39E90C
+39E90C:lI112|H39EA18
+39EA18:lI101|H39EB04
+39EB04:lI103|N
+39E214:lI109|H39E2F0
+39E2F0:lI112|H39E3D4
+39E3D4:lI101|N
+39E164:lH39E224|H39E230
+39E224:t2:H39E300,H39E308
+39E308:lI116|H39E3EC
+39E3EC:lI101|H39E4E0
+39E4E0:lI120|H39E5E8
+39E5E8:lI116|H39E6F4
+39E6F4:lI47|H39E800
+39E800:lI120|H39E914
+39E914:lI45|H39EA20
+39EA20:lI115|H39EB0C
+39EB0C:lI103|H39EBF0
+39EBF0:lI109|H39ECD4
+39ECD4:lI108|N
+39E300:lI115|H39E3E4
+39E3E4:lI103|H39E4D8
+39E4D8:lI109|H39E5E0
+39E5E0:lI108|N
+39E230:lH39E310|H39E31C
+39E310:t2:H39E3F4,H39E3FC
+39E3FC:lI116|H39E4F0
+39E4F0:lI101|H39E5F8
+39E5F8:lI120|H39E6FC
+39E6FC:lI116|H39E808
+39E808:lI47|H39E91C
+39E91C:lI120|H39EA28
+39EA28:lI45|H39EB14
+39EB14:lI115|H39EBF8
+39EBF8:lI103|H39ECDC
+39ECDC:lI109|H39EDC0
+39EDC0:lI108|N
+39E3F4:lI115|H39E4E8
+39E4E8:lI103|H39E5F0
+39E5F0:lI109|N
+39E31C:lH39E404|H39E410
+39E404:t2:H39E4F8,H39E500
+39E500:lI116|H39E608
+39E608:lI101|H39E70C
+39E70C:lI120|H39E810
+39E810:lI116|H39E924
+39E924:lI47|H39EA30
+39EA30:lI120|H39EB1C
+39EB1C:lI45|H39EC00
+39EC00:lI115|H39ECE4
+39ECE4:lI101|H39EDC8
+39EDC8:lI116|H39EE94
+39EE94:lI101|H39EF68
+39EF68:lI120|H39F044
+39F044:lI116|N
+39E4F8:lI101|H39E600
+39E600:lI116|H39E704
+39E704:lI120|N
+39E410:lH39E508|H39E514
+39E508:t2:H39E610,H39E618
+39E618:lI116|H39E71C
+39E71C:lI101|H39E820
+39E820:lI120|H39E92C
+39E92C:lI116|H39EA38
+39EA38:lI47|H39EB24
+39EB24:lI116|H39EC08
+39EC08:lI97|H39ECEC
+39ECEC:lI98|H39EDD0
+39EDD0:lI45|H39EE9C
+39EE9C:lI115|H39EF70
+39EF70:lI101|H39F04C
+39F04C:lI112|H39F120
+39F120:lI97|H39F1F4
+39F1F4:lI114|H39F2C0
+39F2C0:lI97|H39F37C
+39F37C:lI116|H39F440
+39F440:lI101|H39F50C
+39F50C:lI100|H39F5D0
+39F5D0:lI45|H39F6A4
+39F6A4:lI118|H39F778
+39F778:lI97|H39F84C
+39F84C:lI108|H39F930
+39F930:lI117|H39FA0C
+39FA0C:lI101|H39FAE0
+39FAE0:lI115|N
+39E610:lI116|H39E714
+39E714:lI115|H39E818
+39E818:lI118|N
+39E514:lH39E620|H39E62C
+39E620:t2:H39E724,H39E72C
+39E72C:lI116|H39E830
+39E830:lI101|H39E93C
+39E93C:lI120|H39EA40
+39EA40:lI116|H39EB2C
+39EB2C:lI47|H39EC10
+39EC10:lI114|H39ECF4
+39ECF4:lI105|H39EDD8
+39EDD8:lI99|H39EEA4
+39EEA4:lI104|H39EF78
+39EF78:lI116|H39F054
+39F054:lI101|H39F128
+39F128:lI120|H39F1FC
+39F1FC:lI116|N
+39E724:lI114|H39E828
+39E828:lI116|H39E934
+39E934:lI120|N
+39E62C:lH39E734|H39E740
+39E734:t2:H39E838,H39E840
+39E840:lI116|H39E94C
+39E94C:lI101|H39EA50
+39EA50:lI120|H39EB34
+39EB34:lI116|H39EC18
+39EC18:lI47|H39ECFC
+39ECFC:lI112|H39EDE0
+39EDE0:lI108|H39EEAC
+39EEAC:lI97|H39EF80
+39EF80:lI105|H39F05C
+39F05C:lI110|N
+39E838:lI116|H39E944
+39E944:lI120|H39EA48
+39EA48:lI116|N
+39E740:lH39E848|H39E854
+39E848:t2:H39E954,H39E95C
+39E95C:lI116|H39EA60
+39EA60:lI101|H39EB44
+39EB44:lI120|H39EC28
+39EC28:lI116|H39ED0C
+39ED0C:lI47|H39EDE8
+39EDE8:lI120|H39EEB4
+39EEB4:lI45|H39EF88
+39EF88:lI115|H39F064
+39F064:lI101|H39F130
+39F130:lI114|H39F204
+39F204:lI118|H39F2C8
+39F2C8:lI101|H39F384
+39F384:lI114|H39F448
+39F448:lI45|H39F514
+39F514:lI112|H39F5D8
+39F5D8:lI97|H39F6AC
+39F6AC:lI114|H39F780
+39F780:lI115|H39F854
+39F854:lI101|H39F938
+39F938:lI100|H39FA14
+39FA14:lI45|H39FAE8
+39FAE8:lI104|H39FBBC
+39FBBC:lI116|H39FC88
+39FC88:lI109|H39FD4C
+39FD4C:lI108|N
+39E954:lI115|H39EA58
+39EA58:lI104|H39EB3C
+39EB3C:lI116|H39EC20
+39EC20:lI109|H39ED04
+39ED04:lI108|N
+39E854:lH39E964|H39E970
+39E964:t2:H39EA68,H39EA70
+39EA70:lI116|H39EB54
+39EB54:lI101|H39EC38
+39EC38:lI120|H39ED1C
+39ED1C:lI116|H39EDF0
+39EDF0:lI47|H39EEBC
+39EEBC:lI104|H39EF90
+39EF90:lI116|H39F06C
+39F06C:lI109|H39F138
+39F138:lI108|N
+39EA68:lI104|H39EB4C
+39EB4C:lI116|H39EC30
+39EC30:lI109|H39ED14
+39ED14:lI108|N
+39E970:lH39EA78|H39EA84
+39EA78:t2:H39EB5C,H39EB64
+39EB64:lI116|H39EC48
+39EC48:lI101|H39ED2C
+39ED2C:lI120|H39EDF8
+39EDF8:lI116|H39EEC4
+39EEC4:lI47|H39EF98
+39EF98:lI104|H39F074
+39F074:lI116|H39F140
+39F140:lI109|H39F20C
+39F20C:lI108|N
+39EB5C:lI104|H39EC40
+39EC40:lI116|H39ED24
+39ED24:lI109|N
+39EA84:lH39EB6C|H39EB78
+39EB6C:t2:H39EC50,H39EC58
+39EC58:lI105|H39ED3C
+39ED3C:lI109|H39EE08
+39EE08:lI97|H39EECC
+39EECC:lI103|H39EFA0
+39EFA0:lI101|H39F07C
+39F07C:lI47|H39F148
+39F148:lI120|H39F214
+39F214:lI45|H39F2D0
+39F2D0:lI120|H39F38C
+39F38C:lI119|H39F450
+39F450:lI105|H39F51C
+39F51C:lI110|H39F5E0
+39F5E0:lI100|H39F6B4
+39F6B4:lI111|H39F788
+39F788:lI119|H39F85C
+39F85C:lI100|H39F940
+39F940:lI117|H39FA1C
+39FA1C:lI109|H39FAF0
+39FAF0:lI112|N
+39EC50:lI120|H39ED34
+39ED34:lI119|H39EE00
+39EE00:lI100|N
+39EB78:lH39EC60|H39EC6C
+39EC60:t2:H39ED44,H39ED4C
+39ED4C:lI105|H39EE18
+39EE18:lI109|H39EEDC
+39EEDC:lI97|H39EFA8
+39EFA8:lI103|H39F084
+39F084:lI101|H39F150
+39F150:lI47|H39F21C
+39F21C:lI120|H39F2D8
+39F2D8:lI45|H39F394
+39F394:lI120|H39F458
+39F458:lI112|H39F524
+39F524:lI105|H39F5E8
+39F5E8:lI120|H39F6BC
+39F6BC:lI109|H39F790
+39F790:lI97|H39F864
+39F864:lI112|N
+39ED44:lI120|H39EE10
+39EE10:lI112|H39EED4
+39EED4:lI109|N
+39EC6C:lH39ED54|H39ED60
+39ED54:t2:H39EE20,H39EE28
+39EE28:lI105|H39EEEC
+39EEEC:lI109|H39EFB8
+39EFB8:lI97|H39F08C
+39F08C:lI103|H39F158
+39F158:lI101|H39F224
+39F224:lI47|H39F2E0
+39F2E0:lI120|H39F39C
+39F39C:lI45|H39F460
+39F460:lI120|H39F52C
+39F52C:lI98|H39F5F0
+39F5F0:lI105|H39F6C4
+39F6C4:lI116|H39F798
+39F798:lI109|H39F86C
+39F86C:lI97|H39F948
+39F948:lI112|N
+39EE20:lI120|H39EEE4
+39EEE4:lI98|H39EFB0
+39EFB0:lI109|N
+39ED60:lH39EE30|H39EE3C
+39EE30:t2:H39EEF4,H39EEFC
+39EEFC:lI105|H39EFC8
+39EFC8:lI109|H39F09C
+39F09C:lI97|H39F160
+39F160:lI103|H39F22C
+39F22C:lI101|H39F2E8
+39F2E8:lI47|H39F3A4
+39F3A4:lI120|H39F468
+39F468:lI45|H39F534
+39F534:lI114|H39F5F8
+39F5F8:lI103|H39F6CC
+39F6CC:lI98|N
+39EEF4:lI114|H39EFC0
+39EFC0:lI103|H39F094
+39F094:lI98|N
+39EE3C:lH39EF04|H39EF10
+39EF04:t2:H39EFD0,H39EFD8
+39EFD8:lI105|H39F0AC
+39F0AC:lI109|H39F170
+39F170:lI97|H39F234
+39F234:lI103|H39F2F0
+39F2F0:lI101|H39F3AC
+39F3AC:lI47|H39F470
+39F470:lI120|H39F53C
+39F53C:lI45|H39F600
+39F600:lI112|H39F6D4
+39F6D4:lI111|H39F7A0
+39F7A0:lI114|H39F874
+39F874:lI116|H39F950
+39F950:lI97|H39FA24
+39FA24:lI98|H39FAF8
+39FAF8:lI108|H39FBC4
+39FBC4:lI101|H39FC90
+39FC90:lI45|H39FD54
+39FD54:lI112|H39FE18
+39FE18:lI105|H39FECC
+39FECC:lI120|H39FF88
+39FF88:lI109|H3A003C
+3A003C:lI97|H3A00E8
+3A00E8:lI112|N
+39EFD0:lI112|H39F0A4
+39F0A4:lI112|H39F168
+39F168:lI109|N
+39EF10:lH39EFE0|H39EFEC
+39EFE0:t2:H39F0B4,H39F0BC
+39F0BC:lI105|H39F180
+39F180:lI109|H39F244
+39F244:lI97|H39F2F8
+39F2F8:lI103|H39F3B4
+39F3B4:lI101|H39F478
+39F478:lI47|H39F544
+39F544:lI120|H39F608
+39F608:lI45|H39F6DC
+39F6DC:lI112|H39F7A8
+39F7A8:lI111|H39F87C
+39F87C:lI114|H39F958
+39F958:lI116|H39FA2C
+39FA2C:lI97|H39FB00
+39FB00:lI98|H39FBCC
+39FBCC:lI108|H39FC98
+39FC98:lI101|H39FD5C
+39FD5C:lI45|H39FE20
+39FE20:lI103|H39FED4
+39FED4:lI114|H39FF90
+39FF90:lI97|H3A0044
+3A0044:lI121|H3A00F0
+3A00F0:lI109|H3A0194
+3A0194:lI97|H3A0248
+3A0248:lI112|N
+39F0B4:lI112|H39F178
+39F178:lI103|H39F23C
+39F23C:lI109|N
+39EFEC:lH39F0C4|H39F0D0
+39F0C4:t2:H39F188,H39F190
+39F190:lI105|H39F254
+39F254:lI109|H39F308
+39F308:lI97|H39F3BC
+39F3BC:lI103|H39F480
+39F480:lI101|H39F54C
+39F54C:lI47|H39F610
+39F610:lI120|H39F6E4
+39F6E4:lI45|H39F7B0
+39F7B0:lI112|H39F884
+39F884:lI111|H39F960
+39F960:lI114|H39FA34
+39FA34:lI116|H39FB08
+39FB08:lI97|H39FBD4
+39FBD4:lI98|H39FCA0
+39FCA0:lI108|H39FD64
+39FD64:lI101|H39FE28
+39FE28:lI45|H39FEDC
+39FEDC:lI98|H39FF98
+39FF98:lI105|H3A004C
+3A004C:lI116|H3A00F8
+3A00F8:lI109|H3A019C
+3A019C:lI97|H3A0250
+3A0250:lI112|N
+39F188:lI112|H39F24C
+39F24C:lI98|H39F300
+39F300:lI109|N
+39F0D0:lH39F198|H39F1A4
+39F198:t2:H39F25C,H39F264
+39F264:lI105|H39F318
+39F318:lI109|H39F3CC
+39F3CC:lI97|H39F488
+39F488:lI103|H39F554
+39F554:lI101|H39F618
+39F618:lI47|H39F6EC
+39F6EC:lI120|H39F7B8
+39F7B8:lI45|H39F88C
+39F88C:lI112|H39F968
+39F968:lI111|H39FA3C
+39FA3C:lI114|H39FB10
+39FB10:lI116|H39FBDC
+39FBDC:lI97|H39FCA8
+39FCA8:lI98|H39FD6C
+39FD6C:lI108|H39FE30
+39FE30:lI101|H39FEE4
+39FEE4:lI45|H39FFA0
+39FFA0:lI97|H3A0054
+3A0054:lI110|H3A0100
+3A0100:lI121|H3A01A4
+3A01A4:lI109|H3A0258
+3A0258:lI97|H3A0304
+3A0304:lI112|N
+39F25C:lI112|H39F310
+39F310:lI110|H39F3C4
+39F3C4:lI109|N
+39F1A4:lH39F26C|H39F278
+39F26C:t2:H39F320,H39F328
+39F328:lI105|H39F3DC
+39F3DC:lI109|H39F498
+39F498:lI97|H39F55C
+39F55C:lI103|H39F620
+39F620:lI101|H39F6F4
+39F6F4:lI47|H39F7C0
+39F7C0:lI120|H39F894
+39F894:lI45|H39F970
+39F970:lI99|H39FA44
+39FA44:lI109|H39FB18
+39FB18:lI117|H39FBE4
+39FBE4:lI45|H39FCB0
+39FCB0:lI114|H39FD74
+39FD74:lI97|H39FE38
+39FE38:lI115|H39FEEC
+39FEEC:lI116|H39FFA8
+39FFA8:lI101|H3A005C
+3A005C:lI114|N
+39F320:lI114|H39F3D4
+39F3D4:lI97|H39F490
+39F490:lI115|N
+39F278:lH39F330|H39F33C
+39F330:t2:H39F3E4,H39F3EC
+39F3EC:lI105|H39F4A8
+39F4A8:lI109|H39F56C
+39F56C:lI97|H39F630
+39F630:lI103|H39F6FC
+39F6FC:lI101|H39F7C8
+39F7C8:lI47|H39F89C
+39F89C:lI116|H39F978
+39F978:lI105|H39FA4C
+39FA4C:lI102|H39FB20
+39FB20:lI102|N
+39F3E4:lI116|H39F4A0
+39F4A0:lI105|H39F564
+39F564:lI102|H39F628
+39F628:lI102|N
+39F33C:lH39F3F4|H39F400
+39F3F4:t2:H39F4B0,H39F4B8
+39F4B8:lI105|H39F57C
+39F57C:lI109|H39F640
+39F640:lI97|H39F704
+39F704:lI103|H39F7D0
+39F7D0:lI101|H39F8A4
+39F8A4:lI47|H39F980
+39F980:lI116|H39FA54
+39FA54:lI105|H39FB28
+39FB28:lI102|H39FBEC
+39FBEC:lI102|N
+39F4B0:lI116|H39F574
+39F574:lI105|H39F638
+39F638:lI102|N
+39F400:lH39F4C0|H39F4CC
+39F4C0:t2:H39F584,H39F58C
+39F58C:lI105|H39F650
+39F650:lI109|H39F714
+39F714:lI97|H39F7D8
+39F7D8:lI103|H39F8AC
+39F8AC:lI101|H39F988
+39F988:lI47|H39FA5C
+39FA5C:lI112|H39FB30
+39FB30:lI110|H39FBF4
+39FBF4:lI103|N
+39F584:lI112|H39F648
+39F648:lI110|H39F70C
+39F70C:lI103|N
+39F4CC:lH39F594|H39F5A0
+39F594:t2:H39F658,H39F660
+39F660:lI105|H39F724
+39F724:lI109|H39F7E8
+39F7E8:lI97|H39F8BC
+39F8BC:lI103|H39F990
+39F990:lI101|H39FA64
+39FA64:lI47|H39FB38
+39FB38:lI106|H39FBFC
+39FBFC:lI112|H39FCB8
+39FCB8:lI101|H39FD7C
+39FD7C:lI103|N
+39F658:lI106|H39F71C
+39F71C:lI112|H39F7E0
+39F7E0:lI101|H39F8B4
+39F8B4:lI103|N
+39F5A0:lH39F668|H39F674
+39F668:t2:H39F72C,H39F734
+39F734:lI105|H39F7F8
+39F7F8:lI109|H39F8CC
+39F8CC:lI97|H39F998
+39F998:lI103|H39FA6C
+39FA6C:lI101|H39FB40
+39FB40:lI47|H39FC04
+39FC04:lI106|H39FCC0
+39FCC0:lI112|H39FD84
+39FD84:lI101|H39FE40
+39FE40:lI103|N
+39F72C:lI106|H39F7F0
+39F7F0:lI112|H39F8C4
+39F8C4:lI103|N
+39F674:lH39F73C|H39F748
+39F73C:t2:H39F800,H39F808
+39F808:lI105|H39F8DC
+39F8DC:lI109|H39F9A8
+39F9A8:lI97|H39FA74
+39FA74:lI103|H39FB48
+39FB48:lI101|H39FC0C
+39FC0C:lI47|H39FCC8
+39FCC8:lI106|H39FD8C
+39FD8C:lI112|H39FE48
+39FE48:lI101|H39FEF4
+39FEF4:lI103|N
+39F800:lI106|H39F8D4
+39F8D4:lI112|H39F9A0
+39F9A0:lI101|N
+39F748:lH39F810|H39F81C
+39F810:t2:H39F8E4,H39F8EC
+39F8EC:lI105|H39F9B8
+39F9B8:lI109|H39FA84
+39FA84:lI97|H39FB50
+39FB50:lI103|H39FC14
+39FC14:lI101|H39FCD0
+39FCD0:lI47|H39FD94
+39FD94:lI105|H39FE50
+39FE50:lI101|H39FEFC
+39FEFC:lI102|N
+39F8E4:lI105|H39F9B0
+39F9B0:lI101|H39FA7C
+39FA7C:lI102|N
+39F81C:lH39F8F4|H39F900
+39F8F4:t2:H39F9C0,H39F9C8
+39F9C8:lI105|H39FA94
+39FA94:lI109|H39FB60
+39FB60:lI97|H39FC1C
+39FC1C:lI103|H39FCD8
+39FCD8:lI101|H39FD9C
+39FD9C:lI47|H39FE58
+39FE58:lI103|H39FF04
+39FF04:lI105|H39FFB0
+39FFB0:lI102|N
+39F9C0:lI103|H39FA8C
+39FA8C:lI105|H39FB58
+39FB58:lI102|N
+39F900:lH39F9D0|H39F9DC
+39F9D0:t2:H39FA9C,H39FAA4
+39FAA4:lI99|H39FB70
+39FB70:lI104|H39FC2C
+39FC2C:lI101|H39FCE0
+39FCE0:lI109|H39FDA4
+39FDA4:lI105|H39FE60
+39FE60:lI99|H39FF0C
+39FF0C:lI97|H39FFB8
+39FFB8:lI108|H3A0064
+3A0064:lI47|H3A0108
+3A0108:lI120|H3A01AC
+3A01AC:lI45|H3A0260
+3A0260:lI112|H3A030C
+3A030C:lI100|H3A03B8
+3A03B8:lI98|N
+39FA9C:lI112|H39FB68
+39FB68:lI100|H39FC24
+39FC24:lI98|N
+39F9DC:lH39FAAC|H39FAB8
+39FAAC:t2:H39FB78,H39FB80
+39FB80:lI99|H39FC3C
+39FC3C:lI104|H39FCF0
+39FCF0:lI101|H39FDAC
+39FDAC:lI109|H39FE68
+39FE68:lI105|H39FF14
+39FF14:lI99|H39FFC0
+39FFC0:lI97|H3A006C
+3A006C:lI108|H3A0110
+3A0110:lI47|H3A01B4
+3A01B4:lI120|H3A0268
+3A0268:lI45|H3A0314
+3A0314:lI112|H3A03C0
+3A03C0:lI100|H3A0454
+3A0454:lI98|N
+39FB78:lI120|H39FC34
+39FC34:lI121|H39FCE8
+39FCE8:lI122|N
+39FAB8:lH39FB88|H39FB94
+39FB88:t2:H39FC44,H39FC4C
+39FC4C:lI97|H39FD00
+39FD00:lI117|H39FDBC
+39FDBC:lI100|H39FE70
+39FE70:lI105|H39FF1C
+39FF1C:lI111|H39FFC8
+39FFC8:lI47|H3A0074
+3A0074:lI120|H3A0118
+3A0118:lI45|H3A01BC
+3A01BC:lI119|H3A0270
+3A0270:lI97|H3A031C
+3A031C:lI118|N
+39FC44:lI119|H39FCF8
+39FCF8:lI97|H39FDB4
+39FDB4:lI118|N
+39FB94:lH39FC54|H39FC60
+39FC54:t2:H39FD08,H39FD10
+39FD10:lI97|H39FDCC
+39FDCC:lI117|H39FE78
+39FE78:lI100|H39FF24
+39FF24:lI105|H39FFD0
+39FFD0:lI111|H3A007C
+3A007C:lI47|H3A0120
+3A0120:lI120|H3A01C4
+3A01C4:lI45|H3A0278
+3A0278:lI114|H3A0324
+3A0324:lI101|H3A03C8
+3A03C8:lI97|H3A045C
+3A045C:lI108|H3A04F8
+3A04F8:lI97|H3A059C
+3A059C:lI117|H3A0648
+3A0648:lI100|H3A06F4
+3A06F4:lI105|H3A07A0
+3A07A0:lI111|N
+39FD08:lI114|H39FDC4
+39FDC4:lI97|N
+39FC60:lH39FD18|H39FD24
+39FD18:t2:H39FDD4,H39FDDC
+39FDDC:lI97|H39FE88
+39FE88:lI117|H39FF34
+39FF34:lI100|H39FFD8
+39FFD8:lI105|H3A0084
+3A0084:lI111|H3A0128
+3A0128:lI47|H3A01CC
+3A01CC:lI120|H3A0280
+3A0280:lI45|H3A032C
+3A032C:lI112|H3A03D0
+3A03D0:lI110|H3A0464
+3A0464:lI45|H3A0500
+3A0500:lI114|H3A05A4
+3A05A4:lI101|H3A0650
+3A0650:lI97|H3A06FC
+3A06FC:lI108|H3A07A8
+3A07A8:lI97|H3A0844
+3A0844:lI117|H3A08D0
+3A08D0:lI100|H3A0964
+3A0964:lI105|H3A09F8
+3A09F8:lI111|H3A0A94
+3A0A94:lI45|H3A0B40
+3A0B40:lI112|H3A0BEC
+3A0BEC:lI108|H3A0CA8
+3A0CA8:lI117|H3A0D64
+3A0D64:lI103|H3A0E18
+3A0E18:lI105|H3A0ECC
+3A0ECC:lI110|N
+39FDD4:lI114|H39FE80
+39FE80:lI112|H39FF2C
+39FF2C:lI109|N
+39FD24:lH39FDE4|H39FDF0
+39FDE4:t2:H39FE90,H39FE98
+39FE98:lI97|H39FF44
+39FF44:lI117|H39FFE8
+39FFE8:lI100|H3A008C
+3A008C:lI105|H3A0130
+3A0130:lI111|H3A01D4
+3A01D4:lI47|H3A0288
+3A0288:lI120|H3A0334
+3A0334:lI45|H3A03D8
+3A03D8:lI112|H3A046C
+3A046C:lI110|H3A0508
+3A0508:lI45|H3A05AC
+3A05AC:lI114|H3A0658
+3A0658:lI101|H3A0704
+3A0704:lI97|H3A07B0
+3A07B0:lI108|H3A084C
+3A084C:lI97|H3A08D8
+3A08D8:lI117|H3A096C
+3A096C:lI100|H3A0A00
+3A0A00:lI105|H3A0A9C
+3A0A9C:lI111|N
+39FE90:lI114|H39FF3C
+39FF3C:lI97|H39FFE0
+39FFE0:lI109|N
+39FDF0:lH39FEA0|H39FEAC
+39FEA0:t2:H39FF4C,H39FF54
+39FF54:lI97|H39FFF8
+39FFF8:lI117|H3A009C
+3A009C:lI100|H3A0138
+3A0138:lI105|H3A01DC
+3A01DC:lI111|H3A0290
+3A0290:lI47|H3A033C
+3A033C:lI120|H3A03E0
+3A03E0:lI45|H3A0474
+3A0474:lI97|H3A0510
+3A0510:lI105|H3A05B4
+3A05B4:lI102|H3A0660
+3A0660:lI102|N
+39FF4C:lI97|H39FFF0
+39FFF0:lI105|H3A0094
+3A0094:lI102|N
+39FEAC:lH39FF5C|H39FF68
+39FF5C:t2:H3A0000,H3A0008
+3A0008:lI97|H3A00AC
+3A00AC:lI117|H3A0148
+3A0148:lI100|H3A01EC
+3A01EC:lI105|H3A0298
+3A0298:lI111|H3A0344
+3A0344:lI47|H3A03E8
+3A03E8:lI120|H3A047C
+3A047C:lI45|H3A0518
+3A0518:lI97|H3A05BC
+3A05BC:lI105|H3A0668
+3A0668:lI102|H3A070C
+3A070C:lI102|N
+3A0000:lI97|H3A00A4
+3A00A4:lI105|H3A0140
+3A0140:lI102|H3A01E4
+3A01E4:lI102|N
+39FF68:lH3A0010|H3A001C
+3A0010:t2:H3A00B4,H3A00BC
+3A00BC:lI97|H3A0158
+3A0158:lI117|H3A01FC
+3A01FC:lI100|H3A02A8
+3A02A8:lI105|H3A034C
+3A034C:lI111|H3A03F0
+3A03F0:lI47|H3A0484
+3A0484:lI120|H3A0520
+3A0520:lI45|H3A05C4
+3A05C4:lI97|H3A0670
+3A0670:lI105|H3A0714
+3A0714:lI102|H3A07B8
+3A07B8:lI102|N
+3A00B4:lI97|H3A0150
+3A0150:lI105|H3A01F4
+3A01F4:lI102|H3A02A0
+3A02A0:lI99|N
+3A001C:lH3A00C4|H3A00D0
+3A00C4:t2:H3A0160,H3A0168
+3A0168:lI97|H3A020C
+3A020C:lI117|H3A02B8
+3A02B8:lI100|H3A035C
+3A035C:lI105|H3A03F8
+3A03F8:lI111|H3A048C
+3A048C:lI47|H3A0528
+3A0528:lI109|H3A05CC
+3A05CC:lI112|H3A0678
+3A0678:lI101|H3A071C
+3A071C:lI103|N
+3A0160:lI109|H3A0204
+3A0204:lI112|H3A02B0
+3A02B0:lI103|H3A0354
+3A0354:lI97|N
+3A00D0:lH3A0170|H3A017C
+3A0170:t2:H3A0214,H3A021C
+3A021C:lI97|H3A02C8
+3A02C8:lI117|H3A036C
+3A036C:lI100|H3A0400
+3A0400:lI105|H3A0494
+3A0494:lI111|H3A0530
+3A0530:lI47|H3A05D4
+3A05D4:lI109|H3A0680
+3A0680:lI112|H3A0724
+3A0724:lI101|H3A07C0
+3A07C0:lI103|N
+3A0214:lI109|H3A02C0
+3A02C0:lI112|H3A0364
+3A0364:lI50|N
+3A017C:lH3A0224|H3A0230
+3A0224:t2:H3A02D0,H3A02D8
+3A02D8:lI97|H3A037C
+3A037C:lI117|H3A0408
+3A0408:lI100|H3A049C
+3A049C:lI105|H3A0538
+3A0538:lI111|H3A05DC
+3A05DC:lI47|H3A0688
+3A0688:lI98|H3A072C
+3A072C:lI97|H3A07C8
+3A07C8:lI115|H3A0854
+3A0854:lI105|H3A08E0
+3A08E0:lI99|N
+3A02D0:lI97|H3A0374
+3A0374:lI117|N
+3A0230:lH3A02E0|H3A02EC
+3A02E0:t2:H3A0384,H3A038C
+3A038C:lI97|H3A0418
+3A0418:lI117|H3A04AC
+3A04AC:lI100|H3A0540
+3A0540:lI105|H3A05E4
+3A05E4:lI111|H3A0690
+3A0690:lI47|H3A0734
+3A0734:lI98|H3A07D0
+3A07D0:lI97|H3A085C
+3A085C:lI115|H3A08E8
+3A08E8:lI105|H3A0974
+3A0974:lI99|N
+3A0384:lI115|H3A0410
+3A0410:lI110|H3A04A4
+3A04A4:lI100|N
+3A02EC:lH3A0394|H3A03A0
+3A0394:t2:H3A0420,H3A0428
+3A0428:lI97|H3A04BC
+3A04BC:lI112|H3A0550
+3A0550:lI112|H3A05EC
+3A05EC:lI108|H3A0698
+3A0698:lI105|H3A073C
+3A073C:lI99|H3A07D8
+3A07D8:lI97|H3A0864
+3A0864:lI116|H3A08F0
+3A08F0:lI105|H3A097C
+3A097C:lI111|H3A0A08
+3A0A08:lI110|H3A0AA4
+3A0AA4:lI47|H3A0B48
+3A0B48:lI122|H3A0BF4
+3A0BF4:lI105|H3A0CB0
+3A0CB0:lI112|N
+3A0420:lI122|H3A04B4
+3A04B4:lI105|H3A0548
+3A0548:lI112|N
+3A03A0:lH3A0430|H3A043C
+3A0430:t2:H3A04C4,H3A04CC
+3A04CC:lI97|H3A0560
+3A0560:lI112|H3A05FC
+3A05FC:lI112|H3A06A0
+3A06A0:lI108|H3A0744
+3A0744:lI105|H3A07E0
+3A07E0:lI99|H3A086C
+3A086C:lI97|H3A08F8
+3A08F8:lI116|H3A0984
+3A0984:lI105|H3A0A10
+3A0A10:lI111|H3A0AAC
+3A0AAC:lI110|H3A0B50
+3A0B50:lI47|H3A0BFC
+3A0BFC:lI120|H3A0CB8
+3A0CB8:lI45|H3A0D6C
+3A0D6C:lI119|H3A0E20
+3A0E20:lI97|H3A0ED4
+3A0ED4:lI105|H3A0F90
+3A0F90:lI115|H3A105C
+3A105C:lI45|H3A1130
+3A1130:lI115|H3A1204
+3A1204:lI111|H3A12D0
+3A12D0:lI117|H3A13A4
+3A13A4:lI114|H3A1480
+3A1480:lI99|H3A1564
+3A1564:lI101|N
+3A04C4:lI115|H3A0558
+3A0558:lI114|H3A05F4
+3A05F4:lI99|N
+3A043C:lH3A04D4|H3A04E0
+3A04D4:t2:H3A0568,H3A0570
+3A0570:lI97|H3A060C
+3A060C:lI112|H3A06B0
+3A06B0:lI112|H3A0754
+3A0754:lI108|H3A07F0
+3A07F0:lI105|H3A0874
+3A0874:lI99|H3A0900
+3A0900:lI97|H3A098C
+3A098C:lI116|H3A0A18
+3A0A18:lI105|H3A0AB4
+3A0AB4:lI111|H3A0B58
+3A0B58:lI110|H3A0C04
+3A0C04:lI47|H3A0CC0
+3A0CC0:lI120|H3A0D74
+3A0D74:lI45|H3A0E28
+3A0E28:lI117|H3A0EDC
+3A0EDC:lI115|H3A0F98
+3A0F98:lI116|H3A1064
+3A1064:lI97|H3A1138
+3A1138:lI114|N
+3A0568:lI117|H3A0604
+3A0604:lI115|H3A06A8
+3A06A8:lI116|H3A074C
+3A074C:lI97|H3A07E8
+3A07E8:lI114|N
+3A04E0:lH3A0578|H3A0584
+3A0578:t2:H3A0614,H3A061C
+3A061C:lI97|H3A06C0
+3A06C0:lI112|H3A075C
+3A075C:lI112|H3A07F8
+3A07F8:lI108|H3A087C
+3A087C:lI105|H3A0908
+3A0908:lI99|H3A0994
+3A0994:lI97|H3A0A20
+3A0A20:lI116|H3A0ABC
+3A0ABC:lI105|H3A0B60
+3A0B60:lI111|H3A0C0C
+3A0C0C:lI110|H3A0CC8
+3A0CC8:lI47|H3A0D7C
+3A0D7C:lI120|H3A0E30
+3A0E30:lI45|H3A0EE4
+3A0EE4:lI116|H3A0FA0
+3A0FA0:lI114|H3A106C
+3A106C:lI111|H3A1140
+3A1140:lI102|H3A120C
+3A120C:lI102|H3A12D8
+3A12D8:lI45|H3A13AC
+3A13AC:lI109|H3A1488
+3A1488:lI115|N
+3A0614:lI109|H3A06B8
+3A06B8:lI115|N
+3A0584:lH3A0624|H3A0630
+3A0624:t2:H3A06C8,H3A06D0
+3A06D0:lI97|H3A076C
+3A076C:lI112|H3A0800
+3A0800:lI112|H3A0884
+3A0884:lI108|H3A0910
+3A0910:lI105|H3A099C
+3A099C:lI99|H3A0A28
+3A0A28:lI97|H3A0AC4
+3A0AC4:lI116|H3A0B68
+3A0B68:lI105|H3A0C14
+3A0C14:lI111|H3A0CD0
+3A0CD0:lI110|H3A0D84
+3A0D84:lI47|H3A0E38
+3A0E38:lI120|H3A0EEC
+3A0EEC:lI45|H3A0FA8
+3A0FA8:lI116|H3A1074
+3A1074:lI114|H3A1148
+3A1148:lI111|H3A1214
+3A1214:lI102|H3A12E0
+3A12E0:lI102|H3A13B4
+3A13B4:lI45|H3A1490
+3A1490:lI109|H3A156C
+3A156C:lI101|N
+3A06C8:lI109|H3A0764
+3A0764:lI101|N
+3A0630:lH3A06D8|H3A06E4
+3A06D8:t2:H3A0774,H3A077C
+3A077C:lI97|H3A0810
+3A0810:lI112|H3A0894
+3A0894:lI112|H3A0918
+3A0918:lI108|H3A09A4
+3A09A4:lI105|H3A0A30
+3A0A30:lI99|H3A0ACC
+3A0ACC:lI97|H3A0B70
+3A0B70:lI116|H3A0C1C
+3A0C1C:lI105|H3A0CD8
+3A0CD8:lI111|H3A0D8C
+3A0D8C:lI110|H3A0E40
+3A0E40:lI47|H3A0EF4
+3A0EF4:lI120|H3A0FB0
+3A0FB0:lI45|H3A107C
+3A107C:lI116|H3A1150
+3A1150:lI114|H3A121C
+3A121C:lI111|H3A12E8
+3A12E8:lI102|H3A13BC
+3A13BC:lI102|H3A1498
+3A1498:lI45|H3A1574
+3A1574:lI109|H3A1648
+3A1648:lI97|H3A171C
+3A171C:lI110|N
+3A0774:lI109|H3A0808
+3A0808:lI97|H3A088C
+3A088C:lI110|N
+3A06E4:lH3A0784|H3A0790
+3A0784:t2:H3A0818,H3A0820
+3A0820:lI97|H3A089C
+3A089C:lI112|H3A0920
+3A0920:lI112|H3A09AC
+3A09AC:lI108|H3A0A38
+3A0A38:lI105|H3A0AD4
+3A0AD4:lI99|H3A0B78
+3A0B78:lI97|H3A0C24
+3A0C24:lI116|H3A0CE0
+3A0CE0:lI105|H3A0D94
+3A0D94:lI111|H3A0E48
+3A0E48:lI110|H3A0EFC
+3A0EFC:lI47|H3A0FB8
+3A0FB8:lI120|H3A1084
+3A1084:lI45|H3A1158
+3A1158:lI116|H3A1224
+3A1224:lI114|H3A12F0
+3A12F0:lI111|H3A13C4
+3A13C4:lI102|H3A14A0
+3A14A0:lI102|N
+3A0818:lI116|N
+3A0790:lH3A0828|H3A0834
+3A0828:t2:H3A08A4,H3A08AC
+3A08AC:lI97|H3A0930
+3A0930:lI112|H3A09B4
+3A09B4:lI112|H3A0A40
+3A0A40:lI108|H3A0ADC
+3A0ADC:lI105|H3A0B80
+3A0B80:lI99|H3A0C2C
+3A0C2C:lI97|H3A0CE8
+3A0CE8:lI116|H3A0D9C
+3A0D9C:lI105|H3A0E50
+3A0E50:lI111|H3A0F04
+3A0F04:lI110|H3A0FC0
+3A0FC0:lI47|H3A108C
+3A108C:lI120|H3A1160
+3A1160:lI45|H3A122C
+3A122C:lI116|H3A12F8
+3A12F8:lI114|H3A13CC
+3A13CC:lI111|H3A14A8
+3A14A8:lI102|H3A157C
+3A157C:lI102|N
+3A08A4:lI116|H3A0928
+3A0928:lI114|N
+3A0834:lH3A08B4|H3A08C0
+3A08B4:t2:H3A0938,H3A0940
+3A0940:lI97|H3A09C4
+3A09C4:lI112|H3A0A50
+3A0A50:lI112|H3A0AEC
+3A0AEC:lI108|H3A0B88
+3A0B88:lI105|H3A0C34
+3A0C34:lI99|H3A0CF0
+3A0CF0:lI97|H3A0DA4
+3A0DA4:lI116|H3A0E58
+3A0E58:lI105|H3A0F0C
+3A0F0C:lI111|H3A0FC8
+3A0FC8:lI110|H3A1094
+3A1094:lI47|H3A1168
+3A1168:lI120|H3A1234
+3A1234:lI45|H3A1300
+3A1300:lI116|H3A13D4
+3A13D4:lI114|H3A14B0
+3A14B0:lI111|H3A1584
+3A1584:lI102|H3A1650
+3A1650:lI102|N
+3A0938:lI114|H3A09BC
+3A09BC:lI111|H3A0A48
+3A0A48:lI102|H3A0AE4
+3A0AE4:lI102|N
+3A08C0:lH3A0948|H3A0954
+3A0948:t2:H3A09CC,H3A09D4
+3A09D4:lI97|H3A0A60
+3A0A60:lI112|H3A0AFC
+3A0AFC:lI112|H3A0B98
+3A0B98:lI108|H3A0C44
+3A0C44:lI105|H3A0D00
+3A0D00:lI99|H3A0DB4
+3A0DB4:lI97|H3A0E60
+3A0E60:lI116|H3A0F14
+3A0F14:lI105|H3A0FD0
+3A0FD0:lI111|H3A109C
+3A109C:lI110|H3A1170
+3A1170:lI47|H3A123C
+3A123C:lI120|H3A1308
+3A1308:lI45|H3A13DC
+3A13DC:lI116|H3A14B8
+3A14B8:lI101|H3A158C
+3A158C:lI120|H3A1658
+3A1658:lI105|H3A1724
+3A1724:lI110|H3A17E8
+3A17E8:lI102|H3A18AC
+3A18AC:lI111|N
+3A09CC:lI116|H3A0A58
+3A0A58:lI101|H3A0AF4
+3A0AF4:lI120|H3A0B90
+3A0B90:lI105|H3A0C3C
+3A0C3C:lI110|H3A0CF8
+3A0CF8:lI102|H3A0DAC
+3A0DAC:lI111|N
+3A0954:lH3A09DC|H3A09E8
+3A09DC:t2:H3A0A68,H3A0A70
+3A0A70:lI97|H3A0B0C
+3A0B0C:lI112|H3A0BA8
+3A0BA8:lI112|H3A0C54
+3A0C54:lI108|H3A0D08
+3A0D08:lI105|H3A0DBC
+3A0DBC:lI99|H3A0E68
+3A0E68:lI97|H3A0F1C
+3A0F1C:lI116|H3A0FD8
+3A0FD8:lI105|H3A10A4
+3A10A4:lI111|H3A1178
+3A1178:lI110|H3A1244
+3A1244:lI47|H3A1310
+3A1310:lI120|H3A13E4
+3A13E4:lI45|H3A14C0
+3A14C0:lI116|H3A1594
+3A1594:lI101|H3A1660
+3A1660:lI120|H3A172C
+3A172C:lI105|H3A17F0
+3A17F0:lI110|H3A18B4
+3A18B4:lI102|H3A1970
+3A1970:lI111|N
+3A0A68:lI116|H3A0B04
+3A0B04:lI101|H3A0BA0
+3A0BA0:lI120|H3A0C4C
+3A0C4C:lI105|N
+3A09E8:lH3A0A78|H3A0A84
+3A0A78:t2:H3A0B14,H3A0B1C
+3A0B1C:lI97|H3A0BB8
+3A0BB8:lI112|H3A0C64
+3A0C64:lI112|H3A0D10
+3A0D10:lI108|H3A0DC4
+3A0DC4:lI105|H3A0E70
+3A0E70:lI99|H3A0F24
+3A0F24:lI97|H3A0FE0
+3A0FE0:lI116|H3A10AC
+3A10AC:lI105|H3A1180
+3A1180:lI111|H3A124C
+3A124C:lI110|H3A1318
+3A1318:lI47|H3A13EC
+3A13EC:lI120|H3A14C8
+3A14C8:lI45|H3A159C
+3A159C:lI116|H3A1668
+3A1668:lI101|H3A1734
+3A1734:lI120|N
+3A0B14:lI116|H3A0BB0
+3A0BB0:lI101|H3A0C5C
+3A0C5C:lI120|N
+3A0A84:lH3A0B24|H3A0B30
+3A0B24:t2:H3A0BC0,H3A0BC8
+3A0BC8:lI97|H3A0C74
+3A0C74:lI112|H3A0D20
+3A0D20:lI112|H3A0DCC
+3A0DCC:lI108|H3A0E78
+3A0E78:lI105|H3A0F2C
+3A0F2C:lI99|H3A0FE8
+3A0FE8:lI97|H3A10B4
+3A10B4:lI116|H3A1188
+3A1188:lI105|H3A1254
+3A1254:lI111|H3A1320
+3A1320:lI110|H3A13F4
+3A13F4:lI47|H3A14D0
+3A14D0:lI120|H3A15A4
+3A15A4:lI45|H3A1670
+3A1670:lI116|H3A173C
+3A173C:lI99|H3A17F8
+3A17F8:lI108|N
+3A0BC0:lI116|H3A0C6C
+3A0C6C:lI99|H3A0D18
+3A0D18:lI108|N
+3A0B30:lH3A0BD0|H3A0BDC
+3A0BD0:t2:H3A0C7C,H3A0C84
+3A0C84:lI97|H3A0D30
+3A0D30:lI112|H3A0DDC
+3A0DDC:lI112|H3A0E80
+3A0E80:lI108|H3A0F34
+3A0F34:lI105|H3A0FF0
+3A0FF0:lI99|H3A10BC
+3A10BC:lI97|H3A1190
+3A1190:lI116|H3A125C
+3A125C:lI105|H3A1328
+3A1328:lI111|H3A13FC
+3A13FC:lI110|H3A14D8
+3A14D8:lI47|H3A15AC
+3A15AC:lI120|H3A1678
+3A1678:lI45|H3A1744
+3A1744:lI116|H3A1800
+3A1800:lI97|H3A18BC
+3A18BC:lI114|N
+3A0C7C:lI116|H3A0D28
+3A0D28:lI97|H3A0DD4
+3A0DD4:lI114|N
+3A0BDC:lH3A0C8C|H3A0C98
+3A0C8C:t2:H3A0D38,H3A0D40
+3A0D40:lI97|H3A0DEC
+3A0DEC:lI112|H3A0E90
+3A0E90:lI112|H3A0F44
+3A0F44:lI108|H3A1000
+3A1000:lI105|H3A10CC
+3A10CC:lI99|H3A1198
+3A1198:lI97|H3A1264
+3A1264:lI116|H3A1330
+3A1330:lI105|H3A1404
+3A1404:lI111|H3A14E0
+3A14E0:lI110|H3A15B4
+3A15B4:lI47|H3A1680
+3A1680:lI120|H3A174C
+3A174C:lI45|H3A1808
+3A1808:lI115|H3A18C4
+3A18C4:lI118|H3A1978
+3A1978:lI52|H3A1A2C
+3A1A2C:lI99|H3A1AE0
+3A1AE0:lI114|H3A1BA4
+3A1BA4:lI99|N
+3A0D38:lI115|H3A0DE4
+3A0DE4:lI118|H3A0E88
+3A0E88:lI52|H3A0F3C
+3A0F3C:lI99|H3A0FF8
+3A0FF8:lI114|H3A10C4
+3A10C4:lI99|N
+3A0C98:lH3A0D48|H3A0D54
+3A0D48:t2:H3A0DF4,H3A0DFC
+3A0DFC:lI97|H3A0EA0
+3A0EA0:lI112|H3A0F54
+3A0F54:lI112|H3A1010
+3A1010:lI108|H3A10DC
+3A10DC:lI105|H3A11A8
+3A11A8:lI99|H3A1274
+3A1274:lI97|H3A1338
+3A1338:lI116|H3A140C
+3A140C:lI105|H3A14E8
+3A14E8:lI111|H3A15BC
+3A15BC:lI110|H3A1688
+3A1688:lI47|H3A1754
+3A1754:lI120|H3A1810
+3A1810:lI45|H3A18CC
+3A18CC:lI115|H3A1980
+3A1980:lI118|H3A1A34
+3A1A34:lI52|H3A1AE8
+3A1AE8:lI99|H3A1BAC
+3A1BAC:lI112|H3A1C78
+3A1C78:lI105|H3A1D3C
+3A1D3C:lI111|N
+3A0DF4:lI115|H3A0E98
+3A0E98:lI118|H3A0F4C
+3A0F4C:lI52|H3A1008
+3A1008:lI99|H3A10D4
+3A10D4:lI112|H3A11A0
+3A11A0:lI105|H3A126C
+3A126C:lI111|N
+3A0D54:lH3A0E04|H3A0E10
+3A0E04:t2:H3A0EA8,H3A0EB0
+3A0EB0:lI97|H3A0F64
+3A0F64:lI112|H3A1020
+3A1020:lI112|H3A10E4
+3A10E4:lI108|H3A11B0
+3A11B0:lI105|H3A127C
+3A127C:lI99|H3A1340
+3A1340:lI97|H3A1414
+3A1414:lI116|H3A14F0
+3A14F0:lI105|H3A15C4
+3A15C4:lI111|H3A1690
+3A1690:lI110|H3A175C
+3A175C:lI47|H3A1818
+3A1818:lI120|H3A18D4
+3A18D4:lI45|H3A1988
+3A1988:lI115|H3A1A3C
+3A1A3C:lI116|H3A1AF0
+3A1AF0:lI117|H3A1BB4
+3A1BB4:lI102|H3A1C80
+3A1C80:lI102|H3A1D44
+3A1D44:lI105|H3A1E00
+3A1E00:lI116|N
+3A0EA8:lI115|H3A0F5C
+3A0F5C:lI105|H3A1018
+3A1018:lI116|N
+3A0E10:lH3A0EB8|H3A0EC4
+3A0EB8:t2:H3A0F6C,H3A0F74
+3A0F74:lI97|H3A1030
+3A1030:lI112|H3A10F4
+3A10F4:lI112|H3A11C0
+3A11C0:lI108|H3A1284
+3A1284:lI105|H3A1348
+3A1348:lI99|H3A141C
+3A141C:lI97|H3A14F8
+3A14F8:lI116|H3A15CC
+3A15CC:lI105|H3A1698
+3A1698:lI111|H3A1764
+3A1764:lI110|H3A1820
+3A1820:lI47|H3A18DC
+3A18DC:lI120|H3A1990
+3A1990:lI45|H3A1A44
+3A1A44:lI115|H3A1AF8
+3A1AF8:lI104|H3A1BBC
+3A1BBC:lI97|H3A1C88
+3A1C88:lI114|N
+3A0F6C:lI115|H3A1028
+3A1028:lI104|H3A10EC
+3A10EC:lI97|H3A11B8
+3A11B8:lI114|N
+3A0EC4:lH3A0F7C|H3A0F88
+3A0F7C:t2:H3A1038,H3A1040
+3A1040:lI97|H3A1104
+3A1104:lI112|H3A11C8
+3A11C8:lI112|H3A128C
+3A128C:lI108|H3A1350
+3A1350:lI105|H3A1424
+3A1424:lI99|H3A1500
+3A1500:lI97|H3A15D4
+3A15D4:lI116|H3A16A0
+3A16A0:lI105|H3A176C
+3A176C:lI111|H3A1828
+3A1828:lI110|H3A18E4
+3A18E4:lI47|H3A1998
+3A1998:lI120|H3A1A4C
+3A1A4C:lI45|H3A1B00
+3A1B00:lI115|H3A1BC4
+3A1BC4:lI104|N
+3A1038:lI115|H3A10FC
+3A10FC:lI104|N
+3A0F88:lH3A1048|H3A1054
+3A1048:t2:H3A110C,H3A1114
+3A1114:lI97|H3A11D8
+3A11D8:lI112|H3A1294
+3A1294:lI112|H3A1358
+3A1358:lI108|H3A142C
+3A142C:lI105|H3A1508
+3A1508:lI99|H3A15DC
+3A15DC:lI97|H3A16A8
+3A16A8:lI116|H3A1774
+3A1774:lI105|H3A1830
+3A1830:lI111|H3A18EC
+3A18EC:lI110|H3A19A0
+3A19A0:lI47|H3A1A54
+3A1A54:lI120|H3A1B08
+3A1B08:lI45|H3A1BCC
+3A1BCC:lI110|H3A1C90
+3A1C90:lI101|H3A1D4C
+3A1D4C:lI116|H3A1E08
+3A1E08:lI99|H3A1EC4
+3A1EC4:lI100|H3A1F88
+3A1F88:lI102|N
+3A110C:lI110|H3A11D0
+3A11D0:lI99|N
+3A1054:lH3A111C|H3A1128
+3A111C:t2:H3A11E0,H3A11E8
+3A11E8:lI97|H3A12A4
+3A12A4:lI112|H3A1368
+3A1368:lI112|H3A1434
+3A1434:lI108|H3A1510
+3A1510:lI105|H3A15E4
+3A15E4:lI99|H3A16B0
+3A16B0:lI97|H3A177C
+3A177C:lI116|H3A1838
+3A1838:lI105|H3A18F4
+3A18F4:lI111|H3A19A8
+3A19A8:lI110|H3A1A5C
+3A1A5C:lI47|H3A1B10
+3A1B10:lI120|H3A1BD4
+3A1BD4:lI45|H3A1C98
+3A1C98:lI110|H3A1D54
+3A1D54:lI101|H3A1E10
+3A1E10:lI116|H3A1ECC
+3A1ECC:lI99|H3A1F90
+3A1F90:lI100|H3A2044
+3A2044:lI102|N
+3A11E0:lI99|H3A129C
+3A129C:lI100|H3A1360
+3A1360:lI102|N
+3A1128:lH3A11F0|H3A11FC
+3A11F0:t2:H3A12AC,H3A12B4
+3A12B4:lI97|H3A1378
+3A1378:lI112|H3A1444
+3A1444:lI112|H3A1518
+3A1518:lI108|H3A15EC
+3A15EC:lI105|H3A16B8
+3A16B8:lI99|H3A1784
+3A1784:lI97|H3A1840
+3A1840:lI116|H3A18FC
+3A18FC:lI105|H3A19B0
+3A19B0:lI111|H3A1A64
+3A1A64:lI110|H3A1B18
+3A1B18:lI47|H3A1BDC
+3A1BDC:lI120|H3A1CA0
+3A1CA0:lI45|H3A1D5C
+3A1D5C:lI109|H3A1E18
+3A1E18:lI105|H3A1ED4
+3A1ED4:lI102|N
+3A12AC:lI109|H3A1370
+3A1370:lI105|H3A143C
+3A143C:lI102|N
+3A11FC:lH3A12BC|H3A12C8
+3A12BC:t2:H3A1380,H3A1388
+3A1388:lI97|H3A1454
+3A1454:lI112|H3A1528
+3A1528:lI112|H3A15FC
+3A15FC:lI108|H3A16C8
+3A16C8:lI105|H3A178C
+3A178C:lI99|H3A1848
+3A1848:lI97|H3A1904
+3A1904:lI116|H3A19B8
+3A19B8:lI105|H3A1A6C
+3A1A6C:lI111|H3A1B20
+3A1B20:lI110|H3A1BE4
+3A1BE4:lI47|H3A1CA8
+3A1CA8:lI120|H3A1D64
+3A1D64:lI45|H3A1E20
+3A1E20:lI108|H3A1EDC
+3A1EDC:lI97|H3A1F98
+3A1F98:lI116|H3A204C
+3A204C:lI101|H3A2108
+3A2108:lI120|N
+3A1380:lI108|H3A144C
+3A144C:lI97|H3A1520
+3A1520:lI116|H3A15F4
+3A15F4:lI101|H3A16C0
+3A16C0:lI120|N
+3A12C8:lH3A1390|H3A139C
+3A1390:t2:H3A145C,H3A1464
+3A1464:lI97|H3A1538
+3A1538:lI112|H3A160C
+3A160C:lI112|H3A16D0
+3A16D0:lI108|H3A1794
+3A1794:lI105|H3A1850
+3A1850:lI99|H3A190C
+3A190C:lI97|H3A19C0
+3A19C0:lI116|H3A1A74
+3A1A74:lI105|H3A1B28
+3A1B28:lI111|H3A1BEC
+3A1BEC:lI110|H3A1CB0
+3A1CB0:lI47|H3A1D6C
+3A1D6C:lI120|H3A1E28
+3A1E28:lI45|H3A1EE4
+3A1EE4:lI107|H3A1FA0
+3A1FA0:lI111|H3A2054
+3A2054:lI97|H3A2110
+3A2110:lI110|N
+3A145C:lI115|H3A1530
+3A1530:lI107|H3A1604
+3A1604:lI112|N
+3A139C:lH3A146C|H3A1478
+3A146C:t2:H3A1540,H3A1548
+3A1548:lI97|H3A161C
+3A161C:lI112|H3A16E0
+3A16E0:lI112|H3A179C
+3A179C:lI108|H3A1858
+3A1858:lI105|H3A1914
+3A1914:lI99|H3A19C8
+3A19C8:lI97|H3A1A7C
+3A1A7C:lI116|H3A1B30
+3A1B30:lI105|H3A1BF4
+3A1BF4:lI111|H3A1CB8
+3A1CB8:lI110|H3A1D74
+3A1D74:lI47|H3A1E30
+3A1E30:lI120|H3A1EEC
+3A1EEC:lI45|H3A1FA8
+3A1FA8:lI107|H3A205C
+3A205C:lI111|H3A2118
+3A2118:lI97|H3A21CC
+3A21CC:lI110|N
+3A1540:lI115|H3A1614
+3A1614:lI107|H3A16D8
+3A16D8:lI100|N
+3A1478:lH3A1550|H3A155C
+3A1550:t2:H3A1624,H3A162C
+3A162C:lI97|H3A16F0
+3A16F0:lI112|H3A17AC
+3A17AC:lI112|H3A1860
+3A1860:lI108|H3A191C
+3A191C:lI105|H3A19D0
+3A19D0:lI99|H3A1A84
+3A1A84:lI97|H3A1B38
+3A1B38:lI116|H3A1BFC
+3A1BFC:lI105|H3A1CC0
+3A1CC0:lI111|H3A1D7C
+3A1D7C:lI110|H3A1E38
+3A1E38:lI47|H3A1EF4
+3A1EF4:lI120|H3A1FB0
+3A1FB0:lI45|H3A2064
+3A2064:lI107|H3A2120
+3A2120:lI111|H3A21D4
+3A21D4:lI97|H3A2288
+3A2288:lI110|N
+3A1624:lI115|H3A16E8
+3A16E8:lI107|H3A17A4
+3A17A4:lI116|N
+3A155C:lH3A1634|H3A1640
+3A1634:t2:H3A16F8,H3A1700
+3A1700:lI97|H3A17BC
+3A17BC:lI112|H3A1870
+3A1870:lI112|H3A1924
+3A1924:lI108|H3A19D8
+3A19D8:lI105|H3A1A8C
+3A1A8C:lI99|H3A1B40
+3A1B40:lI97|H3A1C04
+3A1C04:lI116|H3A1CC8
+3A1CC8:lI105|H3A1D84
+3A1D84:lI111|H3A1E40
+3A1E40:lI110|H3A1EFC
+3A1EFC:lI47|H3A1FB8
+3A1FB8:lI120|H3A206C
+3A206C:lI45|H3A2128
+3A2128:lI107|H3A21DC
+3A21DC:lI111|H3A2290
+3A2290:lI97|H3A234C
+3A234C:lI110|N
+3A16F8:lI115|H3A17B4
+3A17B4:lI107|H3A1868
+3A1868:lI109|N
+3A1640:lH3A1708|H3A1714
+3A1708:t2:H3A17C4,H3A17CC
+3A17CC:lI97|H3A1880
+3A1880:lI112|H3A1934
+3A1934:lI112|H3A19E0
+3A19E0:lI108|H3A1A94
+3A1A94:lI105|H3A1B48
+3A1B48:lI99|H3A1C0C
+3A1C0C:lI97|H3A1CD0
+3A1CD0:lI116|H3A1D8C
+3A1D8C:lI105|H3A1E48
+3A1E48:lI111|H3A1F04
+3A1F04:lI110|H3A1FC0
+3A1FC0:lI47|H3A2074
+3A2074:lI120|H3A2130
+3A2130:lI45|H3A21E4
+3A21E4:lI104|H3A2298
+3A2298:lI116|H3A2354
+3A2354:lI116|H3A2410
+3A2410:lI112|H3A24C4
+3A24C4:lI100|H3A2580
+3A2580:lI45|H3A263C
+3A263C:lI99|H3A2700
+3A2700:lI103|H3A27BC
+3A27BC:lI105|N
+3A17C4:lI99|H3A1878
+3A1878:lI103|H3A192C
+3A192C:lI105|N
+3A1714:lH3A17D4|H3A17E0
+3A17D4:t2:H3A1888,H3A1890
+3A1890:lI97|H3A1944
+3A1944:lI112|H3A19F0
+3A19F0:lI112|H3A1A9C
+3A1A9C:lI108|H3A1B50
+3A1B50:lI105|H3A1C14
+3A1C14:lI99|H3A1CD8
+3A1CD8:lI97|H3A1D94
+3A1D94:lI116|H3A1E50
+3A1E50:lI105|H3A1F0C
+3A1F0C:lI111|H3A1FC8
+3A1FC8:lI110|H3A207C
+3A207C:lI47|H3A2138
+3A2138:lI120|H3A21EC
+3A21EC:lI45|H3A22A0
+3A22A0:lI104|H3A235C
+3A235C:lI100|H3A2418
+3A2418:lI102|N
+3A1888:lI104|H3A193C
+3A193C:lI100|H3A19E8
+3A19E8:lI102|N
+3A17E0:lH3A1898|H3A18A4
+3A1898:t2:H3A194C,H3A1954
+3A1954:lI97|H3A1A00
+3A1A00:lI112|H3A1AA4
+3A1AA4:lI112|H3A1B58
+3A1B58:lI108|H3A1C1C
+3A1C1C:lI105|H3A1CE0
+3A1CE0:lI99|H3A1D9C
+3A1D9C:lI97|H3A1E58
+3A1E58:lI116|H3A1F14
+3A1F14:lI105|H3A1FD0
+3A1FD0:lI111|H3A2084
+3A2084:lI110|H3A2140
+3A2140:lI47|H3A21F4
+3A21F4:lI120|H3A22A8
+3A22A8:lI45|H3A2364
+3A2364:lI103|H3A2420
+3A2420:lI122|H3A24CC
+3A24CC:lI105|H3A2588
+3A2588:lI112|N
+3A194C:lI103|H3A19F8
+3A19F8:lI122|N
+3A18A4:lH3A195C|H3A1968
+3A195C:t2:H3A1A08,H3A1A10
+3A1A10:lI97|H3A1AB4
+3A1AB4:lI112|H3A1B68
+3A1B68:lI112|H3A1C2C
+3A1C2C:lI108|H3A1CE8
+3A1CE8:lI105|H3A1DA4
+3A1DA4:lI99|H3A1E60
+3A1E60:lI97|H3A1F1C
+3A1F1C:lI116|H3A1FD8
+3A1FD8:lI105|H3A208C
+3A208C:lI111|H3A2148
+3A2148:lI110|H3A21FC
+3A21FC:lI47|H3A22B0
+3A22B0:lI120|H3A236C
+3A236C:lI45|H3A2428
+3A2428:lI103|H3A24D4
+3A24D4:lI116|H3A2590
+3A2590:lI97|H3A2644
+3A2644:lI114|N
+3A1A08:lI103|H3A1AAC
+3A1AAC:lI116|H3A1B60
+3A1B60:lI97|H3A1C24
+3A1C24:lI114|N
+3A1968:lH3A1A18|H3A1A24
+3A1A18:t2:H3A1ABC,H3A1AC4
+3A1AC4:lI97|H3A1B78
+3A1B78:lI112|H3A1C3C
+3A1C3C:lI112|H3A1CF0
+3A1CF0:lI108|H3A1DAC
+3A1DAC:lI105|H3A1E68
+3A1E68:lI99|H3A1F24
+3A1F24:lI97|H3A1FE0
+3A1FE0:lI116|H3A2094
+3A2094:lI105|H3A2150
+3A2150:lI111|H3A2204
+3A2204:lI110|H3A22B8
+3A22B8:lI47|H3A2374
+3A2374:lI120|H3A2430
+3A2430:lI45|H3A24DC
+3A24DC:lI100|H3A2598
+3A2598:lI118|H3A264C
+3A264C:lI105|N
+3A1ABC:lI100|H3A1B70
+3A1B70:lI118|H3A1C34
+3A1C34:lI105|N
+3A1A24:lH3A1ACC|H3A1AD8
+3A1ACC:t2:H3A1B80,H3A1B88
+3A1B88:lI97|H3A1C4C
+3A1C4C:lI112|H3A1D00
+3A1D00:lI112|H3A1DB4
+3A1DB4:lI108|H3A1E70
+3A1E70:lI105|H3A1F2C
+3A1F2C:lI99|H3A1FE8
+3A1FE8:lI97|H3A209C
+3A209C:lI116|H3A2158
+3A2158:lI105|H3A220C
+3A220C:lI111|H3A22C0
+3A22C0:lI110|H3A237C
+3A237C:lI47|H3A2438
+3A2438:lI120|H3A24E4
+3A24E4:lI45|H3A25A0
+3A25A0:lI100|H3A2654
+3A2654:lI105|H3A2708
+3A2708:lI114|H3A27C4
+3A27C4:lI101|H3A2880
+3A2880:lI99|H3A2944
+3A2944:lI116|H3A2A10
+3A2A10:lI111|H3A2ADC
+3A2ADC:lI114|N
+3A1B80:lI100|H3A1C44
+3A1C44:lI99|H3A1CF8
+3A1CF8:lI114|N
+3A1AD8:lH3A1B90|H3A1B9C
+3A1B90:t2:H3A1C54,H3A1C5C
+3A1C5C:lI97|H3A1D10
+3A1D10:lI112|H3A1DC4
+3A1DC4:lI112|H3A1E78
+3A1E78:lI108|H3A1F34
+3A1F34:lI105|H3A1FF0
+3A1FF0:lI99|H3A20A4
+3A20A4:lI97|H3A2160
+3A2160:lI116|H3A2214
+3A2214:lI105|H3A22C8
+3A22C8:lI111|H3A2384
+3A2384:lI110|H3A2440
+3A2440:lI47|H3A24EC
+3A24EC:lI120|H3A25A8
+3A25A8:lI45|H3A265C
+3A265C:lI100|H3A2710
+3A2710:lI105|H3A27CC
+3A27CC:lI114|H3A2888
+3A2888:lI101|H3A294C
+3A294C:lI99|H3A2A18
+3A2A18:lI116|H3A2AE4
+3A2AE4:lI111|H3A2BB0
+3A2BB0:lI114|N
+3A1C54:lI100|H3A1D08
+3A1D08:lI105|H3A1DBC
+3A1DBC:lI114|N
+3A1B9C:lH3A1C64|H3A1C70
+3A1C64:t2:H3A1D18,H3A1D20
+3A1D20:lI97|H3A1DD4
+3A1DD4:lI112|H3A1E88
+3A1E88:lI112|H3A1F3C
+3A1F3C:lI108|H3A1FF8
+3A1FF8:lI105|H3A20AC
+3A20AC:lI99|H3A2168
+3A2168:lI97|H3A221C
+3A221C:lI116|H3A22D0
+3A22D0:lI105|H3A238C
+3A238C:lI111|H3A2448
+3A2448:lI110|H3A24F4
+3A24F4:lI47|H3A25B0
+3A25B0:lI120|H3A2664
+3A2664:lI45|H3A2718
+3A2718:lI100|H3A27D4
+3A27D4:lI105|H3A2890
+3A2890:lI114|H3A2954
+3A2954:lI101|H3A2A20
+3A2A20:lI99|H3A2AEC
+3A2AEC:lI116|H3A2BB8
+3A2BB8:lI111|H3A2C74
+3A2C74:lI114|N
+3A1D18:lI100|H3A1DCC
+3A1DCC:lI120|H3A1E80
+3A1E80:lI114|N
+3A1C70:lH3A1D28|H3A1D34
+3A1D28:t2:H3A1DDC,H3A1DE4
+3A1DE4:lI97|H3A1E98
+3A1E98:lI112|H3A1F4C
+3A1F4C:lI112|H3A2000
+3A2000:lI108|H3A20B4
+3A20B4:lI105|H3A2170
+3A2170:lI99|H3A2224
+3A2224:lI97|H3A22D8
+3A22D8:lI116|H3A2394
+3A2394:lI105|H3A2450
+3A2450:lI111|H3A24FC
+3A24FC:lI110|H3A25B8
+3A25B8:lI47|H3A266C
+3A266C:lI120|H3A2720
+3A2720:lI45|H3A27DC
+3A27DC:lI99|H3A2898
+3A2898:lI115|H3A295C
+3A295C:lI104|N
+3A1DDC:lI99|H3A1E90
+3A1E90:lI115|H3A1F44
+3A1F44:lI104|N
+3A1D34:lH3A1DEC|H3A1DF8
+3A1DEC:t2:H3A1EA0,H3A1EA8
+3A1EA8:lI97|H3A1F5C
+3A1F5C:lI112|H3A2010
+3A2010:lI112|H3A20C4
+3A20C4:lI108|H3A2178
+3A2178:lI105|H3A222C
+3A222C:lI99|H3A22E0
+3A22E0:lI97|H3A239C
+3A239C:lI116|H3A2458
+3A2458:lI105|H3A2504
+3A2504:lI111|H3A25C0
+3A25C0:lI110|H3A2674
+3A2674:lI47|H3A2728
+3A2728:lI120|H3A27E4
+3A27E4:lI45|H3A28A0
+3A28A0:lI99|H3A2964
+3A2964:lI112|H3A2A28
+3A2A28:lI105|H3A2AF4
+3A2AF4:lI111|N
+3A1EA0:lI99|H3A1F54
+3A1F54:lI112|H3A2008
+3A2008:lI105|H3A20BC
+3A20BC:lI111|N
+3A1DF8:lH3A1EB0|H3A1EBC
+3A1EB0:t2:H3A1F64,H3A1F6C
+3A1F6C:lI97|H3A2018
+3A2018:lI112|H3A20CC
+3A20CC:lI112|H3A2180
+3A2180:lI108|H3A2234
+3A2234:lI105|H3A22E8
+3A22E8:lI99|H3A23A4
+3A23A4:lI97|H3A2460
+3A2460:lI116|H3A250C
+3A250C:lI105|H3A25C8
+3A25C8:lI111|H3A267C
+3A267C:lI110|H3A2730
+3A2730:lI47|H3A27EC
+3A27EC:lI120|H3A28A8
+3A28A8:lI45|H3A296C
+3A296C:lI99|H3A2A30
+3A2A30:lI111|H3A2AFC
+3A2AFC:lI109|H3A2BC0
+3A2BC0:lI112|H3A2C7C
+3A2C7C:lI114|H3A2D2C
+3A2D2C:lI101|H3A2DD4
+3A2DD4:lI115|H3A2E6C
+3A2E6C:lI115|N
+3A1F64:lI90|N
+3A1EBC:lH3A1F74|H3A1F80
+3A1F74:t2:H3A2020,H3A2028
+3A2028:lI97|H3A20DC
+3A20DC:lI112|H3A2190
+3A2190:lI112|H3A223C
+3A223C:lI108|H3A22F0
+3A22F0:lI105|H3A23AC
+3A23AC:lI99|H3A2468
+3A2468:lI97|H3A2514
+3A2514:lI116|H3A25D0
+3A25D0:lI105|H3A2684
+3A2684:lI111|H3A2738
+3A2738:lI110|H3A27F4
+3A27F4:lI47|H3A28B0
+3A28B0:lI120|H3A2974
+3A2974:lI45|H3A2A38
+3A2A38:lI99|H3A2B04
+3A2B04:lI100|H3A2BC8
+3A2BC8:lI108|H3A2C84
+3A2C84:lI105|H3A2D34
+3A2D34:lI110|H3A2DDC
+3A2DDC:lI107|N
+3A2020:lI118|H3A20D4
+3A20D4:lI99|H3A2188
+3A2188:lI100|N
+3A1F80:lH3A2030|H3A203C
+3A2030:t2:H3A20E4,H3A20EC
+3A20EC:lI97|H3A21A0
+3A21A0:lI112|H3A224C
+3A224C:lI112|H3A2300
+3A2300:lI108|H3A23BC
+3A23BC:lI105|H3A2470
+3A2470:lI99|H3A251C
+3A251C:lI97|H3A25D8
+3A25D8:lI116|H3A268C
+3A268C:lI105|H3A2740
+3A2740:lI111|H3A27FC
+3A27FC:lI110|H3A28B8
+3A28B8:lI47|H3A297C
+3A297C:lI120|H3A2A40
+3A2A40:lI45|H3A2B0C
+3A2B0C:lI98|H3A2BD0
+3A2BD0:lI99|H3A2C8C
+3A2C8C:lI112|H3A2D3C
+3A2D3C:lI105|H3A2DE4
+3A2DE4:lI111|N
+3A20E4:lI98|H3A2198
+3A2198:lI99|H3A2244
+3A2244:lI112|H3A22F8
+3A22F8:lI105|H3A23B4
+3A23B4:lI111|N
+3A203C:lH3A20F4|H3A2100
+3A20F4:t2:H3A21A8,H3A21B0
+3A21B0:lI97|H3A225C
+3A225C:lI112|H3A2310
+3A2310:lI112|H3A23C4
+3A23C4:lI108|H3A2478
+3A2478:lI105|H3A2524
+3A2524:lI99|H3A25E0
+3A25E0:lI97|H3A2694
+3A2694:lI116|H3A2748
+3A2748:lI105|H3A2804
+3A2804:lI111|H3A28C0
+3A28C0:lI110|H3A2984
+3A2984:lI47|H3A2A48
+3A2A48:lI114|H3A2B14
+3A2B14:lI116|H3A2BD8
+3A2BD8:lI102|N
+3A21A8:lI114|H3A2254
+3A2254:lI116|H3A2308
+3A2308:lI102|N
+3A2100:lH3A21B8|H3A21C4
+3A21B8:t2:H3A2264,H3A226C
+3A226C:lI97|H3A2320
+3A2320:lI112|H3A23D4
+3A23D4:lI112|H3A2480
+3A2480:lI108|H3A252C
+3A252C:lI105|H3A25E8
+3A25E8:lI99|H3A269C
+3A269C:lI97|H3A2750
+3A2750:lI116|H3A280C
+3A280C:lI105|H3A28C8
+3A28C8:lI111|H3A298C
+3A298C:lI110|H3A2A50
+3A2A50:lI47|H3A2B1C
+3A2B1C:lI112|H3A2BE0
+3A2BE0:lI111|H3A2C94
+3A2C94:lI119|H3A2D44
+3A2D44:lI101|H3A2DEC
+3A2DEC:lI114|H3A2E74
+3A2E74:lI112|H3A2EEC
+3A2EEC:lI111|H3A2F64
+3A2F64:lI105|H3A2FD4
+3A2FD4:lI110|H3A303C
+3A303C:lI116|N
+3A2264:lI112|H3A2318
+3A2318:lI112|H3A23CC
+3A23CC:lI116|N
+3A21C4:lH3A2274|H3A2280
+3A2274:t2:H3A2328,H3A2330
+3A2330:lI97|H3A23E4
+3A23E4:lI112|H3A2488
+3A2488:lI112|H3A2534
+3A2534:lI108|H3A25F0
+3A25F0:lI105|H3A26A4
+3A26A4:lI99|H3A2758
+3A2758:lI97|H3A2814
+3A2814:lI116|H3A28D0
+3A28D0:lI105|H3A2994
+3A2994:lI111|H3A2A58
+3A2A58:lI110|H3A2B24
+3A2B24:lI47|H3A2BE8
+3A2BE8:lI112|H3A2C9C
+3A2C9C:lI111|H3A2D4C
+3A2D4C:lI115|H3A2DF4
+3A2DF4:lI116|H3A2E7C
+3A2E7C:lI115|H3A2EF4
+3A2EF4:lI99|H3A2F6C
+3A2F6C:lI114|H3A2FDC
+3A2FDC:lI105|H3A3044
+3A3044:lI112|H3A30A4
+3A30A4:lI116|N
+3A2328:lI97|H3A23DC
+3A23DC:lI105|N
+3A2280:lH3A2338|H3A2344
+3A2338:t2:H3A23EC,H3A23F4
+3A23F4:lI97|H3A2498
+3A2498:lI112|H3A2544
+3A2544:lI112|H3A25F8
+3A25F8:lI108|H3A26AC
+3A26AC:lI105|H3A2760
+3A2760:lI99|H3A281C
+3A281C:lI97|H3A28D8
+3A28D8:lI116|H3A299C
+3A299C:lI105|H3A2A60
+3A2A60:lI111|H3A2B2C
+3A2B2C:lI110|H3A2BF0
+3A2BF0:lI47|H3A2CA4
+3A2CA4:lI112|H3A2D54
+3A2D54:lI111|H3A2DFC
+3A2DFC:lI115|H3A2E84
+3A2E84:lI116|H3A2EFC
+3A2EFC:lI115|H3A2F74
+3A2F74:lI99|H3A2FE4
+3A2FE4:lI114|H3A304C
+3A304C:lI105|H3A30AC
+3A30AC:lI112|H3A3104
+3A3104:lI116|N
+3A23EC:lI101|H3A2490
+3A2490:lI112|H3A253C
+3A253C:lI115|N
+3A2344:lH3A23FC|H3A2408
+3A23FC:t2:H3A24A0,H3A24A8
+3A24A8:lI97|H3A2554
+3A2554:lI112|H3A2600
+3A2600:lI112|H3A26B4
+3A26B4:lI108|H3A2768
+3A2768:lI105|H3A2824
+3A2824:lI99|H3A28E0
+3A28E0:lI97|H3A29A4
+3A29A4:lI116|H3A2A68
+3A2A68:lI105|H3A2B34
+3A2B34:lI111|H3A2BF8
+3A2BF8:lI110|H3A2CAC
+3A2CAC:lI47|H3A2D5C
+3A2D5C:lI112|H3A2E04
+3A2E04:lI111|H3A2E8C
+3A2E8C:lI115|H3A2F04
+3A2F04:lI116|H3A2F7C
+3A2F7C:lI115|H3A2FEC
+3A2FEC:lI99|H3A3054
+3A3054:lI114|H3A30B4
+3A30B4:lI105|H3A310C
+3A310C:lI112|H3A315C
+3A315C:lI116|N
+3A24A0:lI112|H3A254C
+3A254C:lI115|N
+3A2408:lH3A24B0|H3A24BC
+3A24B0:t2:H3A255C,H3A2564
+3A2564:lI97|H3A2610
+3A2610:lI112|H3A26C4
+3A26C4:lI112|H3A2770
+3A2770:lI108|H3A282C
+3A282C:lI105|H3A28E8
+3A28E8:lI99|H3A29AC
+3A29AC:lI97|H3A2A70
+3A2A70:lI116|H3A2B3C
+3A2B3C:lI105|H3A2C00
+3A2C00:lI111|H3A2CB4
+3A2CB4:lI110|H3A2D64
+3A2D64:lI47|H3A2E0C
+3A2E0C:lI112|H3A2E94
+3A2E94:lI100|H3A2F0C
+3A2F0C:lI102|N
+3A255C:lI112|H3A2608
+3A2608:lI100|H3A26BC
+3A26BC:lI102|N
+3A24BC:lH3A256C|H3A2578
+3A256C:t2:H3A2618,H3A2620
+3A2620:lI97|H3A26D4
+3A26D4:lI112|H3A2780
+3A2780:lI112|H3A2834
+3A2834:lI108|H3A28F0
+3A28F0:lI105|H3A29B4
+3A29B4:lI99|H3A2A78
+3A2A78:lI97|H3A2B44
+3A2B44:lI116|H3A2C08
+3A2C08:lI105|H3A2CBC
+3A2CBC:lI111|H3A2D6C
+3A2D6C:lI110|H3A2E14
+3A2E14:lI47|H3A2E9C
+3A2E9C:lI111|H3A2F14
+3A2F14:lI100|H3A2F84
+3A2F84:lI97|N
+3A2618:lI111|H3A26CC
+3A26CC:lI100|H3A2778
+3A2778:lI97|N
+3A2578:lH3A2628|H3A2634
+3A2628:t2:H3A26DC,H3A26E4
+3A26E4:lI97|H3A2790
+3A2790:lI112|H3A2844
+3A2844:lI112|H3A28F8
+3A28F8:lI108|H3A29BC
+3A29BC:lI105|H3A2A80
+3A2A80:lI99|H3A2B4C
+3A2B4C:lI97|H3A2C10
+3A2C10:lI116|H3A2CC4
+3A2CC4:lI105|H3A2D74
+3A2D74:lI111|H3A2E1C
+3A2E1C:lI110|H3A2EA4
+3A2EA4:lI47|H3A2F1C
+3A2F1C:lI111|H3A2F8C
+3A2F8C:lI99|H3A2FF4
+3A2FF4:lI116|H3A305C
+3A305C:lI101|H3A30BC
+3A30BC:lI116|H3A3114
+3A3114:lI45|H3A3164
+3A3164:lI115|H3A31AC
+3A31AC:lI116|H3A31F4
+3A31F4:lI114|H3A323C
+3A323C:lI101|H3A3284
+3A3284:lI97|H3A32CC
+3A32CC:lI109|N
+3A26DC:lI98|H3A2788
+3A2788:lI105|H3A283C
+3A283C:lI110|N
+3A2634:lH3A26EC|H3A26F8
+3A26EC:t2:H3A2798,H3A27A0
+3A27A0:lI97|H3A2854
+3A2854:lI112|H3A2908
+3A2908:lI112|H3A29C4
+3A29C4:lI108|H3A2A88
+3A2A88:lI105|H3A2B54
+3A2B54:lI99|H3A2C18
+3A2C18:lI97|H3A2CCC
+3A2CCC:lI116|H3A2D7C
+3A2D7C:lI105|H3A2E24
+3A2E24:lI111|H3A2EAC
+3A2EAC:lI110|H3A2F24
+3A2F24:lI47|H3A2F94
+3A2F94:lI111|H3A2FFC
+3A2FFC:lI99|H3A3064
+3A3064:lI116|H3A30C4
+3A30C4:lI101|H3A311C
+3A311C:lI116|H3A316C
+3A316C:lI45|H3A31B4
+3A31B4:lI115|H3A31FC
+3A31FC:lI116|H3A3244
+3A3244:lI114|H3A328C
+3A328C:lI101|H3A32D4
+3A32D4:lI97|H3A3314
+3A3314:lI109|N
+3A2798:lI100|H3A284C
+3A284C:lI109|H3A2900
+3A2900:lI115|N
+3A26F8:lH3A27A8|H3A27B4
+3A27A8:t2:H3A285C,H3A2864
+3A2864:lI97|H3A2918
+3A2918:lI112|H3A29D4
+3A29D4:lI112|H3A2A90
+3A2A90:lI108|H3A2B5C
+3A2B5C:lI105|H3A2C20
+3A2C20:lI99|H3A2CD4
+3A2CD4:lI97|H3A2D84
+3A2D84:lI116|H3A2E2C
+3A2E2C:lI105|H3A2EB4
+3A2EB4:lI111|H3A2F2C
+3A2F2C:lI110|H3A2F9C
+3A2F9C:lI47|H3A3004
+3A3004:lI111|H3A306C
+3A306C:lI99|H3A30CC
+3A30CC:lI116|H3A3124
+3A3124:lI101|H3A3174
+3A3174:lI116|H3A31BC
+3A31BC:lI45|H3A3204
+3A3204:lI115|H3A324C
+3A324C:lI116|H3A3294
+3A3294:lI114|H3A32DC
+3A32DC:lI101|H3A331C
+3A331C:lI97|H3A334C
+3A334C:lI109|N
+3A285C:lI108|H3A2910
+3A2910:lI104|H3A29CC
+3A29CC:lI97|N
+3A27B4:lH3A286C|H3A2878
+3A286C:t2:H3A2920,H3A2928
+3A2928:lI97|H3A29E4
+3A29E4:lI112|H3A2AA0
+3A2AA0:lI112|H3A2B64
+3A2B64:lI108|H3A2C28
+3A2C28:lI105|H3A2CDC
+3A2CDC:lI99|H3A2D8C
+3A2D8C:lI97|H3A2E34
+3A2E34:lI116|H3A2EBC
+3A2EBC:lI105|H3A2F34
+3A2F34:lI111|H3A2FA4
+3A2FA4:lI110|H3A300C
+3A300C:lI47|H3A3074
+3A3074:lI111|H3A30D4
+3A30D4:lI99|H3A312C
+3A312C:lI116|H3A317C
+3A317C:lI101|H3A31C4
+3A31C4:lI116|H3A320C
+3A320C:lI45|H3A3254
+3A3254:lI115|H3A329C
+3A329C:lI116|H3A32E4
+3A32E4:lI114|H3A3324
+3A3324:lI101|H3A3354
+3A3354:lI97|H3A337C
+3A337C:lI109|N
+3A2920:lI108|H3A29DC
+3A29DC:lI122|H3A2A98
+3A2A98:lI104|N
+3A2878:lH3A2930|H3A293C
+3A2930:t2:H3A29EC,H3A29F4
+3A29F4:lI97|H3A2AB0
+3A2AB0:lI112|H3A2B74
+3A2B74:lI112|H3A2C30
+3A2C30:lI108|H3A2CE4
+3A2CE4:lI105|H3A2D94
+3A2D94:lI99|H3A2E3C
+3A2E3C:lI97|H3A2EC4
+3A2EC4:lI116|H3A2F3C
+3A2F3C:lI105|H3A2FAC
+3A2FAC:lI111|H3A3014
+3A3014:lI110|H3A307C
+3A307C:lI47|H3A30DC
+3A30DC:lI111|H3A3134
+3A3134:lI99|H3A3184
+3A3184:lI116|H3A31CC
+3A31CC:lI101|H3A3214
+3A3214:lI116|H3A325C
+3A325C:lI45|H3A32A4
+3A32A4:lI115|H3A32EC
+3A32EC:lI116|H3A332C
+3A332C:lI114|H3A335C
+3A335C:lI101|H3A3384
+3A3384:lI97|H3A33A4
+3A33A4:lI109|N
+3A29EC:lI101|H3A2AA8
+3A2AA8:lI120|H3A2B6C
+3A2B6C:lI101|N
+3A293C:lH3A29FC|H3A2A08
+3A29FC:t2:H3A2AB8,H3A2AC0
+3A2AC0:lI97|H3A2B84
+3A2B84:lI112|H3A2C40
+3A2C40:lI112|H3A2CF4
+3A2CF4:lI108|H3A2DA4
+3A2DA4:lI105|H3A2E44
+3A2E44:lI99|H3A2ECC
+3A2ECC:lI97|H3A2F44
+3A2F44:lI116|H3A2FB4
+3A2FB4:lI105|H3A301C
+3A301C:lI111|H3A3084
+3A3084:lI110|H3A30E4
+3A30E4:lI47|H3A313C
+3A313C:lI111|H3A318C
+3A318C:lI99|H3A31D4
+3A31D4:lI116|H3A321C
+3A321C:lI101|H3A3264
+3A3264:lI116|H3A32AC
+3A32AC:lI45|H3A32F4
+3A32F4:lI115|H3A3334
+3A3334:lI116|H3A3364
+3A3364:lI114|H3A338C
+3A338C:lI101|H3A33AC
+3A33AC:lI97|H3A33C4
+3A33C4:lI109|N
+3A2AB8:lI99|H3A2B7C
+3A2B7C:lI108|H3A2C38
+3A2C38:lI97|H3A2CEC
+3A2CEC:lI115|H3A2D9C
+3A2D9C:lI115|N
+3A2A08:lH3A2AC8|H3A2AD4
+3A2AC8:t2:H3A2B8C,H3A2B94
+3A2B94:lI97|H3A2C50
+3A2C50:lI112|H3A2D04
+3A2D04:lI112|H3A2DAC
+3A2DAC:lI108|H3A2E4C
+3A2E4C:lI105|H3A2ED4
+3A2ED4:lI99|H3A2F4C
+3A2F4C:lI97|H3A2FBC
+3A2FBC:lI116|H3A3024
+3A3024:lI105|H3A308C
+3A308C:lI111|H3A30EC
+3A30EC:lI110|H3A3144
+3A3144:lI47|H3A3194
+3A3194:lI109|H3A31DC
+3A31DC:lI115|H3A3224
+3A3224:lI119|H3A326C
+3A326C:lI111|H3A32B4
+3A32B4:lI114|H3A32FC
+3A32FC:lI100|N
+3A2B8C:lI100|H3A2C48
+3A2C48:lI111|H3A2CFC
+3A2CFC:lI99|N
+3A2AD4:lH3A2B9C|H3A2BA8
+3A2B9C:t2:H3A2C58,H3A2C60
+3A2C60:lI97|H3A2D14
+3A2D14:lI112|H3A2DBC
+3A2DBC:lI112|H3A2E54
+3A2E54:lI108|H3A2EDC
+3A2EDC:lI105|H3A2F54
+3A2F54:lI99|H3A2FC4
+3A2FC4:lI97|H3A302C
+3A302C:lI116|H3A3094
+3A3094:lI105|H3A30F4
+3A30F4:lI111|H3A314C
+3A314C:lI110|H3A319C
+3A319C:lI47|H3A31E4
+3A31E4:lI109|H3A322C
+3A322C:lI97|H3A3274
+3A3274:lI99|H3A32BC
+3A32BC:lI45|H3A3304
+3A3304:lI99|H3A333C
+3A333C:lI111|H3A336C
+3A336C:lI109|H3A3394
+3A3394:lI112|H3A33B4
+3A33B4:lI97|H3A33CC
+3A33CC:lI99|H3A33DC
+3A33DC:lI116|H3A33EC
+3A33EC:lI112|H3A33FC
+3A33FC:lI114|H3A340C
+3A340C:lI111|N
+3A2C58:lI99|H3A2D0C
+3A2D0C:lI112|H3A2DB4
+3A2DB4:lI116|N
+3A2BA8:lH3A2C68|N
+3A2C68:t2:H3A2D1C,H3A2D24
+3A2D24:lI97|H3A2DCC
+3A2DCC:lI112|H3A2E64
+3A2E64:lI112|H3A2EE4
+3A2EE4:lI108|H3A2F5C
+3A2F5C:lI105|H3A2FCC
+3A2FCC:lI99|H3A3034
+3A3034:lI97|H3A309C
+3A309C:lI116|H3A30FC
+3A30FC:lI105|H3A3154
+3A3154:lI111|H3A31A4
+3A31A4:lI110|H3A31EC
+3A31EC:lI47|H3A3234
+3A3234:lI109|H3A327C
+3A327C:lI97|H3A32C4
+3A32C4:lI99|H3A330C
+3A330C:lI45|H3A3344
+3A3344:lI98|H3A3374
+3A3374:lI105|H3A339C
+3A339C:lI110|H3A33BC
+3A33BC:lI104|H3A33D4
+3A33D4:lI101|H3A33E4
+3A33E4:lI120|H3A33F4
+3A33F4:lI52|H3A3404
+3A3404:lI48|N
+3A2D1C:lI104|H3A2DC4
+3A2DC4:lI113|H3A2E5C
+3A2E5C:lI120|N
+39DC28:lH39DC68|H39DC74
+39DC68:t2:A4:port,I8888
+39DC74:lH39DCA8|H39DCB4
+39DCA8:t2:AC:bind_address,H39DCF8
+39DCF8:t4:I127,I0,I0,I1
+39DCB4:lH39DD0C|H39DD18
+39DD0C:t2:AB:server_name,H39DD6C
+39DD6C:lI108|H39DDE4
+39DDE4:lI111|H39DE5C
+39DE5C:lI99|H39DEE4
+39DEE4:lI97|H39DF6C
+39DF6C:lI108|H39E00C
+39E00C:lI104|H39E0B4
+39E0B4:lI111|H39E16C
+39E16C:lI115|H39E238
+39E238:lI116|N
+39DD18:lH39DD74|H39DD80
+39DD74:t2:AE:max_header_siz,I1024
+39DD80:lH39DDEC|H39DDF8
+39DDEC:t2:A11:max_header_action,A8:reply414
+39DDF8:lH39DE64|H39DE70
+39DE64:t2:A8:com_type,A7:ip_comm
+39DE70:lH39DEEC|H39DEF8
+39DEEC:t2:A7:modules,H39DF74
+39DF74:lA9:mod_alias|H39E014
+39E014:lA8:mod_auth|H39E0BC
+39E0BC:lA7:mod_esi|H39E174
+39E174:lAB:mod_actions|H39E240
+39E240:lA7:mod_cgi|H39E324
+39E324:lAB:mod_include|H39E418
+39E418:lA7:mod_dir|H39E51C
+39E51C:lA7:mod_get|H39E634
+39E634:lA8:mod_head|H39E748
+39E748:lA7:mod_log|H39E85C
+39E85C:lAC:mod_disk_log|N
+39DEF8:lH39DF7C|H39DF88
+39DF7C:t2:AF:directory_index,H39E01C
+39E01C:lH39E0C4|N
+39E0C4:lI105|H39E17C
+39E17C:lI110|H39E248
+39E248:lI100|H39E32C
+39E32C:lI101|H39E420
+39E420:lI120|H39E524
+39E524:lI46|H39E63C
+39E63C:lI104|H39E750
+39E750:lI116|H39E864
+39E864:lI109|H39E978
+39E978:lI108|N
+39DF88:lH39E024|H39E030
+39E024:t2:AC:default_type,H39E0CC
+39E0CC:lI116|H39E184
+39E184:lI101|H39E250
+39E250:lI120|H39E334
+39E334:lI116|H39E428
+39E428:lI47|H39E52C
+39E52C:lI112|H39E644
+39E644:lI108|H39E758
+39E758:lI97|H39E86C
+39E86C:lI105|H39E980
+39E980:lI110|N
+39E030:lH39E0D4|H39E0E0
+39E0D4:t2:A10:erl_script_alias,H39E18C
+39E18C:t2:H39E258,H39E260
+39E260:lH39E344|N
+39E344:lI119|H39E438
+39E438:lI101|H39E53C
+39E53C:lI98|H39E654
+39E654:lI116|H39E768
+39E768:lI111|H39E87C
+39E87C:lI111|H39E990
+39E990:lI108|N
+39E258:lI47|H39E33C
+39E33C:lI119|H39E430
+39E430:lI101|H39E534
+39E534:lI98|H39E64C
+39E64C:lI116|H39E760
+39E760:lI111|H39E874
+39E874:lI111|H39E988
+39E988:lI108|N
+39E0E0:lH39E198|H39E1A4
+39E198:t2:A5:alias,H39E268
+39E268:t2:H39E34C,H39E354
+39E354:lI47|H39E448
+39E448:lI99|H39E54C
+39E54C:lI108|H39E664
+39E664:lI101|H39E778
+39E778:lI97|H39E88C
+39E88C:lI114|H39E9A0
+39E9A0:lI99|H39EA94
+39EA94:lI97|H39EB88
+39EB88:lI115|H39EC7C
+39EC7C:lI101|H39ED70
+39ED70:lI47|H39EE4C
+39EE4C:lI111|H39EF20
+39EF20:lI116|H39EFFC
+39EFFC:lI112|H39F0E0
+39F0E0:lI47|H39F1B4
+39F1B4:lI101|H39F288
+39F288:lI114|H39F344
+39F344:lI116|H39F408
+39F408:lI115|H39F4D4
+39F4D4:lI47|H39F5A8
+39F5A8:lI108|H39F67C
+39F67C:lI105|H39F750
+39F750:lI98|H39F824
+39F824:lI47|H39F908
+39F908:lI111|H39F9E4
+39F9E4:lI98|H39FAC0
+39FAC0:lI115|H39FB9C
+39FB9C:lI101|H39FC68
+39FC68:lI114|H39FD2C
+39FD2C:lI118|H39FDF8
+39FDF8:lI101|H39FEB4
+39FEB4:lI114|H39FF70
+39FF70:lI47|H3A0024
+3A0024:lI112|H3A00D8
+3A00D8:lI114|H3A0184
+3A0184:lI105|H3A0238
+3A0238:lI118|H3A02F4
+3A02F4:lI47|H3A03A8
+3A03A8:lI99|H3A0444
+3A0444:lI114|H3A04E8
+3A04E8:lI97|H3A058C
+3A058C:lI115|H3A0638
+3A0638:lI104|H3A06EC
+3A06EC:lI100|H3A0798
+3A0798:lI117|H3A083C
+3A083C:lI109|H3A08C8
+3A08C8:lI112|H3A095C
+3A095C:lI95|H3A09F0
+3A09F0:lI118|H3A0A8C
+3A0A8C:lI105|H3A0B38
+3A0B38:lI101|H3A0BE4
+3A0BE4:lI119|H3A0CA0
+3A0CA0:lI101|H3A0D5C
+3A0D5C:lI114|N
+39E34C:lI47|H39E440
+39E440:lI99|H39E544
+39E544:lI114|H39E65C
+39E65C:lI97|H39E770
+39E770:lI115|H39E884
+39E884:lI104|H39E998
+39E998:lI100|H39EA8C
+39EA8C:lI117|H39EB80
+39EB80:lI109|H39EC74
+39EC74:lI112|H39ED68
+39ED68:lI95|H39EE44
+39EE44:lI118|H39EF18
+39EF18:lI105|H39EFF4
+39EFF4:lI101|H39F0D8
+39F0D8:lI119|H39F1AC
+39F1AC:lI101|H39F280
+39F280:lI114|N
+39E1A4:lH39E274|H39E280
+39E274:t2:A5:alias,H39E35C
+39E35C:t2:H39E450,H39E458
+39E458:lI47|H39E55C
+39E55C:lI99|H39E674
+39E674:lI108|H39E788
+39E788:lI101|H39E89C
+39E89C:lI97|H39E9B0
+39E9B0:lI114|H39EAA4
+39EAA4:lI99|H39EB98
+39EB98:lI97|H39EC8C
+39EC8C:lI115|H39ED80
+39ED80:lI101|H39EE5C
+39EE5C:lI47|H39EF30
+39EF30:lI111|H39F00C
+39F00C:lI116|H39F0F0
+39F0F0:lI112|H39F1C4
+39F1C4:lI47|H39F298
+39F298:lI101|H39F354
+39F354:lI114|H39F418
+39F418:lI116|H39F4E4
+39F4E4:lI115|H39F5B0
+39F5B0:lI47|H39F684
+39F684:lI101|H39F758
+39F758:lI114|H39F82C
+39F82C:lI116|H39F910
+39F910:lI115|H39F9EC
+39F9EC:lI47|H39FAC8
+39FAC8:lI100|H39FBA4
+39FBA4:lI111|H39FC70
+39FC70:lI99|H39FD34
+39FD34:lI47|H39FE00
+39FE00:lI104|H39FEBC
+39FEBC:lI116|H39FF78
+39FF78:lI109|H3A002C
+3A002C:lI108|N
+39E450:lI47|H39E554
+39E554:lI99|H39E66C
+39E66C:lI114|H39E780
+39E780:lI97|H39E894
+39E894:lI115|H39E9A8
+39E9A8:lI104|H39EA9C
+39EA9C:lI100|H39EB90
+39EB90:lI117|H39EC84
+39EC84:lI109|H39ED78
+39ED78:lI112|H39EE54
+39EE54:lI95|H39EF28
+39EF28:lI101|H39F004
+39F004:lI114|H39F0E8
+39F0E8:lI116|H39F1BC
+39F1BC:lI115|H39F290
+39F290:lI95|H39F34C
+39F34C:lI100|H39F410
+39F410:lI111|H39F4DC
+39F4DC:lI99|N
+39E280:lH39E368|H39E374
+39E368:t2:A5:alias,H39E460
+39E460:t2:H39E564,H39E56C
+39E56C:lI47|H39E684
+39E684:lI99|H39E798
+39E798:lI108|H39E8AC
+39E8AC:lI101|H39E9C0
+39E9C0:lI97|H39EAB4
+39EAB4:lI114|H39EBA8
+39EBA8:lI99|H39EC9C
+39EC9C:lI97|H39ED90
+39ED90:lI115|H39EE6C
+39EE6C:lI101|H39EF40
+39EF40:lI47|H39F01C
+39F01C:lI111|H39F100
+39F100:lI116|H39F1D4
+39F1D4:lI112|H39F2A0
+39F2A0:lI47|H39F35C
+39F35C:lI101|H39F420
+39F420:lI114|H39F4EC
+39F4EC:lI116|H39F5B8
+39F5B8:lI115|H39F68C
+39F68C:lI47|H39F760
+39F760:lI108|H39F834
+39F834:lI105|H39F918
+39F918:lI98|H39F9F4
+39F9F4:lI47|H39FAD0
+39FAD0:lI111|H39FBAC
+39FBAC:lI98|H39FC78
+39FC78:lI115|H39FD3C
+39FD3C:lI101|H39FE08
+39FE08:lI114|H39FEC4
+39FEC4:lI118|H39FF80
+39FF80:lI101|H3A0034
+3A0034:lI114|H3A00E0
+3A00E0:lI47|H3A018C
+3A018C:lI100|H3A0240
+3A0240:lI111|H3A02FC
+3A02FC:lI99|H3A03B0
+3A03B0:lI47|H3A044C
+3A044C:lI104|H3A04F0
+3A04F0:lI116|H3A0594
+3A0594:lI109|H3A0640
+3A0640:lI108|N
+39E564:lI47|H39E67C
+39E67C:lI99|H39E790
+39E790:lI114|H39E8A4
+39E8A4:lI97|H39E9B8
+39E9B8:lI115|H39EAAC
+39EAAC:lI104|H39EBA0
+39EBA0:lI100|H39EC94
+39EC94:lI117|H39ED88
+39ED88:lI109|H39EE64
+39EE64:lI112|H39EF38
+39EF38:lI95|H39F014
+39F014:lI100|H39F0F8
+39F0F8:lI111|H39F1CC
+39F1CC:lI99|N
+39E374:lH39E46C|N
+39E46C:t2:A10:erl_script_alias,H39E574
+39E574:t2:H39E68C,H39E694
+39E694:lH39E7A8|N
+39E7A8:lI99|H39E8BC
+39E8BC:lI114|H39E9D0
+39E9D0:lI97|H39EAC4
+39EAC4:lI115|H39EBB8
+39EBB8:lI104|H39ECAC
+39ECAC:lI100|H39EDA0
+39EDA0:lI117|H39EE74
+39EE74:lI109|H39EF48
+39EF48:lI112|H39F024
+39F024:lI95|H39F108
+39F108:lI118|H39F1DC
+39F1DC:lI105|H39F2A8
+39F2A8:lI101|H39F364
+39F364:lI119|H39F428
+39F428:lI101|H39F4F4
+39F4F4:lI114|N
+39E68C:lI47|H39E7A0
+39E7A0:lI99|H39E8B4
+39E8B4:lI100|H39E9C8
+39E9C8:lI118|H39EABC
+39EABC:lI95|H39EBB0
+39EBB0:lI101|H39ECA4
+39ECA4:lI114|H39ED98
+39ED98:lI108|N
+39DB58:lN|H39DB9C
+39DB9C:lH39D9FC|H39DBEC
+39D9FC:t4:I127,I0,I0,I1
+39DBEC:lI8888|N
+3A3E20:lH3A3DFC|H3A3704
+3A3DFC:t8:A5:child,P<0.46.0>,H39DAC8,H39DAD8,A9:permanent,I2000,A6:worker,H39DAE8
+39DAE8:lAD:httpd_manager|H39DB38
+39DB38:lAA:gen_server|N
+39DAD8:t3:AD:httpd_manager,AA:start_link,H39DB30
+39DB30:lA9:undefined|H39DB78
+39DB78:lH39DB50|H39DBC0
+39DBC0:lN|N
+39DAC8:t3:AD:httpd_manager,H39D9FC,I8888
+3A3704:lH3A36E0|H39D998
+3A36E0:t8:A5:child,P<0.45.0>,H39DA18,H39DA28,A9:permanent,I2000,AA:supervisor,H39DA38
+39DA38:lAE:httpd_misc_sup|H39DAC0
+39DAC0:lAA:supervisor|N
+39DA28:t3:AE:httpd_misc_sup,A5:start,H39D958
+39D958:lH39D9FC|H39DA10
+39DA10:lI8888|H39DAB8
+39DAB8:lA7:silence|N
+39DA18:t3:AE:httpd_misc_sup,H39D9FC,I8888
+39D998:lH39DA64|N
+39DA64:t8:A5:child,P<0.44.0>,H39DAF0,H39DB00,A9:permanent,I2000,AA:supervisor,H39DB10
+39DB10:lA12:httpd_acceptor_sup|H39DB48
+39DB48:lAA:supervisor|N
+39DB00:t3:A12:httpd_acceptor_sup,A5:start,H39DB40
+39DB40:lH39D9FC|H39DB80
+39DB80:lI8888|H39DBC8
+39DBC8:lA7:silence|N
+39DAF0:t3:A12:httpd_acceptor_sup,H39D9FC,I8888
+39D960:t2:A5:local,A1A:httpd_sup__127_0_0_1__8888
+39D9CC:lAA:gen_server|H39DA90
+39DA90:lP<0.33.0>|H39DB20
+39DB20:lP<0.33.0>|H39DB60
+39DB60:lH39DBA4|H39DBB0
+39DBA4:t2:A5:local,A1A:httpd_sup__127_0_0_1__8888
+39DBB0:lAA:supervisor|H39DBF4
+39DBF4:lH39DC30|H39DC40
+39DC30:t3:H39D960,A9:httpd_sup,H39DA88
+39DC40:lN|N
+39D940:t2:AD:$initial_call,H39D9E4
+39D9E4:t3:A3:gen,A7:init_it,H39D9CC
+39D94C:t2:AA:$ancestors,H39D9F4
+39D9F4:lA8:web_tool|H39DAB0
+39DAB0:lP<0.27.0>|N
+=proc_dictionary:<0.44.0>
+H3756A8
+H3756B4
+H3756C0
+H3756CC
+=proc_stack:<0.44.0>
+36c194:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AA:supervisor
+y3:H36C030
+y4:A1E:httpd_acc_sup__127_0_0_1__8888
+y5:P<0.43.0>
+36c1b0:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H375710
+=proc_heap:<0.44.0>
+36C030:tA:A5:state,H3756D8,AB:one_for_one,H36C028,N,I500,I100,N,A12:httpd_acceptor_sup,H375730
+375730:lA7:silence|N
+36C028:lH36C004|N
+36C004:t8:A5:child,P<0.47.0>,H36BE80,H36BE90,A9:permanent,I1000,A6:worker,H36BEA0
+36BEA0:lAE:httpd_acceptor|N
+36BE90:t3:AE:httpd_acceptor,AA:start_link,H36BEE8
+36BEE8:lP<0.46.0>|H36BEF0
+36BEF0:lA7:ip_comm|H36BEF8
+36BEF8:lH36BF00|H36BF14
+36BF00:t4:I127,I0,I0,I1
+36BF14:lI8888|H36BF1C
+36BF1C:lA1B:httpd_conf__127_0_0_1__8888|H36BF24
+36BF24:lA7:silence|N
+36BE80:t3:AE:httpd_acceptor,H36BED4,I8888
+36BED4:t4:I127,I0,I0,I1
+3756D8:t2:A5:local,A1E:httpd_acc_sup__127_0_0_1__8888
+375710:lAA:gen_server|H375738
+375738:lP<0.43.0>|H375748
+375748:lP<0.43.0>|H375758
+375758:lH375760|H37576C
+375760:t2:A5:local,A1E:httpd_acc_sup__127_0_0_1__8888
+37576C:lAA:supervisor|H375774
+375774:lH37577C|H37578C
+37577C:t3:H3756D8,A12:httpd_acceptor_sup,H375730
+37578C:lN|N
+3756A8:t2:AD:$initial_call,H375718
+375718:t3:A3:gen,A7:init_it,H375710
+3756B4:t2:A9:verbosity,A7:silence
+3756C0:t2:AA:$ancestors,H375728
+375728:lA1A:httpd_sup__127_0_0_1__8888|H375740
+375740:lA8:web_tool|H375750
+375750:lP<0.27.0>|N
+3756CC:t2:A5:sname,A7:acc_sup
+=proc_dictionary:<0.45.0>
+H36F484
+H36F4F4
+H36F468
+H36F500
+=proc_stack:<0.45.0>
+36f734:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AA:supervisor
+y3:H36F5D0
+y4:A1F:httpd_misc_sup__127_0_0_1__8888
+y5:P<0.43.0>
+36f750:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H36F430
+=proc_heap:<0.45.0>
+36F5D0:tA:A5:state,H36F3FC,AB:one_for_one,N,N,I0,I1,N,AE:httpd_misc_sup,H36F408
+36F408:lA7:silence|N
+36F3FC:t2:A5:local,A1F:httpd_misc_sup__127_0_0_1__8888
+36F430:lAA:gen_server|H36F428
+36F428:lP<0.43.0>|H36F420
+36F420:lP<0.43.0>|H36F3D0
+36F3D0:lH36F3E0|H36F418
+36F3E0:t2:A5:local,A1F:httpd_misc_sup__127_0_0_1__8888
+36F418:lAA:supervisor|H36F3D8
+36F3D8:lH36F3EC|H36F410
+36F3EC:t3:H36F3FC,AE:httpd_misc_sup,H36F408
+36F410:lN|N
+36F484:t2:AD:$initial_call,H36F474
+36F474:t3:A3:gen,A7:init_it,H36F430
+36F4F4:t2:A9:verbosity,A7:silence
+36F468:t2:AA:$ancestors,H36F460
+36F460:lA1A:httpd_sup__127_0_0_1__8888|H36F440
+36F440:lA8:web_tool|H36F438
+36F438:lP<0.27.0>|N
+36F500:t2:A5:sname,A8:misc_sup
+=proc_dictionary:<0.46.0>
+H3BDA50
+H3BDA5C
+H3BDAC8
+H3BDB28
+H3BDB9C
+H3BDC00
+H3BDADC
+H3BDB3C
+=proc_stack:<0.46.0>
+39d8f4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:AD:httpd_manager
+y3:H39D5A4
+y4:A16:httpd__127_0_0_1__8888
+y5:P<0.43.0>
+39d910:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H3BDAB0
+=proc_heap:<0.46.0>
+39D5A4:t9:A5:state,A7:ip_comm,A9:undefined,A1B:httpd_conf__127_0_0_1__8888,N,A9:unblocked,A9:undefined,A9:undefined,H39D430
+39D430:lH39BF40|H39D428
+39BF40:t2:A8:max_conn,I1
+39D428:lH39BC80|H39D420
+39BC80:t2:AF:last_heavy_load,A5:never
+39D420:lH39D414|N
+39D414:t2:AF:last_connection,H39D408
+39D408:t2:H39D3E8,H39D3F8
+39D3F8:t3:I11,I22,I34
+39D3E8:t3:I2004,I4,I21
+3BDAB0:lAA:gen_server|H3BDB20
+3BDB20:lP<0.43.0>|H3BDB94
+3BDB94:lP<0.43.0>|H3BDBF8
+3BDBF8:lH3BDC48|H3BDC54
+3BDC48:t2:A5:local,A16:httpd__127_0_0_1__8888
+3BDC54:lAD:httpd_manager|H3BDCAC
+3BDCAC:lH3BDD14|H3BDD1C
+3BDD14:lA9:undefined|H3BDD9C
+3BDD9C:lH3BDA84|H3BDE2C
+3BDA84:lH3BDAF0|H3BDAFC
+3BDAF0:t2:AB:server_root,H3BDB48
+3BDB48:lI47|H3BDBB0
+3BDBB0:lI99|H3BDC0C
+3BDC0C:lI108|H3BDC64
+3BDC64:lI101|H3BDCBC
+3BDCBC:lI97|H3BDD2C
+3BDD2C:lI114|H3BDDA4
+3BDDA4:lI99|H3BDE34
+3BDE34:lI97|H3BDED4
+3BDED4:lI115|H3BDF90
+3BDF90:lI101|H3BE054
+3BE054:lI47|H3BE128
+3BE128:lI111|H3BE204
+3BE204:lI116|H3BE2EC
+3BE2EC:lI112|H3BE3E0
+3BE3E0:lI47|H3BE4E4
+3BE4E4:lI101|H3BE5E8
+3BE5E8:lI114|H3BE6EC
+3BE6EC:lI116|H3BE7E0
+3BE7E0:lI115|H3BE8CC
+3BE8CC:lI47|H3BE9B8
+3BE9B8:lI108|H3BEAAC
+3BEAAC:lI105|H3BEB98
+3BEB98:lI98|H3BEC84
+3BEC84:lI47|H3BED70
+3BED70:lI119|H3BEE5C
+3BEE5C:lI101|H3BEF30
+3BEF30:lI98|H3BEFFC
+3BEFFC:lI116|H3BF0C8
+3BF0C8:lI111|H3BF19C
+3BF19C:lI111|H3BF260
+3BF260:lI108|H3BF314
+3BF314:lI47|H3BF3C0
+3BF3C0:lI112|H3BF474
+3BF474:lI114|H3BF530
+3BF530:lI105|H3BF5F4
+3BF5F4:lI118|H3BF6C8
+3BF6C8:lI47|H3BF79C
+3BF79C:lI114|H3BF870
+3BF870:lI111|H3BF954
+3BF954:lI111|H3BFA30
+3BFA30:lI116|N
+3BDAFC:lH3BDB50|H3BDB5C
+3BDB50:t2:AD:document_root,H3BDBB8
+3BDBB8:lI47|H3BDC14
+3BDC14:lI99|H3BDC6C
+3BDC6C:lI108|H3BDCC4
+3BDCC4:lI101|H3BDD34
+3BDD34:lI97|H3BDDAC
+3BDDAC:lI114|H3BDE3C
+3BDE3C:lI99|H3BDEDC
+3BDEDC:lI97|H3BDF98
+3BDF98:lI115|H3BE05C
+3BE05C:lI101|H3BE130
+3BE130:lI47|H3BE20C
+3BE20C:lI111|H3BE2F4
+3BE2F4:lI116|H3BE3E8
+3BE3E8:lI112|H3BE4EC
+3BE4EC:lI47|H3BE5F0
+3BE5F0:lI101|H3BE6F4
+3BE6F4:lI114|H3BE7E8
+3BE7E8:lI116|H3BE8D4
+3BE8D4:lI115|H3BE9C0
+3BE9C0:lI47|H3BEAB4
+3BEAB4:lI108|H3BEBA0
+3BEBA0:lI105|H3BEC8C
+3BEC8C:lI98|H3BED78
+3BED78:lI47|H3BEE64
+3BEE64:lI119|H3BEF38
+3BEF38:lI101|H3BF004
+3BF004:lI98|H3BF0D0
+3BF0D0:lI116|H3BF1A4
+3BF1A4:lI111|H3BF268
+3BF268:lI111|H3BF31C
+3BF31C:lI108|H3BF3C8
+3BF3C8:lI47|H3BF47C
+3BF47C:lI112|H3BF538
+3BF538:lI114|H3BF5FC
+3BF5FC:lI105|H3BF6D0
+3BF6D0:lI118|H3BF7A4
+3BF7A4:lI47|H3BF878
+3BF878:lI114|H3BF95C
+3BF95C:lI111|H3BFA38
+3BFA38:lI111|H3BFB0C
+3BFB0C:lI116|H3BFBE8
+3BFBE8:lI47|H3BFCB4
+3BFCB4:lI100|H3BFD78
+3BFD78:lI111|H3BFE3C
+3BFE3C:lI99|N
+3BDB5C:lH3BDBC0|H3BDBCC
+3BDBC0:t2:AA:mime_types,H3BDC1C
+3BDC1C:lH3BDC74|H3BDC80
+3BDC74:t2:H3BDCCC,H3BDCD4
+3BDCD4:lI120|H3BDD44
+3BDD44:lI45|H3BDDBC
+3BDDBC:lI119|H3BDE44
+3BDE44:lI111|H3BDEE4
+3BDEE4:lI114|H3BDFA0
+3BDFA0:lI108|H3BE064
+3BE064:lI100|H3BE138
+3BE138:lI47|H3BE214
+3BE214:lI120|H3BE2FC
+3BE2FC:lI45|H3BE3F0
+3BE3F0:lI118|H3BE4F4
+3BE4F4:lI114|H3BE5F8
+3BE5F8:lI109|H3BE6FC
+3BE6FC:lI108|N
+3BDCCC:lI119|H3BDD3C
+3BDD3C:lI114|H3BDDB4
+3BDDB4:lI108|N
+3BDC80:lH3BDCDC|H3BDCE8
+3BDCDC:t2:H3BDD4C,H3BDD54
+3BDD54:lI120|H3BDDCC
+3BDDCC:lI45|H3BDE54
+3BDE54:lI119|H3BDEF4
+3BDEF4:lI111|H3BDFA8
+3BDFA8:lI114|H3BE06C
+3BE06C:lI108|H3BE140
+3BE140:lI100|H3BE21C
+3BE21C:lI47|H3BE304
+3BE304:lI120|H3BE3F8
+3BE3F8:lI45|H3BE4FC
+3BE4FC:lI118|H3BE600
+3BE600:lI114|H3BE704
+3BE704:lI109|H3BE7F0
+3BE7F0:lI108|N
+3BDD4C:lI118|H3BDDC4
+3BDDC4:lI114|H3BDE4C
+3BDE4C:lI109|H3BDEEC
+3BDEEC:lI108|N
+3BDCE8:lH3BDD5C|H3BDD68
+3BDD5C:t2:H3BDDD4,H3BDDDC
+3BDDDC:lI120|H3BDE64
+3BDE64:lI45|H3BDF04
+3BDF04:lI99|H3BDFB0
+3BDFB0:lI111|H3BE074
+3BE074:lI110|H3BE148
+3BE148:lI102|H3BE224
+3BE224:lI101|H3BE30C
+3BE30C:lI114|H3BE400
+3BE400:lI101|H3BE504
+3BE504:lI110|H3BE608
+3BE608:lI99|H3BE70C
+3BE70C:lI101|H3BE7F8
+3BE7F8:lI47|H3BE8DC
+3BE8DC:lI120|H3BE9C8
+3BE9C8:lI45|H3BEABC
+3BEABC:lI99|H3BEBA8
+3BEBA8:lI111|H3BEC94
+3BEC94:lI111|H3BED80
+3BED80:lI108|H3BEE6C
+3BEE6C:lI116|H3BEF40
+3BEF40:lI97|H3BF00C
+3BF00C:lI108|H3BF0D8
+3BF0D8:lI107|N
+3BDDD4:lI105|H3BDE5C
+3BDE5C:lI99|H3BDEFC
+3BDEFC:lI101|N
+3BDD68:lH3BDDE4|H3BDDF0
+3BDDE4:t2:H3BDE6C,H3BDE74
+3BDE74:lI118|H3BDF14
+3BDF14:lI105|H3BDFC0
+3BDFC0:lI100|H3BE084
+3BE084:lI101|H3BE158
+3BE158:lI111|H3BE22C
+3BE22C:lI47|H3BE314
+3BE314:lI120|H3BE408
+3BE408:lI45|H3BE50C
+3BE50C:lI115|H3BE610
+3BE610:lI103|H3BE714
+3BE714:lI105|H3BE800
+3BE800:lI45|H3BE8E4
+3BE8E4:lI109|H3BE9D0
+3BE9D0:lI111|H3BEAC4
+3BEAC4:lI118|H3BEBB0
+3BEBB0:lI105|H3BEC9C
+3BEC9C:lI101|N
+3BDE6C:lI109|H3BDF0C
+3BDF0C:lI111|H3BDFB8
+3BDFB8:lI118|H3BE07C
+3BE07C:lI105|H3BE150
+3BE150:lI101|N
+3BDDF0:lH3BDE7C|H3BDE88
+3BDE7C:t2:H3BDF1C,H3BDF24
+3BDF24:lI118|H3BDFD0
+3BDFD0:lI105|H3BE094
+3BE094:lI100|H3BE160
+3BE160:lI101|H3BE234
+3BE234:lI111|H3BE31C
+3BE31C:lI47|H3BE410
+3BE410:lI120|H3BE514
+3BE514:lI45|H3BE618
+3BE618:lI109|H3BE71C
+3BE71C:lI115|H3BE808
+3BE808:lI118|H3BE8EC
+3BE8EC:lI105|H3BE9D8
+3BE9D8:lI100|H3BEACC
+3BEACC:lI101|H3BEBB8
+3BEBB8:lI111|N
+3BDF1C:lI97|H3BDFC8
+3BDFC8:lI118|H3BE08C
+3BE08C:lI105|N
+3BDE88:lH3BDF2C|H3BDF38
+3BDF2C:t2:H3BDFD8,H3BDFE0
+3BDFE0:lI118|H3BE0A4
+3BE0A4:lI105|H3BE168
+3BE168:lI100|H3BE23C
+3BE23C:lI101|H3BE324
+3BE324:lI111|H3BE418
+3BE418:lI47|H3BE51C
+3BE51C:lI113|H3BE620
+3BE620:lI117|H3BE724
+3BE724:lI105|H3BE810
+3BE810:lI99|H3BE8F4
+3BE8F4:lI107|H3BE9E0
+3BE9E0:lI116|H3BEAD4
+3BEAD4:lI105|H3BEBC0
+3BEBC0:lI109|H3BECA4
+3BECA4:lI101|N
+3BDFD8:lI113|H3BE09C
+3BE09C:lI116|N
+3BDF38:lH3BDFE8|H3BDFF4
+3BDFE8:t2:H3BE0AC,H3BE0B4
+3BE0B4:lI118|H3BE178
+3BE178:lI105|H3BE24C
+3BE24C:lI100|H3BE32C
+3BE32C:lI101|H3BE420
+3BE420:lI111|H3BE524
+3BE524:lI47|H3BE628
+3BE628:lI113|H3BE72C
+3BE72C:lI117|H3BE818
+3BE818:lI105|H3BE8FC
+3BE8FC:lI99|H3BE9E8
+3BE9E8:lI107|H3BEADC
+3BEADC:lI116|H3BEBC8
+3BEBC8:lI105|H3BECAC
+3BECAC:lI109|H3BED88
+3BED88:lI101|N
+3BE0AC:lI109|H3BE170
+3BE170:lI111|H3BE244
+3BE244:lI118|N
+3BDFF4:lH3BE0BC|H3BE0C8
+3BE0BC:t2:H3BE180,H3BE188
+3BE188:lI118|H3BE25C
+3BE25C:lI105|H3BE33C
+3BE33C:lI100|H3BE430
+3BE430:lI101|H3BE52C
+3BE52C:lI111|H3BE630
+3BE630:lI47|H3BE734
+3BE734:lI109|H3BE820
+3BE820:lI112|H3BE904
+3BE904:lI101|H3BE9F0
+3BE9F0:lI103|N
+3BE180:lI109|H3BE254
+3BE254:lI112|H3BE334
+3BE334:lI101|H3BE428
+3BE428:lI103|N
+3BE0C8:lH3BE190|H3BE19C
+3BE190:t2:H3BE264,H3BE26C
+3BE26C:lI118|H3BE34C
+3BE34C:lI105|H3BE440
+3BE440:lI100|H3BE534
+3BE534:lI101|H3BE638
+3BE638:lI111|H3BE73C
+3BE73C:lI47|H3BE828
+3BE828:lI109|H3BE90C
+3BE90C:lI112|H3BE9F8
+3BE9F8:lI101|H3BEAE4
+3BEAE4:lI103|N
+3BE264:lI109|H3BE344
+3BE344:lI112|H3BE438
+3BE438:lI103|N
+3BE19C:lH3BE274|H3BE280
+3BE274:t2:H3BE354,H3BE35C
+3BE35C:lI118|H3BE450
+3BE450:lI105|H3BE544
+3BE544:lI100|H3BE640
+3BE640:lI101|H3BE744
+3BE744:lI111|H3BE830
+3BE830:lI47|H3BE914
+3BE914:lI109|H3BEA00
+3BEA00:lI112|H3BEAEC
+3BEAEC:lI101|H3BEBD0
+3BEBD0:lI103|N
+3BE354:lI109|H3BE448
+3BE448:lI112|H3BE53C
+3BE53C:lI101|N
+3BE280:lH3BE364|H3BE370
+3BE364:t2:H3BE458,H3BE460
+3BE460:lI116|H3BE554
+3BE554:lI101|H3BE650
+3BE650:lI120|H3BE754
+3BE754:lI116|H3BE838
+3BE838:lI47|H3BE91C
+3BE91C:lI120|H3BEA08
+3BEA08:lI45|H3BEAF4
+3BEAF4:lI115|H3BEBD8
+3BEBD8:lI103|H3BECB4
+3BECB4:lI109|H3BED90
+3BED90:lI108|N
+3BE458:lI115|H3BE54C
+3BE54C:lI103|H3BE648
+3BE648:lI109|H3BE74C
+3BE74C:lI108|N
+3BE370:lH3BE468|H3BE474
+3BE468:t2:H3BE55C,H3BE564
+3BE564:lI116|H3BE660
+3BE660:lI101|H3BE764
+3BE764:lI120|H3BE840
+3BE840:lI116|H3BE924
+3BE924:lI47|H3BEA10
+3BEA10:lI120|H3BEAFC
+3BEAFC:lI45|H3BEBE0
+3BEBE0:lI115|H3BECBC
+3BECBC:lI103|H3BED98
+3BED98:lI109|H3BEE74
+3BEE74:lI108|N
+3BE55C:lI115|H3BE658
+3BE658:lI103|H3BE75C
+3BE75C:lI109|N
+3BE474:lH3BE56C|H3BE578
+3BE56C:t2:H3BE668,H3BE670
+3BE670:lI116|H3BE774
+3BE774:lI101|H3BE850
+3BE850:lI120|H3BE92C
+3BE92C:lI116|H3BEA18
+3BEA18:lI47|H3BEB04
+3BEB04:lI120|H3BEBE8
+3BEBE8:lI45|H3BECC4
+3BECC4:lI115|H3BEDA0
+3BEDA0:lI101|H3BEE7C
+3BEE7C:lI116|H3BEF48
+3BEF48:lI101|H3BF014
+3BF014:lI120|H3BF0E0
+3BF0E0:lI116|N
+3BE668:lI101|H3BE76C
+3BE76C:lI116|H3BE848
+3BE848:lI120|N
+3BE578:lH3BE678|H3BE684
+3BE678:t2:H3BE77C,H3BE784
+3BE784:lI116|H3BE860
+3BE860:lI101|H3BE93C
+3BE93C:lI120|H3BEA20
+3BEA20:lI116|H3BEB0C
+3BEB0C:lI47|H3BEBF0
+3BEBF0:lI116|H3BECCC
+3BECCC:lI97|H3BEDA8
+3BEDA8:lI98|H3BEE84
+3BEE84:lI45|H3BEF50
+3BEF50:lI115|H3BF01C
+3BF01C:lI101|H3BF0E8
+3BF0E8:lI112|H3BF1AC
+3BF1AC:lI97|H3BF270
+3BF270:lI114|H3BF324
+3BF324:lI97|H3BF3D0
+3BF3D0:lI116|H3BF484
+3BF484:lI101|H3BF540
+3BF540:lI100|H3BF604
+3BF604:lI45|H3BF6D8
+3BF6D8:lI118|H3BF7AC
+3BF7AC:lI97|H3BF880
+3BF880:lI108|H3BF964
+3BF964:lI117|H3BFA40
+3BFA40:lI101|H3BFB14
+3BFB14:lI115|N
+3BE77C:lI116|H3BE858
+3BE858:lI115|H3BE934
+3BE934:lI118|N
+3BE684:lH3BE78C|H3BE798
+3BE78C:t2:H3BE868,H3BE870
+3BE870:lI116|H3BE94C
+3BE94C:lI101|H3BEA30
+3BEA30:lI120|H3BEB14
+3BEB14:lI116|H3BEBF8
+3BEBF8:lI47|H3BECD4
+3BECD4:lI114|H3BEDB0
+3BEDB0:lI105|H3BEE8C
+3BEE8C:lI99|H3BEF58
+3BEF58:lI104|H3BF024
+3BF024:lI116|H3BF0F0
+3BF0F0:lI101|H3BF1B4
+3BF1B4:lI120|H3BF278
+3BF278:lI116|N
+3BE868:lI114|H3BE944
+3BE944:lI116|H3BEA28
+3BEA28:lI120|N
+3BE798:lH3BE878|H3BE884
+3BE878:t2:H3BE954,H3BE95C
+3BE95C:lI116|H3BEA40
+3BEA40:lI101|H3BEB24
+3BEB24:lI120|H3BEC00
+3BEC00:lI116|H3BECDC
+3BECDC:lI47|H3BEDB8
+3BEDB8:lI112|H3BEE94
+3BEE94:lI108|H3BEF60
+3BEF60:lI97|H3BF02C
+3BF02C:lI105|H3BF0F8
+3BF0F8:lI110|N
+3BE954:lI116|H3BEA38
+3BEA38:lI120|H3BEB1C
+3BEB1C:lI116|N
+3BE884:lH3BE964|H3BE970
+3BE964:t2:H3BEA48,H3BEA50
+3BEA50:lI116|H3BEB34
+3BEB34:lI101|H3BEC10
+3BEC10:lI120|H3BECEC
+3BECEC:lI116|H3BEDC8
+3BEDC8:lI47|H3BEE9C
+3BEE9C:lI120|H3BEF68
+3BEF68:lI45|H3BF034
+3BF034:lI115|H3BF100
+3BF100:lI101|H3BF1BC
+3BF1BC:lI114|H3BF280
+3BF280:lI118|H3BF32C
+3BF32C:lI101|H3BF3D8
+3BF3D8:lI114|H3BF48C
+3BF48C:lI45|H3BF548
+3BF548:lI112|H3BF60C
+3BF60C:lI97|H3BF6E0
+3BF6E0:lI114|H3BF7B4
+3BF7B4:lI115|H3BF888
+3BF888:lI101|H3BF96C
+3BF96C:lI100|H3BFA48
+3BFA48:lI45|H3BFB1C
+3BFB1C:lI104|H3BFBF0
+3BFBF0:lI116|H3BFCBC
+3BFCBC:lI109|H3BFD80
+3BFD80:lI108|N
+3BEA48:lI115|H3BEB2C
+3BEB2C:lI104|H3BEC08
+3BEC08:lI116|H3BECE4
+3BECE4:lI109|H3BEDC0
+3BEDC0:lI108|N
+3BE970:lH3BEA58|H3BEA64
+3BEA58:t2:H3BEB3C,H3BEB44
+3BEB44:lI116|H3BEC20
+3BEC20:lI101|H3BECFC
+3BECFC:lI120|H3BEDD8
+3BEDD8:lI116|H3BEEA4
+3BEEA4:lI47|H3BEF70
+3BEF70:lI104|H3BF03C
+3BF03C:lI116|H3BF108
+3BF108:lI109|H3BF1C4
+3BF1C4:lI108|N
+3BEB3C:lI104|H3BEC18
+3BEC18:lI116|H3BECF4
+3BECF4:lI109|H3BEDD0
+3BEDD0:lI108|N
+3BEA64:lH3BEB4C|H3BEB58
+3BEB4C:t2:H3BEC28,H3BEC30
+3BEC30:lI116|H3BED0C
+3BED0C:lI101|H3BEDE8
+3BEDE8:lI120|H3BEEAC
+3BEEAC:lI116|H3BEF78
+3BEF78:lI47|H3BF044
+3BF044:lI104|H3BF110
+3BF110:lI116|H3BF1CC
+3BF1CC:lI109|H3BF288
+3BF288:lI108|N
+3BEC28:lI104|H3BED04
+3BED04:lI116|H3BEDE0
+3BEDE0:lI109|N
+3BEB58:lH3BEC38|H3BEC44
+3BEC38:t2:H3BED14,H3BED1C
+3BED1C:lI105|H3BEDF8
+3BEDF8:lI109|H3BEEBC
+3BEEBC:lI97|H3BEF80
+3BEF80:lI103|H3BF04C
+3BF04C:lI101|H3BF118
+3BF118:lI47|H3BF1D4
+3BF1D4:lI120|H3BF290
+3BF290:lI45|H3BF334
+3BF334:lI120|H3BF3E0
+3BF3E0:lI119|H3BF494
+3BF494:lI105|H3BF550
+3BF550:lI110|H3BF614
+3BF614:lI100|H3BF6E8
+3BF6E8:lI111|H3BF7BC
+3BF7BC:lI119|H3BF890
+3BF890:lI100|H3BF974
+3BF974:lI117|H3BFA50
+3BFA50:lI109|H3BFB24
+3BFB24:lI112|N
+3BED14:lI120|H3BEDF0
+3BEDF0:lI119|H3BEEB4
+3BEEB4:lI100|N
+3BEC44:lH3BED24|H3BED30
+3BED24:t2:H3BEE00,H3BEE08
+3BEE08:lI105|H3BEECC
+3BEECC:lI109|H3BEF90
+3BEF90:lI97|H3BF054
+3BF054:lI103|H3BF120
+3BF120:lI101|H3BF1DC
+3BF1DC:lI47|H3BF298
+3BF298:lI120|H3BF33C
+3BF33C:lI45|H3BF3E8
+3BF3E8:lI120|H3BF49C
+3BF49C:lI112|H3BF558
+3BF558:lI105|H3BF61C
+3BF61C:lI120|H3BF6F0
+3BF6F0:lI109|H3BF7C4
+3BF7C4:lI97|H3BF898
+3BF898:lI112|N
+3BEE00:lI120|H3BEEC4
+3BEEC4:lI112|H3BEF88
+3BEF88:lI109|N
+3BED30:lH3BEE10|H3BEE1C
+3BEE10:t2:H3BEED4,H3BEEDC
+3BEEDC:lI105|H3BEFA0
+3BEFA0:lI109|H3BF064
+3BF064:lI97|H3BF128
+3BF128:lI103|H3BF1E4
+3BF1E4:lI101|H3BF2A0
+3BF2A0:lI47|H3BF344
+3BF344:lI120|H3BF3F0
+3BF3F0:lI45|H3BF4A4
+3BF4A4:lI120|H3BF560
+3BF560:lI98|H3BF624
+3BF624:lI105|H3BF6F8
+3BF6F8:lI116|H3BF7CC
+3BF7CC:lI109|H3BF8A0
+3BF8A0:lI97|H3BF97C
+3BF97C:lI112|N
+3BEED4:lI120|H3BEF98
+3BEF98:lI98|H3BF05C
+3BF05C:lI109|N
+3BEE1C:lH3BEEE4|H3BEEF0
+3BEEE4:t2:H3BEFA8,H3BEFB0
+3BEFB0:lI105|H3BF074
+3BF074:lI109|H3BF138
+3BF138:lI97|H3BF1EC
+3BF1EC:lI103|H3BF2A8
+3BF2A8:lI101|H3BF34C
+3BF34C:lI47|H3BF3F8
+3BF3F8:lI120|H3BF4AC
+3BF4AC:lI45|H3BF568
+3BF568:lI114|H3BF62C
+3BF62C:lI103|H3BF700
+3BF700:lI98|N
+3BEFA8:lI114|H3BF06C
+3BF06C:lI103|H3BF130
+3BF130:lI98|N
+3BEEF0:lH3BEFB8|H3BEFC4
+3BEFB8:t2:H3BF07C,H3BF084
+3BF084:lI105|H3BF148
+3BF148:lI109|H3BF1FC
+3BF1FC:lI97|H3BF2B0
+3BF2B0:lI103|H3BF354
+3BF354:lI101|H3BF400
+3BF400:lI47|H3BF4B4
+3BF4B4:lI120|H3BF570
+3BF570:lI45|H3BF634
+3BF634:lI112|H3BF708
+3BF708:lI111|H3BF7D4
+3BF7D4:lI114|H3BF8A8
+3BF8A8:lI116|H3BF984
+3BF984:lI97|H3BFA58
+3BFA58:lI98|H3BFB2C
+3BFB2C:lI108|H3BFBF8
+3BFBF8:lI101|H3BFCC4
+3BFCC4:lI45|H3BFD88
+3BFD88:lI112|H3BFE44
+3BFE44:lI105|H3BFEF0
+3BFEF0:lI120|H3BFFA4
+3BFFA4:lI109|H3C0050
+3C0050:lI97|H3C00FC
+3C00FC:lI112|N
+3BF07C:lI112|H3BF140
+3BF140:lI112|H3BF1F4
+3BF1F4:lI109|N
+3BEFC4:lH3BF08C|H3BF098
+3BF08C:t2:H3BF150,H3BF158
+3BF158:lI105|H3BF20C
+3BF20C:lI109|H3BF2C0
+3BF2C0:lI97|H3BF35C
+3BF35C:lI103|H3BF408
+3BF408:lI101|H3BF4BC
+3BF4BC:lI47|H3BF578
+3BF578:lI120|H3BF63C
+3BF63C:lI45|H3BF710
+3BF710:lI112|H3BF7DC
+3BF7DC:lI111|H3BF8B0
+3BF8B0:lI114|H3BF98C
+3BF98C:lI116|H3BFA60
+3BFA60:lI97|H3BFB34
+3BFB34:lI98|H3BFC00
+3BFC00:lI108|H3BFCCC
+3BFCCC:lI101|H3BFD90
+3BFD90:lI45|H3BFE4C
+3BFE4C:lI103|H3BFEF8
+3BFEF8:lI114|H3BFFAC
+3BFFAC:lI97|H3C0058
+3C0058:lI121|H3C0104
+3C0104:lI109|H3C01A8
+3C01A8:lI97|H3C025C
+3C025C:lI112|N
+3BF150:lI112|H3BF204
+3BF204:lI103|H3BF2B8
+3BF2B8:lI109|N
+3BF098:lH3BF160|H3BF16C
+3BF160:t2:H3BF214,H3BF21C
+3BF21C:lI105|H3BF2D0
+3BF2D0:lI109|H3BF36C
+3BF36C:lI97|H3BF410
+3BF410:lI103|H3BF4C4
+3BF4C4:lI101|H3BF580
+3BF580:lI47|H3BF644
+3BF644:lI120|H3BF718
+3BF718:lI45|H3BF7E4
+3BF7E4:lI112|H3BF8B8
+3BF8B8:lI111|H3BF994
+3BF994:lI114|H3BFA68
+3BFA68:lI116|H3BFB3C
+3BFB3C:lI97|H3BFC08
+3BFC08:lI98|H3BFCD4
+3BFCD4:lI108|H3BFD98
+3BFD98:lI101|H3BFE54
+3BFE54:lI45|H3BFF00
+3BFF00:lI98|H3BFFB4
+3BFFB4:lI105|H3C0060
+3C0060:lI116|H3C010C
+3C010C:lI109|H3C01B0
+3C01B0:lI97|H3C0264
+3C0264:lI112|N
+3BF214:lI112|H3BF2C8
+3BF2C8:lI98|H3BF364
+3BF364:lI109|N
+3BF16C:lH3BF224|H3BF230
+3BF224:t2:H3BF2D8,H3BF2E0
+3BF2E0:lI105|H3BF37C
+3BF37C:lI109|H3BF420
+3BF420:lI97|H3BF4CC
+3BF4CC:lI103|H3BF588
+3BF588:lI101|H3BF64C
+3BF64C:lI47|H3BF720
+3BF720:lI120|H3BF7EC
+3BF7EC:lI45|H3BF8C0
+3BF8C0:lI112|H3BF99C
+3BF99C:lI111|H3BFA70
+3BFA70:lI114|H3BFB44
+3BFB44:lI116|H3BFC10
+3BFC10:lI97|H3BFCDC
+3BFCDC:lI98|H3BFDA0
+3BFDA0:lI108|H3BFE5C
+3BFE5C:lI101|H3BFF08
+3BFF08:lI45|H3BFFBC
+3BFFBC:lI97|H3C0068
+3C0068:lI110|H3C0114
+3C0114:lI121|H3C01B8
+3C01B8:lI109|H3C026C
+3C026C:lI97|H3C0318
+3C0318:lI112|N
+3BF2D8:lI112|H3BF374
+3BF374:lI110|H3BF418
+3BF418:lI109|N
+3BF230:lH3BF2E8|H3BF2F4
+3BF2E8:t2:H3BF384,H3BF38C
+3BF38C:lI105|H3BF430
+3BF430:lI109|H3BF4DC
+3BF4DC:lI97|H3BF590
+3BF590:lI103|H3BF654
+3BF654:lI101|H3BF728
+3BF728:lI47|H3BF7F4
+3BF7F4:lI120|H3BF8C8
+3BF8C8:lI45|H3BF9A4
+3BF9A4:lI99|H3BFA78
+3BFA78:lI109|H3BFB4C
+3BFB4C:lI117|H3BFC18
+3BFC18:lI45|H3BFCE4
+3BFCE4:lI114|H3BFDA8
+3BFDA8:lI97|H3BFE64
+3BFE64:lI115|H3BFF10
+3BFF10:lI116|H3BFFC4
+3BFFC4:lI101|H3C0070
+3C0070:lI114|N
+3BF384:lI114|H3BF428
+3BF428:lI97|H3BF4D4
+3BF4D4:lI115|N
+3BF2F4:lH3BF394|H3BF3A0
+3BF394:t2:H3BF438,H3BF440
+3BF440:lI105|H3BF4EC
+3BF4EC:lI109|H3BF5A0
+3BF5A0:lI97|H3BF664
+3BF664:lI103|H3BF730
+3BF730:lI101|H3BF7FC
+3BF7FC:lI47|H3BF8D0
+3BF8D0:lI116|H3BF9AC
+3BF9AC:lI105|H3BFA80
+3BFA80:lI102|H3BFB54
+3BFB54:lI102|N
+3BF438:lI116|H3BF4E4
+3BF4E4:lI105|H3BF598
+3BF598:lI102|H3BF65C
+3BF65C:lI102|N
+3BF3A0:lH3BF448|H3BF454
+3BF448:t2:H3BF4F4,H3BF4FC
+3BF4FC:lI105|H3BF5B0
+3BF5B0:lI109|H3BF674
+3BF674:lI97|H3BF738
+3BF738:lI103|H3BF804
+3BF804:lI101|H3BF8D8
+3BF8D8:lI47|H3BF9B4
+3BF9B4:lI116|H3BFA88
+3BFA88:lI105|H3BFB5C
+3BFB5C:lI102|H3BFC20
+3BFC20:lI102|N
+3BF4F4:lI116|H3BF5A8
+3BF5A8:lI105|H3BF66C
+3BF66C:lI102|N
+3BF454:lH3BF504|H3BF510
+3BF504:t2:H3BF5B8,H3BF5C0
+3BF5C0:lI105|H3BF684
+3BF684:lI109|H3BF748
+3BF748:lI97|H3BF80C
+3BF80C:lI103|H3BF8E0
+3BF8E0:lI101|H3BF9BC
+3BF9BC:lI47|H3BFA90
+3BFA90:lI112|H3BFB64
+3BFB64:lI110|H3BFC28
+3BFC28:lI103|N
+3BF5B8:lI112|H3BF67C
+3BF67C:lI110|H3BF740
+3BF740:lI103|N
+3BF510:lH3BF5C8|H3BF5D4
+3BF5C8:t2:H3BF68C,H3BF694
+3BF694:lI105|H3BF758
+3BF758:lI109|H3BF81C
+3BF81C:lI97|H3BF8F0
+3BF8F0:lI103|H3BF9C4
+3BF9C4:lI101|H3BFA98
+3BFA98:lI47|H3BFB6C
+3BFB6C:lI106|H3BFC30
+3BFC30:lI112|H3BFCEC
+3BFCEC:lI101|H3BFDB0
+3BFDB0:lI103|N
+3BF68C:lI106|H3BF750
+3BF750:lI112|H3BF814
+3BF814:lI101|H3BF8E8
+3BF8E8:lI103|N
+3BF5D4:lH3BF69C|H3BF6A8
+3BF69C:t2:H3BF760,H3BF768
+3BF768:lI105|H3BF82C
+3BF82C:lI109|H3BF900
+3BF900:lI97|H3BF9CC
+3BF9CC:lI103|H3BFAA0
+3BFAA0:lI101|H3BFB74
+3BFB74:lI47|H3BFC38
+3BFC38:lI106|H3BFCF4
+3BFCF4:lI112|H3BFDB8
+3BFDB8:lI101|H3BFE6C
+3BFE6C:lI103|N
+3BF760:lI106|H3BF824
+3BF824:lI112|H3BF8F8
+3BF8F8:lI103|N
+3BF6A8:lH3BF770|H3BF77C
+3BF770:t2:H3BF834,H3BF83C
+3BF83C:lI105|H3BF910
+3BF910:lI109|H3BF9DC
+3BF9DC:lI97|H3BFAA8
+3BFAA8:lI103|H3BFB7C
+3BFB7C:lI101|H3BFC40
+3BFC40:lI47|H3BFCFC
+3BFCFC:lI106|H3BFDC0
+3BFDC0:lI112|H3BFE74
+3BFE74:lI101|H3BFF18
+3BFF18:lI103|N
+3BF834:lI106|H3BF908
+3BF908:lI112|H3BF9D4
+3BF9D4:lI101|N
+3BF77C:lH3BF844|H3BF850
+3BF844:t2:H3BF918,H3BF920
+3BF920:lI105|H3BF9EC
+3BF9EC:lI109|H3BFAB8
+3BFAB8:lI97|H3BFB84
+3BFB84:lI103|H3BFC48
+3BFC48:lI101|H3BFD04
+3BFD04:lI47|H3BFDC8
+3BFDC8:lI105|H3BFE7C
+3BFE7C:lI101|H3BFF20
+3BFF20:lI102|N
+3BF918:lI105|H3BF9E4
+3BF9E4:lI101|H3BFAB0
+3BFAB0:lI102|N
+3BF850:lH3BF928|H3BF934
+3BF928:t2:H3BF9F4,H3BF9FC
+3BF9FC:lI105|H3BFAC8
+3BFAC8:lI109|H3BFB94
+3BFB94:lI97|H3BFC50
+3BFC50:lI103|H3BFD0C
+3BFD0C:lI101|H3BFDD0
+3BFDD0:lI47|H3BFE84
+3BFE84:lI103|H3BFF28
+3BFF28:lI105|H3BFFCC
+3BFFCC:lI102|N
+3BF9F4:lI103|H3BFAC0
+3BFAC0:lI105|H3BFB8C
+3BFB8C:lI102|N
+3BF934:lH3BFA04|H3BFA10
+3BFA04:t2:H3BFAD0,H3BFAD8
+3BFAD8:lI99|H3BFBA4
+3BFBA4:lI104|H3BFC60
+3BFC60:lI101|H3BFD14
+3BFD14:lI109|H3BFDD8
+3BFDD8:lI105|H3BFE8C
+3BFE8C:lI99|H3BFF30
+3BFF30:lI97|H3BFFD4
+3BFFD4:lI108|H3C0078
+3C0078:lI47|H3C011C
+3C011C:lI120|H3C01C0
+3C01C0:lI45|H3C0274
+3C0274:lI112|H3C0320
+3C0320:lI100|H3C03CC
+3C03CC:lI98|N
+3BFAD0:lI112|H3BFB9C
+3BFB9C:lI100|H3BFC58
+3BFC58:lI98|N
+3BFA10:lH3BFAE0|H3BFAEC
+3BFAE0:t2:H3BFBAC,H3BFBB4
+3BFBB4:lI99|H3BFC70
+3BFC70:lI104|H3BFD24
+3BFD24:lI101|H3BFDE0
+3BFDE0:lI109|H3BFE94
+3BFE94:lI105|H3BFF38
+3BFF38:lI99|H3BFFDC
+3BFFDC:lI97|H3C0080
+3C0080:lI108|H3C0124
+3C0124:lI47|H3C01C8
+3C01C8:lI120|H3C027C
+3C027C:lI45|H3C0328
+3C0328:lI112|H3C03D4
+3C03D4:lI100|H3C0460
+3C0460:lI98|N
+3BFBAC:lI120|H3BFC68
+3BFC68:lI121|H3BFD1C
+3BFD1C:lI122|N
+3BFAEC:lH3BFBBC|H3BFBC8
+3BFBBC:t2:H3BFC78,H3BFC80
+3BFC80:lI97|H3BFD34
+3BFD34:lI117|H3BFDF0
+3BFDF0:lI100|H3BFE9C
+3BFE9C:lI105|H3BFF40
+3BFF40:lI111|H3BFFE4
+3BFFE4:lI47|H3C0088
+3C0088:lI120|H3C012C
+3C012C:lI45|H3C01D0
+3C01D0:lI119|H3C0284
+3C0284:lI97|H3C0330
+3C0330:lI118|N
+3BFC78:lI119|H3BFD2C
+3BFD2C:lI97|H3BFDE8
+3BFDE8:lI118|N
+3BFBC8:lH3BFC88|H3BFC94
+3BFC88:t2:H3BFD3C,H3BFD44
+3BFD44:lI97|H3BFE00
+3BFE00:lI117|H3BFEA4
+3BFEA4:lI100|H3BFF48
+3BFF48:lI105|H3BFFEC
+3BFFEC:lI111|H3C0090
+3C0090:lI47|H3C0134
+3C0134:lI120|H3C01D8
+3C01D8:lI45|H3C028C
+3C028C:lI114|H3C0338
+3C0338:lI101|H3C03DC
+3C03DC:lI97|H3C0468
+3C0468:lI108|H3C04FC
+3C04FC:lI97|H3C0598
+3C0598:lI117|H3C063C
+3C063C:lI100|H3C06E8
+3C06E8:lI105|H3C0794
+3C0794:lI111|N
+3BFD3C:lI114|H3BFDF8
+3BFDF8:lI97|N
+3BFC94:lH3BFD4C|H3BFD58
+3BFD4C:t2:H3BFE08,H3BFE10
+3BFE10:lI97|H3BFEB4
+3BFEB4:lI117|H3BFF58
+3BFF58:lI100|H3BFFF4
+3BFFF4:lI105|H3C0098
+3C0098:lI111|H3C013C
+3C013C:lI47|H3C01E0
+3C01E0:lI120|H3C0294
+3C0294:lI45|H3C0340
+3C0340:lI112|H3C03E4
+3C03E4:lI110|H3C0470
+3C0470:lI45|H3C0504
+3C0504:lI114|H3C05A0
+3C05A0:lI101|H3C0644
+3C0644:lI97|H3C06F0
+3C06F0:lI108|H3C079C
+3C079C:lI97|H3C0838
+3C0838:lI117|H3C08C4
+3C08C4:lI100|H3C0958
+3C0958:lI105|H3C09EC
+3C09EC:lI111|H3C0A88
+3C0A88:lI45|H3C0B2C
+3C0B2C:lI112|H3C0BD0
+3C0BD0:lI108|H3C0C84
+3C0C84:lI117|H3C0D38
+3C0D38:lI103|H3C0DEC
+3C0DEC:lI105|H3C0EA0
+3C0EA0:lI110|N
+3BFE08:lI114|H3BFEAC
+3BFEAC:lI112|H3BFF50
+3BFF50:lI109|N
+3BFD58:lH3BFE18|H3BFE24
+3BFE18:t2:H3BFEBC,H3BFEC4
+3BFEC4:lI97|H3BFF68
+3BFF68:lI117|H3C0004
+3C0004:lI100|H3C00A0
+3C00A0:lI105|H3C0144
+3C0144:lI111|H3C01E8
+3C01E8:lI47|H3C029C
+3C029C:lI120|H3C0348
+3C0348:lI45|H3C03EC
+3C03EC:lI112|H3C0478
+3C0478:lI110|H3C050C
+3C050C:lI45|H3C05A8
+3C05A8:lI114|H3C064C
+3C064C:lI101|H3C06F8
+3C06F8:lI97|H3C07A4
+3C07A4:lI108|H3C0840
+3C0840:lI97|H3C08CC
+3C08CC:lI117|H3C0960
+3C0960:lI100|H3C09F4
+3C09F4:lI105|H3C0A90
+3C0A90:lI111|N
+3BFEBC:lI114|H3BFF60
+3BFF60:lI97|H3BFFFC
+3BFFFC:lI109|N
+3BFE24:lH3BFECC|H3BFED8
+3BFECC:t2:H3BFF70,H3BFF78
+3BFF78:lI97|H3C0014
+3C0014:lI117|H3C00B0
+3C00B0:lI100|H3C014C
+3C014C:lI105|H3C01F0
+3C01F0:lI111|H3C02A4
+3C02A4:lI47|H3C0350
+3C0350:lI120|H3C03F4
+3C03F4:lI45|H3C0480
+3C0480:lI97|H3C0514
+3C0514:lI105|H3C05B0
+3C05B0:lI102|H3C0654
+3C0654:lI102|N
+3BFF70:lI97|H3C000C
+3C000C:lI105|H3C00A8
+3C00A8:lI102|N
+3BFED8:lH3BFF80|H3BFF8C
+3BFF80:t2:H3C001C,H3C0024
+3C0024:lI97|H3C00C0
+3C00C0:lI117|H3C015C
+3C015C:lI100|H3C0200
+3C0200:lI105|H3C02AC
+3C02AC:lI111|H3C0358
+3C0358:lI47|H3C03FC
+3C03FC:lI120|H3C0488
+3C0488:lI45|H3C051C
+3C051C:lI97|H3C05B8
+3C05B8:lI105|H3C065C
+3C065C:lI102|H3C0700
+3C0700:lI102|N
+3C001C:lI97|H3C00B8
+3C00B8:lI105|H3C0154
+3C0154:lI102|H3C01F8
+3C01F8:lI102|N
+3BFF8C:lH3C002C|H3C0038
+3C002C:t2:H3C00C8,H3C00D0
+3C00D0:lI97|H3C016C
+3C016C:lI117|H3C0210
+3C0210:lI100|H3C02BC
+3C02BC:lI105|H3C0360
+3C0360:lI111|H3C0404
+3C0404:lI47|H3C0490
+3C0490:lI120|H3C0524
+3C0524:lI45|H3C05C0
+3C05C0:lI97|H3C0664
+3C0664:lI105|H3C0708
+3C0708:lI102|H3C07AC
+3C07AC:lI102|N
+3C00C8:lI97|H3C0164
+3C0164:lI105|H3C0208
+3C0208:lI102|H3C02B4
+3C02B4:lI99|N
+3C0038:lH3C00D8|H3C00E4
+3C00D8:t2:H3C0174,H3C017C
+3C017C:lI97|H3C0220
+3C0220:lI117|H3C02CC
+3C02CC:lI100|H3C0370
+3C0370:lI105|H3C040C
+3C040C:lI111|H3C0498
+3C0498:lI47|H3C052C
+3C052C:lI109|H3C05C8
+3C05C8:lI112|H3C066C
+3C066C:lI101|H3C0710
+3C0710:lI103|N
+3C0174:lI109|H3C0218
+3C0218:lI112|H3C02C4
+3C02C4:lI103|H3C0368
+3C0368:lI97|N
+3C00E4:lH3C0184|H3C0190
+3C0184:t2:H3C0228,H3C0230
+3C0230:lI97|H3C02DC
+3C02DC:lI117|H3C0380
+3C0380:lI100|H3C0414
+3C0414:lI105|H3C04A0
+3C04A0:lI111|H3C0534
+3C0534:lI47|H3C05D0
+3C05D0:lI109|H3C0674
+3C0674:lI112|H3C0718
+3C0718:lI101|H3C07B4
+3C07B4:lI103|N
+3C0228:lI109|H3C02D4
+3C02D4:lI112|H3C0378
+3C0378:lI50|N
+3C0190:lH3C0238|H3C0244
+3C0238:t2:H3C02E4,H3C02EC
+3C02EC:lI97|H3C0390
+3C0390:lI117|H3C041C
+3C041C:lI100|H3C04A8
+3C04A8:lI105|H3C053C
+3C053C:lI111|H3C05D8
+3C05D8:lI47|H3C067C
+3C067C:lI98|H3C0720
+3C0720:lI97|H3C07BC
+3C07BC:lI115|H3C0848
+3C0848:lI105|H3C08D4
+3C08D4:lI99|N
+3C02E4:lI97|H3C0388
+3C0388:lI117|N
+3C0244:lH3C02F4|H3C0300
+3C02F4:t2:H3C0398,H3C03A0
+3C03A0:lI97|H3C042C
+3C042C:lI117|H3C04B8
+3C04B8:lI100|H3C0544
+3C0544:lI105|H3C05E0
+3C05E0:lI111|H3C0684
+3C0684:lI47|H3C0728
+3C0728:lI98|H3C07C4
+3C07C4:lI97|H3C0850
+3C0850:lI115|H3C08DC
+3C08DC:lI105|H3C0968
+3C0968:lI99|N
+3C0398:lI115|H3C0424
+3C0424:lI110|H3C04B0
+3C04B0:lI100|N
+3C0300:lH3C03A8|H3C03B4
+3C03A8:t2:H3C0434,H3C043C
+3C043C:lI97|H3C04C8
+3C04C8:lI112|H3C0554
+3C0554:lI112|H3C05E8
+3C05E8:lI108|H3C068C
+3C068C:lI105|H3C0730
+3C0730:lI99|H3C07CC
+3C07CC:lI97|H3C0858
+3C0858:lI116|H3C08E4
+3C08E4:lI105|H3C0970
+3C0970:lI111|H3C09FC
+3C09FC:lI110|H3C0A98
+3C0A98:lI47|H3C0B34
+3C0B34:lI122|H3C0BD8
+3C0BD8:lI105|H3C0C8C
+3C0C8C:lI112|N
+3C0434:lI122|H3C04C0
+3C04C0:lI105|H3C054C
+3C054C:lI112|N
+3C03B4:lH3C0444|H3C0450
+3C0444:t2:H3C04D0,H3C04D8
+3C04D8:lI97|H3C0564
+3C0564:lI112|H3C05F8
+3C05F8:lI112|H3C0694
+3C0694:lI108|H3C0738
+3C0738:lI105|H3C07D4
+3C07D4:lI99|H3C0860
+3C0860:lI97|H3C08EC
+3C08EC:lI116|H3C0978
+3C0978:lI105|H3C0A04
+3C0A04:lI111|H3C0AA0
+3C0AA0:lI110|H3C0B3C
+3C0B3C:lI47|H3C0BE0
+3C0BE0:lI120|H3C0C94
+3C0C94:lI45|H3C0D40
+3C0D40:lI119|H3C0DF4
+3C0DF4:lI97|H3C0EA8
+3C0EA8:lI105|H3C0F64
+3C0F64:lI115|H3C1030
+3C1030:lI45|H3C1104
+3C1104:lI115|H3C11D8
+3C11D8:lI111|H3C12A4
+3C12A4:lI117|H3C1378
+3C1378:lI114|H3C1454
+3C1454:lI99|H3C1538
+3C1538:lI101|N
+3C04D0:lI115|H3C055C
+3C055C:lI114|H3C05F0
+3C05F0:lI99|N
+3C0450:lH3C04E0|H3C04EC
+3C04E0:t2:H3C056C,H3C0574
+3C0574:lI97|H3C0608
+3C0608:lI112|H3C06A4
+3C06A4:lI112|H3C0748
+3C0748:lI108|H3C07E4
+3C07E4:lI105|H3C0868
+3C0868:lI99|H3C08F4
+3C08F4:lI97|H3C0980
+3C0980:lI116|H3C0A0C
+3C0A0C:lI105|H3C0AA8
+3C0AA8:lI111|H3C0B44
+3C0B44:lI110|H3C0BE8
+3C0BE8:lI47|H3C0C9C
+3C0C9C:lI120|H3C0D48
+3C0D48:lI45|H3C0DFC
+3C0DFC:lI117|H3C0EB0
+3C0EB0:lI115|H3C0F6C
+3C0F6C:lI116|H3C1038
+3C1038:lI97|H3C110C
+3C110C:lI114|N
+3C056C:lI117|H3C0600
+3C0600:lI115|H3C069C
+3C069C:lI116|H3C0740
+3C0740:lI97|H3C07DC
+3C07DC:lI114|N
+3C04EC:lH3C057C|H3C0588
+3C057C:t2:H3C0610,H3C0618
+3C0618:lI97|H3C06B4
+3C06B4:lI112|H3C0750
+3C0750:lI112|H3C07EC
+3C07EC:lI108|H3C0870
+3C0870:lI105|H3C08FC
+3C08FC:lI99|H3C0988
+3C0988:lI97|H3C0A14
+3C0A14:lI116|H3C0AB0
+3C0AB0:lI105|H3C0B4C
+3C0B4C:lI111|H3C0BF0
+3C0BF0:lI110|H3C0CA4
+3C0CA4:lI47|H3C0D50
+3C0D50:lI120|H3C0E04
+3C0E04:lI45|H3C0EB8
+3C0EB8:lI116|H3C0F74
+3C0F74:lI114|H3C1040
+3C1040:lI111|H3C1114
+3C1114:lI102|H3C11E0
+3C11E0:lI102|H3C12AC
+3C12AC:lI45|H3C1380
+3C1380:lI109|H3C145C
+3C145C:lI115|N
+3C0610:lI109|H3C06AC
+3C06AC:lI115|N
+3C0588:lH3C0620|H3C062C
+3C0620:t2:H3C06BC,H3C06C4
+3C06C4:lI97|H3C0760
+3C0760:lI112|H3C07F4
+3C07F4:lI112|H3C0878
+3C0878:lI108|H3C0904
+3C0904:lI105|H3C0990
+3C0990:lI99|H3C0A1C
+3C0A1C:lI97|H3C0AB8
+3C0AB8:lI116|H3C0B54
+3C0B54:lI105|H3C0BF8
+3C0BF8:lI111|H3C0CAC
+3C0CAC:lI110|H3C0D58
+3C0D58:lI47|H3C0E0C
+3C0E0C:lI120|H3C0EC0
+3C0EC0:lI45|H3C0F7C
+3C0F7C:lI116|H3C1048
+3C1048:lI114|H3C111C
+3C111C:lI111|H3C11E8
+3C11E8:lI102|H3C12B4
+3C12B4:lI102|H3C1388
+3C1388:lI45|H3C1464
+3C1464:lI109|H3C1540
+3C1540:lI101|N
+3C06BC:lI109|H3C0758
+3C0758:lI101|N
+3C062C:lH3C06CC|H3C06D8
+3C06CC:t2:H3C0768,H3C0770
+3C0770:lI97|H3C0804
+3C0804:lI112|H3C0888
+3C0888:lI112|H3C090C
+3C090C:lI108|H3C0998
+3C0998:lI105|H3C0A24
+3C0A24:lI99|H3C0AC0
+3C0AC0:lI97|H3C0B5C
+3C0B5C:lI116|H3C0C00
+3C0C00:lI105|H3C0CB4
+3C0CB4:lI111|H3C0D60
+3C0D60:lI110|H3C0E14
+3C0E14:lI47|H3C0EC8
+3C0EC8:lI120|H3C0F84
+3C0F84:lI45|H3C1050
+3C1050:lI116|H3C1124
+3C1124:lI114|H3C11F0
+3C11F0:lI111|H3C12BC
+3C12BC:lI102|H3C1390
+3C1390:lI102|H3C146C
+3C146C:lI45|H3C1548
+3C1548:lI109|H3C161C
+3C161C:lI97|H3C16F0
+3C16F0:lI110|N
+3C0768:lI109|H3C07FC
+3C07FC:lI97|H3C0880
+3C0880:lI110|N
+3C06D8:lH3C0778|H3C0784
+3C0778:t2:H3C080C,H3C0814
+3C0814:lI97|H3C0890
+3C0890:lI112|H3C0914
+3C0914:lI112|H3C09A0
+3C09A0:lI108|H3C0A2C
+3C0A2C:lI105|H3C0AC8
+3C0AC8:lI99|H3C0B64
+3C0B64:lI97|H3C0C08
+3C0C08:lI116|H3C0CBC
+3C0CBC:lI105|H3C0D68
+3C0D68:lI111|H3C0E1C
+3C0E1C:lI110|H3C0ED0
+3C0ED0:lI47|H3C0F8C
+3C0F8C:lI120|H3C1058
+3C1058:lI45|H3C112C
+3C112C:lI116|H3C11F8
+3C11F8:lI114|H3C12C4
+3C12C4:lI111|H3C1398
+3C1398:lI102|H3C1474
+3C1474:lI102|N
+3C080C:lI116|N
+3C0784:lH3C081C|H3C0828
+3C081C:t2:H3C0898,H3C08A0
+3C08A0:lI97|H3C0924
+3C0924:lI112|H3C09A8
+3C09A8:lI112|H3C0A34
+3C0A34:lI108|H3C0AD0
+3C0AD0:lI105|H3C0B6C
+3C0B6C:lI99|H3C0C10
+3C0C10:lI97|H3C0CC4
+3C0CC4:lI116|H3C0D70
+3C0D70:lI105|H3C0E24
+3C0E24:lI111|H3C0ED8
+3C0ED8:lI110|H3C0F94
+3C0F94:lI47|H3C1060
+3C1060:lI120|H3C1134
+3C1134:lI45|H3C1200
+3C1200:lI116|H3C12CC
+3C12CC:lI114|H3C13A0
+3C13A0:lI111|H3C147C
+3C147C:lI102|H3C1550
+3C1550:lI102|N
+3C0898:lI116|H3C091C
+3C091C:lI114|N
+3C0828:lH3C08A8|H3C08B4
+3C08A8:t2:H3C092C,H3C0934
+3C0934:lI97|H3C09B8
+3C09B8:lI112|H3C0A44
+3C0A44:lI112|H3C0AE0
+3C0AE0:lI108|H3C0B74
+3C0B74:lI105|H3C0C18
+3C0C18:lI99|H3C0CCC
+3C0CCC:lI97|H3C0D78
+3C0D78:lI116|H3C0E2C
+3C0E2C:lI105|H3C0EE0
+3C0EE0:lI111|H3C0F9C
+3C0F9C:lI110|H3C1068
+3C1068:lI47|H3C113C
+3C113C:lI120|H3C1208
+3C1208:lI45|H3C12D4
+3C12D4:lI116|H3C13A8
+3C13A8:lI114|H3C1484
+3C1484:lI111|H3C1558
+3C1558:lI102|H3C1624
+3C1624:lI102|N
+3C092C:lI114|H3C09B0
+3C09B0:lI111|H3C0A3C
+3C0A3C:lI102|H3C0AD8
+3C0AD8:lI102|N
+3C08B4:lH3C093C|H3C0948
+3C093C:t2:H3C09C0,H3C09C8
+3C09C8:lI97|H3C0A54
+3C0A54:lI112|H3C0AF0
+3C0AF0:lI112|H3C0B84
+3C0B84:lI108|H3C0C28
+3C0C28:lI105|H3C0CDC
+3C0CDC:lI99|H3C0D88
+3C0D88:lI97|H3C0E34
+3C0E34:lI116|H3C0EE8
+3C0EE8:lI105|H3C0FA4
+3C0FA4:lI111|H3C1070
+3C1070:lI110|H3C1144
+3C1144:lI47|H3C1210
+3C1210:lI120|H3C12DC
+3C12DC:lI45|H3C13B0
+3C13B0:lI116|H3C148C
+3C148C:lI101|H3C1560
+3C1560:lI120|H3C162C
+3C162C:lI105|H3C16F8
+3C16F8:lI110|H3C17BC
+3C17BC:lI102|H3C1880
+3C1880:lI111|N
+3C09C0:lI116|H3C0A4C
+3C0A4C:lI101|H3C0AE8
+3C0AE8:lI120|H3C0B7C
+3C0B7C:lI105|H3C0C20
+3C0C20:lI110|H3C0CD4
+3C0CD4:lI102|H3C0D80
+3C0D80:lI111|N
+3C0948:lH3C09D0|H3C09DC
+3C09D0:t2:H3C0A5C,H3C0A64
+3C0A64:lI97|H3C0B00
+3C0B00:lI112|H3C0B94
+3C0B94:lI112|H3C0C38
+3C0C38:lI108|H3C0CE4
+3C0CE4:lI105|H3C0D90
+3C0D90:lI99|H3C0E3C
+3C0E3C:lI97|H3C0EF0
+3C0EF0:lI116|H3C0FAC
+3C0FAC:lI105|H3C1078
+3C1078:lI111|H3C114C
+3C114C:lI110|H3C1218
+3C1218:lI47|H3C12E4
+3C12E4:lI120|H3C13B8
+3C13B8:lI45|H3C1494
+3C1494:lI116|H3C1568
+3C1568:lI101|H3C1634
+3C1634:lI120|H3C1700
+3C1700:lI105|H3C17C4
+3C17C4:lI110|H3C1888
+3C1888:lI102|H3C1944
+3C1944:lI111|N
+3C0A5C:lI116|H3C0AF8
+3C0AF8:lI101|H3C0B8C
+3C0B8C:lI120|H3C0C30
+3C0C30:lI105|N
+3C09DC:lH3C0A6C|H3C0A78
+3C0A6C:t2:H3C0B08,H3C0B10
+3C0B10:lI97|H3C0BA4
+3C0BA4:lI112|H3C0C48
+3C0C48:lI112|H3C0CEC
+3C0CEC:lI108|H3C0D98
+3C0D98:lI105|H3C0E44
+3C0E44:lI99|H3C0EF8
+3C0EF8:lI97|H3C0FB4
+3C0FB4:lI116|H3C1080
+3C1080:lI105|H3C1154
+3C1154:lI111|H3C1220
+3C1220:lI110|H3C12EC
+3C12EC:lI47|H3C13C0
+3C13C0:lI120|H3C149C
+3C149C:lI45|H3C1570
+3C1570:lI116|H3C163C
+3C163C:lI101|H3C1708
+3C1708:lI120|N
+3C0B08:lI116|H3C0B9C
+3C0B9C:lI101|H3C0C40
+3C0C40:lI120|N
+3C0A78:lH3C0B18|H3C0B24
+3C0B18:t2:H3C0BAC,H3C0BB4
+3C0BB4:lI97|H3C0C58
+3C0C58:lI112|H3C0CFC
+3C0CFC:lI112|H3C0DA0
+3C0DA0:lI108|H3C0E4C
+3C0E4C:lI105|H3C0F00
+3C0F00:lI99|H3C0FBC
+3C0FBC:lI97|H3C1088
+3C1088:lI116|H3C115C
+3C115C:lI105|H3C1228
+3C1228:lI111|H3C12F4
+3C12F4:lI110|H3C13C8
+3C13C8:lI47|H3C14A4
+3C14A4:lI120|H3C1578
+3C1578:lI45|H3C1644
+3C1644:lI116|H3C1710
+3C1710:lI99|H3C17CC
+3C17CC:lI108|N
+3C0BAC:lI116|H3C0C50
+3C0C50:lI99|H3C0CF4
+3C0CF4:lI108|N
+3C0B24:lH3C0BBC|H3C0BC8
+3C0BBC:t2:H3C0C60,H3C0C68
+3C0C68:lI97|H3C0D0C
+3C0D0C:lI112|H3C0DB0
+3C0DB0:lI112|H3C0E54
+3C0E54:lI108|H3C0F08
+3C0F08:lI105|H3C0FC4
+3C0FC4:lI99|H3C1090
+3C1090:lI97|H3C1164
+3C1164:lI116|H3C1230
+3C1230:lI105|H3C12FC
+3C12FC:lI111|H3C13D0
+3C13D0:lI110|H3C14AC
+3C14AC:lI47|H3C1580
+3C1580:lI120|H3C164C
+3C164C:lI45|H3C1718
+3C1718:lI116|H3C17D4
+3C17D4:lI97|H3C1890
+3C1890:lI114|N
+3C0C60:lI116|H3C0D04
+3C0D04:lI97|H3C0DA8
+3C0DA8:lI114|N
+3C0BC8:lH3C0C70|H3C0C7C
+3C0C70:t2:H3C0D14,H3C0D1C
+3C0D1C:lI97|H3C0DC0
+3C0DC0:lI112|H3C0E64
+3C0E64:lI112|H3C0F18
+3C0F18:lI108|H3C0FD4
+3C0FD4:lI105|H3C10A0
+3C10A0:lI99|H3C116C
+3C116C:lI97|H3C1238
+3C1238:lI116|H3C1304
+3C1304:lI105|H3C13D8
+3C13D8:lI111|H3C14B4
+3C14B4:lI110|H3C1588
+3C1588:lI47|H3C1654
+3C1654:lI120|H3C1720
+3C1720:lI45|H3C17DC
+3C17DC:lI115|H3C1898
+3C1898:lI118|H3C194C
+3C194C:lI52|H3C1A00
+3C1A00:lI99|H3C1AB4
+3C1AB4:lI114|H3C1B78
+3C1B78:lI99|N
+3C0D14:lI115|H3C0DB8
+3C0DB8:lI118|H3C0E5C
+3C0E5C:lI52|H3C0F10
+3C0F10:lI99|H3C0FCC
+3C0FCC:lI114|H3C1098
+3C1098:lI99|N
+3C0C7C:lH3C0D24|H3C0D30
+3C0D24:t2:H3C0DC8,H3C0DD0
+3C0DD0:lI97|H3C0E74
+3C0E74:lI112|H3C0F28
+3C0F28:lI112|H3C0FE4
+3C0FE4:lI108|H3C10B0
+3C10B0:lI105|H3C117C
+3C117C:lI99|H3C1248
+3C1248:lI97|H3C130C
+3C130C:lI116|H3C13E0
+3C13E0:lI105|H3C14BC
+3C14BC:lI111|H3C1590
+3C1590:lI110|H3C165C
+3C165C:lI47|H3C1728
+3C1728:lI120|H3C17E4
+3C17E4:lI45|H3C18A0
+3C18A0:lI115|H3C1954
+3C1954:lI118|H3C1A08
+3C1A08:lI52|H3C1ABC
+3C1ABC:lI99|H3C1B80
+3C1B80:lI112|H3C1C4C
+3C1C4C:lI105|H3C1D10
+3C1D10:lI111|N
+3C0DC8:lI115|H3C0E6C
+3C0E6C:lI118|H3C0F20
+3C0F20:lI52|H3C0FDC
+3C0FDC:lI99|H3C10A8
+3C10A8:lI112|H3C1174
+3C1174:lI105|H3C1240
+3C1240:lI111|N
+3C0D30:lH3C0DD8|H3C0DE4
+3C0DD8:t2:H3C0E7C,H3C0E84
+3C0E84:lI97|H3C0F38
+3C0F38:lI112|H3C0FF4
+3C0FF4:lI112|H3C10B8
+3C10B8:lI108|H3C1184
+3C1184:lI105|H3C1250
+3C1250:lI99|H3C1314
+3C1314:lI97|H3C13E8
+3C13E8:lI116|H3C14C4
+3C14C4:lI105|H3C1598
+3C1598:lI111|H3C1664
+3C1664:lI110|H3C1730
+3C1730:lI47|H3C17EC
+3C17EC:lI120|H3C18A8
+3C18A8:lI45|H3C195C
+3C195C:lI115|H3C1A10
+3C1A10:lI116|H3C1AC4
+3C1AC4:lI117|H3C1B88
+3C1B88:lI102|H3C1C54
+3C1C54:lI102|H3C1D18
+3C1D18:lI105|H3C1DD4
+3C1DD4:lI116|N
+3C0E7C:lI115|H3C0F30
+3C0F30:lI105|H3C0FEC
+3C0FEC:lI116|N
+3C0DE4:lH3C0E8C|H3C0E98
+3C0E8C:t2:H3C0F40,H3C0F48
+3C0F48:lI97|H3C1004
+3C1004:lI112|H3C10C8
+3C10C8:lI112|H3C1194
+3C1194:lI108|H3C1258
+3C1258:lI105|H3C131C
+3C131C:lI99|H3C13F0
+3C13F0:lI97|H3C14CC
+3C14CC:lI116|H3C15A0
+3C15A0:lI105|H3C166C
+3C166C:lI111|H3C1738
+3C1738:lI110|H3C17F4
+3C17F4:lI47|H3C18B0
+3C18B0:lI120|H3C1964
+3C1964:lI45|H3C1A18
+3C1A18:lI115|H3C1ACC
+3C1ACC:lI104|H3C1B90
+3C1B90:lI97|H3C1C5C
+3C1C5C:lI114|N
+3C0F40:lI115|H3C0FFC
+3C0FFC:lI104|H3C10C0
+3C10C0:lI97|H3C118C
+3C118C:lI114|N
+3C0E98:lH3C0F50|H3C0F5C
+3C0F50:t2:H3C100C,H3C1014
+3C1014:lI97|H3C10D8
+3C10D8:lI112|H3C119C
+3C119C:lI112|H3C1260
+3C1260:lI108|H3C1324
+3C1324:lI105|H3C13F8
+3C13F8:lI99|H3C14D4
+3C14D4:lI97|H3C15A8
+3C15A8:lI116|H3C1674
+3C1674:lI105|H3C1740
+3C1740:lI111|H3C17FC
+3C17FC:lI110|H3C18B8
+3C18B8:lI47|H3C196C
+3C196C:lI120|H3C1A20
+3C1A20:lI45|H3C1AD4
+3C1AD4:lI115|H3C1B98
+3C1B98:lI104|N
+3C100C:lI115|H3C10D0
+3C10D0:lI104|N
+3C0F5C:lH3C101C|H3C1028
+3C101C:t2:H3C10E0,H3C10E8
+3C10E8:lI97|H3C11AC
+3C11AC:lI112|H3C1268
+3C1268:lI112|H3C132C
+3C132C:lI108|H3C1400
+3C1400:lI105|H3C14DC
+3C14DC:lI99|H3C15B0
+3C15B0:lI97|H3C167C
+3C167C:lI116|H3C1748
+3C1748:lI105|H3C1804
+3C1804:lI111|H3C18C0
+3C18C0:lI110|H3C1974
+3C1974:lI47|H3C1A28
+3C1A28:lI120|H3C1ADC
+3C1ADC:lI45|H3C1BA0
+3C1BA0:lI110|H3C1C64
+3C1C64:lI101|H3C1D20
+3C1D20:lI116|H3C1DDC
+3C1DDC:lI99|H3C1E98
+3C1E98:lI100|H3C1F5C
+3C1F5C:lI102|N
+3C10E0:lI110|H3C11A4
+3C11A4:lI99|N
+3C1028:lH3C10F0|H3C10FC
+3C10F0:t2:H3C11B4,H3C11BC
+3C11BC:lI97|H3C1278
+3C1278:lI112|H3C133C
+3C133C:lI112|H3C1408
+3C1408:lI108|H3C14E4
+3C14E4:lI105|H3C15B8
+3C15B8:lI99|H3C1684
+3C1684:lI97|H3C1750
+3C1750:lI116|H3C180C
+3C180C:lI105|H3C18C8
+3C18C8:lI111|H3C197C
+3C197C:lI110|H3C1A30
+3C1A30:lI47|H3C1AE4
+3C1AE4:lI120|H3C1BA8
+3C1BA8:lI45|H3C1C6C
+3C1C6C:lI110|H3C1D28
+3C1D28:lI101|H3C1DE4
+3C1DE4:lI116|H3C1EA0
+3C1EA0:lI99|H3C1F64
+3C1F64:lI100|H3C2018
+3C2018:lI102|N
+3C11B4:lI99|H3C1270
+3C1270:lI100|H3C1334
+3C1334:lI102|N
+3C10FC:lH3C11C4|H3C11D0
+3C11C4:t2:H3C1280,H3C1288
+3C1288:lI97|H3C134C
+3C134C:lI112|H3C1418
+3C1418:lI112|H3C14EC
+3C14EC:lI108|H3C15C0
+3C15C0:lI105|H3C168C
+3C168C:lI99|H3C1758
+3C1758:lI97|H3C1814
+3C1814:lI116|H3C18D0
+3C18D0:lI105|H3C1984
+3C1984:lI111|H3C1A38
+3C1A38:lI110|H3C1AEC
+3C1AEC:lI47|H3C1BB0
+3C1BB0:lI120|H3C1C74
+3C1C74:lI45|H3C1D30
+3C1D30:lI109|H3C1DEC
+3C1DEC:lI105|H3C1EA8
+3C1EA8:lI102|N
+3C1280:lI109|H3C1344
+3C1344:lI105|H3C1410
+3C1410:lI102|N
+3C11D0:lH3C1290|H3C129C
+3C1290:t2:H3C1354,H3C135C
+3C135C:lI97|H3C1428
+3C1428:lI112|H3C14FC
+3C14FC:lI112|H3C15D0
+3C15D0:lI108|H3C169C
+3C169C:lI105|H3C1760
+3C1760:lI99|H3C181C
+3C181C:lI97|H3C18D8
+3C18D8:lI116|H3C198C
+3C198C:lI105|H3C1A40
+3C1A40:lI111|H3C1AF4
+3C1AF4:lI110|H3C1BB8
+3C1BB8:lI47|H3C1C7C
+3C1C7C:lI120|H3C1D38
+3C1D38:lI45|H3C1DF4
+3C1DF4:lI108|H3C1EB0
+3C1EB0:lI97|H3C1F6C
+3C1F6C:lI116|H3C2020
+3C2020:lI101|H3C20DC
+3C20DC:lI120|N
+3C1354:lI108|H3C1420
+3C1420:lI97|H3C14F4
+3C14F4:lI116|H3C15C8
+3C15C8:lI101|H3C1694
+3C1694:lI120|N
+3C129C:lH3C1364|H3C1370
+3C1364:t2:H3C1430,H3C1438
+3C1438:lI97|H3C150C
+3C150C:lI112|H3C15E0
+3C15E0:lI112|H3C16A4
+3C16A4:lI108|H3C1768
+3C1768:lI105|H3C1824
+3C1824:lI99|H3C18E0
+3C18E0:lI97|H3C1994
+3C1994:lI116|H3C1A48
+3C1A48:lI105|H3C1AFC
+3C1AFC:lI111|H3C1BC0
+3C1BC0:lI110|H3C1C84
+3C1C84:lI47|H3C1D40
+3C1D40:lI120|H3C1DFC
+3C1DFC:lI45|H3C1EB8
+3C1EB8:lI107|H3C1F74
+3C1F74:lI111|H3C2028
+3C2028:lI97|H3C20E4
+3C20E4:lI110|N
+3C1430:lI115|H3C1504
+3C1504:lI107|H3C15D8
+3C15D8:lI112|N
+3C1370:lH3C1440|H3C144C
+3C1440:t2:H3C1514,H3C151C
+3C151C:lI97|H3C15F0
+3C15F0:lI112|H3C16B4
+3C16B4:lI112|H3C1770
+3C1770:lI108|H3C182C
+3C182C:lI105|H3C18E8
+3C18E8:lI99|H3C199C
+3C199C:lI97|H3C1A50
+3C1A50:lI116|H3C1B04
+3C1B04:lI105|H3C1BC8
+3C1BC8:lI111|H3C1C8C
+3C1C8C:lI110|H3C1D48
+3C1D48:lI47|H3C1E04
+3C1E04:lI120|H3C1EC0
+3C1EC0:lI45|H3C1F7C
+3C1F7C:lI107|H3C2030
+3C2030:lI111|H3C20EC
+3C20EC:lI97|H3C21A0
+3C21A0:lI110|N
+3C1514:lI115|H3C15E8
+3C15E8:lI107|H3C16AC
+3C16AC:lI100|N
+3C144C:lH3C1524|H3C1530
+3C1524:t2:H3C15F8,H3C1600
+3C1600:lI97|H3C16C4
+3C16C4:lI112|H3C1780
+3C1780:lI112|H3C1834
+3C1834:lI108|H3C18F0
+3C18F0:lI105|H3C19A4
+3C19A4:lI99|H3C1A58
+3C1A58:lI97|H3C1B0C
+3C1B0C:lI116|H3C1BD0
+3C1BD0:lI105|H3C1C94
+3C1C94:lI111|H3C1D50
+3C1D50:lI110|H3C1E0C
+3C1E0C:lI47|H3C1EC8
+3C1EC8:lI120|H3C1F84
+3C1F84:lI45|H3C2038
+3C2038:lI107|H3C20F4
+3C20F4:lI111|H3C21A8
+3C21A8:lI97|H3C225C
+3C225C:lI110|N
+3C15F8:lI115|H3C16BC
+3C16BC:lI107|H3C1778
+3C1778:lI116|N
+3C1530:lH3C1608|H3C1614
+3C1608:t2:H3C16CC,H3C16D4
+3C16D4:lI97|H3C1790
+3C1790:lI112|H3C1844
+3C1844:lI112|H3C18F8
+3C18F8:lI108|H3C19AC
+3C19AC:lI105|H3C1A60
+3C1A60:lI99|H3C1B14
+3C1B14:lI97|H3C1BD8
+3C1BD8:lI116|H3C1C9C
+3C1C9C:lI105|H3C1D58
+3C1D58:lI111|H3C1E14
+3C1E14:lI110|H3C1ED0
+3C1ED0:lI47|H3C1F8C
+3C1F8C:lI120|H3C2040
+3C2040:lI45|H3C20FC
+3C20FC:lI107|H3C21B0
+3C21B0:lI111|H3C2264
+3C2264:lI97|H3C2320
+3C2320:lI110|N
+3C16CC:lI115|H3C1788
+3C1788:lI107|H3C183C
+3C183C:lI109|N
+3C1614:lH3C16DC|H3C16E8
+3C16DC:t2:H3C1798,H3C17A0
+3C17A0:lI97|H3C1854
+3C1854:lI112|H3C1908
+3C1908:lI112|H3C19B4
+3C19B4:lI108|H3C1A68
+3C1A68:lI105|H3C1B1C
+3C1B1C:lI99|H3C1BE0
+3C1BE0:lI97|H3C1CA4
+3C1CA4:lI116|H3C1D60
+3C1D60:lI105|H3C1E1C
+3C1E1C:lI111|H3C1ED8
+3C1ED8:lI110|H3C1F94
+3C1F94:lI47|H3C2048
+3C2048:lI120|H3C2104
+3C2104:lI45|H3C21B8
+3C21B8:lI104|H3C226C
+3C226C:lI116|H3C2328
+3C2328:lI116|H3C23E4
+3C23E4:lI112|H3C2498
+3C2498:lI100|H3C2554
+3C2554:lI45|H3C2610
+3C2610:lI99|H3C26D4
+3C26D4:lI103|H3C2790
+3C2790:lI105|N
+3C1798:lI99|H3C184C
+3C184C:lI103|H3C1900
+3C1900:lI105|N
+3C16E8:lH3C17A8|H3C17B4
+3C17A8:t2:H3C185C,H3C1864
+3C1864:lI97|H3C1918
+3C1918:lI112|H3C19C4
+3C19C4:lI112|H3C1A70
+3C1A70:lI108|H3C1B24
+3C1B24:lI105|H3C1BE8
+3C1BE8:lI99|H3C1CAC
+3C1CAC:lI97|H3C1D68
+3C1D68:lI116|H3C1E24
+3C1E24:lI105|H3C1EE0
+3C1EE0:lI111|H3C1F9C
+3C1F9C:lI110|H3C2050
+3C2050:lI47|H3C210C
+3C210C:lI120|H3C21C0
+3C21C0:lI45|H3C2274
+3C2274:lI104|H3C2330
+3C2330:lI100|H3C23EC
+3C23EC:lI102|N
+3C185C:lI104|H3C1910
+3C1910:lI100|H3C19BC
+3C19BC:lI102|N
+3C17B4:lH3C186C|H3C1878
+3C186C:t2:H3C1920,H3C1928
+3C1928:lI97|H3C19D4
+3C19D4:lI112|H3C1A78
+3C1A78:lI112|H3C1B2C
+3C1B2C:lI108|H3C1BF0
+3C1BF0:lI105|H3C1CB4
+3C1CB4:lI99|H3C1D70
+3C1D70:lI97|H3C1E2C
+3C1E2C:lI116|H3C1EE8
+3C1EE8:lI105|H3C1FA4
+3C1FA4:lI111|H3C2058
+3C2058:lI110|H3C2114
+3C2114:lI47|H3C21C8
+3C21C8:lI120|H3C227C
+3C227C:lI45|H3C2338
+3C2338:lI103|H3C23F4
+3C23F4:lI122|H3C24A0
+3C24A0:lI105|H3C255C
+3C255C:lI112|N
+3C1920:lI103|H3C19CC
+3C19CC:lI122|N
+3C1878:lH3C1930|H3C193C
+3C1930:t2:H3C19DC,H3C19E4
+3C19E4:lI97|H3C1A88
+3C1A88:lI112|H3C1B3C
+3C1B3C:lI112|H3C1C00
+3C1C00:lI108|H3C1CBC
+3C1CBC:lI105|H3C1D78
+3C1D78:lI99|H3C1E34
+3C1E34:lI97|H3C1EF0
+3C1EF0:lI116|H3C1FAC
+3C1FAC:lI105|H3C2060
+3C2060:lI111|H3C211C
+3C211C:lI110|H3C21D0
+3C21D0:lI47|H3C2284
+3C2284:lI120|H3C2340
+3C2340:lI45|H3C23FC
+3C23FC:lI103|H3C24A8
+3C24A8:lI116|H3C2564
+3C2564:lI97|H3C2618
+3C2618:lI114|N
+3C19DC:lI103|H3C1A80
+3C1A80:lI116|H3C1B34
+3C1B34:lI97|H3C1BF8
+3C1BF8:lI114|N
+3C193C:lH3C19EC|H3C19F8
+3C19EC:t2:H3C1A90,H3C1A98
+3C1A98:lI97|H3C1B4C
+3C1B4C:lI112|H3C1C10
+3C1C10:lI112|H3C1CC4
+3C1CC4:lI108|H3C1D80
+3C1D80:lI105|H3C1E3C
+3C1E3C:lI99|H3C1EF8
+3C1EF8:lI97|H3C1FB4
+3C1FB4:lI116|H3C2068
+3C2068:lI105|H3C2124
+3C2124:lI111|H3C21D8
+3C21D8:lI110|H3C228C
+3C228C:lI47|H3C2348
+3C2348:lI120|H3C2404
+3C2404:lI45|H3C24B0
+3C24B0:lI100|H3C256C
+3C256C:lI118|H3C2620
+3C2620:lI105|N
+3C1A90:lI100|H3C1B44
+3C1B44:lI118|H3C1C08
+3C1C08:lI105|N
+3C19F8:lH3C1AA0|H3C1AAC
+3C1AA0:t2:H3C1B54,H3C1B5C
+3C1B5C:lI97|H3C1C20
+3C1C20:lI112|H3C1CD4
+3C1CD4:lI112|H3C1D88
+3C1D88:lI108|H3C1E44
+3C1E44:lI105|H3C1F00
+3C1F00:lI99|H3C1FBC
+3C1FBC:lI97|H3C2070
+3C2070:lI116|H3C212C
+3C212C:lI105|H3C21E0
+3C21E0:lI111|H3C2294
+3C2294:lI110|H3C2350
+3C2350:lI47|H3C240C
+3C240C:lI120|H3C24B8
+3C24B8:lI45|H3C2574
+3C2574:lI100|H3C2628
+3C2628:lI105|H3C26DC
+3C26DC:lI114|H3C2798
+3C2798:lI101|H3C2854
+3C2854:lI99|H3C2918
+3C2918:lI116|H3C29E4
+3C29E4:lI111|H3C2AB0
+3C2AB0:lI114|N
+3C1B54:lI100|H3C1C18
+3C1C18:lI99|H3C1CCC
+3C1CCC:lI114|N
+3C1AAC:lH3C1B64|H3C1B70
+3C1B64:t2:H3C1C28,H3C1C30
+3C1C30:lI97|H3C1CE4
+3C1CE4:lI112|H3C1D98
+3C1D98:lI112|H3C1E4C
+3C1E4C:lI108|H3C1F08
+3C1F08:lI105|H3C1FC4
+3C1FC4:lI99|H3C2078
+3C2078:lI97|H3C2134
+3C2134:lI116|H3C21E8
+3C21E8:lI105|H3C229C
+3C229C:lI111|H3C2358
+3C2358:lI110|H3C2414
+3C2414:lI47|H3C24C0
+3C24C0:lI120|H3C257C
+3C257C:lI45|H3C2630
+3C2630:lI100|H3C26E4
+3C26E4:lI105|H3C27A0
+3C27A0:lI114|H3C285C
+3C285C:lI101|H3C2920
+3C2920:lI99|H3C29EC
+3C29EC:lI116|H3C2AB8
+3C2AB8:lI111|H3C2B84
+3C2B84:lI114|N
+3C1C28:lI100|H3C1CDC
+3C1CDC:lI105|H3C1D90
+3C1D90:lI114|N
+3C1B70:lH3C1C38|H3C1C44
+3C1C38:t2:H3C1CEC,H3C1CF4
+3C1CF4:lI97|H3C1DA8
+3C1DA8:lI112|H3C1E5C
+3C1E5C:lI112|H3C1F10
+3C1F10:lI108|H3C1FCC
+3C1FCC:lI105|H3C2080
+3C2080:lI99|H3C213C
+3C213C:lI97|H3C21F0
+3C21F0:lI116|H3C22A4
+3C22A4:lI105|H3C2360
+3C2360:lI111|H3C241C
+3C241C:lI110|H3C24C8
+3C24C8:lI47|H3C2584
+3C2584:lI120|H3C2638
+3C2638:lI45|H3C26EC
+3C26EC:lI100|H3C27A8
+3C27A8:lI105|H3C2864
+3C2864:lI114|H3C2928
+3C2928:lI101|H3C29F4
+3C29F4:lI99|H3C2AC0
+3C2AC0:lI116|H3C2B8C
+3C2B8C:lI111|H3C2C48
+3C2C48:lI114|N
+3C1CEC:lI100|H3C1DA0
+3C1DA0:lI120|H3C1E54
+3C1E54:lI114|N
+3C1C44:lH3C1CFC|H3C1D08
+3C1CFC:t2:H3C1DB0,H3C1DB8
+3C1DB8:lI97|H3C1E6C
+3C1E6C:lI112|H3C1F20
+3C1F20:lI112|H3C1FD4
+3C1FD4:lI108|H3C2088
+3C2088:lI105|H3C2144
+3C2144:lI99|H3C21F8
+3C21F8:lI97|H3C22AC
+3C22AC:lI116|H3C2368
+3C2368:lI105|H3C2424
+3C2424:lI111|H3C24D0
+3C24D0:lI110|H3C258C
+3C258C:lI47|H3C2640
+3C2640:lI120|H3C26F4
+3C26F4:lI45|H3C27B0
+3C27B0:lI99|H3C286C
+3C286C:lI115|H3C2930
+3C2930:lI104|N
+3C1DB0:lI99|H3C1E64
+3C1E64:lI115|H3C1F18
+3C1F18:lI104|N
+3C1D08:lH3C1DC0|H3C1DCC
+3C1DC0:t2:H3C1E74,H3C1E7C
+3C1E7C:lI97|H3C1F30
+3C1F30:lI112|H3C1FE4
+3C1FE4:lI112|H3C2098
+3C2098:lI108|H3C214C
+3C214C:lI105|H3C2200
+3C2200:lI99|H3C22B4
+3C22B4:lI97|H3C2370
+3C2370:lI116|H3C242C
+3C242C:lI105|H3C24D8
+3C24D8:lI111|H3C2594
+3C2594:lI110|H3C2648
+3C2648:lI47|H3C26FC
+3C26FC:lI120|H3C27B8
+3C27B8:lI45|H3C2874
+3C2874:lI99|H3C2938
+3C2938:lI112|H3C29FC
+3C29FC:lI105|H3C2AC8
+3C2AC8:lI111|N
+3C1E74:lI99|H3C1F28
+3C1F28:lI112|H3C1FDC
+3C1FDC:lI105|H3C2090
+3C2090:lI111|N
+3C1DCC:lH3C1E84|H3C1E90
+3C1E84:t2:H3C1F38,H3C1F40
+3C1F40:lI97|H3C1FEC
+3C1FEC:lI112|H3C20A0
+3C20A0:lI112|H3C2154
+3C2154:lI108|H3C2208
+3C2208:lI105|H3C22BC
+3C22BC:lI99|H3C2378
+3C2378:lI97|H3C2434
+3C2434:lI116|H3C24E0
+3C24E0:lI105|H3C259C
+3C259C:lI111|H3C2650
+3C2650:lI110|H3C2704
+3C2704:lI47|H3C27C0
+3C27C0:lI120|H3C287C
+3C287C:lI45|H3C2940
+3C2940:lI99|H3C2A04
+3C2A04:lI111|H3C2AD0
+3C2AD0:lI109|H3C2B94
+3C2B94:lI112|H3C2C50
+3C2C50:lI114|H3C2D00
+3C2D00:lI101|H3C2DA8
+3C2DA8:lI115|H3C2E40
+3C2E40:lI115|N
+3C1F38:lI90|N
+3C1E90:lH3C1F48|H3C1F54
+3C1F48:t2:H3C1FF4,H3C1FFC
+3C1FFC:lI97|H3C20B0
+3C20B0:lI112|H3C2164
+3C2164:lI112|H3C2210
+3C2210:lI108|H3C22C4
+3C22C4:lI105|H3C2380
+3C2380:lI99|H3C243C
+3C243C:lI97|H3C24E8
+3C24E8:lI116|H3C25A4
+3C25A4:lI105|H3C2658
+3C2658:lI111|H3C270C
+3C270C:lI110|H3C27C8
+3C27C8:lI47|H3C2884
+3C2884:lI120|H3C2948
+3C2948:lI45|H3C2A0C
+3C2A0C:lI99|H3C2AD8
+3C2AD8:lI100|H3C2B9C
+3C2B9C:lI108|H3C2C58
+3C2C58:lI105|H3C2D08
+3C2D08:lI110|H3C2DB0
+3C2DB0:lI107|N
+3C1FF4:lI118|H3C20A8
+3C20A8:lI99|H3C215C
+3C215C:lI100|N
+3C1F54:lH3C2004|H3C2010
+3C2004:t2:H3C20B8,H3C20C0
+3C20C0:lI97|H3C2174
+3C2174:lI112|H3C2220
+3C2220:lI112|H3C22D4
+3C22D4:lI108|H3C2390
+3C2390:lI105|H3C2444
+3C2444:lI99|H3C24F0
+3C24F0:lI97|H3C25AC
+3C25AC:lI116|H3C2660
+3C2660:lI105|H3C2714
+3C2714:lI111|H3C27D0
+3C27D0:lI110|H3C288C
+3C288C:lI47|H3C2950
+3C2950:lI120|H3C2A14
+3C2A14:lI45|H3C2AE0
+3C2AE0:lI98|H3C2BA4
+3C2BA4:lI99|H3C2C60
+3C2C60:lI112|H3C2D10
+3C2D10:lI105|H3C2DB8
+3C2DB8:lI111|N
+3C20B8:lI98|H3C216C
+3C216C:lI99|H3C2218
+3C2218:lI112|H3C22CC
+3C22CC:lI105|H3C2388
+3C2388:lI111|N
+3C2010:lH3C20C8|H3C20D4
+3C20C8:t2:H3C217C,H3C2184
+3C2184:lI97|H3C2230
+3C2230:lI112|H3C22E4
+3C22E4:lI112|H3C2398
+3C2398:lI108|H3C244C
+3C244C:lI105|H3C24F8
+3C24F8:lI99|H3C25B4
+3C25B4:lI97|H3C2668
+3C2668:lI116|H3C271C
+3C271C:lI105|H3C27D8
+3C27D8:lI111|H3C2894
+3C2894:lI110|H3C2958
+3C2958:lI47|H3C2A1C
+3C2A1C:lI114|H3C2AE8
+3C2AE8:lI116|H3C2BAC
+3C2BAC:lI102|N
+3C217C:lI114|H3C2228
+3C2228:lI116|H3C22DC
+3C22DC:lI102|N
+3C20D4:lH3C218C|H3C2198
+3C218C:t2:H3C2238,H3C2240
+3C2240:lI97|H3C22F4
+3C22F4:lI112|H3C23A8
+3C23A8:lI112|H3C2454
+3C2454:lI108|H3C2500
+3C2500:lI105|H3C25BC
+3C25BC:lI99|H3C2670
+3C2670:lI97|H3C2724
+3C2724:lI116|H3C27E0
+3C27E0:lI105|H3C289C
+3C289C:lI111|H3C2960
+3C2960:lI110|H3C2A24
+3C2A24:lI47|H3C2AF0
+3C2AF0:lI112|H3C2BB4
+3C2BB4:lI111|H3C2C68
+3C2C68:lI119|H3C2D18
+3C2D18:lI101|H3C2DC0
+3C2DC0:lI114|H3C2E48
+3C2E48:lI112|H3C2EC0
+3C2EC0:lI111|H3C2F38
+3C2F38:lI105|H3C2FA8
+3C2FA8:lI110|H3C3010
+3C3010:lI116|N
+3C2238:lI112|H3C22EC
+3C22EC:lI112|H3C23A0
+3C23A0:lI116|N
+3C2198:lH3C2248|H3C2254
+3C2248:t2:H3C22FC,H3C2304
+3C2304:lI97|H3C23B8
+3C23B8:lI112|H3C245C
+3C245C:lI112|H3C2508
+3C2508:lI108|H3C25C4
+3C25C4:lI105|H3C2678
+3C2678:lI99|H3C272C
+3C272C:lI97|H3C27E8
+3C27E8:lI116|H3C28A4
+3C28A4:lI105|H3C2968
+3C2968:lI111|H3C2A2C
+3C2A2C:lI110|H3C2AF8
+3C2AF8:lI47|H3C2BBC
+3C2BBC:lI112|H3C2C70
+3C2C70:lI111|H3C2D20
+3C2D20:lI115|H3C2DC8
+3C2DC8:lI116|H3C2E50
+3C2E50:lI115|H3C2EC8
+3C2EC8:lI99|H3C2F40
+3C2F40:lI114|H3C2FB0
+3C2FB0:lI105|H3C3018
+3C3018:lI112|H3C3078
+3C3078:lI116|N
+3C22FC:lI97|H3C23B0
+3C23B0:lI105|N
+3C2254:lH3C230C|H3C2318
+3C230C:t2:H3C23C0,H3C23C8
+3C23C8:lI97|H3C246C
+3C246C:lI112|H3C2518
+3C2518:lI112|H3C25CC
+3C25CC:lI108|H3C2680
+3C2680:lI105|H3C2734
+3C2734:lI99|H3C27F0
+3C27F0:lI97|H3C28AC
+3C28AC:lI116|H3C2970
+3C2970:lI105|H3C2A34
+3C2A34:lI111|H3C2B00
+3C2B00:lI110|H3C2BC4
+3C2BC4:lI47|H3C2C78
+3C2C78:lI112|H3C2D28
+3C2D28:lI111|H3C2DD0
+3C2DD0:lI115|H3C2E58
+3C2E58:lI116|H3C2ED0
+3C2ED0:lI115|H3C2F48
+3C2F48:lI99|H3C2FB8
+3C2FB8:lI114|H3C3020
+3C3020:lI105|H3C3080
+3C3080:lI112|H3C30D8
+3C30D8:lI116|N
+3C23C0:lI101|H3C2464
+3C2464:lI112|H3C2510
+3C2510:lI115|N
+3C2318:lH3C23D0|H3C23DC
+3C23D0:t2:H3C2474,H3C247C
+3C247C:lI97|H3C2528
+3C2528:lI112|H3C25D4
+3C25D4:lI112|H3C2688
+3C2688:lI108|H3C273C
+3C273C:lI105|H3C27F8
+3C27F8:lI99|H3C28B4
+3C28B4:lI97|H3C2978
+3C2978:lI116|H3C2A3C
+3C2A3C:lI105|H3C2B08
+3C2B08:lI111|H3C2BCC
+3C2BCC:lI110|H3C2C80
+3C2C80:lI47|H3C2D30
+3C2D30:lI112|H3C2DD8
+3C2DD8:lI111|H3C2E60
+3C2E60:lI115|H3C2ED8
+3C2ED8:lI116|H3C2F50
+3C2F50:lI115|H3C2FC0
+3C2FC0:lI99|H3C3028
+3C3028:lI114|H3C3088
+3C3088:lI105|H3C30E0
+3C30E0:lI112|H3C3130
+3C3130:lI116|N
+3C2474:lI112|H3C2520
+3C2520:lI115|N
+3C23DC:lH3C2484|H3C2490
+3C2484:t2:H3C2530,H3C2538
+3C2538:lI97|H3C25E4
+3C25E4:lI112|H3C2698
+3C2698:lI112|H3C2744
+3C2744:lI108|H3C2800
+3C2800:lI105|H3C28BC
+3C28BC:lI99|H3C2980
+3C2980:lI97|H3C2A44
+3C2A44:lI116|H3C2B10
+3C2B10:lI105|H3C2BD4
+3C2BD4:lI111|H3C2C88
+3C2C88:lI110|H3C2D38
+3C2D38:lI47|H3C2DE0
+3C2DE0:lI112|H3C2E68
+3C2E68:lI100|H3C2EE0
+3C2EE0:lI102|N
+3C2530:lI112|H3C25DC
+3C25DC:lI100|H3C2690
+3C2690:lI102|N
+3C2490:lH3C2540|H3C254C
+3C2540:t2:H3C25EC,H3C25F4
+3C25F4:lI97|H3C26A8
+3C26A8:lI112|H3C2754
+3C2754:lI112|H3C2808
+3C2808:lI108|H3C28C4
+3C28C4:lI105|H3C2988
+3C2988:lI99|H3C2A4C
+3C2A4C:lI97|H3C2B18
+3C2B18:lI116|H3C2BDC
+3C2BDC:lI105|H3C2C90
+3C2C90:lI111|H3C2D40
+3C2D40:lI110|H3C2DE8
+3C2DE8:lI47|H3C2E70
+3C2E70:lI111|H3C2EE8
+3C2EE8:lI100|H3C2F58
+3C2F58:lI97|N
+3C25EC:lI111|H3C26A0
+3C26A0:lI100|H3C274C
+3C274C:lI97|N
+3C254C:lH3C25FC|H3C2608
+3C25FC:t2:H3C26B0,H3C26B8
+3C26B8:lI97|H3C2764
+3C2764:lI112|H3C2818
+3C2818:lI112|H3C28CC
+3C28CC:lI108|H3C2990
+3C2990:lI105|H3C2A54
+3C2A54:lI99|H3C2B20
+3C2B20:lI97|H3C2BE4
+3C2BE4:lI116|H3C2C98
+3C2C98:lI105|H3C2D48
+3C2D48:lI111|H3C2DF0
+3C2DF0:lI110|H3C2E78
+3C2E78:lI47|H3C2EF0
+3C2EF0:lI111|H3C2F60
+3C2F60:lI99|H3C2FC8
+3C2FC8:lI116|H3C3030
+3C3030:lI101|H3C3090
+3C3090:lI116|H3C30E8
+3C30E8:lI45|H3C3138
+3C3138:lI115|H3C3180
+3C3180:lI116|H3C31C8
+3C31C8:lI114|H3C3210
+3C3210:lI101|H3C3258
+3C3258:lI97|H3C32A0
+3C32A0:lI109|N
+3C26B0:lI98|H3C275C
+3C275C:lI105|H3C2810
+3C2810:lI110|N
+3C2608:lH3C26C0|H3C26CC
+3C26C0:t2:H3C276C,H3C2774
+3C2774:lI97|H3C2828
+3C2828:lI112|H3C28DC
+3C28DC:lI112|H3C2998
+3C2998:lI108|H3C2A5C
+3C2A5C:lI105|H3C2B28
+3C2B28:lI99|H3C2BEC
+3C2BEC:lI97|H3C2CA0
+3C2CA0:lI116|H3C2D50
+3C2D50:lI105|H3C2DF8
+3C2DF8:lI111|H3C2E80
+3C2E80:lI110|H3C2EF8
+3C2EF8:lI47|H3C2F68
+3C2F68:lI111|H3C2FD0
+3C2FD0:lI99|H3C3038
+3C3038:lI116|H3C3098
+3C3098:lI101|H3C30F0
+3C30F0:lI116|H3C3140
+3C3140:lI45|H3C3188
+3C3188:lI115|H3C31D0
+3C31D0:lI116|H3C3218
+3C3218:lI114|H3C3260
+3C3260:lI101|H3C32A8
+3C32A8:lI97|H3C32E8
+3C32E8:lI109|N
+3C276C:lI100|H3C2820
+3C2820:lI109|H3C28D4
+3C28D4:lI115|N
+3C26CC:lH3C277C|H3C2788
+3C277C:t2:H3C2830,H3C2838
+3C2838:lI97|H3C28EC
+3C28EC:lI112|H3C29A8
+3C29A8:lI112|H3C2A64
+3C2A64:lI108|H3C2B30
+3C2B30:lI105|H3C2BF4
+3C2BF4:lI99|H3C2CA8
+3C2CA8:lI97|H3C2D58
+3C2D58:lI116|H3C2E00
+3C2E00:lI105|H3C2E88
+3C2E88:lI111|H3C2F00
+3C2F00:lI110|H3C2F70
+3C2F70:lI47|H3C2FD8
+3C2FD8:lI111|H3C3040
+3C3040:lI99|H3C30A0
+3C30A0:lI116|H3C30F8
+3C30F8:lI101|H3C3148
+3C3148:lI116|H3C3190
+3C3190:lI45|H3C31D8
+3C31D8:lI115|H3C3220
+3C3220:lI116|H3C3268
+3C3268:lI114|H3C32B0
+3C32B0:lI101|H3C32F0
+3C32F0:lI97|H3C3320
+3C3320:lI109|N
+3C2830:lI108|H3C28E4
+3C28E4:lI104|H3C29A0
+3C29A0:lI97|N
+3C2788:lH3C2840|H3C284C
+3C2840:t2:H3C28F4,H3C28FC
+3C28FC:lI97|H3C29B8
+3C29B8:lI112|H3C2A74
+3C2A74:lI112|H3C2B38
+3C2B38:lI108|H3C2BFC
+3C2BFC:lI105|H3C2CB0
+3C2CB0:lI99|H3C2D60
+3C2D60:lI97|H3C2E08
+3C2E08:lI116|H3C2E90
+3C2E90:lI105|H3C2F08
+3C2F08:lI111|H3C2F78
+3C2F78:lI110|H3C2FE0
+3C2FE0:lI47|H3C3048
+3C3048:lI111|H3C30A8
+3C30A8:lI99|H3C3100
+3C3100:lI116|H3C3150
+3C3150:lI101|H3C3198
+3C3198:lI116|H3C31E0
+3C31E0:lI45|H3C3228
+3C3228:lI115|H3C3270
+3C3270:lI116|H3C32B8
+3C32B8:lI114|H3C32F8
+3C32F8:lI101|H3C3328
+3C3328:lI97|H3C3350
+3C3350:lI109|N
+3C28F4:lI108|H3C29B0
+3C29B0:lI122|H3C2A6C
+3C2A6C:lI104|N
+3C284C:lH3C2904|H3C2910
+3C2904:t2:H3C29C0,H3C29C8
+3C29C8:lI97|H3C2A84
+3C2A84:lI112|H3C2B48
+3C2B48:lI112|H3C2C04
+3C2C04:lI108|H3C2CB8
+3C2CB8:lI105|H3C2D68
+3C2D68:lI99|H3C2E10
+3C2E10:lI97|H3C2E98
+3C2E98:lI116|H3C2F10
+3C2F10:lI105|H3C2F80
+3C2F80:lI111|H3C2FE8
+3C2FE8:lI110|H3C3050
+3C3050:lI47|H3C30B0
+3C30B0:lI111|H3C3108
+3C3108:lI99|H3C3158
+3C3158:lI116|H3C31A0
+3C31A0:lI101|H3C31E8
+3C31E8:lI116|H3C3230
+3C3230:lI45|H3C3278
+3C3278:lI115|H3C32C0
+3C32C0:lI116|H3C3300
+3C3300:lI114|H3C3330
+3C3330:lI101|H3C3358
+3C3358:lI97|H3C3378
+3C3378:lI109|N
+3C29C0:lI101|H3C2A7C
+3C2A7C:lI120|H3C2B40
+3C2B40:lI101|N
+3C2910:lH3C29D0|H3C29DC
+3C29D0:t2:H3C2A8C,H3C2A94
+3C2A94:lI97|H3C2B58
+3C2B58:lI112|H3C2C14
+3C2C14:lI112|H3C2CC8
+3C2CC8:lI108|H3C2D78
+3C2D78:lI105|H3C2E18
+3C2E18:lI99|H3C2EA0
+3C2EA0:lI97|H3C2F18
+3C2F18:lI116|H3C2F88
+3C2F88:lI105|H3C2FF0
+3C2FF0:lI111|H3C3058
+3C3058:lI110|H3C30B8
+3C30B8:lI47|H3C3110
+3C3110:lI111|H3C3160
+3C3160:lI99|H3C31A8
+3C31A8:lI116|H3C31F0
+3C31F0:lI101|H3C3238
+3C3238:lI116|H3C3280
+3C3280:lI45|H3C32C8
+3C32C8:lI115|H3C3308
+3C3308:lI116|H3C3338
+3C3338:lI114|H3C3360
+3C3360:lI101|H3C3380
+3C3380:lI97|H3C3398
+3C3398:lI109|N
+3C2A8C:lI99|H3C2B50
+3C2B50:lI108|H3C2C0C
+3C2C0C:lI97|H3C2CC0
+3C2CC0:lI115|H3C2D70
+3C2D70:lI115|N
+3C29DC:lH3C2A9C|H3C2AA8
+3C2A9C:t2:H3C2B60,H3C2B68
+3C2B68:lI97|H3C2C24
+3C2C24:lI112|H3C2CD8
+3C2CD8:lI112|H3C2D80
+3C2D80:lI108|H3C2E20
+3C2E20:lI105|H3C2EA8
+3C2EA8:lI99|H3C2F20
+3C2F20:lI97|H3C2F90
+3C2F90:lI116|H3C2FF8
+3C2FF8:lI105|H3C3060
+3C3060:lI111|H3C30C0
+3C30C0:lI110|H3C3118
+3C3118:lI47|H3C3168
+3C3168:lI109|H3C31B0
+3C31B0:lI115|H3C31F8
+3C31F8:lI119|H3C3240
+3C3240:lI111|H3C3288
+3C3288:lI114|H3C32D0
+3C32D0:lI100|N
+3C2B60:lI100|H3C2C1C
+3C2C1C:lI111|H3C2CD0
+3C2CD0:lI99|N
+3C2AA8:lH3C2B70|H3C2B7C
+3C2B70:t2:H3C2C2C,H3C2C34
+3C2C34:lI97|H3C2CE8
+3C2CE8:lI112|H3C2D90
+3C2D90:lI112|H3C2E28
+3C2E28:lI108|H3C2EB0
+3C2EB0:lI105|H3C2F28
+3C2F28:lI99|H3C2F98
+3C2F98:lI97|H3C3000
+3C3000:lI116|H3C3068
+3C3068:lI105|H3C30C8
+3C30C8:lI111|H3C3120
+3C3120:lI110|H3C3170
+3C3170:lI47|H3C31B8
+3C31B8:lI109|H3C3200
+3C3200:lI97|H3C3248
+3C3248:lI99|H3C3290
+3C3290:lI45|H3C32D8
+3C32D8:lI99|H3C3310
+3C3310:lI111|H3C3340
+3C3340:lI109|H3C3368
+3C3368:lI112|H3C3388
+3C3388:lI97|H3C33A0
+3C33A0:lI99|H3C33B0
+3C33B0:lI116|H3C33C0
+3C33C0:lI112|H3C33D0
+3C33D0:lI114|H3C33E0
+3C33E0:lI111|N
+3C2C2C:lI99|H3C2CE0
+3C2CE0:lI112|H3C2D88
+3C2D88:lI116|N
+3C2B7C:lH3C2C3C|N
+3C2C3C:t2:H3C2CF0,H3C2CF8
+3C2CF8:lI97|H3C2DA0
+3C2DA0:lI112|H3C2E38
+3C2E38:lI112|H3C2EB8
+3C2EB8:lI108|H3C2F30
+3C2F30:lI105|H3C2FA0
+3C2FA0:lI99|H3C3008
+3C3008:lI97|H3C3070
+3C3070:lI116|H3C30D0
+3C30D0:lI105|H3C3128
+3C3128:lI111|H3C3178
+3C3178:lI110|H3C31C0
+3C31C0:lI47|H3C3208
+3C3208:lI109|H3C3250
+3C3250:lI97|H3C3298
+3C3298:lI99|H3C32E0
+3C32E0:lI45|H3C3318
+3C3318:lI98|H3C3348
+3C3348:lI105|H3C3370
+3C3370:lI110|H3C3390
+3C3390:lI104|H3C33A8
+3C33A8:lI101|H3C33B8
+3C33B8:lI120|H3C33C8
+3C33C8:lI52|H3C33D8
+3C33D8:lI48|N
+3C2CF0:lI104|H3C2D98
+3C2D98:lI113|H3C2E30
+3C2E30:lI120|N
+3BDBCC:lH3BDA78|H3BDA8C
+3BDA78:t2:A4:port,I8888
+3BDA8C:lH3BDB04|H3BDB10
+3BDB04:t2:AC:bind_address,H3BDB64
+3BDB64:t4:I127,I0,I0,I1
+3BDB10:lH3BDB78|H3BDB84
+3BDB78:t2:AB:server_name,H3BDBD4
+3BDBD4:lI108|H3BDC24
+3BDC24:lI111|H3BDC88
+3BDC88:lI99|H3BDCF0
+3BDCF0:lI97|H3BDD70
+3BDD70:lI108|H3BDDF8
+3BDDF8:lI104|H3BDE90
+3BDE90:lI111|H3BDF40
+3BDF40:lI115|H3BDFFC
+3BDFFC:lI116|N
+3BDB84:lH3BDBDC|H3BDBE8
+3BDBDC:t2:AE:max_header_siz,I1024
+3BDBE8:lH3BDC2C|H3BDC38
+3BDC2C:t2:A11:max_header_action,A8:reply414
+3BDC38:lH3BDC90|H3BDC9C
+3BDC90:t2:A8:com_type,A7:ip_comm
+3BDC9C:lH3BDCF8|H3BDD04
+3BDCF8:t2:A7:modules,H3BDD78
+3BDD78:lA9:mod_alias|H3BDE00
+3BDE00:lA8:mod_auth|H3BDE98
+3BDE98:lA7:mod_esi|H3BDF48
+3BDF48:lAB:mod_actions|H3BE004
+3BE004:lA7:mod_cgi|H3BE0D0
+3BE0D0:lAB:mod_include|H3BE1A4
+3BE1A4:lA7:mod_dir|H3BE288
+3BE288:lA7:mod_get|H3BE378
+3BE378:lA8:mod_head|H3BE47C
+3BE47C:lA7:mod_log|H3BE580
+3BE580:lAC:mod_disk_log|N
+3BDD04:lH3BDD80|H3BDD8C
+3BDD80:t2:AF:directory_index,H3BDE08
+3BDE08:lH3BDEA0|N
+3BDEA0:lI105|H3BDF50
+3BDF50:lI110|H3BE00C
+3BE00C:lI100|H3BE0D8
+3BE0D8:lI101|H3BE1AC
+3BE1AC:lI120|H3BE290
+3BE290:lI46|H3BE380
+3BE380:lI104|H3BE484
+3BE484:lI116|H3BE588
+3BE588:lI109|H3BE68C
+3BE68C:lI108|N
+3BDD8C:lH3BDE10|H3BDE1C
+3BDE10:t2:AC:default_type,H3BDEA8
+3BDEA8:lI116|H3BDF58
+3BDF58:lI101|H3BE014
+3BE014:lI120|H3BE0E0
+3BE0E0:lI116|H3BE1B4
+3BE1B4:lI47|H3BE298
+3BE298:lI112|H3BE388
+3BE388:lI108|H3BE48C
+3BE48C:lI97|H3BE590
+3BE590:lI105|H3BE694
+3BE694:lI110|N
+3BDE1C:lH3BDEB0|H3BDEBC
+3BDEB0:t2:A10:erl_script_alias,H3BDF60
+3BDF60:t2:H3BE01C,H3BE024
+3BE024:lH3BE0F0|N
+3BE0F0:lI119|H3BE1C4
+3BE1C4:lI101|H3BE2A8
+3BE2A8:lI98|H3BE398
+3BE398:lI116|H3BE49C
+3BE49C:lI111|H3BE5A0
+3BE5A0:lI111|H3BE6A4
+3BE6A4:lI108|N
+3BE01C:lI47|H3BE0E8
+3BE0E8:lI119|H3BE1BC
+3BE1BC:lI101|H3BE2A0
+3BE2A0:lI98|H3BE390
+3BE390:lI116|H3BE494
+3BE494:lI111|H3BE598
+3BE598:lI111|H3BE69C
+3BE69C:lI108|N
+3BDEBC:lH3BDF6C|H3BDF78
+3BDF6C:t2:A5:alias,H3BE02C
+3BE02C:t2:H3BE0F8,H3BE100
+3BE100:lI47|H3BE1D4
+3BE1D4:lI99|H3BE2B8
+3BE2B8:lI108|H3BE3A8
+3BE3A8:lI101|H3BE4AC
+3BE4AC:lI97|H3BE5B0
+3BE5B0:lI114|H3BE6B4
+3BE6B4:lI99|H3BE7A8
+3BE7A8:lI97|H3BE894
+3BE894:lI115|H3BE980
+3BE980:lI101|H3BEA74
+3BEA74:lI47|H3BEB68
+3BEB68:lI111|H3BEC54
+3BEC54:lI116|H3BED40
+3BED40:lI112|H3BEE2C
+3BEE2C:lI47|H3BEF00
+3BEF00:lI101|H3BEFD4
+3BEFD4:lI114|H3BF0A0
+3BF0A0:lI116|H3BF174
+3BF174:lI115|H3BF238
+3BF238:lI47|H3BF2FC
+3BF2FC:lI108|H3BF3A8
+3BF3A8:lI105|H3BF45C
+3BF45C:lI98|H3BF518
+3BF518:lI47|H3BF5DC
+3BF5DC:lI111|H3BF6B0
+3BF6B0:lI98|H3BF784
+3BF784:lI115|H3BF858
+3BF858:lI101|H3BF93C
+3BF93C:lI114|H3BFA18
+3BFA18:lI118|H3BFAF4
+3BFAF4:lI101|H3BFBD0
+3BFBD0:lI114|H3BFC9C
+3BFC9C:lI47|H3BFD60
+3BFD60:lI112|H3BFE2C
+3BFE2C:lI114|H3BFEE0
+3BFEE0:lI105|H3BFF94
+3BFF94:lI118|H3C0040
+3C0040:lI47|H3C00EC
+3C00EC:lI99|H3C0198
+3C0198:lI114|H3C024C
+3C024C:lI97|H3C0308
+3C0308:lI115|H3C03BC
+3C03BC:lI104|H3C0458
+3C0458:lI100|H3C04F4
+3C04F4:lI117|H3C0590
+3C0590:lI109|H3C0634
+3C0634:lI112|H3C06E0
+3C06E0:lI95|H3C078C
+3C078C:lI118|H3C0830
+3C0830:lI105|H3C08BC
+3C08BC:lI101|H3C0950
+3C0950:lI119|H3C09E4
+3C09E4:lI101|H3C0A80
+3C0A80:lI114|N
+3BE0F8:lI47|H3BE1CC
+3BE1CC:lI99|H3BE2B0
+3BE2B0:lI114|H3BE3A0
+3BE3A0:lI97|H3BE4A4
+3BE4A4:lI115|H3BE5A8
+3BE5A8:lI104|H3BE6AC
+3BE6AC:lI100|H3BE7A0
+3BE7A0:lI117|H3BE88C
+3BE88C:lI109|H3BE978
+3BE978:lI112|H3BEA6C
+3BEA6C:lI95|H3BEB60
+3BEB60:lI118|H3BEC4C
+3BEC4C:lI105|H3BED38
+3BED38:lI101|H3BEE24
+3BEE24:lI119|H3BEEF8
+3BEEF8:lI101|H3BEFCC
+3BEFCC:lI114|N
+3BDF78:lH3BE038|H3BE044
+3BE038:t2:A5:alias,H3BE108
+3BE108:t2:H3BE1DC,H3BE1E4
+3BE1E4:lI47|H3BE2C8
+3BE2C8:lI99|H3BE3B8
+3BE3B8:lI108|H3BE4BC
+3BE4BC:lI101|H3BE5C0
+3BE5C0:lI97|H3BE6C4
+3BE6C4:lI114|H3BE7B8
+3BE7B8:lI99|H3BE8A4
+3BE8A4:lI97|H3BE990
+3BE990:lI115|H3BEA84
+3BEA84:lI101|H3BEB78
+3BEB78:lI47|H3BEC64
+3BEC64:lI111|H3BED50
+3BED50:lI116|H3BEE3C
+3BEE3C:lI112|H3BEF10
+3BEF10:lI47|H3BEFE4
+3BEFE4:lI101|H3BF0B0
+3BF0B0:lI114|H3BF184
+3BF184:lI116|H3BF248
+3BF248:lI115|H3BF304
+3BF304:lI47|H3BF3B0
+3BF3B0:lI101|H3BF464
+3BF464:lI114|H3BF520
+3BF520:lI116|H3BF5E4
+3BF5E4:lI115|H3BF6B8
+3BF6B8:lI47|H3BF78C
+3BF78C:lI100|H3BF860
+3BF860:lI111|H3BF944
+3BF944:lI99|H3BFA20
+3BFA20:lI47|H3BFAFC
+3BFAFC:lI104|H3BFBD8
+3BFBD8:lI116|H3BFCA4
+3BFCA4:lI109|H3BFD68
+3BFD68:lI108|N
+3BE1DC:lI47|H3BE2C0
+3BE2C0:lI99|H3BE3B0
+3BE3B0:lI114|H3BE4B4
+3BE4B4:lI97|H3BE5B8
+3BE5B8:lI115|H3BE6BC
+3BE6BC:lI104|H3BE7B0
+3BE7B0:lI100|H3BE89C
+3BE89C:lI117|H3BE988
+3BE988:lI109|H3BEA7C
+3BEA7C:lI112|H3BEB70
+3BEB70:lI95|H3BEC5C
+3BEC5C:lI101|H3BED48
+3BED48:lI114|H3BEE34
+3BEE34:lI116|H3BEF08
+3BEF08:lI115|H3BEFDC
+3BEFDC:lI95|H3BF0A8
+3BF0A8:lI100|H3BF17C
+3BF17C:lI111|H3BF240
+3BF240:lI99|N
+3BE044:lH3BE114|H3BE120
+3BE114:t2:A5:alias,H3BE1EC
+3BE1EC:t2:H3BE2D0,H3BE2D8
+3BE2D8:lI47|H3BE3C8
+3BE3C8:lI99|H3BE4CC
+3BE4CC:lI108|H3BE5D0
+3BE5D0:lI101|H3BE6D4
+3BE6D4:lI97|H3BE7C8
+3BE7C8:lI114|H3BE8B4
+3BE8B4:lI99|H3BE9A0
+3BE9A0:lI97|H3BEA94
+3BEA94:lI115|H3BEB88
+3BEB88:lI101|H3BEC74
+3BEC74:lI47|H3BED60
+3BED60:lI111|H3BEE4C
+3BEE4C:lI116|H3BEF20
+3BEF20:lI112|H3BEFEC
+3BEFEC:lI47|H3BF0B8
+3BF0B8:lI101|H3BF18C
+3BF18C:lI114|H3BF250
+3BF250:lI116|H3BF30C
+3BF30C:lI115|H3BF3B8
+3BF3B8:lI47|H3BF46C
+3BF46C:lI108|H3BF528
+3BF528:lI105|H3BF5EC
+3BF5EC:lI98|H3BF6C0
+3BF6C0:lI47|H3BF794
+3BF794:lI111|H3BF868
+3BF868:lI98|H3BF94C
+3BF94C:lI115|H3BFA28
+3BFA28:lI101|H3BFB04
+3BFB04:lI114|H3BFBE0
+3BFBE0:lI118|H3BFCAC
+3BFCAC:lI101|H3BFD70
+3BFD70:lI114|H3BFE34
+3BFE34:lI47|H3BFEE8
+3BFEE8:lI100|H3BFF9C
+3BFF9C:lI111|H3C0048
+3C0048:lI99|H3C00F4
+3C00F4:lI47|H3C01A0
+3C01A0:lI104|H3C0254
+3C0254:lI116|H3C0310
+3C0310:lI109|H3C03C4
+3C03C4:lI108|N
+3BE2D0:lI47|H3BE3C0
+3BE3C0:lI99|H3BE4C4
+3BE4C4:lI114|H3BE5C8
+3BE5C8:lI97|H3BE6CC
+3BE6CC:lI115|H3BE7C0
+3BE7C0:lI104|H3BE8AC
+3BE8AC:lI100|H3BE998
+3BE998:lI117|H3BEA8C
+3BEA8C:lI109|H3BEB80
+3BEB80:lI112|H3BEC6C
+3BEC6C:lI95|H3BED58
+3BED58:lI100|H3BEE44
+3BEE44:lI111|H3BEF18
+3BEF18:lI99|N
+3BE120:lH3BE1F8|N
+3BE1F8:t2:A10:erl_script_alias,H3BE2E0
+3BE2E0:t2:H3BE3D0,H3BE3D8
+3BE3D8:lH3BE4DC|N
+3BE4DC:lI99|H3BE5E0
+3BE5E0:lI114|H3BE6E4
+3BE6E4:lI97|H3BE7D8
+3BE7D8:lI115|H3BE8C4
+3BE8C4:lI104|H3BE9B0
+3BE9B0:lI100|H3BEAA4
+3BEAA4:lI117|H3BEB90
+3BEB90:lI109|H3BEC7C
+3BEC7C:lI112|H3BED68
+3BED68:lI95|H3BEE54
+3BEE54:lI118|H3BEF28
+3BEF28:lI105|H3BEFF4
+3BEFF4:lI101|H3BF0C0
+3BF0C0:lI119|H3BF194
+3BF194:lI101|H3BF258
+3BF258:lI114|N
+3BE3D0:lI47|H3BE4D4
+3BE4D4:lI99|H3BE5D8
+3BE5D8:lI100|H3BE6DC
+3BE6DC:lI118|H3BE7D0
+3BE7D0:lI95|H3BE8BC
+3BE8BC:lI101|H3BE9A8
+3BE9A8:lI114|H3BEA9C
+3BEA9C:lI108|N
+3BDE2C:lH3BDA9C|H3BDECC
+3BDA9C:t4:I127,I0,I0,I1
+3BDECC:lI8888|H3BDF88
+3BDF88:lN|N
+3BDD1C:lN|N
+3BDA50:t2:AD:$initial_call,H3BDAB8
+3BDAB8:t3:A3:gen,A7:init_it,H3BDAB0
+3BDA5C:t2:A9:verbosity,A7:silence
+3BDAC8:t2:AE:auth_verbosity,A7:silence
+3BDB28:t2:A12:security_verbosity,A7:silence
+3BDB9C:t2:A12:acceptor_verbosity,A7:silence
+3BDC00:t2:AA:$ancestors,H3BDC5C
+3BDC5C:lA1A:httpd_sup__127_0_0_1__8888|H3BDCB4
+3BDCB4:lA8:web_tool|H3BDD24
+3BDD24:lP<0.27.0>|N
+3BDADC:t2:A19:request_handler_verbosity,A7:silence
+3BDB3C:t2:A5:sname,A3:man
+=proc_dictionary:<0.47.0>
+H36E688
+H36E694
+H36E6A0
+H36E6AC
+=proc_stack:<0.47.0>
+36c520:SReturn addr 0x362C9C (inet_tcp:accept/2 + 20)
+y0:I5
+y1:p<0.161>
+y2:p<0.141>
+36c530:SReturn addr 0x500C5C (httpd_socket:accept/3 + 280)
+y0:N
+36c538:SReturn addr 0x502BFC (httpd_acceptor:acceptor/4 + 164)
+y0:N
+36c540:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:SCatch 0x502BFC (httpd_acceptor:acceptor/4 + 164)
+y1:P<0.46.0>
+y2:A7:ip_comm
+y3:p<0.141>
+y4:A1B:httpd_conf__127_0_0_1__8888
+36c558:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:AE:httpd_acceptor
+y2:A8:acceptor
+y3:H36E6C8
+=proc_heap:<0.47.0>
+36E6C8:lP<0.44.0>|H36E724
+36E724:lP<0.46.0>|H36E748
+36E748:lA7:ip_comm|H36E760
+36E760:lH36E6D0|H36E778
+36E6D0:t4:I127,I0,I0,I1
+36E778:lI8888|H36E788
+36E788:lA1B:httpd_conf__127_0_0_1__8888|H36E798
+36E798:lA7:silence|N
+36E688:t2:AD:$initial_call,H36E6F0
+36E6F0:t3:AE:httpd_acceptor,A8:acceptor,H36E6C8
+36E694:t2:A9:verbosity,A7:silence
+36E6A0:t2:AA:$ancestors,H36E700
+36E700:lA1E:httpd_acc_sup__127_0_0_1__8888|H36E72C
+36E72C:lA1A:httpd_sup__127_0_0_1__8888|H36E750
+36E750:lA8:web_tool|H36E768
+36E768:lP<0.27.0>|N
+36E6AC:t2:A5:sname,A3:acc
+=proc_dictionary:<0.48.0>
+H385E48
+H385E54
+=proc_stack:<0.48.0>
+3ac1bc:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
+y0:N
+y1:A8:infinity
+y2:A10:crashdump_viewer
+y3:H3AB280
+y4:A17:crashdump_viewer_server
+y5:P<0.41.0>
+3ac1d8:SReturn addr 0x156F90 (<terminate process normally>)
+y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
+y1:A3:gen
+y2:A7:init_it
+y3:H385E90
+=proc_heap:<0.48.0>
+3AB280:t8:A5:state,A9:undefined,A9:undefined,A9:undefined,A5:false,I4,A9:undefined,P<0.56.0>
+385E90:lAA:gen_server|H385ED8
+385ED8:lP<0.41.0>|H385F10
+385F10:lP<0.41.0>|H385F58
+385F58:lH385FA8|H385FB4
+385FA8:t2:A5:local,A17:crashdump_viewer_server
+385FB4:lA10:crashdump_viewer|H386014
+386014:lN|H38606C
+38606C:lN|N
+385E48:t2:AD:$initial_call,H385EB0
+385EB0:t3:A3:gen,A7:init_it,H385E90
+385E54:t2:AA:$ancestors,H385EC0
+385EC0:lA6:websup|H385F08
+385F08:lA8:web_tool|H385F50
+385F50:lP<0.27.0>|N
+=proc_stack:<0.49.0>
+36a114:SReturn addr 0x30174C (io:parse_erl_exprs/3 + 92)
+y0:H369E10
+y1:P<0.22.0>
+36a120:SReturn addr 0x2E5360 (shell:'-get_command/4-fun-0-'/1 + 20)
+y0:N
+36a128:SReturn addr 0x156F90 (<terminate process normally>)
+=proc_heap:<0.49.0>
+369E10:E21:8372000364000D6E6F6E6F6465406E6F686F737400000001330000000000000000
+=atoms
diff --git a/lib/observer/test/etop_SUITE.erl b/lib/observer/test/etop_SUITE.erl
new file mode 100644
index 0000000000..54f4a78e69
--- /dev/null
+++ b/lib/observer/test/etop_SUITE.erl
@@ -0,0 +1,94 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2002-2010. 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(etop_SUITE).
+
+%% Test functions
+-export([all/1,text/1,text_tracing_off/1]).
+-export([init_per_testcase/2, fin_per_testcase/2]).
+
+-include("test_server.hrl").
+
+-define(default_timeout, ?t:minutes(1)).
+
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+fin_per_testcase(_Case, Config) ->
+ Dog=?config(watchdog, Config),
+ ?t:timetrap_cancel(Dog),
+ ok.
+
+all(suite) -> [text,text_tracing_off].
+
+text(suite) ->
+ [];
+text(doc) ->
+ ["Start etop with text presentation"];
+text(Config) when is_list(Config) ->
+ ?line {ok,Node} = ?t:start_node(node2,peer,[]),
+
+ %% Must spawn this process, else the test case will never end.
+ ?line spawn_link(etop,start,[[{node,Node},{output,text},{interval,3}]]),
+ ?line timer:sleep(4000),
+ ?line etop:config(interval,2),
+ ?line timer:sleep(3000),
+ ?line etop:config(lines,5),
+ ?line timer:sleep(3000),
+ ?line etop:config(accumulate,true),
+ ?line timer:sleep(3000),
+ ?line etop:config(sort,reductions),
+ ?line timer:sleep(3000),
+ ?line etop:config(sort,memory),
+ ?line timer:sleep(3000),
+ ?line etop:config(sort,msg_q),
+ ?line timer:sleep(3000),
+ ?line etop:stop(),
+ ?line ?t:stop_node(Node),
+ ok.
+
+text_tracing_off(suite) ->
+ [];
+text_tracing_off(doc) ->
+ ["Start etop with text presentation, and tracing turned off"];
+text_tracing_off(Config) when is_list(Config) ->
+ ?line {ok,Node} = ?t:start_node(node2,peer,[]),
+
+ %% Must spawn this process, else the test case will never end.
+ ?line spawn_link(etop,start,[[{node,Node},
+ {output,text},
+ {interval,3},
+ {tracing,off}]]),
+ ?line timer:sleep(4000),
+ ?line etop:config(interval,2),
+ ?line timer:sleep(3000),
+ ?line etop:config(lines,5),
+ ?line timer:sleep(3000),
+ ?line etop:config(accumulate,true),
+ ?line timer:sleep(3000),
+ ?line etop:config(sort,memory),
+ ?line timer:sleep(3000),
+ ?line etop:config(sort,msg_q),
+ ?line timer:sleep(3000),
+ ?line etop:config(sort,runtime), % this should not crash, but has no effect
+ ?line timer:sleep(3000),
+ ?line etop:stop(),
+ ?line ?t:stop_node(Node),
+ ok.
+
diff --git a/lib/observer/test/observer.cover b/lib/observer/test/observer.cover
new file mode 100644
index 0000000000..47770ba839
--- /dev/null
+++ b/lib/observer/test/observer.cover
@@ -0,0 +1,2 @@
+{exclude,[multitrace]}.
+{include,[observer_backend]}.
diff --git a/lib/observer/test/observer.dynspec b/lib/observer/test/observer.dynspec
new file mode 100644
index 0000000000..66794dfa11
--- /dev/null
+++ b/lib/observer/test/observer.dynspec
@@ -0,0 +1,11 @@
+%% -*- erlang -*-
+%% You can test this file using this command.
+%% file:script("observer.dynspec", [{'Os',"Unix"}]).
+
+case erlang:system_info(modified_timing_level) of
+ undefined ->
+ [];
+ _ ->
+ Reason = "Return trace limitation for spawn BIFs when +T is used",
+ [{skip,{ttb_SUITE,Reason}}]
+end.
diff --git a/lib/observer/test/observer.spec b/lib/observer/test/observer.spec
new file mode 100644
index 0000000000..801eb80607
--- /dev/null
+++ b/lib/observer/test/observer.spec
@@ -0,0 +1,2 @@
+{topcase, {dir, "../observer_test"}}.
+
diff --git a/lib/observer/test/observer_SUITE.erl b/lib/observer/test/observer_SUITE.erl
new file mode 100644
index 0000000000..3e9522c7a4
--- /dev/null
+++ b/lib/observer/test/observer_SUITE.erl
@@ -0,0 +1,51 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2006-2010. 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(observer_SUITE).
+-include("test_server.hrl").
+
+%% Test server specific exports
+-export([all/1]).
+-export([init_per_testcase/2, end_per_testcase/2]).
+
+%% Test cases
+-export([app_file/1]).
+
+%% Default timetrap timeout (set in init_per_testcase)
+-define(default_timeout, ?t:minutes(1)).
+
+init_per_testcase(_Case, Config) ->
+ Dog = ?t:timetrap(?default_timeout),
+ [{watchdog, Dog} | Config].
+
+end_per_testcase(_Case, Config) ->
+ Dog = ?config(watchdog, Config),
+ ?t:timetrap_cancel(Dog),
+ ok.
+
+all(suite) ->
+ [app_file].
+
+app_file(suite) ->
+ [];
+app_file(doc) ->
+ ["Testing .app file"];
+app_file(Config) when is_list(Config) ->
+ ?line ok = ?t:app_test(os_mon),
+ ok.
diff --git a/lib/observer/test/ttb_SUITE.erl b/lib/observer/test/ttb_SUITE.erl
new file mode 100644
index 0000000000..6da5e36b29
--- /dev/null
+++ b/lib/observer/test/ttb_SUITE.erl
@@ -0,0 +1,775 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2002-2010. 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(ttb_SUITE).
+
+-compile(export_all).
+%% Test functions
+-export([all/1,file/1,file_no_pi/1,file_fetch/1,wrap/1,wrap_merge/1,
+ wrap_merge_fetch_format/1,write_config1/1,write_config2/1,
+ write_config3/1,history/1,write_trace_info/1,seq_trace/1,
+ diskless/1,otp_4967_1/1,otp_4967_2/1]).
+-export([init_per_testcase/2, fin_per_testcase/2]).
+-export([foo/0]).
+
+-include("test_server.hrl").
+
+-define(default_timeout, ?t:minutes(1)).
+
+init_per_testcase(_Case, Config) ->
+ ttb:stop(),
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+fin_per_testcase(_Case, Config) ->
+ Dog=?config(watchdog, Config),
+ ?t:timetrap_cancel(Dog),
+ ok.
+
+all(suite) -> [file,file_no_pi,file_fetch,wrap,wrap_merge,
+ wrap_merge_fetch_format,write_config1,write_config2,
+ write_config3,history,write_trace_info,seq_trace,diskless,
+ otp_4967_1,otp_4967_2].
+
+file(suite) ->
+ [];
+file(doc) ->
+ ["Start tracing on multiple nodes, single file"];
+file(Config) when is_list(Config) ->
+ ?line Node = node(),
+ ?line {ok,OtherNode} = ?t:start_node(node2,slave,[]),
+ ?line c:nl(?MODULE),
+ ?line S = self(),
+ ?line Privdir=?config(priv_dir, Config),
+ ?line File = filename:join(Privdir,"file"),
+ ?line {ok,[Node]} =
+ ttb:tracer(Node,[{file, File},
+ {handler,{fun myhandler/4, S}}]),
+ ?line {ok,[{S,[{matched,Node,_}]}]} = ttb:p(S,call),
+ ?line {ok,[OtherNode]} =
+ ttb:tracer([Node,OtherNode],[{file, File},
+ {handler,{fun myhandler/4, S}}]),
+ ?line {ok,[{all,[{matched,_,_},{matched,_,_}]}]} = ttb:p(all,call),
+ ?line {ok,[]} = ttb:tracer([Node,OtherNode],
+ [{file, File},
+ {handler,{fun myhandler/4, S}}]),
+ ?line {ok,[{matched,_,1},{matched,_,1}]} = ttb:tp(?MODULE,foo,[]),
+ ?line ?MODULE:foo(),
+ ?line rpc:call(OtherNode,?MODULE,foo,[]),
+ ?line ttb:stop(),
+ ?line ?t:stop_node(OtherNode),
+ ?line ok = ttb:format(filename:join(Privdir,atom_to_list(Node)++"-file")),
+ ?line ok = ttb:format(filename:join(Privdir,
+ atom_to_list(OtherNode)++"-file")),
+
+ ?line [{trace,{S,_,Node},call,{?MODULE,foo,[]}},
+ end_of_trace,
+ {trace,{_,_,OtherNode},call,{?MODULE,foo,[]}},
+ end_of_trace] = flush(),
+ ok.
+
+file_no_pi(suite) ->
+ [];
+file_no_pi(doc) ->
+ ["Start tracing on multiple nodes, single file, no process information"];
+file_no_pi(Config) when is_list(Config) ->
+ ?line Node = node(),
+ ?line {ok,OtherNode} = ?t:start_node(node2,slave,[]),
+ ?line c:nl(?MODULE),
+ ?line S = self(),
+ ?line Privdir=?config(priv_dir, Config),
+ ?line File = filename:join(Privdir,"file"),
+ ?line {ok,[_,_]} =
+ ttb:tracer([Node,OtherNode],[{file, File},
+ {handler,{fun myhandler/4, S}},
+ {process_info,false}]),
+ ?line {ok,[{all,[{matched,_,_},{matched,_,_}]}]} = ttb:p(all,call),
+ ?line {ok,[{matched,_,1},{matched,_,1}]} = ttb:tp(?MODULE,foo,[]),
+ ?line ?MODULE:foo(),
+ ?line rpc:call(OtherNode,?MODULE,foo,[]),
+ ?line ttb:stop(),
+ ?line ?t:stop_node(OtherNode),
+ ?line ok = ttb:format(filename:join(Privdir,atom_to_list(Node)++"-file")),
+ ?line ok = ttb:format(filename:join(Privdir,
+ atom_to_list(OtherNode)++"-file")),
+
+ ?line [{trace,LocalProc,call,{?MODULE,foo,[]}},
+ end_of_trace,
+ {trace,RemoteProc,call,{?MODULE,foo,[]}},
+ end_of_trace] = flush(),
+ ?line true = is_pid(LocalProc),
+ ?line true = is_pid(RemoteProc),
+ ok.
+
+file_fetch(suite) ->
+ [];
+file_fetch(doc) ->
+ ["stop with the fetch option, i.e. collect all files when ttb is stopped"];
+file_fetch(Config) when is_list(Config) ->
+ ?line Node = node(),
+ ?line {ok,OtherNode} = ?t:start_node(node2,slave,[]),
+ ?line c:nl(?MODULE),
+ ?line S = self(),
+ ?line Privdir=?config(priv_dir, Config),
+ ?line ThisDir = filename:join(Privdir,this),
+ ?line ok = file:make_dir(ThisDir),
+ ?line OtherDir = filename:join(Privdir,other),
+ ?line ok = file:make_dir(OtherDir),
+ ?line ThisFile = filename:join(ThisDir,"file_fetch"),
+ ?line OtherFile = filename:join(OtherDir,"file_fetch"),
+
+ %% I'm setting priv_dir as cwd, so ttb_upload directory is created there
+ %% and not in any other strange place!
+ ?line {ok,Cwd} = file:get_cwd(),
+ ?line ok = file:set_cwd(Privdir),
+
+ ?line {ok,[Node]} =
+ ttb:tracer(Node,[{file, ThisFile},
+ {handler,{fun myhandler/4, S}}]),
+ ?line {ok,[OtherNode]} =
+ ttb:tracer([OtherNode],[{file, OtherFile},
+ {handler,{fun myhandler/4, S}}]),
+ ?line {ok,[{all,[{matched,_,_},{matched,_,_}]}]} = ttb:p(all,call),
+ ?line {ok,[{matched,_,1},{matched,_,1}]} = ttb:tp(?MODULE,foo,[]),
+ ?line ?MODULE:foo(),
+ ?line rpc:call(OtherNode,?MODULE,foo,[]),
+ ?line ?t:capture_start(),
+ ?line ttb:stop([fetch]),
+ ?line ?t:capture_stop(),
+ ?line [StoreString] = ?t:capture_get(),
+ ?line UploadDir =
+ lists:last(string:tokens(lists:flatten(StoreString),"$ \n")),
+ ?line ?t:stop_node(OtherNode),
+
+ %% check that files are no longer in original directories...
+ ?line ok = check_gone(ThisDir,atom_to_list(Node)++"-file_fetch"),
+ ?line ok = check_gone(ThisDir,atom_to_list(Node)++"-file_fetch.ti"),
+% ?line false = lists:member(TrcLog,ThisList),
+% ?line false = lists:member(TIFile,ThisList),
+
+ ?line {ok,OtherList} = file:list_dir(OtherDir),
+ ?line false = lists:member(atom_to_list(OtherNode)++"-file_fetch",OtherList),
+ ?line false = lists:member(atom_to_list(OtherNode)++"-file_fetch.ti",
+ OtherList),
+
+ %% but instead in ttb_upload directory, where they can be formatted
+ ?line ok = ttb:format(filename:join(UploadDir,
+ atom_to_list(Node)++"-file_fetch")),
+ ?line ok = ttb:format(filename:join(UploadDir,
+ atom_to_list(OtherNode)++"-file_fetch")),
+
+ ?line [{trace,{S,_,Node},call,{?MODULE,foo,[]}},
+ end_of_trace,
+ {trace,{_,_,OtherNode},call,{?MODULE,foo,[]}},
+ end_of_trace] = flush(),
+
+ ?line ok = file:set_cwd(Cwd),
+ ok.
+
+wrap(suite) ->
+ [];
+wrap(doc) ->
+ ["Start tracing on multiple nodes, wrap files"];
+wrap(Config) when is_list(Config) ->
+ ?line Node = node(),
+ ?line {ok,OtherNode} = ?t:start_node(node2,slave,[]),
+ ?line c:nl(?MODULE),
+ ?line S = self(),
+ ?line Privdir=?config(priv_dir, Config),
+ ?line File = filename:join(Privdir,"wrap"),
+ ?line {ok,[_,_]} =
+ ttb:tracer([Node,OtherNode],[{file, {wrap,File,200,3}},
+ {handler,{fun myhandler/4, S}}]),
+ ?line {ok,[{all,[{matched,_,_},{matched,_,_}]}]} = ttb:p(all,call),
+ ?line {ok,[{matched,_,1},{matched,_,1}]} = ttb:tp(?MODULE,foo,[]),
+ ?line ?MODULE:foo(),
+ ?line rpc:call(OtherNode,?MODULE,foo,[]),
+ ?line ?MODULE:foo(),
+ ?line rpc:call(OtherNode,?MODULE,foo,[]),
+ ?line ?MODULE:foo(),
+ ?line rpc:call(OtherNode,?MODULE,foo,[]),
+ ?line ttb:stop(),
+ ?line ?t:stop_node(OtherNode),
+ ?line ok = ttb:format(filename:join(Privdir,
+ atom_to_list(Node)++"-wrap.*.wrp")),
+ ?line [{trace,{S,_,Node},call,{?MODULE,foo,[]}},
+ {trace,{S,_,Node},call,{?MODULE,foo,[]}},
+ {trace,{S,_,Node},call,{?MODULE,foo,[]}},
+ end_of_trace] = flush(),
+ ?line ok = ttb:format(filename:join(Privdir,
+ atom_to_list(OtherNode)++"-wrap.*.wrp")),
+ ?line [{trace,{_,_,OtherNode},call,{?MODULE,foo,[]}},
+ {trace,{_,_,OtherNode},call,{?MODULE,foo,[]}},
+ {trace,{_,_,OtherNode},call,{?MODULE,foo,[]}},
+ end_of_trace] = flush(),
+
+ %% Check that merge does not crash even if the timestamp flag is not on.
+ ?line ok = ttb:format(
+ [filename:join(Privdir,
+ atom_to_list(Node)++"-wrap.*.wrp"),
+ filename:join(Privdir,
+ atom_to_list(OtherNode)++"-wrap.*.wrp")]),
+ ?line [{trace,{S,_,Node},call,{?MODULE,foo,[]}},
+ {trace,{S,_,Node},call,{?MODULE,foo,[]}},
+ {trace,{S,_,Node},call,{?MODULE,foo,[]}},
+ end_of_trace,
+ {trace,{_,_,OtherNode},call,{?MODULE,foo,[]}},
+ {trace,{_,_,OtherNode},call,{?MODULE,foo,[]}},
+ {trace,{_,_,OtherNode},call,{?MODULE,foo,[]}},
+ end_of_trace] = flush(),
+ ok.
+
+wrap_merge(suite) ->
+ [];
+wrap_merge(doc) ->
+ ["Start tracing on multiple nodes, wrap files, merge logs from both nodes"];
+wrap_merge(Config) when is_list(Config) ->
+ ?line Node = node(),
+ ?line {ok,OtherNode} = ?t:start_node(node2,slave,[]),
+ ?line c:nl(?MODULE),
+ ?line S = self(),
+ ?line Privdir=?config(priv_dir, Config),
+ ?line File = filename:join(Privdir,"wrap_merge"),
+ ?line {ok,[_,_]} =
+ ttb:tracer([Node,OtherNode],[{file, {wrap,File,200,3}},
+ {handler,{fun myhandler/4, S}}]),
+ ?line {ok,[{all,[{matched,_,_},{matched,_,_}]}]}=ttb:p(all,[call,timestamp]),
+ ?line {ok,[{matched,_,1},{matched,_,1}]} = ttb:tp(?MODULE,foo,[]),
+ ?line ?MODULE:foo(),
+ ?line rpc:call(OtherNode,?MODULE,foo,[]),
+ ?line ?MODULE:foo(),
+ ?line rpc:call(OtherNode,?MODULE,foo,[]),
+ ?line ?MODULE:foo(),
+ ?line rpc:call(OtherNode,?MODULE,foo,[]),
+ ?line ttb:stop(),
+ ?line ?t:stop_node(OtherNode),
+ ?line ok = ttb:format(
+ [filename:join(Privdir,
+ atom_to_list(Node)++"-wrap_merge.*.wrp"),
+ filename:join(Privdir,
+ atom_to_list(OtherNode)++"-wrap_merge.*.wrp")]),
+ ?line [{trace_ts,{S,_,Node},call,{?MODULE,foo,[]},_},
+ {trace_ts,_,call,{?MODULE,foo,[]},_},
+ {trace_ts,{S,_,Node},call,{?MODULE,foo,[]},_},
+ {trace_ts,_,call,{?MODULE,foo,[]},_},
+ {trace_ts,{S,_,Node},call,{?MODULE,foo,[]},_},
+ end_of_trace,
+ {trace_ts,{_,_,OtherNode},call,{?MODULE,foo,[]},_},
+ end_of_trace] = flush(),
+ ok.
+
+
+wrap_merge_fetch_format(suite) ->
+ [];
+wrap_merge_fetch_format(doc) ->
+ ["Start tracing on multiple nodes, wrap files, fetch and format at stop"];
+wrap_merge_fetch_format(Config) when is_list(Config) ->
+ ?line Node = node(),
+ ?line {ok,OtherNode} = ?t:start_node(node2,slave,[]),
+ ?line c:nl(?MODULE),
+ ?line S = self(),
+ ?line Privdir=?config(priv_dir, Config),
+ ?line File = filename:join(Privdir,"wrap_merge_fetch_format"),
+
+ %% I'm setting priv_dir as cwd, so ttb_upload directory is created there
+ %% and not in any other strange place!
+ ?line {ok,Cwd} = file:get_cwd(),
+ ?line ok = file:set_cwd(Privdir),
+
+ ?line {ok,[_,_]} =
+ ttb:tracer([Node,OtherNode],[{file, {wrap,File,200,3}},
+ {handler,{fun myhandler/4, S}}]),
+ ?line {ok,[{all,[{matched,_,_},{matched,_,_}]}]}=ttb:p(all,[call,timestamp]),
+ ?line {ok,[{matched,_,1},{matched,_,1}]} = ttb:tp(?MODULE,foo,[]),
+ ?line ?MODULE:foo(),
+ ?line rpc:call(OtherNode,?MODULE,foo,[]),
+ ?line ?MODULE:foo(),
+ ?line rpc:call(OtherNode,?MODULE,foo,[]),
+ ?line ?MODULE:foo(),
+ ?line rpc:call(OtherNode,?MODULE,foo,[]),
+ ?line ttb:stop([format]),
+ ?line ?t:stop_node(OtherNode),
+ ?line [{trace_ts,{S,_,Node},call,{?MODULE,foo,[]},_},
+ {trace_ts,{_,_,OtherNode},call,{?MODULE,foo,[]},_},
+ {trace_ts,{S,_,Node},call,{?MODULE,foo,[]},_},
+ {trace_ts,{_,_,OtherNode},call,{?MODULE,foo,[]},_},
+ {trace_ts,{S,_,Node},call,{?MODULE,foo,[]},_},
+ end_of_trace,
+ {trace_ts,{_,_,OtherNode},call,{?MODULE,foo,[]},_},
+ end_of_trace] = flush(),
+
+ ?line ok = file:set_cwd(Cwd),
+ ok.
+
+
+write_config1(suite) ->
+ [];
+write_config1(doc) ->
+ ["Write config given commands"];
+write_config1(Config) when is_list(Config) ->
+ ?line Node = node(),
+ ?line {ok,OtherNode} = ?t:start_node(node2,slave,[]),
+ ?line c:nl(?MODULE),
+ ?line S = self(),
+
+ ?line Privdir=?config(priv_dir, Config),
+ ?line File = filename:join(Privdir,"write_config1"),
+ ?line ok = ttb:write_config(File,
+ [{ttb,tracer,[[Node,OtherNode],
+ [{file, File},
+ {handler,{fun myhandler/4,S}}]]},
+ {ttb,p,[all,call]},
+ {ttb,tp,[?MODULE,foo,[]]}]),
+ ?line [_,_,_] = ttb:list_config(File),
+ ?line ok = ttb:run_config(File),
+ ?line ?MODULE:foo(),
+ ?line rpc:call(OtherNode,?MODULE,foo,[]),
+ ?line ttb:stop(),
+ ?line ?t:stop_node(OtherNode),
+ ?line ok = ttb:format(
+ [filename:join(Privdir,
+ atom_to_list(Node)++"-write_config1"),
+ filename:join(Privdir,
+ atom_to_list(OtherNode)++"-write_config1")]),
+ ?line [{trace,{S,_,Node},call,{?MODULE,foo,[]}},
+ end_of_trace,
+ {trace,Other,call,{?MODULE,foo,[]}},
+ end_of_trace] = flush(),
+
+ case metatest(Other,OtherNode,Privdir,"-write_config1.ti") of
+ {error,Reason} ->
+ timer:sleep(5000),
+ ?line ok = ttb:format(
+ [filename:join(Privdir,
+ atom_to_list(Node)++"-write_config1"),
+ filename:join(Privdir,
+ atom_to_list(OtherNode)++
+ "-write_config1")]),
+ ?line io:format("\nTrying again: ~p\n",[flush()]),
+ ?line ?t:fail(Reason);
+ ok ->
+ ok
+ end,
+ ok.
+
+write_config2(suite) ->
+ [];
+write_config2(doc) ->
+ ["Write config from history (all)"];
+write_config2(Config) when is_list(Config) ->
+ ?line Node = node(),
+ ?line {ok,OtherNode} = ?t:start_node(node2,slave,[]),
+ ?line c:nl(?MODULE),
+ ?line S = self(),
+ ?line Privdir=?config(priv_dir, Config),
+ ?line File = filename:join(Privdir,"write_config2"),
+ ?line {ok,[_,_]} =
+ ttb:tracer([Node,OtherNode],[{file, File},
+ {handler,{fun myhandler/4, S}}]),
+ ?line {ok,[{all,[{matched,_,_},{matched,_,_}]}]} = ttb:p(all,call),
+ ?line {ok,[{matched,_,1},{matched,_,1}]} = ttb:tp(?MODULE,foo,[]),
+ ?line ok = ttb:write_config(File,all),
+ ?line ttb:stop(),
+ ?line [_,_,_] = ttb:list_config(File),
+ ?line ok = ttb:run_config(File),
+ ?line ?MODULE:foo(),
+ ?line rpc:call(OtherNode,?MODULE,foo,[]),
+ ?line ttb:stop(),
+ ?line ?t:stop_node(OtherNode),
+ ?line ok = ttb:format(
+ [filename:join(Privdir,
+ atom_to_list(Node)++"-write_config2"),
+ filename:join(Privdir,
+ atom_to_list(OtherNode)++"-write_config2")]),
+ ?line [{trace,{S,_,Node},call,{?MODULE,foo,[]}},
+ end_of_trace,
+ {trace,Other,call,{?MODULE,foo,[]}},
+ end_of_trace] = flush(),
+
+ case metatest(Other,OtherNode,Privdir,"-write_config2.ti") of
+ {error,Reason} ->
+ timer:sleep(5000),
+ ?line ok = ttb:format(
+ [filename:join(Privdir,
+ atom_to_list(Node)++"-write_config2"),
+ filename:join(Privdir,
+ atom_to_list(OtherNode)++
+ "-write_config2")]),
+ ?line io:format("\nTrying again: ~p\n",[flush()]),
+ ?line ?t:fail(Reason);
+ ok ->
+ ok
+ end,
+ ok.
+
+write_config3(suite) ->
+ [];
+write_config3(doc) ->
+ ["Write config from history (selected and append)"];
+write_config3(Config) when is_list(Config) ->
+ ?line Node = node(),
+ ?line {ok,OtherNode} = ?t:start_node(node2,slave,[]),
+ ?line c:nl(?MODULE),
+ ?line S = self(),
+ ?line Privdir=?config(priv_dir, Config),
+ ?line File = filename:join(Privdir,"write_config3"),
+ ?line {ok,[_,_]} =
+ ttb:tracer([Node,OtherNode],[{file, File},
+ {handler,{fun myhandler/4, S}}]),
+ ?line {ok,[{all,[{matched,_,_},{matched,_,_}]}]} = ttb:p(all,call),
+ ?line {ok,[{matched,_,1},{matched,_,1}]} = ttb:tp(?MODULE,foo,[]),
+ ?line ok = ttb:write_config(File,[1,2]),
+ ?line ttb:stop(),
+ ?line [_,_] = ttb:list_config(File),
+ ?line ok = ttb:run_config(File),
+ ?line ?MODULE:foo(),
+ ?line rpc:call(OtherNode,?MODULE,foo,[]),
+ ?line ttb:stop(),
+ ?line ok = ttb:format(
+ [filename:join(Privdir,
+ atom_to_list(Node)++"-write_config3"),
+ filename:join(Privdir,
+ atom_to_list(OtherNode)++"-write_config3")]),
+ ?line [] = flush(), %foo is not traced
+
+ ?line ok = ttb:write_config(File,[{ttb,tp,[?MODULE,foo,[]]}],
+ [append]),
+ ?line [_,_,_] = ttb:list_config(File),
+ ?line ok = ttb:run_config(File),
+ ?line ?MODULE:foo(),
+ ?line rpc:call(OtherNode,?MODULE,foo,[]),
+ ?line ttb:stop(),
+ ?line ?t:stop_node(OtherNode),
+ ?line ok = ttb:format(
+ [filename:join(Privdir,
+ atom_to_list(Node)++"-write_config3"),
+ filename:join(Privdir,
+ atom_to_list(OtherNode)++"-write_config3")]),
+ ?line [{trace,{S,_,Node},call,{?MODULE,foo,[]}},
+ end_of_trace,
+ {trace,Other,call,{?MODULE,foo,[]}},
+ end_of_trace] = flush(),
+
+ case metatest(Other,OtherNode,Privdir,"-write_config3.ti") of
+ {error,Reason} ->
+ timer:sleep(5000),
+ ?line ok = ttb:format(
+ [filename:join(Privdir,
+ atom_to_list(Node)++"-write_config3"),
+ filename:join(Privdir,
+ atom_to_list(OtherNode)++
+ "-write_config3")]),
+ ?line io:format("\nTrying again: ~p\n",[flush()]),
+ ?line ?t:fail(Reason);
+ ok ->
+ ok
+ end,
+ ok.
+
+
+history(suite) ->
+ [];
+history(doc) ->
+ ["List history and execute entry from history"];
+history(Config) when is_list(Config) ->
+ ?line Node = node(),
+ ?line {ok,OtherNode} = ?t:start_node(node2,slave,[]),
+ ?line c:nl(?MODULE),
+ ?line S = self(),
+
+ ?line Nodes = [Node,OtherNode],
+ ?line Privdir=?config(priv_dir, Config),
+ ?line File = filename:join(Privdir,"history"),
+ ?line StartOpts = [{file, File},
+ {handler,{fun myhandler/4, S}}],
+ ?line {ok,[_,_]} = ttb:tracer(Nodes,StartOpts),
+ ?line {ok,[{all,[{matched,_,_},{matched,_,_}]}]} = ttb:p(all,call),
+ ?line {ok,[{matched,_,1},{matched,_,1}]} = ttb:tp(?MODULE,foo,[]),
+ ?line {ok,[{matched,_,1},{matched,_,1}]} = ttb:ctp(?MODULE,foo),
+ ?line [{1,{ttb,tracer,[Nodes,StartOpts]}},
+ {2,{ttb,p,[all,call]}},
+ {3,{ttb,tp,[?MODULE,foo,[]]}},
+ {4,{ttb,ctp,[?MODULE,foo]}}] = ttb:list_history(),
+ ?line rpc:call(OtherNode,?MODULE,foo,[]),
+ ?line ok = ttb:run_history(3),
+ ?line ?MODULE:foo(),
+ ?line ok = ttb:run_history([3,4]),
+ ?line ?MODULE:foo(),
+ ?line ttb:stop(),
+ ?line ?t:stop_node(OtherNode),
+ ?line ok = ttb:format(
+ [filename:join(Privdir,atom_to_list(Node)++"-history"),
+ filename:join(Privdir,atom_to_list(OtherNode)++"-history")]),
+ ?line [{trace,{S,_,Node},call,{?MODULE,foo,[]}},
+ end_of_trace] = flush(),
+ ok.
+
+
+
+write_trace_info(suite) ->
+ [];
+write_trace_info(doc) ->
+ ["Write trace info and give handler explicitly in format command"];
+write_trace_info(Config) when is_list(Config) ->
+ ?line Node = node(),
+ ?line {ok,OtherNode} = ?t:start_node(node2,slave,[]),
+ ?line c:nl(?MODULE),
+ ?line S = self(),
+ ?line Privdir=?config(priv_dir, Config),
+ ?line File = filename:join(Privdir,"write_trace_info"),
+ ?line {ok,[_,_]} =
+ ttb:tracer([Node,OtherNode],[{file, File},
+ {handler,{fun myhandler/4, S}}]),
+ ?line {ok,[{all,[{matched,_,_},{matched,_,_}]}]} = ttb:p(all,call),
+ ?line {ok,[{matched,_,1},{matched,_,1}]} = ttb:tp(?MODULE,foo,[]),
+ ?line ok = ttb:write_trace_info(mytraceinfo,fun() -> node() end),
+ ?line ?MODULE:foo(),
+ ?line rpc:call(OtherNode,?MODULE,foo,[]),
+ ?line ttb:stop(),
+ ?line ?t:stop_node(OtherNode),
+ ?line ok = ttb:format(
+ [filename:join(Privdir,atom_to_list(Node)++"-write_trace_info"),
+ filename:join(Privdir,
+ atom_to_list(OtherNode)++"-write_trace_info")],
+ [{handler,{fun otherhandler/4,S}}]),
+ ?line [{{trace,{S,_,Node},call,{?MODULE,foo,[]}},[Node]},
+ {end_of_trace,[Node]},
+ {{trace,{_,_,OtherNode},call,{?MODULE,foo,[]}},[OtherNode]},
+ {end_of_trace,[OtherNode]}] = flush(),
+
+ ok.
+
+
+seq_trace(suite) ->
+ [];
+seq_trace(doc) ->
+ ["Test sequential tracing"];
+seq_trace(Config) when is_list(Config) ->
+ ?line S = self(),
+
+ ?line Privdir=?config(priv_dir, Config),
+ ?line File = filename:join(Privdir,"seq_trace"),
+ ?line {ok,[Node]} = ttb:tracer(node(),[{file,File},
+ {handler,{fun myhandler/4, S}}]),
+ ?line {ok,[{new,[{matched,Node,0}]}]} = ttb:p(new,call),
+ ?line {ok,[{matched,Node,1},{saved,1}]} =
+ ttb:tpl(?MODULE,seq,0,ttb:seq_trigger_ms(send)),
+
+ ?line Start = spawn(fun() -> seq() end),
+ ?line timer:sleep(300),
+ ?line ttb:stop(),
+ ?line ok = ttb:format(
+ [filename:join(Privdir,atom_to_list(Node)++"-seq_trace")]),
+ ?line [{trace,StartProc,call,{?MODULE,seq,[]}},
+ {seq_trace,0,{send,{0,1},StartProc,P1Proc,{Start,P2}}},
+ {seq_trace,0,{send,{1,2},P1Proc,P2Proc,{P1,Start}}},
+ {seq_trace,0,{send,{2,3},P2Proc,StartProc,{P2,P1}}},
+ end_of_trace] = flush(),
+
+ %% Additional test for metatrace
+ case StartProc of
+ {Start,_,_} -> ok;
+ Pid when is_pid(Pid) ->
+ io:format("\n\nProcinfo was pid: ~p.\n"
+ "Should have been {Pid,Name,Node}\n",
+ [Pid]),
+ io:format("Trace information file:\n~p\n",
+ [ttb:dump_ti(
+ filename:join(Privdir,
+ atom_to_list(Node)++"-seq_trace.ti"))]),
+ ?t:fail("metatrace failed for startproc")
+ end,
+ case P1Proc of
+ {P1,_,_} -> ok;
+ P1 when is_pid(P1) ->
+ io:format("\n\nProcinfo was pid: ~p.\n"
+ "Should have been {Pid,Name,Node}\n",
+ [P1]),
+ io:format("Trace information file:\n~p\n",
+ [ttb:dump_ti(
+ filename:join(Privdir,
+ atom_to_list(Node)++"-seq_trace.ti"))]),
+ ?t:fail("metatrace failed for P1")
+ end,
+ case P2Proc of
+ {P2,_,_} -> ok;
+ P2 when is_pid(P2) ->
+ io:format("\n\nProcinfo was pid: ~p.\n"
+ "Should have been {Pid,Name,Node}\n",
+ [P2]),
+ io:format("Trace information file:\n~p\n",
+ [ttb:dump_ti(
+ filename:join(Privdir,
+ atom_to_list(Node)++"-seq_trace.ti"))]),
+ ?t:fail("metatrace failed for P2")
+ end,
+ ok.
+
+
+diskless(suite) ->
+ [];
+diskless(doc) ->
+ ["Start tracing on diskless remote node"];
+diskless(Config) when is_list(Config) ->
+ ?line {ok,RemoteNode} = ?t:start_node(node2,slave,[]),
+ ?line c:nl(?MODULE),
+ ?line S = self(),
+ ?line Privdir=?config(priv_dir, Config),
+ ?line File = filename:join(Privdir,"diskless"),
+ ?line {ok,[RemoteNode]} =
+ ttb:tracer([RemoteNode],[{file, {local, File}},
+ {handler,{fun myhandler/4, S}}]),
+ ?line {ok,[{all,[{matched,RemoteNode,_}]}]} = ttb:p(all,call),
+ ?line {ok,[{matched,RemoteNode,1}]} = ttb:tp(?MODULE,foo,[]),
+
+ ?line rpc:call(RemoteNode,?MODULE,foo,[]),
+ ?line timer:sleep(500), % needed for the IP port to flush
+ ?line ttb:stop(),
+ ?line ?t:stop_node(RemoteNode),
+ ?line ok = ttb:format(filename:join(Privdir,
+ atom_to_list(RemoteNode)++"-diskless")),
+
+ ?line [{trace,{_,_,RemoteNode},call,{?MODULE,foo,[]}},
+ end_of_trace] = flush(),
+ ok.
+
+
+otp_4967_1(suite) ->
+ [];
+otp_4967_1(doc) ->
+ ["OTP-4967: clear flag"];
+otp_4967_1(Config) when is_list(Config) ->
+ ?line {ok,[Node]} = ttb:tracer(),
+ ?line {ok,[{all,[{matched,Node,_}]}]} = ttb:p(all,call),
+ ?line {ok,[{all,[{matched,Node,_}]}]} = ttb:p(all,clear),
+ ?line stopped = ttb:stop(),
+ ok.
+
+
+otp_4967_2(suite) ->
+ [];
+otp_4967_2(doc) ->
+ ["OTP-4967: Trace message sent to {Name, Node}"];
+otp_4967_2(Config) when is_list(Config) ->
+ io:format("1: ~p",[now()]),
+ ?line Privdir = ?config(priv_dir,Config),
+ io:format("2: ~p",[now()]),
+ ?line File = filename:join(Privdir,"otp_4967"),
+ io:format("3: ~p",[now()]),
+ ?line S = self(),
+ io:format("4: ~p",[now()]),
+ ?line {ok,[Node]} =
+ ttb:tracer(node(),[{file, File},
+ {handler,{fun myhandler/4, S}}]),
+
+ io:format("5: ~p",[now()]),
+ %% Test that delayed registration of a process works.
+ receive after 200 -> ok end,
+ ?line register(otp_4967,self()),
+ io:format("6: ~p",[now()]),
+ ?line {ok,[{S,[{matched,Node,1}]}]} = ttb:p(self(),s),
+ io:format("7: ~p",[now()]),
+ ?line {otp_4967,node()} ! heihopp,
+ io:format("8: ~p",[now()]),
+ ?line stopped = ttb:stop([format]),
+ io:format("9: ~p",[now()]),
+ ?line Msgs = flush(),
+ io:format("10: ~p",[now()]),
+ ?line io:format("Messages received: \n~p\n",[Msgs]),
+ io:format("11: ~p",[now()]),
+ ?line true = lists:member(heihopp,Msgs), % the heihopp message itself
+ io:format("13: ~p",[now()]),
+ ?line {value,{trace,_,send,heihopp,{_,otp_4967,Node}}} =
+ lists:keysearch(heihopp,4,Msgs), % trace trace of the heihopp message
+ io:format("14: ~p",[now()]),
+ ?line end_of_trace = lists:last(Msgs), % end of the trace
+ ok.
+
+
+
+
+myhandler(_Fd,Trace,_,Relay) ->
+ Relay ! Trace,
+ Relay.
+
+otherhandler(_Fd,Trace,TI,Relay) ->
+ {value,{mytraceinfo,I}} = lists:keysearch(mytraceinfo,1,TI),
+ Relay ! {Trace,I},
+ Relay.
+
+flush() ->
+ flush([]).
+flush(Acc) ->
+ receive
+ X ->
+ flush(Acc ++ [X])
+ after 1000 ->
+ Acc
+ end.
+
+foo() ->
+ %% Sync between nodes is not always exact, so here is a litle timeout to
+ %% make sure traces come i correct sequence when merging.
+ %% In the real world there is no way to avoid this kind of trouble
+ timer:sleep(100),
+ foo_called.
+
+
+seq() ->
+ Fun = fun() -> timer:sleep(100),
+ receive {From,To} -> To ! {self(),From} end
+ end,
+ P1 = spawn(Fun),
+ P2 = spawn(Fun),
+ P1 ! {self(),P2},
+ receive {P2,P1} -> ok end,
+ {P1,P2}.
+
+%% Additional test for metatrace which might fail on OtherNode
+metatest(Proc,Node,Privdir,Filename) ->
+ case Proc of
+ {_,_,Node} -> ok;
+ Pid when is_pid(Pid) ->
+ io:format("\n\nProcinfo was pid: ~p.\n"
+ "Should have been {Pid,Name,Node}\n",
+ [Pid]),
+ io:format("Trace information file:\n~p\n",
+ [ttb:dump_ti(
+ filename:join(Privdir,atom_to_list(Node)++Filename))]),
+% ?t:fail("metatrace failed on "++atom_to_list(Node))
+ {error,"metatrace failed on "++atom_to_list(Node)}
+ end.
+
+check_gone(Dir,File) ->
+ ?line {ok,List} = file:list_dir(Dir),
+ ?line case lists:member(File,List) of
+ true ->
+ timer:sleep(2000),
+ {ok,NewList} = file:list_dir(Dir),
+ case lists:member(File,NewList) of
+ true ->
+ io:format("~p: ~p~n",
+ [Dir,NewList]),
+ ?t:fail(File ++ " not removed from original place");
+ false ->
+ io:format("gone after 2 sec....~n",[]),
+ ok
+ end;
+ false ->
+ ok
+ end.
diff --git a/lib/odbc/AUTHORS b/lib/odbc/AUTHORS
index 22813f36ce..38f72244ef 100644
--- a/lib/odbc/AUTHORS
+++ b/lib/odbc/AUTHORS
@@ -6,4 +6,5 @@ Original Authors:
Contributors:
Scott Lystig Fritchie - input/output variables for stored procedures
[email protected] - Some 64 bits adjustments
-Juhani R�nkimies - SQL_WCHAR and SQL_WVARCHAR support \ No newline at end of file
+Juhani R�nkimies - SQL_WCHAR and SQL_WVARCHAR support
+Juhani R�nkimies - TIMESTAMP support \ No newline at end of file
diff --git a/lib/odbc/c_src/odbcserver.c b/lib/odbc/c_src/odbcserver.c
index 5865cddcda..c9627e9d05 100644
--- a/lib/odbc/c_src/odbcserver.c
+++ b/lib/odbc/c_src/odbcserver.c
@@ -89,7 +89,8 @@
InOrOut = [ERL_ODBC_IN | ERL_ODBC_OUT | ERL_ODBC_INOUT]
Datatype - USER_INT | USER_SMALL_INT | {USER_DECIMAL, Precision, Scale} |
{USER_NMERIC, Precision, Scale} | {USER_CHAR, Max} | {USER_VARCHAR, Max} |
- {USER_WVARCHAR, Max} | {USER_FLOAT, Precision} | USER_REAL | USER_DOUBLE
+ {USER_WVARCHAR, Max} | {USER_FLOAT, Precision} | USER_REAL | USER_DOUBLE |
+ USER_TIMESTAMP
Scale - integer
Precision - integer
Max - integer
@@ -379,7 +380,7 @@ DWORD WINAPI database_handler(const char *port)
shutdown(socket, 2);
close_socket(socket);
clean_socket_lib();
- DO_EXIT(EXIT_SUCCESS);
+ /* Exit will be done by suervisor thread */
}
/* Description: Calls the appropriate function to handle the database
@@ -1080,6 +1081,7 @@ static db_result_msg encode_out_params(db_state *state,
int j = 0;
param_array column;
db_result_msg msg;
+ TIMESTAMP_STRUCT* ts;
msg = encode_empty_message();
ei_x_encode_tuple_header(&dynamic_buffer(state), 3);
@@ -1109,6 +1111,18 @@ static db_result_msg encode_out_params(db_state *state,
} else {
void* values = retrive_param_values(&column);
switch(column.type.c) {
+ case SQL_C_TYPE_TIMESTAMP:
+ ts = (TIMESTAMP_STRUCT*) values;
+ ei_x_encode_tuple_header(&dynamic_buffer(state), 2);
+ ei_x_encode_tuple_header(&dynamic_buffer(state), 3);
+ ei_x_encode_long(&dynamic_buffer(state), (long)(ts->year));
+ ei_x_encode_long(&dynamic_buffer(state), (long)(ts->month));
+ ei_x_encode_long(&dynamic_buffer(state), (long)(ts->day));
+ ei_x_encode_tuple_header(&dynamic_buffer(state), 3);
+ ei_x_encode_long(&dynamic_buffer(state), (long)(ts->hour));
+ ei_x_encode_long(&dynamic_buffer(state), (long)(ts->minute));
+ ei_x_encode_long(&dynamic_buffer(state), (long)(ts->second));
+ break;
case SQL_C_CHAR:
if binary_strings(state) {
ei_x_encode_binary(&dynamic_buffer(state),
@@ -1380,11 +1394,24 @@ static db_result_msg encode_row_count(SQLINTEGER num_of_rows,
static void encode_column_dyn(db_column column, int column_nr,
db_state *state)
{
+ TIMESTAMP_STRUCT* ts;
if (column.type.len == 0 ||
column.type.strlen_or_indptr == SQL_NULL_DATA) {
ei_x_encode_atom(&dynamic_buffer(state), "null");
} else {
switch(column.type.c) {
+ case SQL_C_TYPE_TIMESTAMP:
+ ts = (TIMESTAMP_STRUCT*)column.buffer;
+ ei_x_encode_tuple_header(&dynamic_buffer(state), 2);
+ ei_x_encode_tuple_header(&dynamic_buffer(state), 3);
+ ei_x_encode_ulong(&dynamic_buffer(state), ts->year);
+ ei_x_encode_ulong(&dynamic_buffer(state), ts->month);
+ ei_x_encode_ulong(&dynamic_buffer(state), ts->day);
+ ei_x_encode_tuple_header(&dynamic_buffer(state), 3);
+ ei_x_encode_ulong(&dynamic_buffer(state), ts->hour);
+ ei_x_encode_ulong(&dynamic_buffer(state), ts->minute);
+ ei_x_encode_ulong(&dynamic_buffer(state), ts->second);
+ break;
case SQL_C_CHAR:
if binary_strings(state) {
ei_x_encode_binary(&dynamic_buffer(state),
@@ -1491,7 +1518,7 @@ static void encode_data_type(SQLINTEGER sql_type, SQLINTEGER size,
ei_x_encode_atom(&dynamic_buffer(state), "SQL_TYPE_TIME");
break;
case SQL_TYPE_TIMESTAMP:
- ei_x_encode_atom(&dynamic_buffer(state), "SQL_TYPE_TIMESTAMP");
+ ei_x_encode_atom(&dynamic_buffer(state), "sql_timestamp");
break;
case SQL_BIGINT:
ei_x_encode_atom(&dynamic_buffer(state), "SQL_BIGINT");
@@ -1542,8 +1569,10 @@ static Boolean decode_params(db_state *state, byte *buffer, int *index, param_ar
{
int erl_type, size;
long bin_size, l64;
+ long val;
param_array* param;
-
+ TIMESTAMP_STRUCT* ts;
+
ei_get_type(buffer, index, &erl_type, &size);
param = &(*params)[i];
@@ -1564,50 +1593,67 @@ static Boolean decode_params(db_state *state, byte *buffer, int *index, param_ar
}
break;
case SQL_C_WCHAR:
- ei_decode_binary(buffer, index, &(param->values.string[param->offset]), &bin_size);
- param->offset += param->type.len;
- param->type.strlen_or_indptr_array[j] = SQL_NTS;
- break;
+ ei_decode_binary(buffer, index, &(param->values.string[param->offset]), &bin_size);
+ param->offset += param->type.len;
+ param->type.strlen_or_indptr_array[j] = SQL_NTS;
+ break;
+ case SQL_C_TYPE_TIMESTAMP:
+ ts = (TIMESTAMP_STRUCT*) param->values.string;
+ ei_decode_tuple_header(buffer, index, &val);
+ ei_decode_long(buffer, index, &val);
+ ts[j].year = (SQLUSMALLINT)val;
+ ei_decode_long(buffer, index, &val);
+ ts[j].month = (SQLUSMALLINT)val;
+ ei_decode_long(buffer, index, &val);
+ ts[j].day = (SQLUSMALLINT)val;
+ ei_decode_long(buffer, index, &val);
+ ts[j].hour = (SQLUSMALLINT)val;
+ ei_decode_long(buffer, index, &val);
+ ts[j].minute = (SQLUSMALLINT)val;
+ ei_decode_long(buffer, index, &val);
+ ts[j].second = (SQLUSMALLINT)val;
+ ts[j].fraction = (SQLINTEGER)0;
+ break;
case SQL_C_SLONG:
- if(!((erl_type == ERL_SMALL_INTEGER_EXT) ||
- (erl_type == ERL_INTEGER_EXT) ||
- (erl_type == ERL_SMALL_BIG_EXT) ||
- (erl_type == ERL_LARGE_BIG_EXT))) {
- return FALSE;
- }
-
- if(ei_decode_long(buffer, index, &l64)) {
- return FALSE;
- }
-
- /* For 64-bit platforms we downcast 8-byte long
- * to 4-byte SQLINTEGER, checking for overflow */
-
- if(l64>INT_MAX || l64<INT_MIN) {
- return FALSE;
- }
+ if(!((erl_type == ERL_SMALL_INTEGER_EXT) ||
+ (erl_type == ERL_INTEGER_EXT) ||
+ (erl_type == ERL_SMALL_BIG_EXT) ||
+ (erl_type == ERL_LARGE_BIG_EXT))) {
+ return FALSE;
+ }
+
+ if(ei_decode_long(buffer, index, &l64)) {
+ return FALSE;
+ }
+
+ /* For 64-bit platforms we downcast 8-byte long
+ * to 4-byte SQLINTEGER, checking for overflow */
+
+ if(l64>INT_MAX || l64<INT_MIN) {
+ return FALSE;
+ }
param->values.integer[j]=(SQLINTEGER)l64;
break;
-
+
case SQL_C_DOUBLE:
- if((erl_type != ERL_FLOAT_EXT)) {
- return FALSE;
- }
- ei_decode_double(buffer, index, &(param->values.floating[j]));
- break;
-
+ if((erl_type != ERL_FLOAT_EXT)) {
+ return FALSE;
+ }
+ ei_decode_double(buffer, index, &(param->values.floating[j]));
+ break;
+
case SQL_C_BIT:
if((erl_type != ERL_ATOM_EXT)) {
- return FALSE;
+ return FALSE;
}
ei_decode_boolean(buffer, index, &(param->values.bool[j]));
break;
-
+
default:
- return FALSE;
+ return FALSE;
}
-
+
return TRUE;
}
@@ -1987,7 +2033,7 @@ static void init_driver(int erl_auto_commit_mode, int erl_trace_driver,
db_state *state)
{
- int auto_commit_mode, trace_driver, use_srollable_cursors;
+ int auto_commit_mode, trace_driver;
if(erl_auto_commit_mode == ON) {
auto_commit_mode = SQL_AUTOCOMMIT_ON;
@@ -2013,18 +2059,19 @@ static void init_driver(int erl_auto_commit_mode, int erl_trace_driver,
environment_handle(state),
&connection_handle(state))))
DO_EXIT(EXIT_ALLOC);
+ /* By default Erlang handles all timeouts */
if(!sql_success(SQLSetConnectAttr(connection_handle(state),
SQL_ATTR_CONNECTION_TIMEOUT,
(SQLPOINTER)TIME_OUT, 0)))
- DO_EXIT(EXIT_CONNECTION);
+ DO_EXIT(EXIT_CONNECTION);
if(!sql_success(SQLSetConnectAttr(connection_handle(state),
SQL_ATTR_AUTOCOMMIT,
(SQLPOINTER)auto_commit_mode, 0)))
- DO_EXIT(EXIT_CONNECTION);
+ DO_EXIT(EXIT_CONNECTION);
if(!sql_success(SQLSetConnectAttr(connection_handle(state),
SQL_ATTR_TRACE,
(SQLPOINTER)trace_driver, 0)))
- DO_EXIT(EXIT_CONNECTION);
+ DO_EXIT(EXIT_CONNECTION);
}
static void init_param_column(param_array *params, byte *buffer, int *index,
@@ -2126,6 +2173,14 @@ static void init_param_column(param_array *params, byte *buffer, int *index,
(byte *)safe_malloc(num_param_values * sizeof(byte) * params->type.len);
break;
+ case USER_TIMESTAMP:
+ params->type.sql = SQL_TYPE_TIMESTAMP;
+ params->type.len = sizeof(TIMESTAMP_STRUCT);
+ params->type.c = SQL_C_TYPE_TIMESTAMP;
+ params->type.col_size = (SQLUINTEGER)19;//;sizeof(TIMESTAMP_STRUCT);
+ params->values.string =
+ (TIMESTAMP_STRUCT *)safe_malloc(num_param_values * params->type.len);
+ break;
case USER_FLOAT:
params->type.sql = SQL_FLOAT;
params->type.c = SQL_C_DOUBLE;
@@ -2297,12 +2352,16 @@ static db_result_msg map_sql_2_c_column(db_column* column)
break;
case SQL_TYPE_DATE:
case SQL_TYPE_TIME:
- case SQL_TYPE_TIMESTAMP:
column -> type.len = (column -> type.col_size) +
sizeof(byte);
column -> type.c = SQL_C_CHAR;
column -> type.strlen_or_indptr = SQL_NTS;
break;
+ case SQL_TYPE_TIMESTAMP:
+ column -> type.len = sizeof(TIMESTAMP_STRUCT);
+ column -> type.c = SQL_C_TYPE_TIMESTAMP;
+ column -> type.strlen_or_indptr = (SQLINTEGER)NULL;
+ break;
case SQL_BIGINT:
column -> type.len = DEC_NUM_LENGTH;
column -> type.c = SQL_C_CHAR;
@@ -2389,6 +2448,7 @@ static void * retrive_param_values(param_array *Param)
switch(Param->type.c) {
case SQL_C_CHAR:
case SQL_C_WCHAR:
+ case SQL_C_TYPE_TIMESTAMP:
return (void *)Param->values.string;
case SQL_C_SLONG:
return (void *)Param->values.integer;
diff --git a/lib/odbc/c_src/odbcserver.h b/lib/odbc/c_src/odbcserver.h
index 3b5a2b4d4d..e6d8df1f58 100644
--- a/lib/odbc/c_src/odbcserver.h
+++ b/lib/odbc/c_src/odbcserver.h
@@ -113,6 +113,7 @@
#define USER_TINY_INT 11
#define USER_WCHAR 12
#define USER_WVARCHAR 13
+#define USER_TIMESTAMP 14
/*------------------------ TYPDEFS ----------------------------------*/
diff --git a/lib/odbc/configure.in b/lib/odbc/configure.in
index 24e286c290..94e8a214d4 100644
--- a/lib/odbc/configure.in
+++ b/lib/odbc/configure.in
@@ -1,3 +1,21 @@
+dnl
+dnl %CopyrightBegin%
+dnl
+dnl Copyright Ericsson AB 2005-2010. All Rights Reserved.
+dnl
+dnl The contents of this file are subject to the Erlang Public License,
+dnl Version 1.1, (the "License"); you may not use this file except in
+dnl compliance with the License. You should have received a copy of the
+dnl Erlang Public License along with this software. If not, it can be
+dnl retrieved online at http://www.erlang.org/.
+dnl
+dnl Software distributed under the License is distributed on an "AS IS"
+dnl basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+dnl the License for the specific language governing rights and limitations
+dnl under the License.
+dnl
+dnl %CopyrightEnd%
+dnl
dnl define([AC_CACHE_LOAD], )dnl
dnl define([AC_CACHE_SAVE], )dnl
@@ -25,6 +43,11 @@ else
host_os=win32
fi
+AC_ARG_WITH(odbc,
+[ --with-odbc=PATH specify location of ODBC include and lib
+ --with-odbc use ODBC (default)
+ --without-odbc don't use ODBC])
+
if test "$with_odbc" = "no"; then
rm -f "$ERL_TOP/lib/odbc/SKIP"
@@ -116,7 +139,7 @@ AC_SUBST(TARGET_FLAGS)
case $host_os in
darwin*)
TARGET_FLAGS="-DUNIX"
- if test ! -d "$with_odbc" || test "$with_odbc" = "yes" ; then
+ if test ! -d "$with_odbc" || test "$with_odbc" = "yes"; then
ODBC_LIB= -L"/usr/lib"
ODBC_INCLUDE="-I/usr/lib/include"
else
@@ -129,7 +152,7 @@ AC_SUBST(TARGET_FLAGS)
win32|cygwin)
TARGET_FLAGS="-DWIN32"
AC_CHECK_LIB(ws2_32, main)
- if test ! -d "$with_odbc"; then
+ if test ! -d "$with_odbc" || test "$with_odbc" = "yes"; then
ODBC_LIB=""
ODBC_INCLUDE=""
else
@@ -147,7 +170,7 @@ AC_SUBST(TARGET_FLAGS)
echo "$msg" > "$ERL_TOP/lib/odbc/SKIP"
odbc_lib_link_success=wont_try
;;
- no- )
+ no-yes | no- )
AC_CHECK_SIZEOF(void *)
AC_MSG_CHECKING([for odbc in standard locations])
for rdir in /usr/local/odbc /usr/local /usr/odbc \
@@ -177,7 +200,7 @@ AC_SUBST(TARGET_FLAGS)
fi
;;
- no-*)
+ *)
ODBC_LIB=-L"$with_odbc/lib"
ODBC_INCLUDE="-I$with_odbc/include"
AC_CHECK_LIB(odbc, SQLAllocHandle,[ODBC_LIB="$ODBC_LIB -lodbc"; odbc_lib_link_success=yes])
diff --git a/lib/odbc/doc/src/databases.xml b/lib/odbc/doc/src/databases.xml
index 2c1b932084..9776736909 100644
--- a/lib/odbc/doc/src/databases.xml
+++ b/lib/odbc/doc/src/databases.xml
@@ -99,7 +99,7 @@
<p>Note that when the value of the data to input is a string, it
has to be quoted with <c>'</c>. Example: </p>
<code type="none">
-\011odbc:sql_query(Ref, "INSERT INTO EMPLOYEE VALUES(1, 'Jane', 'Doe', 'F')").
+odbc:sql_query(Ref, "INSERT INTO EMPLOYEE VALUES(1, 'Jane', 'Doe', 'F')").
</code>
</note>
<p>You may also input data using <seealso marker="odbc#param_query">param_query/[3,4]</seealso> and then
@@ -198,7 +198,7 @@ when p >= 16 </cell>
</row>
<row>
<cell align="left" valign="middle">SQL_TYPE_TIMESTAMP </cell>
- <cell align="left" valign="middle">String </cell>
+ <cell align="left" valign="middle"> {{YY, MM, DD}, {HH, MM, SS}} </cell>
</row>
<row>
<cell align="left" valign="middle">SQL_LONGVARCHAR </cell>
@@ -262,8 +262,8 @@ when p >= 16 </cell>
customers of that department. </p>
<code type="none">
CREATE PROCEDURE DepartmentInfo (@DepartmentID INT) AS
-\011SELECT * FROM Employee WHERE department = @DepartmentID
-\011SELECT * FROM Customers WHERE department = @DepartmentID
+ SELECT * FROM Employee WHERE department = @DepartmentID
+ SELECT * FROM Customers WHERE department = @DepartmentID
</code>
</section>
diff --git a/lib/odbc/doc/src/getting_started.xml b/lib/odbc/doc/src/getting_started.xml
index 864c3a7b65..d543ef64d6 100644
--- a/lib/odbc/doc/src/getting_started.xml
+++ b/lib/odbc/doc/src/getting_started.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2002</year><year>2009</year>
+ <year>2002</year><year>2010</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -13,12 +13,12 @@
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.
-
+
</legalnotice>
<title>Getting started</title>
@@ -108,15 +108,15 @@
to insert many rows in one go. </p>
<code type="none">
6 > odbc:param_query(Ref,"INSERT INTO EMPLOYEE (NR, FIRSTNAME, "
-\011 "LASTNAME, GENDER) VALUES(?, ?, ?, ?)",
-\011 [{sql_integer,[2,3,4,5,6,7,8]},
-\011 {{sql_varchar, 20},
+ "LASTNAME, GENDER) VALUES(?, ?, ?, ?)",
+ [{sql_integer,[2,3,4,5,6,7,8]},
+ {{sql_varchar, 20},
["John", "Monica", "Ross", "Rachel",
"Piper", "Prue", "Louise"]},
-\011 {{sql_varchar, 20},
+ {{sql_varchar, 20},
["Doe","Geller","Geller", "Green",
"Halliwell", "Halliwell", "Lane"]},
-\011 {{sql_char, 1}, ["M","F","M","F","F","F","F"]}]).
+ {{sql_char, 1}, ["M","F","M","F","F","F","F"]}]).
{updated, 7}
</code>
<p>Fetch all data in the table employee </p>
diff --git a/lib/odbc/doc/src/notes.xml b/lib/odbc/doc/src/notes.xml
index 29fed0e286..09d78c3248 100644
--- a/lib/odbc/doc/src/notes.xml
+++ b/lib/odbc/doc/src/notes.xml
@@ -20,7 +20,7 @@
under the License.
</legalnotice>
-
+
<title>ODBC Release Notes</title>
<prepared>otp_appnotes</prepared>
<docno>nil</docno>
@@ -30,41 +30,51 @@
</header>
<p>This document describes the changes made to the odbc application.
</p>
-
+
<section><title>ODBC 2.10.8</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
<p>
- ODBC now handles the types SQL_WCHAR and SQL_WVARCHAR.
- ODBC also has a new connection option to return all
- strings as binaries and also expect strings to be
- binaries in the param_query function. This provides some
- but not a full unicode support.</p>
+ ODBC now handles the types SQL_WCHAR and SQL_WVARCHAR.
+ Thanks to Juhani R�nkimies. ODBC also has a new
+ connection option to return all strings as binaries and
+ also expect strings to be binaries in the param_query
+ function. These changes provides some unicode support.</p>
<p>
- Own Id: OTP-7452</p>
+ Own Id: OTP-7452</p>
</item>
- </list>
- </section>
-
- </section>
-
- <section><title>ODBC 2.10.7</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
<item>
<p>
- The odbc application can now be compiled on FreeBSD.
- (Thanks to Kenji Rikitake.)</p>
+ Now supports SQL_TYPE_TIMESTAMP on the format {{YY, MM,
+ DD}, {HH, MM, SS}}. Thanks to Juhani R�nkimies.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
<p>
- Own Id: OTP-8444</p>
+ Own Id: OTP-8511</p>
</item>
</list>
</section>
+</section>
+
+ <section><title>ODBC 2.10.7</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ The odbc application can now be compiled on FreeBSD.
+ (Thanks to Kenji Rikitake.)</p>
+ <p>
+ Own Id: OTP-8444</p>
+ </item>
+ </list>
+ </section>
+
+
<section><title>Improvements and New Features</title>
<list>
<item>
diff --git a/lib/odbc/doc/src/odbc.xml b/lib/odbc/doc/src/odbc.xml
index 3efbac8dd4..70d8cfbe22 100644
--- a/lib/odbc/doc/src/odbc.xml
+++ b/lib/odbc/doc/src/odbc.xml
@@ -311,7 +311,7 @@
capital letters, alas it is not currently supported by the
param_query function. Too know which Erlang data type
corresponds to an ODBC data type see the Erlang to ODBC
- data type<seealso marker="databases#type">mapping</seealso> in the User's Guide.</p>
+ data type <seealso marker="databases#type">mapping</seealso> in the User's Guide.</p>
</note>
</desc>
</func>
diff --git a/lib/odbc/src/odbc.erl b/lib/odbc/src/odbc.erl
index f8914639e6..eb27a471ec 100644
--- a/lib/odbc/src/odbc.erl
+++ b/lib/odbc/src/odbc.erl
@@ -931,6 +931,16 @@ fix_params({sql_double, InOut, Values}) ->
{?USER_DOUBLE, fix_inout(InOut), Values};
fix_params({sql_bit, InOut, Values}) ->
{?USER_BOOLEAN, fix_inout(InOut), Values};
+fix_params({'sql_timestamp', InOut, Values}) ->
+ NewValues =
+ case (catch
+ lists:map(fun({{Year,Month,Day},{Hour,Minute,Second}}) ->
+ {Year,Month,Day,Hour,Minute,Second}
+ end, Values)) of
+ Result ->
+ Result
+ end,
+ {?USER_TIMESTAMP, fix_inout(InOut), NewValues};
%% default is IN %%%
fix_params({Type, Values}) ->
fix_params({Type, in, Values}).
diff --git a/lib/odbc/src/odbc_internal.hrl b/lib/odbc/src/odbc_internal.hrl
index 10ed139338..aa60120f9a 100644
--- a/lib/odbc/src/odbc_internal.hrl
+++ b/lib/odbc/src/odbc_internal.hrl
@@ -71,6 +71,7 @@
-define(USER_TINY_INT, 11).
-define(USER_WCHAR, 12).
-define(USER_WVARCHAR, 13).
+-define(USER_TIMESTAMP, 14).
%% INPUT & OUTPUT TYPE
-define(IN, 0).
diff --git a/lib/odbc/vsn.mk b/lib/odbc/vsn.mk
index 7af25db25b..d813466437 100644
--- a/lib/odbc/vsn.mk
+++ b/lib/odbc/vsn.mk
@@ -1,6 +1,6 @@
ODBC_VSN = 2.10.8
-TICKETS = OTP-7452
+TICKETS = OTP-7452 OTP-8511
TICKETS_2.10.6 = \
OTP-8250 \
diff --git a/lib/orber/doc/src/notes.xml b/lib/orber/doc/src/notes.xml
index f97d7ac1fa..1013d370e4 100644
--- a/lib/orber/doc/src/notes.xml
+++ b/lib/orber/doc/src/notes.xml
@@ -35,6 +35,17 @@
<section>
<title>Orber 3.6.16</title>
<section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>
+ Test suites published.</p>
+ <p>
+ Own Id: OTP-8543 Aux Id:</p>
+ </item>
+ </list>
+ </section>
+ <section>
<title>Fixed Bugs and Malfunctions</title>
<list type="bulleted">
<item>
diff --git a/lib/orber/test/Makefile b/lib/orber/test/Makefile
new file mode 100644
index 0000000000..4601e84d2c
--- /dev/null
+++ b/lib/orber/test/Makefile
@@ -0,0 +1,228 @@
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 1997-2010. 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/target.mk
+include $(ERL_TOP)/make/$(TARGET)/otp.mk
+
+# ----------------------------------------------------
+# Application version
+# ----------------------------------------------------
+include ../vsn.mk
+VSN=$(ORBER_VSN)
+# ----------------------------------------------------
+# Release directory specification
+# ----------------------------------------------------
+RELSYSDIR = $(RELEASE_PATH)/orber_test
+
+# ----------------------------------------------------
+# Target Specs
+# ----------------------------------------------------
+TEST_SPEC_FILE = orber.spec
+
+
+IDL_FILES = \
+ orber_test.idl \
+ iiop_test.idl \
+ orber_test_server.idl
+
+IDLOUTDIR = idl_output
+
+MODULES = \
+ cdrcoding_11_SUITE \
+ cdrcoding_10_SUITE \
+ cdrcoding_12_SUITE \
+ cdrlib_SUITE \
+ corba_SUITE \
+ iop_ior_11_SUITE \
+ iop_ior_10_SUITE \
+ iop_ior_12_SUITE \
+ iiop_module_do_test_impl \
+ iiop_module_test_impl \
+ lname_SUITE \
+ naming_context_SUITE \
+ orber_SUITE \
+ orber_test_server_impl \
+ orber_test_timeout_server_impl \
+ orber_test_lib \
+ csiv2_SUITE \
+ multi_ORB_SUITE \
+ data_types_SUITE \
+ tc_SUITE \
+ generated_SUITE \
+ orber_web_SUITE \
+ interceptors_SUITE \
+ orber_acl_SUITE \
+ orber_firewall_ipv4_in_SUITE \
+ orber_firewall_ipv6_in_SUITE \
+ orber_firewall_ipv4_out_SUITE \
+ orber_firewall_ipv6_out_SUITE \
+ orber_nat_SUITE
+
+GEN_MOD_ORBER = \
+ oe_orber_test \
+ Module_Except1 \
+ Module_Except2 \
+ Module_Except3 \
+ Module_Except4 \
+ Module_HEADER \
+ Module_I1 \
+ Module_I2 \
+ Module_Struct0 \
+ Module_Struct1 \
+ Module_Struct2 \
+ Module_Union \
+ Module_Union1 \
+ Module_Union2
+
+GEN_HRL_ORBER = \
+ oe_orber_test.hrl \
+ Module.hrl \
+ Module_I1.hrl \
+ Module_I2.hrl
+
+GEN_MOD_IIOP = \
+ oe_iiop_test \
+ iiop_module_Except1 \
+ iiop_module_Struct1 \
+ iiop_module_Union1 \
+ iiop_module_do_test \
+ iiop_module_test \
+ iiop_module_test_retval
+
+GEN_HRL_IIOP = \
+ oe_iiop_test.hrl \
+ iiop_module.hrl \
+ iiop_module_do_test.hrl \
+ iiop_module_test.hrl
+
+GEN_MOD_TEST_SERVER = \
+ oe_orber_test_server \
+ orber_test_server \
+ orber_test_server_ComplexUserDefinedException \
+ orber_test_server_UserDefinedException \
+ orber_test_server_struc \
+ orber_test_server_uni \
+ orber_test_server_uni_d \
+ orber_test_timeout_server \
+ orber_parent_inherrit
+
+GEN_HRL_TEST_SERVER = \
+ oe_orber_test_server.hrl \
+ orber_test_server.hrl \
+ orber_test_timeout_server.hrl
+
+GEN_MODULES = $(GEN_MOD_ORBER) $(GEN_MOD_IIOP) \
+ $(GEN_MOD_TEST_SERVER)
+
+ERL_FILES = $(MODULES:%=%.erl)
+
+HRL_FILES =
+
+GEN_HRL_FILES = $(GEN_HRL_ORBER) $(GEN_HRL_IIOP) \
+ $(GEN_HRL_TEST_SERVER)
+
+GEN_FILES = \
+ $(GEN_HRL_FILES:%=$(IDLOUTDIR)/%) \
+ $(GEN_MODULES:%=$(IDLOUTDIR)/%.erl)
+
+GEN_TARGET_FILES = $(GEN_MODULES:%=$(IDLOUTDIR)/%.$(EMULATOR))
+
+SUITE_TARGET_FILES = $(MODULES:%=%.$(EMULATOR))
+
+TARGET_FILES = \
+ $(GEN_TARGET_FILES) \
+ $(SUITE_TARGET_FILES)
+
+# ----------------------------------------------------
+# FLAGS
+# ----------------------------------------------------
+ERL_IDL_FLAGS += -pa $(ERL_TOP)/lib/orber/ebin -pa $(ERL_TOP)/lib/ic/ebin
+
+ERL_COMPILE_FLAGS += $(ERL_IDL_FLAGS) \
+ -pa $(ERL_TOP)/lib/test_server/ebin \
+ -pa $(ERL_TOP)/lib/ic/ebin \
+ -pa $(ERL_TOP)/lib/orber/ebin \
+ -I$(ERL_TOP)/lib/orber \
+ -I$(ERL_TOP)/lib/orber/test/$(IDLOUTDIR) \
+ -I$(ERL_TOP)/lib/test_server/include
+
+# ----------------------------------------------------
+# Targets
+# ----------------------------------------------------
+tests debug opt: $(TARGET_FILES)
+
+clean:
+ rm -f idl_output/*
+ rm -f $(TARGET_FILES)
+ rm -f errs core *~
+
+
+docs:
+
+# ----------------------------------------------------
+# Special Targets
+# ----------------------------------------------------
+
+#
+# Each IDL file produces many target files so no pattern
+# rule can be used.
+#
+TGT_ORBER = \
+ $(GEN_HRL_ORBER:%=$(IDLOUTDIR)/%) \
+ $(GEN_MOD_ORBER:%=$(IDLOUTDIR)/%.erl)
+TGT_IIOP = \
+ $(GEN_HRL_IIOP:%=$(IDLOUTDIR)/%) \
+ $(GEN_MOD_IIOP:%=$(IDLOUTDIR)/%.erl)
+
+TGT_TEST_SERVER = \
+ $(GEN_HRL_TEST_SERVER:%=$(IDLOUTDIR)/%) \
+ $(GEN_MOD_TEST_SERVER:%=$(IDLOUTDIR)/%.erl)
+
+$(TGT_ORBER): orber_test.idl
+ erlc $(ERL_IDL_FLAGS) -o$(IDLOUTDIR) orber_test.idl
+
+$(TGT_IIOP): iiop_test.idl
+ erlc $(ERL_IDL_FLAGS) -o$(IDLOUTDIR) \
+ +'{preproc_flags,"-I../COSS/CosNaming"}' iiop_test.idl
+
+$(TGT_TEST_SERVER): orber_test_server.idl
+ erlc $(ERL_IDL_FLAGS) -o$(IDLOUTDIR) \
+ +'{cfgfile,"orber_test_server.cfg"}' orber_test_server.idl
+
+# ----------------------------------------------------
+# Release Targets
+# ----------------------------------------------------
+# We don't copy generated intermediate erlang and hrl files
+
+include $(ERL_TOP)/make/otp_release_targets.mk
+
+release_spec:
+
+release_docs_spec:
+
+release_tests_spec: tests
+ $(INSTALL_DIR) $(RELSYSDIR)
+ $(INSTALL_DATA) $(IDL_FILES) $(TEST_SPEC_FILE) \
+ $(ERL_FILES) $(RELSYSDIR)
+ $(INSTALL_DATA) $(SUITE_TARGET_FILES) $(RELSYSDIR)
+ chmod -f -R u+w $(RELSYSDIR)
+ $(INSTALL_DIR) $(RELSYSDIR)/$(IDLOUTDIR)
+ $(INSTALL_DATA) $(GEN_TARGET_FILES) $(GEN_FILES) \
+ $(RELSYSDIR)/$(IDLOUTDIR)
+
diff --git a/lib/orber/test/cdrcoding_10_SUITE.erl b/lib/orber/test/cdrcoding_10_SUITE.erl
new file mode 100644
index 0000000000..d5d030538f
--- /dev/null
+++ b/lib/orber/test/cdrcoding_10_SUITE.erl
@@ -0,0 +1,616 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1999-2010. 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%
+%%
+%%
+%%-----------------------------------------------------------------
+%%
+%% Description:
+%% Test suite for the CDR encode/decode functions
+%%
+%%-----------------------------------------------------------------
+-module(cdrcoding_10_SUITE).
+
+
+-include("idl_output/Module.hrl").
+-include("test_server.hrl").
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/src/orber_iiop.hrl").
+
+-define(default_timeout, ?t:minutes(20)).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-export([]).
+-compile(export_all).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["Description", "more description"];
+all(suite) -> {req,
+ [mnesia],
+ {conf, init_all, cases(), finish_all}}.
+
+cases() ->
+ [types, reply, cancel_request, close_connection, message_error].
+%% request, locate_request, locate_reply].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+
+init_per_testcase(_Case, Config) ->
+ Path = code:which(?MODULE),
+ code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Path = code:which(?MODULE),
+ code:del_path(filename:join(filename:dirname(Path), "idl_output")),
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+init_all(Config) when is_list(Config) ->
+ orber:jump_start(0),
+ if
+ is_list(Config) ->
+ Config;
+ true ->
+ exit("Config not a list")
+ end.
+
+finish_all(Config) when is_list(Config) ->
+ orber:jump_stop(),
+ Config.
+
+%%-----------------------------------------------------------------
+%% Test Case: type encoding tests
+%% Description: Just testing the complex types, the others are
+%% tested in the cdrlib SUITE.
+%%-----------------------------------------------------------------
+types(doc) -> ["Description", "more description"];
+types(suite) -> [do_register, null_type, void_type, principal_type,
+ objref_type, struct_type, union_type, string_type,
+ array_type, any_type, typecode_type, alias_type,
+ exception_type, do_unregister].
+%types(Config) when list(Config) ->
+% 'oe_orber_test':'oe_register'(),
+% null_type(),
+% void_type(),
+% principal_type(),
+% objref_type(),
+% struct_type(),
+% union_type(),
+% string_type(),
+% array_type(),
+% any_type(),
+% typecode_type(),
+% alias_type(),
+% exception_type(),
+% 'oe_orber_test':'oe_unregister'(),
+% ok.
+
+do_register(doc) -> [];
+do_register(suite) -> [];
+do_register(Config) when is_list(Config) ->
+ io:format("Pwd: ~p, mod: ~p~n",[c:pwd(), c:m('oe_orber_test')]),
+ 'oe_orber_test':'oe_register'(),
+ ok.
+do_unregister(doc) -> [];
+do_unregister(suite) -> [];
+do_unregister(Config) when is_list(Config) ->
+ 'oe_orber_test':'oe_unregister'(),
+ ok.
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: null
+%%-----------------------------------------------------------------
+null_type(doc) -> [];
+null_type(suite) -> [];
+null_type(Config) when is_list(Config) ->
+ ?line B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_null', 'null'),
+ ?line {'null', <<>>, _} = cdr_decode:dec_type('tk_null', {1, 0}, B, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: void
+%%-----------------------------------------------------------------
+void_type(doc) -> [];
+void_type(suite) -> [];
+void_type(Config) when is_list(Config) ->
+ ?line B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_void', 'ok'),
+ ?line {'ok', <<>>, _} = cdr_decode:dec_type('tk_void', {1, 0}, B, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: principal
+%%-----------------------------------------------------------------
+principal_type(doc) -> [];
+principal_type(suite) -> [];
+principal_type(Config) when is_list(Config) ->
+ ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_Principal', "principal"),
+ ?line {"principal", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 0}, B0, 0, big),
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_Principal', ""),
+ ?line {"", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 0}, B1, 0, big),
+ ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_Principal', "principal"),
+ ?line {"principal", <<>>, _} =
+ cdr_decode:dec_type('tk_Principal', {1, 0}, B2, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: object reference
+%%-----------------------------------------------------------------
+version() -> #'IIOP_Version'{major=1,minor=0}.
+
+objref(0) ->
+ PB = #'IIOP_ProfileBody_1_0'{iiop_version=version(),
+ host="my.hostname.org",
+ port=4040,
+ object_key="ExternalKey: which is an arbitary octet sequence"},
+ TP = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB},
+ #'IOP_IOR'{type_id="IDL:Module/Interface:1.0", profiles=[TP]};
+objref(1) ->
+ K = corba_fake_mk_objkey("IDL:Module/Interface:1.0", key,
+ list_to_pid("<0.100.0>")),
+ PB = #'IIOP_ProfileBody_1_0'{iiop_version=version(),
+ host="my.hostname.org",
+ port=4040,
+ object_key=K},
+ TP = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB},
+ #'IOP_IOR'{type_id="IDL:Module/Interface:1.0", profiles=[TP]};
+objref(2) ->
+ K = corba_fake_mk_objkey("IDL:Module/Interface:1.0", registered,
+ list_to_atom("orber_nameservice")),
+ PB = #'IIOP_ProfileBody_1_0'{iiop_version=version(),
+ host="my.hostname.org",
+ port=4040,
+ object_key=K},
+ TP = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB},
+ #'IOP_IOR'{type_id="IDL:Module/Interface:1.0", profiles=[TP]}.
+
+objref_type(doc) -> [];
+objref_type(suite) -> [];
+objref_type(Config) when is_list(Config) ->
+ T = {'tk_objref', "IDL:Module/Interface:1.0", "Interface"},
+ Objref0 = objref(0),
+ ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, Objref0),
+ ?line {Objref0, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B0, 0, big),
+ Objref1 = objref(1),
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, Objref1),
+ ?line {Objref1, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B1, 0, big),
+ Objref2 = objref(2),
+ ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, Objref2),
+ ?line {Objref2, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B2, 0, big),
+ ok.
+
+
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: struct
+%%-----------------------------------------------------------------
+struct_type(doc) -> [];
+struct_type(suite) -> [];
+struct_type(Config) when is_list(Config) ->
+ T0 = {'tk_struct',"IDL:Module/Struct0:1.0", "Module_Struct0",
+ [{"long", 'tk_long'}, {"short", 'tk_short'}, {"character", 'tk_char'}]},
+ S0 = #'Module_Struct0'{l=-4711, s=17, c=$a},
+ ?line B0 = cdr_encode:enc_type({1, 0}, T0, S0),
+ ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B0, 0, big),
+
+ T1 = {'tk_struct', "IDL:Module/Struct1:1.0", "Module_Struct1",
+ [{"string", {'tk_string', 0}}, {"ushort", 'tk_ushort'}, {"ulong", 'tk_ulong'}]},
+ S1 = #'Module_Struct1'{s="Hi !!!!", us=17, ul=4711},
+ ?line B1 = cdr_encode:enc_type({1, 0}, T1, S1),
+ ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B1, 0, big),
+
+ T2 = {'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
+ [{"long_sequence", {'tk_sequence', 'tk_long', 0}},
+ {"enum", {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}},
+ {"octet", 'tk_octet'}]},
+ S2 = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000], e=cow, o=$X},
+ ?line B2 = cdr_encode:enc_type({1, 0}, T2, S2),
+ ?line {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B2, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: union
+%%-----------------------------------------------------------------
+union_type(doc) -> [];
+union_type(suite) -> [];
+union_type(Config) when is_list(Config) ->
+ T0 = {'tk_union', "IDL:Module/Union:1.0", "Union", 'tk_short', 2,
+ [{0, "First", 'tk_short'},
+ {1, "Second", {'tk_string', 0}},
+ {2, "Third", 'tk_char'}]},
+ S0 = #'Module_Union'{label=1, value="Foo Bar !"},
+ ?line B0 = cdr_encode:enc_type({1, 0}, T0, S0),
+ ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B0, 0, big),
+ S1 = #'Module_Union'{label=0, value=-17},
+ ?line B1 = cdr_encode:enc_type({1, 0}, T0, S1),
+ ?line {S1, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B1, 0, big),
+ S2 = #'Module_Union'{label=2, value=$X},
+ ?line B2 = cdr_encode:enc_type({1, 0}, T0, S2),
+ ?line {S2, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B2, 0, big),
+ T1 = {'tk_union', "IDL:Module/Union1:1.0", "Union1",
+ {'tk_enum', "IDL:Module/Enum:1.0",
+ "Module_Enum", ["horse", "pig", "cow"]}, "pig",
+ [{"horse", "First", 'tk_ushort'},
+ {"pig", "Second", {'tk_sequence', {'tk_string', 0}, 0}},
+ {"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
+ "Module_Enum1", ["orange", "banana", "apple"]}}]},
+ S3 = #'Module_Union1'{label=pig, value=["Foo", "Bar", "!"]},
+ ?line B3 = cdr_encode:enc_type({1, 0}, T1, S3),
+ ?line {S3, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B3, 0, big),
+ S4 = #'Module_Union1'{label=cow, value=apple},
+ ?line B4 = cdr_encode:enc_type({1, 0}, T1, S4),
+ ?line {S4, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B4, 0, big),
+ S5 = #'Module_Union1'{label=horse, value=17},
+ ?line B5 = cdr_encode:enc_type({1, 0}, T1, S5),
+ ?line {S5, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B5, 0, big),
+ T2 = {'tk_union', "IDL:Module/Union2:1.0", "Union2",
+ {'tk_enum', "IDL:Module/Enum:1.0",
+ "Module_Enum", ["horse", "pig", "cow"]}, "pig",
+ [{"horse", "First", {'tk_array', 'tk_long', 3}},
+ {"pig", "Second",
+ {'tk_union', "IDL:Module/Union:1.0", "Union", 'tk_short', 2,
+ [{0, "First", 'tk_short'},
+ {1, "Second", {'tk_string', 0}},
+ {2, "Third", 'tk_char'}]}},
+ {"cow", "Third", {'tk_union', "IDL:Module/Union1:1.0", "Union1",
+ {'tk_enum', "IDL:Module/Enum:1.0",
+ "Module_Enum", ["horse", "pig", "cow"]}, "pig",
+ [{"horse", "First", 'tk_ushort'},
+ {"pig", "Second", {'tk_sequence',
+ {'tk_string', 0}, 0}},
+ {"cow", "Third", {'tk_enum',
+ "IDL:Module/Enum1:1.0",
+ "Module_Enum1",
+ ["orange", "banana",
+ "apple"]}}]}}]},
+ S6 = #'Module_Union2'{label=pig, value=#'Module_Union'{label=0, value=-17}},
+ ?line B6 = cdr_encode:enc_type({1, 0}, T2, S6),
+ ?line {S6, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B6, 0, big),
+ S7 = #'Module_Union2'{label=cow, value=#'Module_Union1'{label=pig,
+ value=["Foo", "Bar", "!"]}},
+ ?line B7 = cdr_encode:enc_type({1, 0}, T2, S7),
+ ?line {S7, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B7, 0, big),
+ S8 = #'Module_Union2'{label=horse, value={-17, 1234567890, -987654321}},
+ ?line B8 = cdr_encode:enc_type({1, 0}, T2, S8),
+ ?line {S8, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B8, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: string
+%%-----------------------------------------------------------------
+string_type(doc) -> [];
+string_type(suite) -> [];
+string_type(Config) when is_list(Config) ->
+ S0 = "Foo Bar ???",
+ ?line B0 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S0),
+ ?line {S0, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B0, 0, big),
+ S1 = "Yes, Foo Bar !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! more than 5000 characters",
+ ?line B1 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S1),
+ ?line {S1, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B1, 0, big),
+ S2 = "",
+ ?line B2 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S2),
+ ?line {S2, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B2, 0, big),
+ S3 = "\0",
+ ?line B3 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S3),
+ ?line {S3, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B3, 0, big),
+ S4 = "~n",
+ ?line B4 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S4),
+ ?line {S4, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B4, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: array
+%%-----------------------------------------------------------------
+array_type(doc) -> [];
+array_type(suite) -> [];
+array_type(Config) when is_list(Config) ->
+ T0 = {'tk_array', 'tk_long', 5},
+ S0 = {-100, 0, 30000, -900100900, 123456789},
+ ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T0, S0),
+ ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B0, 0, big),
+ T1 = {'tk_array', {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}, 2},
+ S1 = {pig, cow},
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T1, S1),
+ ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B1, 0, big),
+ T2 = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
+ {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}, "pig",
+ [{"horse", "First", 'tk_ushort'},
+ {"pig", "Second", {'tk_sequence', {'tk_string', 0}, 0}},
+ {"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
+ "Module_Enum1", ["orange", "banana", "apple"]}}]}, 2},
+ S2 = {#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}},
+ ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T2, S2),
+ ?line {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B2, 0, big),
+ T3 = {'tk_array', {'tk_objref', "IDL:Module/Interface:1.0", "Interface"}, 3},
+ S3 = {objref(0), objref(1), objref(2)},
+ ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T3, S3),
+ ?line {S3, <<>>, _} = cdr_decode:dec_type(T3, {1, 0}, B3, 0, big),
+ ok.
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: TypeCode
+%%-----------------------------------------------------------------
+any_type(doc) -> [];
+any_type(suite) -> [];
+any_type(Config) when is_list(Config) ->
+ T = 'tk_any',
+ TC = {'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
+ [{"long_sequence", {'tk_sequence', 'tk_long', 0}},
+ {"enum", {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
+ ["horse", "pig", "cow"]}},
+ {"octet", 'tk_octet'}]},
+ S = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000],
+ e=cow, o=$X},
+ Any = #any{typecode=TC,value=S},
+ ?line B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,Any),
+ ?line {Any, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B, 0, big),
+ TC1 = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
+ {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
+ ["horse", "pig", "cow"]}, 1,
+ [{"horse", "First", 'tk_ushort'},
+ {"pig", "Second", {'tk_sequence', {'tk_string', 0}, 0}},
+ {"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
+ "Module_Enum1", ["orange", "banana",
+ "apple"]}}]},2},
+ S1 = {#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}},
+ Any1 = #any{typecode=TC1,value=S1},
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,Any1),
+ ?line {Any1, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B1, 0, big),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: TypeCode
+%%-----------------------------------------------------------------
+typecode_type(doc) -> [];
+typecode_type(suite) -> [];
+typecode_type(Config) when is_list(Config) ->
+ T = 'tk_TypeCode',
+ TC = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
+ {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
+ ["horse", "pig", "cow"]}, 1,
+ [{"horse", "First", 'tk_ushort'},
+ {"pig", "Second", {'tk_sequence', {'tk_string', 0}, 0}},
+ {"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
+ "Module_Enum1", ["orange", "banana",
+ "apple"]}}]}, 10},
+ ?line B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,TC),
+ ?line {TC, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B, 0, big),
+ TC1 = {'tk_union', "IDL:Module/Union2:1.0", "Union2",
+ {'tk_enum', "IDL:Module/Enum:1.0",
+ "Module_Enum", ["horse", "pig", "cow"]}, 2,
+ [{"horse", "First", 'tk_long'},
+ {"pig", "Second",
+ {'tk_union', "IDL:Module/Union:1.0", "Union", 'tk_short', 2,
+ [{0, "First", 'tk_short'},
+ {1, "Second", {'tk_string', 0}},
+ {2, "Third", 'tk_char'}]}},
+ {"cow", "Third", {'tk_union', "IDL:Module/Union1:1.0", "Union1",
+ {'tk_enum', "IDL:Module/Enum:1.0",
+ "Module_Enum", ["horse", "pig", "cow"]}, 2,
+ [{"horse", "First", 'tk_ushort'},
+ {"pig", "Second", {'tk_sequence',
+ {'tk_string', 0}, 0}},
+ {"cow", "Third", {'tk_enum',
+ "IDL:Module/Enum1:1.0",
+ "Module_Enum1",
+ ["orange", "banana",
+ "apple"]}}]}}]},
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, TC1),
+ ?line {TC1, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B1, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: TypeCode
+%%-----------------------------------------------------------------
+alias_type(doc) -> [];
+alias_type(suite) -> [];
+alias_type(Config) when is_list(Config) ->
+ T = {'tk_alias', "IDL:Module/Alias:1.0", "Alias",
+ {'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
+ [{"long_sequence", {'tk_sequence', 'tk_long', 0}},
+ {"enum", {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
+ ["horse", "pig", "cow"]}},
+ {"octet", 'tk_octet'}]}},
+ S = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000],
+ e=cow, o=$X},
+ ?line B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,S),
+ ?line {S, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B, 0, big),
+ T1 = {'tk_alias', "IDL:Module/Alias1:1.0", "Alias1",
+ {'tk_sequence', {'tk_union', "IDL:Module/Union:1.0", "Union",
+ {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
+ ["horse", "pig", "cow"]}, 2,
+ [{"horse", "First", 'tk_ushort'},
+ {"pig", "Second", {'tk_sequence', {'tk_string', 0}, 0}},
+ {"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
+ "Module_Enum1", ["orange", "banana",
+ "apple"]}}]},0}},
+ S1 = [#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}],
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T1, S1),
+ ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B1, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: exception
+%%-----------------------------------------------------------------
+exception_type(doc) -> [];
+exception_type(suite) -> [];
+exception_type(Config) when is_list(Config) ->
+ system_exceptions(),
+ user_exceptions(),
+ ok.
+
+system_exceptions() ->
+ E = #'UNKNOWN'{completion_status=?COMPLETED_YES},
+ {system_exception, T, E} = orber_exceptions:get_def(E),
+ ?line B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,E),
+ ?line {E, _} = cdr_decode:dec_system_exception({1, 0}, B, 0, big),
+ E1 = #'INV_OBJREF'{completion_status=?COMPLETED_NO},
+ {system_exception, T1, E1} = orber_exceptions:get_def(E1),
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T1,E1),
+ ?line {E1, _} = cdr_decode:dec_system_exception({1, 0}, B1, 0, big),
+ E2 = #'BAD_OPERATION'{completion_status=?COMPLETED_NO},
+ {system_exception, T2, E2} = orber_exceptions:get_def(E2),
+ ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T2,E2),
+ ?line {E2, _} = cdr_decode:dec_system_exception({1, 0}, B2, 0, big),
+ E3 = #'INTF_REPOS'{completion_status=?COMPLETED_MAYBE},
+ {system_exception, T3, E3} = orber_exceptions:get_def(E3),
+ ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T3,E3),
+ ?line {E3, _} = cdr_decode:dec_system_exception({1, 0}, B3, 0, big),
+ ok.
+
+user_exceptions() ->
+ E = #'Module_Except1'{rest_of_name=["I","am","testing","exceptions"], why="Error"},
+ {user_exception, T, E} = orber_exceptions:get_def(E),
+ ?line B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, E),
+ ?line {E, _} = cdr_decode:dec_user_exception({1, 0}, B, 0, big),
+ E1 = #'Module_Except2'{e=banana,
+ s=#'Module_Struct2'{long_sequence=[12,-4040,
+ 1234567898],
+ e=horse,
+ o=$a}},
+ {user_exception, T1, E1} = orber_exceptions:get_def(E1),
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T1, E1),
+ ?line {E1, _} = cdr_decode:dec_user_exception({1, 0}, B1, 0, big),
+ E2 = #'Module_Except3'{u=#'Module_Union1'{label=pig,value=["high","and","low"]},s=1313, o=objref(0)},
+ {user_exception, T2, E2} = orber_exceptions:get_def(E2),
+ ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T2, E2),
+ ?line {E2, _} = cdr_decode:dec_user_exception({1, 0}, B2, 0, big),
+ E3 = #'Module_Except4'{},
+ {user_exception, T3, E3} = orber_exceptions:get_def(E3),
+ ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T3, E3),
+ ?line {E3, _} = cdr_decode:dec_user_exception({1, 0}, B3, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: request encoding test
+%% Description: Precondition the stack must be started so the
+%% objectkey is valid.
+%%-----------------------------------------------------------------
+%request(suite) -> [];
+%request(_) ->
+% exit(not_implemented).
+
+%%-----------------------------------------------------------------
+%% Test Case: reply encoding test
+%% Description:
+%%-----------------------------------------------------------------
+reply(doc) -> ["Description", "more description"];
+reply(suite) -> [];
+reply(Config) when is_list(Config) ->
+ R = #reply_header{service_context=[], request_id=1,
+ reply_status='no_exception'},
+ ?line B = cdr_encode:enc_reply(
+ #giop_env{version = {1, 0}, request_id = 1,
+ reply_status = 'no_exception',
+ tc = {'tk_long', [], [{'tk_sequence',
+ {'tk_string', 0}, 0}]},
+ result = 1200, parameters = [["foo","Bar"]],
+ ctx = []}),
+ ?line {R, 1200, [["foo","Bar"]]} =
+ cdr_decode:dec_message({'tk_long', [], [{'tk_sequence', {'tk_string', 0},0}]},
+ B),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: cancel_request encoding test
+%% Description:
+%%-----------------------------------------------------------------
+cancel_request(doc) -> ["Description", "more description"];
+cancel_request(suite) -> [];
+cancel_request(Config) when is_list(Config) ->
+ R = #cancel_request_header{request_id=1},
+ ?line B = cdr_encode:enc_cancel_request(#giop_env{version = {1, 0},
+ request_id = 1}),
+ ?line R = cdr_decode:dec_message([], B),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: locate_request encoding test
+%% Description:
+%%-----------------------------------------------------------------
+locate_request(doc) -> ["Description", "more description"];
+locate_request(suite) -> [];
+locate_request(Config) when is_list(Config) ->
+ io:format("Function not imlpemented yet"),
+ exit(not_implemented).
+
+%%-----------------------------------------------------------------
+%% Test Case: locate_reply encoding test
+%% Description:
+%%-----------------------------------------------------------------
+locate_reply(doc) -> ["Description", "more description"];
+locate_reply(suite) -> [];
+locate_reply(Config) when is_list(Config) ->
+ io:format("Function not imlpemented yet"),
+ exit(not_implemented).
+
+%%-----------------------------------------------------------------
+%% Test Case: close_connection encoding test
+%% Description:
+%%-----------------------------------------------------------------
+close_connection(doc) -> ["Description", "more description"];
+close_connection(suite) -> [];
+close_connection(Config) when is_list(Config) ->
+ ?line B = cdr_encode:enc_close_connection(#giop_env{version = {1, 0}}),
+ ?line 'close_connection' = cdr_decode:dec_message([], B),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: message_error encoding test
+%% Description:
+%%-----------------------------------------------------------------
+message_error(doc) -> ["Description", "more description"];
+message_error(suite) -> [];
+message_error(Config) when is_list(Config) ->
+ ?line B = cdr_encode:enc_message_error(#giop_env{version = {1, 0}}),
+ ?line 'message_error' = cdr_decode:dec_message([], B),
+ ok.
+
+
+
+%%-----------------------------------------------------------------
+%% Internal functions
+%%-----------------------------------------------------------------
+corba_fake_mk_objkey(Id, 'key', Pid) when is_pid(Pid) ->
+ Key = make_objkey(),
+ {list_to_binary(Id), 'key', Key, term_to_binary(undefined),
+ term_to_binary(undefined), term_to_binary(undefined)};
+corba_fake_mk_objkey(Id, 'key', RegName) when is_atom(RegName) ->
+ Key = term_to_binary(RegName),
+ {list_to_binary(Id), 'key', Key, term_to_binary(undefined),
+ term_to_binary(undefined), term_to_binary(undefined)};
+corba_fake_mk_objkey(Id, 'registered', RegName) when is_atom(RegName) ->
+ {list_to_binary(Id), 'registered', RegName, term_to_binary(undefined),
+ term_to_binary(undefined), term_to_binary(undefined)}.
+
+make_objkey() ->
+ term_to_binary({now(), node()}).
diff --git a/lib/orber/test/cdrcoding_11_SUITE.erl b/lib/orber/test/cdrcoding_11_SUITE.erl
new file mode 100644
index 0000000000..d62fe6eb3a
--- /dev/null
+++ b/lib/orber/test/cdrcoding_11_SUITE.erl
@@ -0,0 +1,615 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2010. 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%
+%%
+%%
+%%-----------------------------------------------------------------
+%%
+%% Description:
+%% Test suite for the CDR encode/decode functions
+%%
+%%-----------------------------------------------------------------
+-module(cdrcoding_11_SUITE).
+
+
+-include("idl_output/Module.hrl").
+-include("test_server.hrl").
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/src/orber_iiop.hrl").
+
+-define(default_timeout, ?t:minutes(5)).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-export([]).
+-compile(export_all).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["Description", "more description"];
+all(suite) -> {req,
+ [mnesia],
+ {conf, init_all, cases(), finish_all}}.
+
+cases() ->
+ [types, reply, cancel_request, close_connection, message_error].
+%% request, locate_request, locate_reply].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+
+init_per_testcase(_Case, Config) ->
+ Path = code:which(?MODULE),
+ code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Path = code:which(?MODULE),
+ code:del_path(filename:join(filename:dirname(Path), "idl_output")),
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+init_all(Config) when is_list(Config) ->
+ orber:jump_start(0),
+ if
+ is_list(Config) ->
+ Config;
+ true ->
+ exit("Config not a list")
+ end.
+
+finish_all(Config) when is_list(Config) ->
+ orber:jump_stop(),
+ Config.
+
+%%-----------------------------------------------------------------
+%% Test Case: type encoding tests
+%% Description: Just testing the complex types, the others are
+%% tested in the cdrlib SUITE.
+%%-----------------------------------------------------------------
+types(doc) -> ["Description", "more description"];
+types(suite) -> [do_register, null_type, void_type, principal_type,
+ objref_type, struct_type, union_type, string_type,
+ array_type, any_type, typecode_type, alias_type,
+ exception_type, do_unregister].
+%types(Config) when list(Config) ->
+% 'oe_orber_test':'oe_register'(),
+% null_type(),
+% void_type(),
+% principal_type(),
+% objref_type(),
+% struct_type(),
+% union_type(),
+% string_type(),
+% array_type(),
+% any_type(),
+% typecode_type(),
+% alias_type(),
+% exception_type(),
+% 'oe_orber_test':'oe_unregister'(),
+% ok.
+
+do_register(doc) -> [];
+do_register(suite) -> [];
+do_register(Config) when is_list(Config) ->
+ 'oe_orber_test':'oe_register'(),
+ ok.
+do_unregister(doc) -> [];
+do_unregister(suite) -> [];
+do_unregister(Config) when is_list(Config) ->
+ 'oe_orber_test':'oe_unregister'(),
+ ok.
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: null
+%%-----------------------------------------------------------------
+null_type(doc) -> [];
+null_type(suite) -> [];
+null_type(Config) when is_list(Config) ->
+ ?line B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_null', 'null'),
+ ?line {'null', <<>>, _} = cdr_decode:dec_type('tk_null', {1, 1}, B, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: void
+%%-----------------------------------------------------------------
+void_type(doc) -> [];
+void_type(suite) -> [];
+void_type(Config) when is_list(Config) ->
+ ?line B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_void', 'ok'),
+ ?line {'ok', <<>>, _} = cdr_decode:dec_type('tk_void', {1, 1}, B, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: principal
+%%-----------------------------------------------------------------
+principal_type(doc) -> [];
+principal_type(suite) -> [];
+principal_type(Config) when is_list(Config) ->
+ ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_Principal', "principal"),
+ ?line {"principal", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 1}, B0, 0, big),
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_Principal', ""),
+ ?line {"", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 1}, B1, 0, big),
+ ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_Principal', "principal"),
+ ?line {"principal", <<>>, _} =
+ cdr_decode:dec_type('tk_Principal', {1, 1}, B2, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: object reference
+%%-----------------------------------------------------------------
+version() -> #'IIOP_Version'{major=1,minor=1}.
+
+objref(0) ->
+ PB = #'IIOP_ProfileBody_1_1'{iiop_version=version(),
+ host="my.hostname.org",
+ port=4040,
+ object_key="ExternalKey: which is an arbitary octet sequence",
+ components=[]},
+ TP = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB},
+ #'IOP_IOR'{type_id="IDL:Module/Interface:1.0", profiles=[TP]};
+objref(1) ->
+ K = corba_fake_mk_objkey("IDL:Module/Interface:1.0", key,
+ list_to_pid("<0.100.0>")),
+ PB = #'IIOP_ProfileBody_1_1'{iiop_version=version(),
+ host="my.hostname.org",
+ port=4040,
+ object_key=K, components=[]},
+ TP = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB},
+ #'IOP_IOR'{type_id="IDL:Module/Interface:1.0", profiles=[TP]};
+objref(2) ->
+ K = corba_fake_mk_objkey("IDL:Module/Interface:1.0", registered,
+ list_to_atom("orber_nameservice")),
+ PB = #'IIOP_ProfileBody_1_1'{iiop_version=version(),
+ host="my.hostname.org",
+ port=4040,
+ object_key=K, components=[]},
+ TP = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB},
+ #'IOP_IOR'{type_id="IDL:Module/Interface:1.0", profiles=[TP]}.
+
+objref_type(doc) -> [];
+objref_type(suite) -> [];
+objref_type(Config) when is_list(Config) ->
+ T = {'tk_objref', "IDL:Module/Interface:1.0", "Interface"},
+ Objref0 = objref(0),
+ ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, Objref0),
+ ?line {Objref0, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B0, 0, big),
+ Objref1 = objref(1),
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, Objref1),
+ ?line {Objref1, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B1, 0, big),
+ Objref2 = objref(2),
+ ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, Objref2),
+ ?line {Objref2, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B2, 0, big),
+ ok.
+
+
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: struct
+%%-----------------------------------------------------------------
+struct_type(doc) -> [];
+struct_type(suite) -> [];
+struct_type(Config) when is_list(Config) ->
+ T0 = {'tk_struct',"IDL:Module/Struct0:1.0", "Module_Struct0",
+ [{"long", 'tk_long'}, {"short", 'tk_short'}, {"character", 'tk_char'}]},
+ S0 = #'Module_Struct0'{l=-4711, s=17, c=$a},
+ ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S0),
+ ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B0, 0, big),
+
+ T1 = {'tk_struct', "IDL:Module/Struct1:1.0", "Module_Struct1",
+ [{"string", {'tk_string', 0}}, {"ushort", 'tk_ushort'}, {"ulong", 'tk_ulong'}]},
+ S1 = #'Module_Struct1'{s="Hi !!!!", us=17, ul=4711},
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S1),
+ ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B1, 0, big),
+
+ T2 = {'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
+ [{"long_sequence", {'tk_sequence', 'tk_long', 0}},
+ {"enum", {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}},
+ {"octet", 'tk_octet'}]},
+ S2 = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000], e=cow, o=$X},
+ ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S2),
+ ?line {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B2, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: union
+%%-----------------------------------------------------------------
+union_type(doc) -> [];
+union_type(suite) -> [];
+union_type(Config) when is_list(Config) ->
+ T0 = {'tk_union', "IDL:Module/Union:1.0", "Union", 'tk_short', 2,
+ [{0, "First", 'tk_short'},
+ {1, "Second", {'tk_string', 0}},
+ {2, "Third", 'tk_char'}]},
+ S0 = #'Module_Union'{label=1, value="Foo Bar !"},
+ ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S0),
+ ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B0, 0, big),
+ S1 = #'Module_Union'{label=0, value=-17},
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S1),
+ ?line {S1, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B1, 0, big),
+ S2 = #'Module_Union'{label=2, value=$X},
+ ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S2),
+ ?line {S2, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B2, 0, big),
+ T1 = {'tk_union', "IDL:Module/Union1:1.0", "Union1",
+ {'tk_enum', "IDL:Module/Enum:1.0",
+ "Module_Enum", ["horse", "pig", "cow"]}, "pig",
+ [{"horse", "First", 'tk_ushort'},
+ {"pig", "Second", {'tk_sequence', {'tk_string', 0}, 0}},
+ {"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
+ "Module_Enum1", ["orange", "banana", "apple"]}}]},
+ S3 = #'Module_Union1'{label=pig, value=["Foo", "Bar", "!"]},
+ ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S3),
+ ?line {S3, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B3, 0, big),
+ S4 = #'Module_Union1'{label=cow, value=apple},
+ ?line B4 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S4),
+ ?line {S4, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B4, 0, big),
+ S5 = #'Module_Union1'{label=horse, value=17},
+ ?line B5 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S5),
+ ?line {S5, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B5, 0, big),
+ T2 = {'tk_union', "IDL:Module/Union2:1.0", "Union2",
+ {'tk_enum', "IDL:Module/Enum:1.0",
+ "Module_Enum", ["horse", "pig", "cow"]}, "pig",
+ [{"horse", "First", {'tk_array', 'tk_long', 3}},
+ {"pig", "Second",
+ {'tk_union', "IDL:Module/Union:1.0", "Union", 'tk_short', 2,
+ [{0, "First", 'tk_short'},
+ {1, "Second", {'tk_string', 0}},
+ {2, "Third", 'tk_char'}]}},
+ {"cow", "Third", {'tk_union', "IDL:Module/Union1:1.0", "Union1",
+ {'tk_enum', "IDL:Module/Enum:1.0",
+ "Module_Enum", ["horse", "pig", "cow"]}, "pig",
+ [{"horse", "First", 'tk_ushort'},
+ {"pig", "Second", {'tk_sequence',
+ {'tk_string', 0}, 0}},
+ {"cow", "Third", {'tk_enum',
+ "IDL:Module/Enum1:1.0",
+ "Module_Enum1",
+ ["orange", "banana",
+ "apple"]}}]}}]},
+ S6 = #'Module_Union2'{label=pig, value=#'Module_Union'{label=0, value=-17}},
+ ?line B6 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S6),
+ ?line {S6, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B6, 0, big),
+ S7 = #'Module_Union2'{label=cow, value=#'Module_Union1'{label=pig,
+ value=["Foo", "Bar", "!"]}},
+ ?line B7 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S7),
+ ?line {S7, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B7, 0, big),
+ S8 = #'Module_Union2'{label=horse, value={-17, 1234567890, -987654321}},
+ ?line B8 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S8),
+ ?line {S8, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B8, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: string
+%%-----------------------------------------------------------------
+string_type(doc) -> [];
+string_type(suite) -> [];
+string_type(Config) when is_list(Config) ->
+ S0 = "Foo Bar ???",
+ ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S0),
+ ?line {S0, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B0, 0, big),
+ S1 = "Yes, Foo Bar !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! more than 5000 characters",
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S1),
+ ?line {S1, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B1, 0, big),
+ S2 = "",
+ ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S2),
+ ?line {S2, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B2, 0, big),
+ S3 = "\0",
+ ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S3),
+ ?line {S3, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B3, 0, big),
+ S4 = "~n",
+ ?line B4 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S4),
+ ?line {S4, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B4, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: array
+%%-----------------------------------------------------------------
+array_type(doc) -> [];
+array_type(suite) -> [];
+array_type(Config) when is_list(Config) ->
+ T0 = {'tk_array', 'tk_long', 5},
+ S0 = {-100, 0, 30000, -900100900, 123456789},
+ ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S0),
+ ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B0, 0, big),
+ T1 = {'tk_array', {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}, 2},
+ S1 = {pig, cow},
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S1),
+ ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B1, 0, big),
+ T2 = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
+ {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}, "pig",
+ [{"horse", "First", 'tk_ushort'},
+ {"pig", "Second", {'tk_sequence', {'tk_string', 0}, 0}},
+ {"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
+ "Module_Enum1", ["orange", "banana", "apple"]}}]}, 2},
+ S2 = {#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}},
+ ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S2),
+ ?line {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B2, 0, big),
+ T3 = {'tk_array', {'tk_objref', "IDL:Module/Interface:1.0", "Interface"}, 3},
+ S3 = {objref(0), objref(1), objref(2)},
+ ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T3, S3),
+ ?line {S3, <<>>, _} = cdr_decode:dec_type(T3, {1, 1}, B3, 0, big),
+ ok.
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: TypeCode
+%%-----------------------------------------------------------------
+any_type(doc) -> [];
+any_type(suite) -> [];
+any_type(Config) when is_list(Config) ->
+ T = 'tk_any',
+ TC = {'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
+ [{"long_sequence", {'tk_sequence', 'tk_long', 0}},
+ {"enum", {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
+ ["horse", "pig", "cow"]}},
+ {"octet", 'tk_octet'}]},
+ S = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000],
+ e=cow, o=$X},
+ Any = #any{typecode=TC,value=S},
+ ?line B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,Any),
+ ?line {Any, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B, 0, big),
+ TC1 = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
+ {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
+ ["horse", "pig", "cow"]}, 1,
+ [{"horse", "First", 'tk_ushort'},
+ {"pig", "Second", {'tk_sequence', {'tk_string', 0}, 0}},
+ {"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
+ "Module_Enum1", ["orange", "banana",
+ "apple"]}}]},2},
+ S1 = {#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}},
+ Any1 = #any{typecode=TC1,value=S1},
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,Any1),
+ ?line {Any1, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B1, 0, big),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: TypeCode
+%%-----------------------------------------------------------------
+typecode_type(doc) -> [];
+typecode_type(suite) -> [];
+typecode_type(Config) when is_list(Config) ->
+ T = 'tk_TypeCode',
+ TC = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
+ {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
+ ["horse", "pig", "cow"]}, 1,
+ [{"horse", "First", 'tk_ushort'},
+ {"pig", "Second", {'tk_sequence', {'tk_string', 0}, 0}},
+ {"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
+ "Module_Enum1", ["orange", "banana",
+ "apple"]}}]}, 10},
+ ?line B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,TC),
+ ?line {TC, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B, 0, big),
+ TC1 = {'tk_union', "IDL:Module/Union2:1.0", "Union2",
+ {'tk_enum', "IDL:Module/Enum:1.0",
+ "Module_Enum", ["horse", "pig", "cow"]}, 2,
+ [{"horse", "First", 'tk_long'},
+ {"pig", "Second",
+ {'tk_union', "IDL:Module/Union:1.0", "Union", 'tk_short', 2,
+ [{0, "First", 'tk_short'},
+ {1, "Second", {'tk_string', 0}},
+ {2, "Third", 'tk_char'}]}},
+ {"cow", "Third", {'tk_union', "IDL:Module/Union1:1.0", "Union1",
+ {'tk_enum', "IDL:Module/Enum:1.0",
+ "Module_Enum", ["horse", "pig", "cow"]}, 2,
+ [{"horse", "First", 'tk_ushort'},
+ {"pig", "Second", {'tk_sequence',
+ {'tk_string', 0}, 0}},
+ {"cow", "Third", {'tk_enum',
+ "IDL:Module/Enum1:1.0",
+ "Module_Enum1",
+ ["orange", "banana",
+ "apple"]}}]}}]},
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, TC1),
+ ?line {TC1, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B1, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: TypeCode
+%%-----------------------------------------------------------------
+alias_type(doc) -> [];
+alias_type(suite) -> [];
+alias_type(Config) when is_list(Config) ->
+ T = {'tk_alias', "IDL:Module/Alias:1.0", "Alias",
+ {'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
+ [{"long_sequence", {'tk_sequence', 'tk_long', 0}},
+ {"enum", {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
+ ["horse", "pig", "cow"]}},
+ {"octet", 'tk_octet'}]}},
+ S = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000],
+ e=cow, o=$X},
+ ?line B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,S),
+ ?line {S, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B, 0, big),
+ T1 = {'tk_alias', "IDL:Module/Alias1:1.0", "Alias1",
+ {'tk_sequence', {'tk_union', "IDL:Module/Union:1.0", "Union",
+ {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
+ ["horse", "pig", "cow"]}, 2,
+ [{"horse", "First", 'tk_ushort'},
+ {"pig", "Second", {'tk_sequence', {'tk_string', 0}, 0}},
+ {"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
+ "Module_Enum1", ["orange", "banana",
+ "apple"]}}]},0}},
+ S1 = [#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}],
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S1),
+ ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B1, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: exception
+%%-----------------------------------------------------------------
+exception_type(doc) -> [];
+exception_type(suite) -> [];
+exception_type(Config) when is_list(Config) ->
+ system_exceptions(),
+ user_exceptions(),
+ ok.
+
+system_exceptions() ->
+ E = #'UNKNOWN'{completion_status=?COMPLETED_YES},
+ {system_exception, T, E} = orber_exceptions:get_def(E),
+ ?line B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,E),
+ ?line {E, _} = cdr_decode:dec_system_exception({1, 1}, B, 0, big),
+ E1 = #'INV_OBJREF'{completion_status=?COMPLETED_NO},
+ {system_exception, T1, E1} = orber_exceptions:get_def(E1),
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1,E1),
+ ?line {E1, _} = cdr_decode:dec_system_exception({1, 1}, B1, 0, big),
+ E2 = #'BAD_OPERATION'{completion_status=?COMPLETED_NO},
+ {system_exception, T2, E2} = orber_exceptions:get_def(E2),
+ ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2,E2),
+ ?line {E2, _} = cdr_decode:dec_system_exception({1, 1}, B2, 0, big),
+ E3 = #'INTF_REPOS'{completion_status=?COMPLETED_MAYBE},
+ {system_exception, T3, E3} = orber_exceptions:get_def(E3),
+ ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T3,E3),
+ ?line {E3, _} = cdr_decode:dec_system_exception({1, 1}, B3, 0, big),
+ ok.
+
+user_exceptions() ->
+ E = #'Module_Except1'{rest_of_name=["I","am","testing","exceptions"], why="Error"},
+ {user_exception, T, E} = orber_exceptions:get_def(E),
+ ?line B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, E),
+ ?line {E, _} = cdr_decode:dec_user_exception({1, 1}, B, 0, big),
+ E1 = #'Module_Except2'{e=banana,
+ s=#'Module_Struct2'{long_sequence=[12,-4040,
+ 1234567898],
+ e=horse,
+ o=$a}},
+ {user_exception, T1, E1} = orber_exceptions:get_def(E1),
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, E1),
+ ?line {E1, _} = cdr_decode:dec_user_exception({1, 1}, B1, 0, big),
+ E2 = #'Module_Except3'{u=#'Module_Union1'{label=pig,value=["high","and","low"]},s=1313, o=objref(0)},
+ {user_exception, T2, E2} = orber_exceptions:get_def(E2),
+ ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, E2),
+ ?line {E2, _} = cdr_decode:dec_user_exception({1, 1}, B2, 0, big),
+ E3 = #'Module_Except4'{},
+ {user_exception, T3, E3} = orber_exceptions:get_def(E3),
+ ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T3, E3),
+ ?line {E3, _} = cdr_decode:dec_user_exception({1, 1}, B3, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: request encoding test
+%% Description: Precondition the stack must be started so the
+%% objectkey is valid.
+%%-----------------------------------------------------------------
+%request(suite) -> [];
+%request(_) ->
+% exit(not_implemented).
+
+%%-----------------------------------------------------------------
+%% Test Case: reply encoding test
+%% Description:
+%%-----------------------------------------------------------------
+reply(doc) -> ["Description", "more description"];
+reply(suite) -> [];
+reply(Config) when is_list(Config) ->
+ R = #reply_header{service_context=[], request_id=1,
+ reply_status='no_exception'},
+ ?line B = cdr_encode:enc_reply(#giop_env{version = {1, 1}, request_id = 1,
+ reply_status = 'no_exception',
+ tc = {'tk_long', [], [{'tk_sequence',
+ {'tk_string', 0}, 0}]},
+ result = 1200, parameters = [["foo","Bar"]],
+ ctx = []}),
+ ?line {R, 1200, [["foo","Bar"]]} =
+ cdr_decode:dec_message({'tk_long', [], [{'tk_sequence', {'tk_string', 0},0}]},
+ B),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: cancel_request encoding test
+%% Description:
+%%-----------------------------------------------------------------
+cancel_request(doc) -> ["Description", "more description"];
+cancel_request(suite) -> [];
+cancel_request(Config) when is_list(Config) ->
+ R = #cancel_request_header{request_id=1},
+ ?line B = cdr_encode:enc_cancel_request(#giop_env{version = {1, 1},
+ request_id = 1}),
+ ?line R = cdr_decode:dec_message([], B),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: locate_request encoding test
+%% Description:
+%%-----------------------------------------------------------------
+locate_request(doc) -> ["Description", "more description"];
+locate_request(suite) -> [];
+locate_request(Config) when is_list(Config) ->
+ io:format("Function not imlpemented yet"),
+ exit(not_implemented).
+
+%%-----------------------------------------------------------------
+%% Test Case: locate_reply encoding test
+%% Description:
+%%-----------------------------------------------------------------
+locate_reply(doc) -> ["Description", "more description"];
+locate_reply(suite) -> [];
+locate_reply(Config) when is_list(Config) ->
+ io:format("Function not imlpemented yet"),
+ exit(not_implemented).
+
+%%-----------------------------------------------------------------
+%% Test Case: close_connection encoding test
+%% Description:
+%%-----------------------------------------------------------------
+close_connection(doc) -> ["Description", "more description"];
+close_connection(suite) -> [];
+close_connection(Config) when is_list(Config) ->
+ ?line B = cdr_encode:enc_close_connection(#giop_env{version = {1, 1}}),
+ ?line 'close_connection' = cdr_decode:dec_message([], B),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: message_error encoding test
+%% Description:
+%%-----------------------------------------------------------------
+message_error(doc) -> ["Description", "more description"];
+message_error(suite) -> [];
+message_error(Config) when is_list(Config) ->
+ ?line B = cdr_encode:enc_message_error(#giop_env{version = {1, 1}}),
+ ?line 'message_error' = cdr_decode:dec_message([], B),
+ ok.
+
+
+
+%%-----------------------------------------------------------------
+%% Internal functions
+%%-----------------------------------------------------------------
+corba_fake_mk_objkey(Id, 'key', Pid) when is_pid(Pid) ->
+ Key = make_objkey(),
+ {list_to_binary(Id), 'key', Key, term_to_binary(undefined),
+ term_to_binary(undefined), term_to_binary(undefined)};
+corba_fake_mk_objkey(Id, 'key', RegName) when is_atom(RegName) ->
+ Key = term_to_binary(RegName),
+ {list_to_binary(Id), 'key', Key, term_to_binary(undefined),
+ term_to_binary(undefined), term_to_binary(undefined)};
+corba_fake_mk_objkey(Id, 'registered', RegName) when is_atom(RegName) ->
+ {list_to_binary(Id), 'registered', RegName, term_to_binary(undefined),
+ term_to_binary(undefined), term_to_binary(undefined)}.
+
+make_objkey() ->
+ term_to_binary({now(), node()}).
diff --git a/lib/orber/test/cdrcoding_12_SUITE.erl b/lib/orber/test/cdrcoding_12_SUITE.erl
new file mode 100644
index 0000000000..18e8eaa08a
--- /dev/null
+++ b/lib/orber/test/cdrcoding_12_SUITE.erl
@@ -0,0 +1,603 @@
+%%----------------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2000-2010. 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%
+%%
+%%
+%%-----------------------------------------------------------------
+%%
+%% Description:
+%% Test suite for the CDR encode/decode functions
+%%
+%%-----------------------------------------------------------------
+
+-module(cdrcoding_12_SUITE).
+
+-include("idl_output/Module.hrl").
+-include("test_server.hrl").
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/src/orber_iiop.hrl").
+
+-define(default_timeout, ?t:minutes(5)).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-export([]).
+-compile(export_all).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["Description", "more description"];
+all(suite) -> {req,
+ [mnesia],
+ {conf, init_all, cases(), finish_all}}.
+
+cases() ->
+ [types, reply, cancel_request, close_connection, message_error].
+%% request, locate_request, locate_reply].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+
+init_per_testcase(_Case, Config) ->
+ Path = code:which(?MODULE),
+ code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Path = code:which(?MODULE),
+ code:del_path(filename:join(filename:dirname(Path), "idl_output")),
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+init_all(Config) when is_list(Config) ->
+ orber:jump_start(0),
+ if
+ is_list(Config) ->
+ Config;
+ true ->
+ exit("Config not a list")
+ end.
+
+finish_all(Config) when is_list(Config) ->
+ orber:jump_stop(),
+ Config.
+
+%%-----------------------------------------------------------------
+%% Test Case: type encoding tests
+%% Description: Just testing the complex types, the others are
+%% tested in the cdrlib SUITE.
+%%-----------------------------------------------------------------
+types(doc) -> ["Description", "more description"];
+types(suite) -> [do_register, null_type, void_type, principal_type,
+ objref_type, struct_type, union_type, string_type,
+ array_type, any_type, typecode_type, alias_type,
+ exception_type, do_unregister].
+
+do_register(doc) -> [];
+do_register(suite) -> [];
+do_register(Config) when is_list(Config) ->
+ 'oe_orber_test':'oe_register'(),
+ ok.
+do_unregister(doc) -> [];
+do_unregister(suite) -> [];
+do_unregister(Config) when is_list(Config) ->
+ 'oe_orber_test':'oe_unregister'(),
+ ok.
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: null
+%%-----------------------------------------------------------------
+null_type(doc) -> [];
+null_type(suite) -> [];
+null_type(Config) when is_list(Config) ->
+ ?line B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_null', 'null'),
+ ?line {'null', <<>>, _} = cdr_decode:dec_type('tk_null', {1, 2}, B, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: void
+%%-----------------------------------------------------------------
+void_type(doc) -> [];
+void_type(suite) -> [];
+void_type(Config) when is_list(Config) ->
+ ?line B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_void', 'ok'),
+ ?line {'ok', <<>>, _} = cdr_decode:dec_type('tk_void', {1, 2}, B, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: principal
+%%-----------------------------------------------------------------
+principal_type(doc) -> [];
+principal_type(suite) -> [];
+principal_type(Config) when is_list(Config) ->
+ ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_Principal', "principal"),
+ ?line {"principal", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 2}, B0, 0, big),
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_Principal', ""),
+ ?line {"", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 2}, B1, 0, big),
+ ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_Principal', "principal"),
+ ?line {"principal", <<>>, _} =
+ cdr_decode:dec_type('tk_Principal', {1, 2}, B2, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: object reference
+%%-----------------------------------------------------------------
+version() -> #'IIOP_Version'{major=1,minor=2}.
+
+objref(0) ->
+ PB = #'IIOP_ProfileBody_1_1'{iiop_version=version(),
+ host="my.hostname.org",
+ port=4040,
+ object_key="ExternalKey: which is an arbitary octet sequence",
+ components=[]},
+ TP = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB},
+ #'IOP_IOR'{type_id="IDL:Module/Interface:1.0", profiles=[TP]};
+objref(1) ->
+ K = corba_fake_mk_objkey("IDL:Module/Interface:1.0", key,
+ list_to_pid("<0.100.0>")),
+ PB = #'IIOP_ProfileBody_1_1'{iiop_version=version(),
+ host="my.hostname.org",
+ port=4040,
+ object_key=K, components=[]},
+ TP = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB},
+ #'IOP_IOR'{type_id="IDL:Module/Interface:1.0", profiles=[TP]};
+objref(2) ->
+ K = corba_fake_mk_objkey("IDL:Module/Interface:1.0", registered,
+ list_to_atom("orber_nameservice")),
+ PB = #'IIOP_ProfileBody_1_1'{iiop_version=version(),
+ host="my.hostname.org",
+ port=4040,
+ object_key=K, components=[]},
+ TP = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB},
+ #'IOP_IOR'{type_id="IDL:Module/Interface:1.0", profiles=[TP]}.
+
+objref_type(doc) -> [];
+objref_type(suite) -> [];
+objref_type(Config) when is_list(Config) ->
+ T = {'tk_objref', "IDL:Module/Interface:1.0", "Interface"},
+ Objref0 = objref(0),
+ ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, Objref0),
+ ?line {Objref0, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B0, 0, big),
+ Objref1 = objref(1),
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, Objref1),
+ ?line {Objref1, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B1, 0, big),
+ Objref2 = objref(2),
+ ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, Objref2),
+ ?line {Objref2, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B2, 0, big),
+ ok.
+
+
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: struct
+%%-----------------------------------------------------------------
+struct_type(doc) -> [];
+struct_type(suite) -> [];
+struct_type(Config) when is_list(Config) ->
+ T0 = {'tk_struct',"IDL:Module/Struct0:1.0", "Module_Struct0",
+ [{"long", 'tk_long'}, {"short", 'tk_short'}, {"character", 'tk_char'}]},
+ S0 = #'Module_Struct0'{l=-4711, s=17, c=$a},
+ ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S0),
+ ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B0, 0, big),
+
+ T1 = {'tk_struct', "IDL:Module/Struct1:1.0", "Module_Struct1",
+ [{"string", {'tk_string', 0}}, {"ushort", 'tk_ushort'}, {"ulong", 'tk_ulong'}]},
+ S1 = #'Module_Struct1'{s="Hi !!!!", us=17, ul=4711},
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S1),
+ ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B1, 0, big),
+
+ T2 = {'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
+ [{"long_sequence", {'tk_sequence', 'tk_long', 0}},
+ {"enum", {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}},
+ {"octet", 'tk_octet'}]},
+ S2 = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000], e=cow, o=$X},
+ ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S2),
+ ?line {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B2, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: union
+%%-----------------------------------------------------------------
+union_type(doc) -> [];
+union_type(suite) -> [];
+union_type(Config) when is_list(Config) ->
+ T0 = {'tk_union', "IDL:Module/Union:1.0", "Union", 'tk_short', 2,
+ [{0, "First", 'tk_short'},
+ {1, "Second", {'tk_string', 0}},
+ {2, "Third", 'tk_char'}]},
+ S0 = #'Module_Union'{label=1, value="Foo Bar !"},
+ ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S0),
+ ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B0, 0, big),
+ S1 = #'Module_Union'{label=0, value=-17},
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S1),
+ ?line {S1, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B1, 0, big),
+ S2 = #'Module_Union'{label=2, value=$X},
+ ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S2),
+ ?line {S2, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B2, 0, big),
+ T1 = {'tk_union', "IDL:Module/Union1:1.0", "Union1",
+ {'tk_enum', "IDL:Module/Enum:1.0",
+ "Module_Enum", ["horse", "pig", "cow"]}, "pig",
+ [{"horse", "First", 'tk_ushort'},
+ {"pig", "Second", {'tk_sequence', {'tk_string', 0}, 0}},
+ {"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
+ "Module_Enum1", ["orange", "banana", "apple"]}}]},
+ S3 = #'Module_Union1'{label=pig, value=["Foo", "Bar", "!"]},
+ ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S3),
+ ?line {S3, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B3, 0, big),
+ S4 = #'Module_Union1'{label=cow, value=apple},
+ ?line B4 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S4),
+ ?line {S4, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B4, 0, big),
+ S5 = #'Module_Union1'{label=horse, value=17},
+ ?line B5 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S5),
+ ?line {S5, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B5, 0, big),
+ T2 = {'tk_union', "IDL:Module/Union2:1.0", "Union2",
+ {'tk_enum', "IDL:Module/Enum:1.0",
+ "Module_Enum", ["horse", "pig", "cow"]}, "pig",
+ [{"horse", "First", {'tk_array', 'tk_long', 3}},
+ {"pig", "Second",
+ {'tk_union', "IDL:Module/Union:1.0", "Union", 'tk_short', 2,
+ [{0, "First", 'tk_short'},
+ {1, "Second", {'tk_string', 0}},
+ {2, "Third", 'tk_char'}]}},
+ {"cow", "Third", {'tk_union', "IDL:Module/Union1:1.0", "Union1",
+ {'tk_enum', "IDL:Module/Enum:1.0",
+ "Module_Enum", ["horse", "pig", "cow"]}, "pig",
+ [{"horse", "First", 'tk_ushort'},
+ {"pig", "Second", {'tk_sequence',
+ {'tk_string', 0}, 0}},
+ {"cow", "Third", {'tk_enum',
+ "IDL:Module/Enum1:1.0",
+ "Module_Enum1",
+ ["orange", "banana",
+ "apple"]}}]}}]},
+ S6 = #'Module_Union2'{label=pig, value=#'Module_Union'{label=0, value=-17}},
+ ?line B6 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S6),
+ ?line {S6, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B6, 0, big),
+ S7 = #'Module_Union2'{label=cow, value=#'Module_Union1'{label=pig,
+ value=["Foo", "Bar", "!"]}},
+ ?line B7 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S7),
+ ?line {S7, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B7, 0, big),
+ S8 = #'Module_Union2'{label=horse, value={-17, 1234567890, -987654321}},
+ ?line B8 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S8),
+ ?line {S8, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B8, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: string
+%%-----------------------------------------------------------------
+string_type(doc) -> [];
+string_type(suite) -> [];
+string_type(Config) when is_list(Config) ->
+ S0 = "Foo Bar ???",
+ ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S0),
+ ?line {S0, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B0, 0, big),
+ S1 = "Yes, Foo Bar !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! more than 5000 characters",
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S1),
+ ?line {S1, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B1, 0, big),
+ S2 = "",
+ ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S2),
+ ?line {S2, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B2, 0, big),
+ S3 = "\0",
+ ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S3),
+ ?line {S3, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B3, 0, big),
+ S4 = "~n",
+ ?line B4 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S4),
+ ?line {S4, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B4, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: array
+%%-----------------------------------------------------------------
+array_type(doc) -> [];
+array_type(suite) -> [];
+array_type(Config) when is_list(Config) ->
+ T0 = {'tk_array', 'tk_long', 5},
+ S0 = {-100, 0, 30000, -900100900, 123456789},
+ ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S0),
+ ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B0, 0, big),
+ T1 = {'tk_array', {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}, 2},
+ S1 = {pig, cow},
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S1),
+ ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B1, 0, big),
+ T2 = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
+ {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}, "pig",
+ [{"horse", "First", 'tk_ushort'},
+ {"pig", "Second", {'tk_sequence', {'tk_string', 0}, 0}},
+ {"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
+ "Module_Enum1", ["orange", "banana", "apple"]}}]}, 2},
+ S2 = {#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}},
+ ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S2),
+ ?line {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B2, 0, big),
+ T3 = {'tk_array', {'tk_objref', "IDL:Module/Interface:1.0", "Interface"}, 3},
+ S3 = {objref(0), objref(1), objref(2)},
+ ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T3, S3),
+ ?line {S3, <<>>, _} = cdr_decode:dec_type(T3, {1, 2}, B3, 0, big),
+ ok.
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: TypeCode
+%%-----------------------------------------------------------------
+any_type(doc) -> [];
+any_type(suite) -> [];
+any_type(Config) when is_list(Config) ->
+ T = 'tk_any',
+ TC = {'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
+ [{"long_sequence", {'tk_sequence', 'tk_long', 0}},
+ {"enum", {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
+ ["horse", "pig", "cow"]}},
+ {"octet", 'tk_octet'}]},
+ S = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000],
+ e=cow, o=$X},
+ Any = #any{typecode=TC,value=S},
+ ?line B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,Any),
+ ?line {Any, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B, 0, big),
+ TC1 = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
+ {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
+ ["horse", "pig", "cow"]}, 1,
+ [{"horse", "First", 'tk_ushort'},
+ {"pig", "Second", {'tk_sequence', {'tk_string', 0}, 0}},
+ {"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
+ "Module_Enum1", ["orange", "banana",
+ "apple"]}}]},2},
+ S1 = {#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}},
+ Any1 = #any{typecode=TC1,value=S1},
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,Any1),
+ ?line {Any1, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B1, 0, big),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: TypeCode
+%%-----------------------------------------------------------------
+typecode_type(doc) -> [];
+typecode_type(suite) -> [];
+typecode_type(Config) when is_list(Config) ->
+ T = 'tk_TypeCode',
+ TC = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
+ {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
+ ["horse", "pig", "cow"]}, 1,
+ [{"horse", "First", 'tk_ushort'},
+ {"pig", "Second", {'tk_sequence', {'tk_string', 0}, 0}},
+ {"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
+ "Module_Enum1", ["orange", "banana",
+ "apple"]}}]}, 10},
+ ?line B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,TC),
+ ?line {TC, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B, 0, big),
+ TC1 = {'tk_union', "IDL:Module/Union2:1.0", "Union2",
+ {'tk_enum', "IDL:Module/Enum:1.0",
+ "Module_Enum", ["horse", "pig", "cow"]}, 2,
+ [{"horse", "First", 'tk_long'},
+ {"pig", "Second",
+ {'tk_union', "IDL:Module/Union:1.0", "Union", 'tk_short', 2,
+ [{0, "First", 'tk_short'},
+ {1, "Second", {'tk_string', 0}},
+ {2, "Third", 'tk_char'}]}},
+ {"cow", "Third", {'tk_union', "IDL:Module/Union1:1.0", "Union1",
+ {'tk_enum', "IDL:Module/Enum:1.0",
+ "Module_Enum", ["horse", "pig", "cow"]}, 2,
+ [{"horse", "First", 'tk_ushort'},
+ {"pig", "Second", {'tk_sequence',
+ {'tk_string', 0}, 0}},
+ {"cow", "Third", {'tk_enum',
+ "IDL:Module/Enum1:1.0",
+ "Module_Enum1",
+ ["orange", "banana",
+ "apple"]}}]}}]},
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, TC1),
+ ?line {TC1, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B1, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: TypeCode
+%%-----------------------------------------------------------------
+alias_type(doc) -> [];
+alias_type(suite) -> [];
+alias_type(Config) when is_list(Config) ->
+ T = {'tk_alias', "IDL:Module/Alias:1.0", "Alias",
+ {'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
+ [{"long_sequence", {'tk_sequence', 'tk_long', 0}},
+ {"enum", {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
+ ["horse", "pig", "cow"]}},
+ {"octet", 'tk_octet'}]}},
+ S = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000],
+ e=cow, o=$X},
+ ?line B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,S),
+ ?line {S, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B, 0, big),
+ T1 = {'tk_alias', "IDL:Module/Alias1:1.0", "Alias1",
+ {'tk_sequence', {'tk_union', "IDL:Module/Union:1.0", "Union",
+ {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
+ ["horse", "pig", "cow"]}, 2,
+ [{"horse", "First", 'tk_ushort'},
+ {"pig", "Second", {'tk_sequence', {'tk_string', 0}, 0}},
+ {"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
+ "Module_Enum1", ["orange", "banana",
+ "apple"]}}]},0}},
+ S1 = [#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}],
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S1),
+ ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B1, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Encode/decode test of type: exception
+%%-----------------------------------------------------------------
+exception_type(doc) -> [];
+exception_type(suite) -> [];
+exception_type(Config) when is_list(Config) ->
+ system_exceptions(),
+ user_exceptions(),
+ ok.
+
+system_exceptions() ->
+ E = #'UNKNOWN'{completion_status=?COMPLETED_YES},
+ {system_exception, T, E} = orber_exceptions:get_def(E),
+ ?line B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,E),
+ ?line {E, _} = cdr_decode:dec_system_exception({1, 2}, B, 0, big),
+ E1 = #'INV_OBJREF'{completion_status=?COMPLETED_NO},
+ {system_exception, T1, E1} = orber_exceptions:get_def(E1),
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1,E1),
+ ?line {E1, _} = cdr_decode:dec_system_exception({1, 2}, B1, 0, big),
+ E2 = #'BAD_OPERATION'{completion_status=?COMPLETED_NO},
+ {system_exception, T2, E2} = orber_exceptions:get_def(E2),
+ ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2,E2),
+ ?line {E2, _} = cdr_decode:dec_system_exception({1, 2}, B2, 0, big),
+ E3 = #'INTF_REPOS'{completion_status=?COMPLETED_MAYBE},
+ {system_exception, T3, E3} = orber_exceptions:get_def(E3),
+ ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T3,E3),
+ ?line {E3, _} = cdr_decode:dec_system_exception({1, 2}, B3, 0, big),
+ ok.
+
+user_exceptions() ->
+ E = #'Module_Except1'{rest_of_name=["I","am","testing","exceptions"], why="Error"},
+ {user_exception, T, E} = orber_exceptions:get_def(E),
+ ?line B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, E),
+ ?line {E, _} = cdr_decode:dec_user_exception({1, 2}, B, 0, big),
+ E1 = #'Module_Except2'{e=banana,
+ s=#'Module_Struct2'{long_sequence=[12,-4040,
+ 1234567898],
+ e=horse,
+ o=$a}},
+ {user_exception, T1, E1} = orber_exceptions:get_def(E1),
+ ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, E1),
+ ?line {E1, _} = cdr_decode:dec_user_exception({1, 2}, B1, 0, big),
+ E2 = #'Module_Except3'{u=#'Module_Union1'{label=pig,value=["high","and","low"]},s=1313, o=objref(0)},
+ {user_exception, T2, E2} = orber_exceptions:get_def(E2),
+ ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, E2),
+ ?line {E2, _} = cdr_decode:dec_user_exception({1, 2}, B2, 0, big),
+ E3 = #'Module_Except4'{},
+ {user_exception, T3, E3} = orber_exceptions:get_def(E3),
+ ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T3, E3),
+ ?line {E3, _} = cdr_decode:dec_user_exception({1, 2}, B3, 0, big),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: request encoding test
+%% Description: Precondition the stack must be started so the
+%% objectkey is valid.
+%%-----------------------------------------------------------------
+%request(suite) -> [];
+%request(_) ->
+% exit(not_implemented).
+
+%%-----------------------------------------------------------------
+%% Test Case: reply encoding test
+%% Description:
+%%-----------------------------------------------------------------
+reply(doc) -> ["Description", "more description"];
+reply(suite) -> [];
+reply(Config) when is_list(Config) ->
+ R = #reply_header{service_context=[], request_id=1,
+ reply_status='no_exception'},
+ ?line B = cdr_encode:enc_reply(#giop_env{version = {1, 2}, request_id = 1,
+ reply_status = 'no_exception',
+ tc = {'tk_long', [], [{'tk_sequence',
+ {'tk_string', 0}, 0}]},
+ result = 1200,
+ parameters = [["foo","Bar"]],
+ ctx = []}),
+
+ ?line {R, 1200, [["foo","Bar"]]} =
+ cdr_decode:dec_message({'tk_long', [], [{'tk_sequence', {'tk_string', 0},0}]},
+ B),
+
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: cancel_request encoding test
+%% Description:
+%%-----------------------------------------------------------------
+cancel_request(doc) -> ["Description", "more description"];
+cancel_request(suite) -> [];
+cancel_request(Config) when is_list(Config) ->
+ R = #cancel_request_header{request_id=1},
+ ?line B = cdr_encode:enc_cancel_request(#giop_env{version = {1, 2},
+ request_id = 1}),
+ ?line R = cdr_decode:dec_message([], B),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: locate_request encoding test
+%% Description:
+%%-----------------------------------------------------------------
+locate_request(doc) -> ["Description", "more description"];
+locate_request(suite) -> [];
+locate_request(Config) when is_list(Config) ->
+ io:format("Function not imlpemented yet"),
+ exit(not_implemented).
+
+%%-----------------------------------------------------------------
+%% Test Case: locate_reply encoding test
+%% Description:
+%%-----------------------------------------------------------------
+locate_reply(doc) -> ["Description", "more description"];
+locate_reply(suite) -> [];
+locate_reply(Config) when is_list(Config) ->
+ io:format("Function not imlpemented yet"),
+ exit(not_implemented).
+
+%%-----------------------------------------------------------------
+%% Test Case: close_connection encoding test
+%% Description:
+%%-----------------------------------------------------------------
+close_connection(doc) -> ["Description", "more description"];
+close_connection(suite) -> [];
+close_connection(Config) when is_list(Config) ->
+ ?line B = cdr_encode:enc_close_connection(#giop_env{version = {1, 2}}),
+ ?line 'close_connection' = cdr_decode:dec_message([], B),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: message_error encoding test
+%% Description:
+%%-----------------------------------------------------------------
+message_error(doc) -> ["Description", "more description"];
+message_error(suite) -> [];
+message_error(Config) when is_list(Config) ->
+ ?line B = cdr_encode:enc_message_error(#giop_env{version = {1, 2}}),
+ ?line 'message_error' = cdr_decode:dec_message([], B),
+ ok.
+
+
+
+%%-----------------------------------------------------------------
+%% Internal functions
+%%-----------------------------------------------------------------
+corba_fake_mk_objkey(Id, 'key', Pid) when is_pid(Pid) ->
+ Key = make_objkey(),
+ {list_to_binary(Id), 'key', Key, term_to_binary(undefined),
+ term_to_binary(undefined), term_to_binary(undefined)};
+corba_fake_mk_objkey(Id, 'key', RegName) when is_atom(RegName) ->
+ Key = term_to_binary(RegName),
+ {list_to_binary(Id), 'key', Key, term_to_binary(undefined),
+ term_to_binary(undefined), term_to_binary(undefined)};
+corba_fake_mk_objkey(Id, 'registered', RegName) when is_atom(RegName) ->
+ {list_to_binary(Id), 'registered', RegName, term_to_binary(undefined),
+ term_to_binary(undefined), term_to_binary(undefined)}.
+
+make_objkey() ->
+ term_to_binary({now(), node()}).
diff --git a/lib/orber/test/cdrlib_SUITE.erl b/lib/orber/test/cdrlib_SUITE.erl
new file mode 100644
index 0000000000..fa2d7f2a30
--- /dev/null
+++ b/lib/orber/test/cdrlib_SUITE.erl
@@ -0,0 +1,487 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-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%
+%%
+%%
+%%-----------------------------------------------------------------
+%%
+%% Description:
+%% Test suite for the CDR basic type encode/decode functions
+%%
+%%-----------------------------------------------------------------
+-module(cdrlib_SUITE).
+
+-include("test_server.hrl").
+
+-define(default_timeout, ?t:minutes(3)).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-export([]).
+-compile(export_all).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["Description", "more description"];
+all(suite) ->
+ [short, ushort, long, ulong, longlong, ulonglong, boolean, character, octet,
+ float, double, enum].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: short integer test
+%% Description:
+%%-----------------------------------------------------------------
+short(doc) -> ["Description", "more description"];
+short(suite) -> [];
+short(_) ->
+ short_big_loop([-32768, -4040, -1, 0, 4040, 32767]),
+ short_little_loop([-32768, -4040, -1, 0, 4040, 32767]),
+ bad_short().
+
+short_big_loop([]) ->
+ ok;
+short_big_loop([X |List]) ->
+ ?line [CodedType] = cdrlib:enc_short(X, []),
+ ?line {X, <<>>} = cdrlib:dec_short(big, CodedType),
+ short_big_loop(List),
+ ok.
+
+short_little_loop([]) ->
+ ok;
+short_little_loop([X |List]) ->
+ ?line CodedType = enc_short_little(X, []),
+ ?line {X, <<>>} = cdrlib:dec_short(little, CodedType),
+ short_little_loop(List),
+ ok.
+
+enc_short_little(X, Message) ->
+ list_to_binary([(X) band 16#ff, ((X) bsr 8) band 16#ff | Message]).
+
+bad_short() ->
+ ?line {'EXCEPTION', _} = (catch cdrlib:enc_short('atom', [])),
+ ?line [CodedType] = cdrlib:enc_char($a, []),
+ ?line {'EXIT', _} = (catch cdrlib:dec_short(big, CodedType)),
+ ok.
+%%-----------------------------------------------------------------
+%% Test Case: unsigned short integer test
+%% Description:
+%%-----------------------------------------------------------------
+ushort(doc) -> ["Description", "more description"];
+ushort(suite) -> [];
+ushort(_) ->
+ ushort_big_loop([0, 4040, 65535]),
+ ushort_little_loop([0, 4040, 65535]),
+ bad_ushort().
+
+ushort_big_loop([]) ->
+ ok;
+ushort_big_loop([X |List]) ->
+ ?line [CodedType] = cdrlib:enc_unsigned_short(X, []),
+ ?line {X, <<>>} = cdrlib:dec_unsigned_short(big, CodedType),
+ ushort_big_loop(List),
+ ok.
+
+ushort_little_loop([]) ->
+ ok;
+ushort_little_loop([X |List]) ->
+ ?line CodedType = enc_ushort_little(X, []),
+ ?line {X, <<>>} = cdrlib:dec_unsigned_short(little, CodedType),
+ ushort_little_loop(List),
+ ok.
+
+enc_ushort_little(X, Message) ->
+ list_to_binary([(X) band 16#ff, ((X) bsr 8) band 16#ff | Message]).
+
+bad_ushort() ->
+ ok.
+%%-----------------------------------------------------------------
+%% Test Case: long integer test
+%% Description:
+%%-----------------------------------------------------------------
+long(doc) -> ["Description", "more description"];
+long(suite) -> [];
+long(_) ->
+ long_big_loop([-2147483648, -40404040, -32768, -4040, -1,
+ 0, 4040, 32767, 40404040, 2147483647]),
+ long_little_loop([-2147483648, -40404040, -32768, -4040, -1,
+ 0, 4040, 32767, 40404040, 2147483647]),
+ bad_long().
+
+
+long_big_loop([]) ->
+ ok;
+long_big_loop([X |List]) ->
+ ?line [CodedType] = cdrlib:enc_long(X, []),
+ ?line {X, <<>>} = cdrlib:dec_long(big, CodedType),
+ long_big_loop(List),
+ ok.
+
+long_little_loop([]) ->
+ ok;
+long_little_loop([X |List]) ->
+ ?line CodedType = enc_long_little(X, []),
+ ?line {X, <<>>} = cdrlib:dec_long(little, CodedType),
+ long_little_loop(List),
+ ok.
+
+enc_long_little(X, Message) ->
+ list_to_binary([(X) band 16#ff, ((X) bsr 8) band 16#ff, ((X) bsr 16) band 16#ff,
+ ((X) bsr 24) band 16#ff | Message]).
+
+bad_long() ->
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: unsigned long integer test
+%% Description:
+%%-----------------------------------------------------------------
+ulong(doc) -> ["Description", "more description"];
+ulong(suite) -> [];
+ulong(_) ->
+ ulong_big_loop([0, 4040, 65535, 40404040, 2147483647, 4294967295]),
+ ulong_little_loop([0, 4040, 65535, 40404040, 2147483647, 4294967295]),
+ bad_ulong().
+
+
+ulong_big_loop([]) ->
+ ok;
+ulong_big_loop([X |List]) ->
+ ?line [CodedType] = cdrlib:enc_unsigned_long(X, []),
+ ?line {X, <<>>} = cdrlib:dec_unsigned_long(big, CodedType),
+ ulong_big_loop(List),
+ ok.
+
+ulong_little_loop([]) ->
+ ok;
+ulong_little_loop([X |List]) ->
+ ?line CodedType = enc_ulong_little(X, []),
+ ?line {X, <<>>} = cdrlib:dec_unsigned_long(little, CodedType),
+ ulong_little_loop(List),
+ ok.
+
+enc_ulong_little(X, Message) ->
+ list_to_binary([(X) band 16#ff, ((X) bsr 8) band 16#ff, ((X) bsr 16) band 16#ff,
+ ((X) bsr 24) band 16#ff | Message]).
+
+
+bad_ulong() ->
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: long integer test
+%% Description:
+%%-----------------------------------------------------------------
+longlong(doc) -> ["Description", "more description"];
+longlong(suite) -> [];
+longlong(_) ->
+ longlong_big_loop([-2147483648, -40404040, -32768, -4040, -1,
+ 0, 4040, 32767, 40404040, 2147483647]),
+ longlong_little_loop([-2147483648, -40404040, -32768, -4040, -1,
+ 0, 4040, 32767, 40404040, 2147483647]),
+ bad_longlong().
+
+
+longlong_big_loop([]) ->
+ ok;
+longlong_big_loop([X |List]) ->
+ ?line [CodedType] = cdrlib:enc_longlong(X, []),
+ ?line {X, <<>>} = cdrlib:dec_longlong(big, CodedType),
+ longlong_big_loop(List),
+ ok.
+
+longlong_little_loop([]) ->
+ ok;
+longlong_little_loop([X |List]) ->
+ ?line CodedType = enc_longlong_little(X, []),
+ ?line {X, <<>>} = cdrlib:dec_longlong(little, CodedType),
+ longlong_little_loop(List),
+ ok.
+
+enc_longlong_little(X, Message) ->
+ list_to_binary([(X) band 16#ff, ((X) bsr 8) band 16#ff, ((X) bsr 16) band 16#ff,
+ ((X) bsr 24) band 16#ff, ((X) bsr 32) band 16#ff, ((X) bsr 40) band 16#ff,
+ ((X) bsr 48) band 16#ff, ((X) bsr 56) band 16#ff | Message]).
+
+bad_longlong() ->
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: unsigned long integer test
+%% Description:
+%%-----------------------------------------------------------------
+ulonglong(doc) -> ["Description", "more description"];
+ulonglong(suite) -> [];
+ulonglong(_) ->
+ ulonglong_big_loop([0, 4040, 65535, 40404040, 2147483647, 4294967295]),
+ ulonglong_little_loop([0, 4040, 65535, 40404040, 2147483647, 4294967295]),
+ bad_ulonglong().
+
+
+ulonglong_big_loop([]) ->
+ ok;
+ulonglong_big_loop([X |List]) ->
+ ?line [CodedType] = cdrlib:enc_unsigned_longlong(X, []),
+ ?line {X, <<>>} = cdrlib:dec_unsigned_longlong(big, CodedType),
+ ulonglong_big_loop(List),
+ ok.
+
+ulonglong_little_loop([]) ->
+ ok;
+ulonglong_little_loop([X |List]) ->
+ ?line CodedType = enc_ulonglong_little(X, []),
+ ?line {X, <<>>} = cdrlib:dec_unsigned_longlong(little, CodedType),
+ ulonglong_little_loop(List),
+ ok.
+
+enc_ulonglong_little(X, Message) ->
+ list_to_binary([(X) band 16#ff, ((X) bsr 8) band 16#ff, ((X) bsr 16) band 16#ff,
+ ((X) bsr 24) band 16#ff, ((X) bsr 32) band 16#ff, ((X) bsr 40) band 16#ff,
+ ((X) bsr 48) band 16#ff, ((X) bsr 56) band 16#ff | Message]).
+
+bad_ulonglong() ->
+ ok.
+
+
+
+%%-----------------------------------------------------------------
+%% Test Case: boolean test
+%% Description:
+%%-----------------------------------------------------------------
+boolean(doc) -> ["Description", "more description"];
+boolean(suite) -> [];
+boolean(_) ->
+ ?line [CodedTrue] = cdrlib:enc_bool('true', []),
+ ?line {'true', <<>>} = cdrlib:dec_bool(CodedTrue),
+ ?line [CodedFalse] = cdrlib:enc_bool('false', []),
+ ?line {'false', <<>>} = cdrlib:dec_bool(CodedFalse),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: character test
+%% Description:
+%%-----------------------------------------------------------------
+character(doc) -> ["Description", "more description"];
+character(suite) -> [];
+character(_) ->
+ ?line [Coded_0] = cdrlib:enc_char($0, []),
+ ?line {$0, <<>>} = cdrlib:dec_char(Coded_0),
+ ?line [Coded_a] = cdrlib:enc_char($a, []),
+ ?line {$a, <<>>} = cdrlib:dec_char(Coded_a),
+ ?line [Coded_Z] = cdrlib:enc_char($Z, []),
+ ?line {$Z, <<>>} = cdrlib:dec_char(Coded_Z),
+ ?line [Coded_dollar] = cdrlib:enc_char($$, []),
+ ?line {$$, <<>>} = cdrlib:dec_char(Coded_dollar),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: octet test
+%% Description:
+%%-----------------------------------------------------------------
+octet(doc) -> ["Description", "more description"];
+octet(suite) -> [];
+octet(_) ->
+ ?line [Coded_ff] = cdrlib:enc_octet(16#ff, []),
+ ?line {16#ff, <<>>} = cdrlib:dec_octet(Coded_ff),
+ ?line [Coded_00] = cdrlib:enc_octet(16#00, []),
+ ?line {16#00, <<>>} = cdrlib:dec_octet(Coded_00),
+ ?line [Coded_5a] = cdrlib:enc_octet(16#5a, []),
+ ?line {16#5a, <<>>} = cdrlib:dec_octet(Coded_5a),
+ ?line [Coded_48] = cdrlib:enc_octet(16#48, []),
+ ?line {16#48, <<>>} = cdrlib:dec_octet(Coded_48),
+ ok.
+
+
+
+%%-----------------------------------------------------------------
+%% Test Case: float test
+%% Description:
+%%-----------------------------------------------------------------
+float(doc) -> ["Description", "more description"];
+float(suite) -> [];
+float(_) ->
+ G = 16#7fffff / 16#800000 + 1.0,
+ H1 = math:pow(2, 127),
+ H2 = math:pow(2, -126),
+ float_big_loop([-H1 * G, -H1 * 1.0, -H2 * G, -H2 * 1.0,
+ -4040.313131, -3.141592, 0.0, 3.141592, 4040.313131,
+ H1 * G, H1 * 1.0, H2 * G, H2 * 1.0]),
+ float_little_loop([-H1 * G, -H1 * 1.0, -H2 * G, -H2 * 1.0,
+ -4040.313131, -3.141592, 0.0, 3.141592, 4040.313131,
+ H1 * G, H1 * 1.0, H2 * G, H2 * 1.0]),
+ ok.
+
+float_big_loop([]) ->
+ ok;
+float_big_loop([X |List]) ->
+ ?line [CodedType] = cdrlib:enc_float(X, []),
+ ?line {Y, <<>>} = cdrlib:dec_float(big, CodedType),
+ ?line float_comp(X,Y),
+ float_big_loop(List),
+ ok.
+
+float_little_loop([]) ->
+ ok;
+float_little_loop([X |List]) ->
+ ?line [CodedType] = enc_float_little(X, []),
+ ?line {Y, <<>>} = cdrlib:dec_float(little, CodedType),
+ ?line float_comp(X,Y),
+ float_little_loop(List),
+ ok.
+
+float_comp(X,Y) when X == 0.0, Y == 0.0 ->
+ ok;
+float_comp(X,Y) ->
+ Div = abs(Y) / abs(X),
+ %% io:format("~p~n", [float_to_list(Div)]),
+ ?line true = (Div < 1.0000001),
+ ?line true = (Div > 0.9999999),
+ ok.
+
+enc_float_little(X, Message) ->
+ [ <<X:32/little-float>> | Message].
+
+%%-----------------------------------------------------------------
+%% Test Case: double test
+%% Description:
+%%-----------------------------------------------------------------
+double(doc) -> ["Description", "more description"];
+double(suite) -> [];
+double(_) ->
+ F = 16#0fffffffffffff / 16#10000000000000 + 1.0,
+ E1 = math:pow(2, 1023),
+ E2 = math:pow(2, -1022),
+ G = 16#7fffff / 16#800000 + 1.0,
+ H1 = math:pow(2, 128),
+ H2 = math:pow(2, -127),
+ double_big_loop([-E1 * F, -E1 * 1.0, -E2 * F, -E2 * 1.0,
+ -H1 * G, -H1 * 1.0, -H2 * G, -H2 * 1.0,
+ -4040.313131, -3.141592, 0.0, 3.141592, 4040.313131,
+ H1 * G, H1 * 1.0, H2 * G, H2 * 1.0,
+ E1 * F, E1 * 1.0, E2 * F, E2 * 1.0]),
+ double_little_loop([-E1 * F, -E1 * 1.0, -E2 * F, -E2 * 1.0,
+ -H1 * G, -H1 * 1.0, -H2 * G, -H2 * 1.0,
+ -4040.313131, -3.141592, 0.0, 3.141592, 4040.313131,
+ H1 * G, H1 * 1.0, H2 * G, H2 * 1.0,
+ E1 * F, E1 * 1.0, E2 * F, E2 * 1.0]),
+ ok.
+
+double_big_loop([]) ->
+ ok;
+double_big_loop([X |List]) ->
+ ?line [CodedType] = cdrlib:enc_double(X, []),
+ ?line {Y, <<>>} = cdrlib:dec_double(big, CodedType),
+ ?line double_comp(X,Y),
+ double_big_loop(List),
+ ok.
+
+double_little_loop([]) ->
+ ok;
+double_little_loop([X |List]) ->
+ ?line [CodedType] = enc_double_little(X, []),
+ ?line {Y, <<>>} = cdrlib:dec_double(little, CodedType),
+ ?line double_comp(X,Y),
+ double_little_loop(List),
+ ok.
+
+enc_double_little(X, Message) ->
+ [ <<X:64/little-float>> | Message].
+
+double_comp(X,Y) when X == 0.0, Y == 0.0 ->
+ ok;
+double_comp(X,Y) ->
+ Div = abs(Y) / abs(X),
+ %% io:format("~p~n", [float_to_list(Div)]),
+ ?line true = (Div < 1.00000000000001),
+ ?line true = (Div > 0.99999999999999),
+ ok.
+
+double_should_be_ok(doc) -> ["Description", "more description"];
+double_should_be_ok(suite) -> [];
+double_should_be_ok(_) ->
+ F = 16#0fffffffffffff / 16#10000000000000 + 1.0,
+ E1 = math:pow(2, 1024), % erlang can't handle this.
+ E2 = math:pow(2, -1023),
+ double_big_loop([-E1 * F, -E1 * 1.0, -E2 * F, -E2 * 1.0,
+ E1 * F, E1 * 1.0, E2 * F, E2 * 1.0]),
+ double_little_loop([-E1 * F, -E1 * 1.0, -E2 * F, -E2 * 1.0,
+ E1 * F, E1 * 1.0, E2 * F, E2 * 1.0]),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: enum test
+%% Description:
+%%-----------------------------------------------------------------
+enum(doc) -> ["Description", "more description"];
+enum(suite) -> [];
+enum(_) ->
+ enum_big(),
+ enum_little(),
+ ok.
+
+enum_big() ->
+ ?line [Coded_a] = cdrlib:enc_enum(a,[a,b,c],[]),
+ ?line {a, <<>>} = cdrlib:dec_enum(big, ["a","b","c"], Coded_a),
+ ?line [Coded_b] = cdrlib:enc_enum(b,[a,b,c],[]),
+ ?line {b, <<>>} = cdrlib:dec_enum(big, ["a","b","c"], Coded_b),
+ ?line [Coded_c] = cdrlib:enc_enum(c,[a,b,c],[]),
+ ?line {c, <<>>} = cdrlib:dec_enum(big, ["a","b","c"], Coded_c),
+ ok.
+
+enum_little() ->
+ ?line Coded_a = enc_r_enum(a,[a,b,c],[]),
+ ?line {a, <<>>} = cdrlib:dec_enum(little, ["a","b","c"], Coded_a),
+ ?line Coded_b = enc_r_enum(b,[a,b,c],[]),
+ ?line {b, <<>>} = cdrlib:dec_enum(little, ["a","b","c"], Coded_b),
+ ?line Coded_c = enc_r_enum(c,[a,b,c],[]),
+ ?line {c, <<>>} = cdrlib:dec_enum(little, ["a","b","c"], Coded_c),
+ ok.
+
+enc_r_enum(Enum, ElemList, Message) ->
+ Val = getEnumValue(ElemList,Enum, 0),
+ enc_r_unsigned_long(Val, Message).
+
+getEnumValue([Enum |_List], Enum, N) ->
+ N;
+getEnumValue([_ |List], Enum, N) ->
+ getEnumValue(List, Enum, N + 1).
+
+enc_r_unsigned_long(X, Message) ->
+ list_to_binary([(X) band 16#ff, ((X) bsr 8) band 16#ff,
+ ((X) bsr 16) band 16#ff, ((X) bsr 24) band 16#ff | Message]).
diff --git a/lib/orber/test/corba_SUITE.erl b/lib/orber/test/corba_SUITE.erl
new file mode 100644
index 0000000000..dae8fcbefc
--- /dev/null
+++ b/lib/orber/test/corba_SUITE.erl
@@ -0,0 +1,909 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2010. 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%
+%%
+%%
+%%-----------------------------------------------------------------
+%%
+%% Description:
+%% Test suite for corba/boa/object/orber API functions
+%%
+%%-----------------------------------------------------------------
+-module(corba_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
+-include_lib("orber/src/orber_iiop.hrl").
+
+
+-define(default_timeout, ?t:minutes(5)).
+
+-define(match(ExpectedRes,Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
+ [AcTuAlReS]),
+ exit(AcTuAlReS)
+ end
+ end()).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-export([pseudo_calls/2, pseudo_casts/2]).
+-compile(export_all).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["API tests for the CORBA/BOA/Object/orber interfaces", ""];
+all(suite) -> {req,
+ [mnesia],
+ {conf, init_all, cases(), finish_all}}.
+
+cases() ->
+ [exception_info_api, corba_api, object_api, orber_api,
+ orber_objectkeys_api, orber_pseudo_objects, callback_ok_api,
+ callback_arity_api, callback_module_api, callback_function_api,
+ callback_precond_api, callback_postcond_api, callback_exit_api,
+ callback_badarith_api, callback_case_clause_api,
+ callback_function_clause_api].
+
+%% boa_api, request, locate_request, locate_reply].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+
+init_per_testcase(_Case, Config) ->
+ Path = code:which(?MODULE),
+ code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Path = code:which(?MODULE),
+ code:del_path(filename:join(filename:dirname(Path), "idl_output")),
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+init_all(Config) ->
+ corba:orb_init([{orber_debug_level, 10}, {giop_version, {1,2}},
+ {iiop_port, 0}]),
+ mnesia:delete_schema([node()]),
+ mnesia:create_schema([node()]),
+ orber:install([node()]),
+ application:start(mnesia),
+ application:start(orber),
+ if
+ is_list(Config) ->
+ Config;
+ true ->
+ exit("Config not a list")
+ end.
+
+finish_all(Config) ->
+ application:stop(orber),
+ application:stop(mnesia),
+ mnesia:delete_schema([node()]),
+ Config.
+
+%%-----------------------------------------------------------------
+%% API tests for pseudo interface CORBA
+%%-----------------------------------------------------------------
+corba_api(doc) -> ["CORBA API tests", ""];
+corba_api(suite) -> [];
+corba_api(_) ->
+ NIL = corba:create_nil_objref(),
+ ?line ok = corba:dispose(NIL),
+ ?line NS = corba:resolve_initial_references("NameService"),
+ ?line List = corba:list_initial_services(),
+ ?line ["NameService"] = List,
+ ?line NSstring = corba:object_to_string(NS),
+ ?line NS1 = corba:string_to_object(NSstring),
+ ?line NSstring = corba:object_to_string(NS1),
+ ?line true = corba:add_initial_service("MyData", NS),
+ ?line NS = corba:resolve_initial_references("MyData"),
+ ?line [_,_] = corba:list_initial_services(),
+ ?line false = corba:remove_initial_service("Wrong"),
+ ?line NIL = corba:resolve_initial_references("Wrong"),
+ ?line NS = corba:string_to_object("corbaloc:rir:/MyData"),
+ ?line true = corba:remove_initial_service("MyData"),
+ ?line ["NameService"] = corba:list_initial_services(),
+
+ %% This is a collection of different stringified IOR:s (correct & incorrect)
+ %% which we use to test IOR encode/decode.
+ ?line IOR1 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000040000000000000100000102010000000a3132372e302e302e31009d610000002dabacab3131303432343836383731005f526f6f74504f4100414c4c5f504f410000cafebabe3e2316570000000003030300000002000000210000007800010202000000010040020200000022000000080003030300000000004000400000000806066781020101010000001b0401000806066781020101010000000b40616469726f6e2e636f6d010400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c00030303000100010000000400010020000101090001010005010001000101090000000200010100050100010000000000000184000102010000000a3132372e302e302e310000000000002dabacab3131303432343836383731005f526f6f74504f4100414c4c5f504f410000cafebabe3e231657000000000303030000000300000021000000ec000102020000000200060202000000240000001c0001006600060202000000010000000a3132372e302e302e31009d600000000000000000000000000400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f00460202000000240000001c0001006600060202000000010000000a3132372e302e302e31009d62004000400000000806066781020101010000001b0401000806066781020101010000000b40616469726f6e2e636f6d010400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f00000014000000080001006600069d5e000000010000002c000303030001000100000004000100200001010900010100050100010001010900000002000101000501000100000000000000dc000102010000000a3132372e302e302e31009d5f0000002dabacab3131303432343836383731005f526f6f74504f4100414c4c5f504f410000cafebabe3e23165700000000030303000000020000002100000054000102020000000100000202000000220000000800030303000000000000000000000000000000000400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c00030303000100010000000400010020000101090001010005010001000101090000000200010100050100010000000000000080000102010000000a3132372e302e302e31009d5d0000002dabacab3131303432343836383731005f526f6f74504f4100414c4c5f504f410000cafebabe3e2316570000000003030300000001000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
+ ?line IOR2 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e30000303030000000100000000000000e0000102010000000a3132372e302e302e31009d5f00000034abacab3131303432343836383731005f526f6f74504f410049494f505f43534976325f504f410000cafebabe3e23165700000000000000020000002100000054000102020000000100000202000000220000000800030303000000000000000000000000000000000400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
+ ?line IOR3 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000010000000000000108000102010000000a3132372e302e302e31009d6100000037abacab3131303432343836383731005f526f6f74504f410049494f505f43534976325f55505f504f410000cafebabe3e231657000000000100000002000000210000007800010202000000010040020200000022000000080003030300000000004000400000000806066781020101010000001b0401000806066781020101010000000b40616469726f6e2e636f6d010400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
+ ?line IOR4 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000010000000000000080000102010000000a3132372e302e302e31009d5d0000002eabacab3131303432343836383731005f526f6f74504f410049494f505f504f410000cafebabe3e23165700000000020200000001000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
+ ?line IOR5 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e30000303030000000100000000000000fc000102010000000a3132372e302e302e3100000000000033abacab3131303432343836383731005f526f6f74504f4100544c535f43534976325f504f410000cafebabe3e231657000000000100000002000000210000007000010202000000010006020200000024000000220001006600060202000000010000000f3132382e3233302e3230382e353500019d6000000000020200000000000000000400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
+ ?line IOR6 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000010000000000000124000102010000000a3132372e302e302e3100000000000036abacab3131303432343836383731005f526f6f74504f4100544c535f43534976325f55505f504f410000cafebabe3e23165700000000020200000002000000210000009400010202000000010046020200000024000000220001006600060202000000010000000f3132382e3233302e3230382e353500019d620040004002020000000806066781020101010000001b0401000806066781020101010000000b40616469726f6e2e636f6d010400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
+ ?line IOR7 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000010000000000000090000102010000000a3132372e302e302e310000000000002dabacab3131303432343836383731005f526f6f74504f4100544c535f504f410000cafebabe3e231657000000000303030000000200000014000000080001006600069d5e000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
+ ?line IOR1 = corba:string_to_object(corba:object_to_string(IOR1)),
+ ?line IOR2 = corba:string_to_object(corba:object_to_string(IOR2)),
+ ?line IOR3 = corba:string_to_object(corba:object_to_string(IOR3)),
+ ?line IOR4 = corba:string_to_object(corba:object_to_string(IOR4)),
+ ?line IOR5 = corba:string_to_object(corba:object_to_string(IOR5)),
+ ?line IOR6 = corba:string_to_object(corba:object_to_string(IOR6)),
+ ?line IOR7 = corba:string_to_object(corba:object_to_string(IOR7)),
+ ?line ?match(ok, corba:print_object(IOR1)),
+ ?line ?match(ok, corba:print_object(IOR2)),
+ ?line ?match(ok, corba:print_object(IOR3)),
+ ?line ?match(ok, corba:print_object(IOR4)),
+ ?line ?match(ok, corba:print_object(IOR5)),
+ ?line ?match(ok, corba:print_object(IOR6)),
+ ?line ?match(ok, corba:print_object(IOR7)),
+ ?line ?match(ok, corba:print_object("IOR:000303030000000d49444c3a746573743a312e300003030300000002000000000000003000010001000000136d792e686f73742e65726c616e672e6f72670001801a02020000000c424f410a00000a0000070a010000000100000024000303030000000100000001000000140003030300010001000000000001010900000000")),
+ [IP] = ?match([_], orber:host()),
+ ?match(#'IOP_IOR'{profiles=[#'IOP_TaggedProfile'
+ {tag=?TAG_INTERNET_IOP,
+ profile_data=#'IIOP_ProfileBody_1_1'
+ {host = IP}}]},
+ corba:string_to_object(corba:object_to_string(NS))),
+ ?match(#'IOP_IOR'{profiles=[#'IOP_TaggedProfile'
+ {tag=?TAG_INTERNET_IOP,
+ profile_data=#'IIOP_ProfileBody_1_1'
+ {host = "127.0.0.1"}}]},
+ corba:string_to_object(corba:object_to_string(NS, ["127.0.0.1"]))),
+ ?match(#'IOP_IOR'{profiles=[#'IOP_TaggedProfile'
+ {tag=?TAG_INTERNET_IOP,
+ profile_data=#'IIOP_ProfileBody_1_1'
+ {host = "127.0.0.1", port = 5468}}]},
+ corba:string_to_object(corba:object_to_string(NS, ["127.0.0.1"],
+ 5468))),
+ ok.
+
+%%-----------------------------------------------------------------
+%% API tests for interface BOA
+%%-----------------------------------------------------------------
+boa_api(doc) -> ["BOA API tests", ""];
+boa_api(suite) -> [];
+boa_api(_) ->
+ ok.
+
+%%-----------------------------------------------------------------
+%% API tests for interface OBJECT
+%%-----------------------------------------------------------------
+object_api(doc) -> ["Object API tests", ""];
+object_api(suite) -> [];
+object_api(_) ->
+ ?line oe_orber_test_server:oe_register(),
+ ?line EC = orber_test_server:oe_create(),
+ ?line NS = corba:resolve_initial_references("NameService"),
+ %% testing corba_object:is_a(Obj, IFRID) locally.
+ ?line orber_test_lib:corba_object_tests(EC, NS),
+
+ ?line ?match(false, corba_object:non_existent(NS)),
+
+ ?line corba:dispose(EC),
+ ?line oe_orber_test_server:oe_unregister(),
+ ok.
+
+%%-----------------------------------------------------------------
+%% API tests for orbers main module
+%%-----------------------------------------------------------------
+orber_api(doc) -> ["orber API tests", ""];
+orber_api(suite) -> [];
+orber_api(_) ->
+ ?line ok = orber:uninstall(),
+ ?line orber:install([node()]),
+ ?line application:start(orber),
+ ?line NodeList = orber:orber_nodes(),
+ ?line NL = node(),
+ ?line [NL] = NodeList,
+ ok.
+
+%%-----------------------------------------------------------------
+%% API tests for exception mapping
+%%-----------------------------------------------------------------
+exception_info_api(doc) -> ["orber API tests", ""];
+exception_info_api(suite) -> [];
+exception_info_api(_) ->
+ ?line {ok, S1} = orber:exception_info({'EXCEPTION',{'MARSHAL',[],1163001858,'COMPLETED_NO'}}),
+ ?line {ok, S2} = orber:exception_info({'EXCEPTION',{'MARSHAL',[],1330446337,'COMPLETED_NO'}}),
+ ?line {ok, S3} = orber:exception_info({'EXCEPTION',{'MARSHAL',[],1398079490,'COMPLETED_NO'}}),
+ ?line {ok, S4} = orber:exception_info({'EXCEPTION',{'MARSHAL',[],1347813377,'COMPLETED_NO'}}),
+ ?line {ok, S5} = orber:exception_info({'EXCEPTION', {'CosNaming_NamingContext_InvalidName',"IDL:omg.org/CosNaming/NamingContext/InvalidName:1.0"}}),
+ ?line error_logger:info_msg("~s", [S1]),
+ ?line error_logger:info_msg("~s", [S2]),
+ ?line error_logger:info_msg("~s", [S3]),
+ ?line error_logger:info_msg("~s", [S4]),
+ ?line error_logger:info_msg("~s", [S5]),
+ ok.
+
+%%-----------------------------------------------------------------
+%% API tests for orbers pseudo objects.
+%%-----------------------------------------------------------------
+orber_pseudo_objects(doc) -> ["orber_pseudo_objects API tests", ""];
+orber_pseudo_objects(suite) -> [];
+orber_pseudo_objects(_) ->
+ ?line oe_orber_test_server:oe_register(),
+ Obj1=(catch orber_test_server:oe_create(state,[{pseudo,true},
+ {local_typecheck, true}])),
+ ?line ?match({_,pseudo,orber_test_server_impl, _,_, _}, Obj1),
+ Obj2=(catch orber_test_server:oe_create([],[{pseudo, truce}])),
+ ?line ?match({'EXCEPTION',{'BAD_PARAM',[],_,'COMPLETED_NO'}}, Obj2),
+ spawn(?MODULE, pseudo_calls, [20, Obj1]),
+ ?line ?match({ok, 10000}, orber_test_server:pseudo_call_delay(Obj1, 10000)),
+ spawn(?MODULE, pseudo_casts, [20, Obj1]),
+ ?line ?match(ok, orber_test_server:pseudo_cast_delay(Obj1, 10000)),
+
+ ?line ?match('object_here', corba:locate(Obj1)),
+
+ ?line NS = corba:resolve_initial_references("NameService"),
+
+ ?line orber_test_lib:corba_object_tests(Obj1, NS),
+
+ ?line ?match("IDL:omg.org/orber_test/server:1.0",orber_test_server:typeID()),
+
+ %% Test if exceptions are handled properly.
+ ?line ?match({'EXCEPTION',{'BAD_QOS',_,_,_}},
+ orber_test_server:pseudo_call_raise_exc(Obj1, 1)),
+ ?line ?match({'EXCEPTION',{'BAD_QOS',_,_,_}},
+ orber_test_server:pseudo_call_raise_exc(Obj1, 2)),
+
+ %% Test if exit is handled properly.
+ ?line ?match({'EXCEPTION',{'TRANSIENT',_,_,_}},
+ orber_test_server:stop_brutal(Obj1)),
+
+ orber_test_lib:test_coding(Obj1, true),
+
+ %% possible to use subobject key?
+ ?line ?match(state, binary_to_term(corba:get_subobject_key(Obj1))),
+
+ ?line ?match({'EXCEPTION',{'INV_OBJREF',[],_,'COMPLETED_NO'}},
+ corba:get_pid(Obj1)),
+ ?line ?match(false, corba_object:non_existent(Obj1)),
+
+ ?line ?match(ok, corba:dispose(Obj1)),
+
+ ?line ?match(false, corba_object:non_existent(Obj1)),
+
+ %% Try if it's possible to stringify and recover the object reference.
+ IOR_string = (catch corba:object_to_string(Obj1)),
+ Obj3 =(catch corba:string_to_object(IOR_string)),
+ ?line ?match(IOR_string, corba:object_to_string(Obj3)),
+
+ Obj4=(catch orber_test_server:oe_create(undefined,[{pseudo,true}])),
+ ?line ?match(ok, corba:dispose(Obj4)),
+ ?line oe_orber_test_server:oe_unregister(),
+ ok.
+
+%%-----------------------------------------------------------------
+%% API tests for orbers objectkeys server.
+%%-----------------------------------------------------------------
+orber_objectkeys_api(doc) -> ["orber_objectkeys API tests", ""];
+orber_objectkeys_api(suite) -> [];
+orber_objectkeys_api(_) ->
+ Obj0=(catch orber_test_server:oe_create([], [{sup_child, true}])),
+ Obj1=(catch orber_test_server:oe_create([], [{persistent, true},
+ {regname, {local,obj1}}])),
+ Obj2=(catch orber_test_server:oe_create([], [{persistent, true},
+ {regname, {global,{obj2, 12345}}}])),
+
+ %% Obj0 is supposed to be a child started by a supervisor (r6) which
+ %% handles not only {ok, Pid} but also {ok,Pid, Returnvalue}. In our
+ %% case the Returnvalue is an ObjectRef.
+ ?line ?match({ok,_,{_,key,_, _,_, _}}, Obj0),
+ {ok,_,Obj0Ref} = Obj0,
+ corba:dispose(Obj0Ref),
+
+ %% Only 'global' servers are at the moment allowed to be persistent.
+ ?line ?match({'EXCEPTION',{'BAD_PARAM',[],_,'COMPLETED_NO'}}, Obj1),
+
+ %% We created a persistent object successfully.
+ ?line ?match({_,key,_,_,_, _}, Obj2),
+
+ %% Get key and Pid
+ {_,_,Key,_,_, _} = Obj2,
+ PID=(catch orber_objectkeys:get_pid(Key)),
+
+ %% Use the two different ways to look up if the server is persistent.
+ ?line ?match(true, orber_objectkeys:is_persistent(Key)),
+ ?line ?match(true, orber_objectkeys:is_persistent(PID)),
+
+ %% Create servers using every possible way.
+ O1=(catch orber_test_server:oe_create()),
+ O2=(catch orber_test_server:oe_create_link()),
+ O3=(catch orber_test_server:oe_create([])),
+ O4=(catch orber_test_server:oe_create_link([])),
+ %% NOTE!!! Next four lines requires that we still support RegName instead of
+ %% only OptionList as the second argument to oe_create*/2. Remove these when that
+ %% is no longer the case.
+ O5=(catch orber_test_server:oe_create([], {'local', o5})),
+ O6=(catch orber_test_server:oe_create([], {'global', {o6, obj}})),
+ O7=(catch orber_test_server:oe_create_link([], {'local', o7})),
+ O8=(catch orber_test_server:oe_create_link([], {'global', {o8, obj}})),
+
+ %% Test if all the object references are correct.
+ ?line ?match({_,key,_,_,_, _}, O1),
+ ?line ?match({_,key,_,_,_, _}, O2),
+ ?line ?match({_,key,_,_,_, _}, O3),
+ ?line ?match({_,key,_,_,_, _}, O4),
+ ?line ?match({_, registered, o5, _,_, _}, O5),
+ ?line ?match({_,key,_,_,_, _}, O6),
+ ?line ?match({_, registered, o7, _,_, _}, O7),
+ ?line ?match({_,key,_,_,_, _}, O8),
+
+ %% Test if persistent.
+ {_,_,Key1,_,_, _} = O1,
+ PID1=(catch orber_objectkeys:get_pid(Key1)),
+ ?line ?match(false, orber_objectkeys:is_persistent(Key1)),
+ ?line ?match(false, orber_objectkeys:is_persistent(PID1)),
+
+ %% all the servers are alive(?!).
+ ?line ?match(false, corba_object:non_existent(O1)),
+ ?line ?match(false, corba_object:non_existent(O2)),
+ ?line ?match(false, corba_object:non_existent(O3)),
+ ?line ?match(false, corba_object:non_existent(O4)),
+ ?line ?match(false, corba_object:non_existent(O5)),
+ ?line ?match(false, corba_object:non_existent(O6)),
+ ?line ?match(false, corba_object:non_existent(O7)),
+ ?line ?match(false, corba_object:non_existent(O8)),
+ ?line ?match(false, corba_object:non_existent(Obj2)),
+
+ %% Does locate work?
+ ?line ?match('object_here', corba:locate(O1)),
+ ?line ?match('object_here', corba:locate(O2)),
+ ?line ?match('object_here', corba:locate(O3)),
+ ?line ?match('object_here', corba:locate(O4)),
+ ?line ?match('object_here', corba:locate(O5)),
+ ?line ?match('object_here', corba:locate(O6)),
+ ?line ?match('object_here', corba:locate(O7)),
+ ?line ?match('object_here', corba:locate(O8)),
+ ?line ?match('object_here', corba:locate(Obj2)),
+
+ %% Terminate all servers with reason 'normal'.
+ catch corba:dispose(O1),
+ catch corba:dispose(O2),
+ catch corba:dispose(O3),
+ catch corba:dispose(O4),
+ catch corba:dispose(O5),
+ catch corba:dispose(O6),
+ catch corba:dispose(O7),
+ catch corba:dispose(O8),
+ catch corba:dispose(Obj2),
+
+
+ %% To make sure that orber_objectkeys-server is able to
+ %% clean up we wait.
+ timer:sleep(2000),
+
+ %% all the servers are dead(?!). If one of these test-cases
+ %% fails the only error can be that we didn't sleep long enough, i.e.,
+ %% try a longer timeout. If still fails something is wrong.
+ ?line ?match(true, corba_object:non_existent(O1)),
+ ?line ?match(true, corba_object:non_existent(O2)),
+ ?line ?match(true, corba_object:non_existent(O3)),
+ ?line ?match(true, corba_object:non_existent(O4)),
+ ?line ?match(true, corba_object:non_existent(O5)),
+ ?line ?match(true, corba_object:non_existent(O6)),
+ ?line ?match(true, corba_object:non_existent(O7)),
+ ?line ?match(true, corba_object:non_existent(O8)),
+ ?line ?match(true, corba_object:non_existent(Obj2)),
+
+ %% Create a new persistent server.
+ Obj3=(catch orber_test_server:oe_create([],
+ [{persistent, true},
+ {regname, {global,{obj2, 12345}}}])),
+
+ %% OK?!
+ ?line ?match({_,key,_,_,_, _}, Obj3),
+
+ %% Try to create a server with the same name (naturally it fails).
+ ?line ?match({'EXCEPTION',{'INTERNAL',[],_,'COMPLETED_NO'}},
+ orber_test_server:oe_create([],
+ [{persistent, true},
+ {regname, {global,{obj2, 12345}}}])),
+ %% Try to remove all 'dead' servers. No server should be removed.
+ orber_objectkeys:gc(0),
+
+ %% Kill object brutal, i.e., not with reason 'normal' or 'shutdown'.
+ P3 = corba:get_pid(Obj3),
+ exit(P3, kill),
+
+ {_,_,Key3,_,_, _} = Obj3,
+
+ %% Give time to clean up.
+ timer:sleep(2000),
+ ?line ?match({'EXCEPTION',{'TRANSIENT',[],_,'COMPLETED_NO'}},
+ gen_server:call(orber_objkeyserver,
+ {get_pid, Key3},
+ infinity)),
+
+ ?line ?match(false,corba_object:non_existent(Obj3)),
+
+ %% Run gc wit a "huge" time-limit. Will not erase the dead object.
+ orber_objectkeys:gc(10000),
+ ?line ?match(false,corba_object:non_existent(Obj3)),
+
+ %% Run gc with minimum time-limit. Will erase the dead object.
+ orber_objectkeys:gc(0),
+ ?line ?match(true,corba_object:non_existent(Obj3)),
+
+ %% Create a new persistent server.
+ Obj4=(catch orber_test_server:oe_create([],
+ [{persistent, true},
+ {regname, {global,{obj2, 12345}}}])),
+
+ %% OK?!
+ ?match({_,key,_,_,_, _}, Obj4),
+ %% Kill object brutal, i.e., not with reason 'normal' or 'shutdown'.
+ P4 = corba:get_pid(Obj4),
+ exit(P4, kill),
+
+ %% Give time to clean up.
+ timer:sleep(2000),
+% ?line ?match({'EXCEPTION',{'COMM_FAILURE',[],0,'COMPLETED_NO'}},
+ ?line ?match({error, _},
+ corba:get_pid(Obj4)),
+
+ ?line ?match(false,corba_object:non_existent(Obj4)),
+
+ %% Restart the object.
+ Obj5=(catch orber_test_server:oe_create([],
+ [{persistent, true},
+ {regname, {global,{obj2, 12345}}}])),
+ %% OK?!
+ ?line ?match({_,key,_,_,_, _}, Obj5),
+
+ %% Run gc with minimum time-limit.
+ orber_objectkeys:gc(0),
+ ?line ?match(false,corba_object:non_existent(Obj5)),
+ corba:dispose(Obj5),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% API tests for callback functions
+%%-----------------------------------------------------------------
+-define(DO_EXIT_FLAG, 0).
+-define(NO_EXIT_FLAG, 16#10).
+
+-define(DO_EXIT, {is, 0}).
+-define(NO_EXIT, {is, 16#10}).
+
+
+
+callback_ok_api(doc) -> ["Successful callbak API tests", ""];
+callback_ok_api(suite) -> [];
+callback_ok_api(_) ->
+ %% Init
+ ?line ?match({ok, {?DO_EXIT, state}}, corba:handle_init(?MODULE, {?DO_EXIT_FLAG, state})),
+ %% Terminate
+ ?line ?match(ok, corba:handle_terminate(?MODULE, "reason", {?DO_EXIT, state})),
+ %% Handle_call
+ ?line ?match({reply,ok,{?DO_EXIT,state}},
+ corba:handle_call(?MODULE, foo, [],
+ {?DO_EXIT, state}, [], false, false)),
+ %% Handle_cast
+ ?line ?match({noreply, {?DO_EXIT,state}},
+ corba:handle_cast(?MODULE, foo_1w, [],
+ {?DO_EXIT, state}, [], false)),
+ %% Handle_call precond/postcond
+ ?line ?match({reply, ok, {?DO_EXIT, state}},
+ corba:handle_call(?MODULE, foo, [],
+ {?DO_EXIT, state}, [], false, false, {?MODULE, precond},
+ {?MODULE, postcond}, ?MODULE)),
+ %% Handle_cast precond/postcond
+ ?line ?match({noreply, {?DO_EXIT, state}},
+ corba:handle_cast(?MODULE, foo_1w, [],
+ {?DO_EXIT, state}, [], false, {?MODULE, precond},
+ {?MODULE, postcond}, ?MODULE)),
+ %% Handle_info
+ ?line ?match({noreply, {?DO_EXIT, state}},
+ corba:handle_info(?MODULE, "info", {?DO_EXIT, state})),
+ ok.
+
+callback_arity_api(doc) -> ["callbak arity API tests", ""];
+callback_arity_api(suite) -> [];
+callback_arity_api(_) ->
+ %% Handle_call - stay-alive == false
+ ?line ?match({'EXIT', {undef,_}},
+ corba:handle_call(?MODULE, foo, [to, many, arguments],
+ {?DO_EXIT, state}, [], false, false)),
+ %% Handle_call - stay-alive == true
+ ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
+ corba:handle_call(?MODULE, foo, [to, many, arguments],
+ {?NO_EXIT, state}, [], false, false)),
+ %% Handle_call - stay-alive == false
+ ?line ?match({'EXIT', _},
+ corba:handle_call(?MODULE, foo, [],
+ {?DO_EXIT, arity}, [], false, false)),
+ %% Handle_call - stay-alive == true
+ ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
+ corba:handle_call(?MODULE, foo, [],
+ {?NO_EXIT, arity}, [], false, false)),
+ %% Handle_cast - stay-alive == false
+ ?line ?match({'EXIT', {undef,_}},
+ corba:handle_cast(?MODULE, foo_1w, [to, many, arguments],
+ {?DO_EXIT, state}, [], false)),
+ %% Handle_cast - stay-alive == true
+ ?line ?match({noreply, {?NO_EXIT, state}},
+ corba:handle_cast(?MODULE, foo_1w, [to, many, arguments],
+ {?NO_EXIT, state}, [], false)),
+ %% Handle_cast - stay-alive == false
+ ?line ?match({'EXIT', _},
+ corba:handle_cast(?MODULE, foo_1w, [],
+ {?DO_EXIT, arity}, [], false)),
+ %% Handle_cast - stay-alive == true
+ ?line ?match({noreply, {?NO_EXIT, arity}},
+ corba:handle_cast(?MODULE, foo_1w, [],
+ {?NO_EXIT, arity}, [], false)),
+ %% Handle_info - stay-alive == false
+ ?line ?match({'EXIT', _},
+ corba:handle_info(?MODULE, "info", {?DO_EXIT, arity})),
+
+ %% Handle_info - stay-alive == true
+ ?line ?match({noreply, {?NO_EXIT, arity}},
+ corba:handle_info(?MODULE, "info", {?NO_EXIT, arity})),
+ ok.
+
+callback_module_api(doc) -> ["Module callbak API tests", ""];
+callback_module_api(suite) -> [];
+callback_module_api(_) ->
+ %% Handle_call - stay-alive == false
+ ?line ?match({'EXIT', {undef,_}},
+ corba:handle_call(wrong_mod, foo, [],
+ {?DO_EXIT, state}, [], false, false)),
+ %% Handle_call - stay-alive == true
+ ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
+ corba:handle_call(wrong_mod, foo, [],
+ {?NO_EXIT, state}, [], false, false)),
+ %% Handle_cast - stay-alive == false
+ ?line ?match({'EXIT', {undef,_}},
+ corba:handle_cast(wrong_mod, foo_1w, [],
+ {?DO_EXIT, state}, [], false)),
+ %% Handle_cast - stay-alive == true
+ ?line ?match({noreply, {?NO_EXIT, state}},
+ corba:handle_cast(wrong_mod, foo_1w, [],
+ {?NO_EXIT, state}, [], false)),
+ %% Handle_info - stay-alive == false.
+ ?line ?match({'EXIT', _},
+ corba:handle_info(wrong_mod, "info", {?DO_EXIT, state})),
+
+ %% Handle_info - stay-alive == true.
+ ?line ?match({noreply, {?NO_EXIT, state}},
+ corba:handle_info(wrong_mod, "info", {?NO_EXIT, state})),
+ ok.
+
+callback_function_api(doc) -> ["Function callbak API tests", ""];
+callback_function_api(suite) -> [];
+callback_function_api(_) ->
+ %% Handle_call - stay-alive == false
+ ?line ?match({'EXIT', {undef,_}},
+ corba:handle_call(?MODULE, bad_function, [],
+ {?DO_EXIT, state}, [], false, false)),
+ %% Handle_call - stay-alive == true
+ ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
+ corba:handle_call(?MODULE, bad_function, [],
+ {?NO_EXIT, state}, [], false, false)),
+ %% Handle_cast - stay-alive == false
+ ?line ?match({'EXIT', {undef,_}},
+ corba:handle_cast(?MODULE, bad_function, [],
+ {?DO_EXIT, state}, [], false)),
+ %% Handle_cast - stay-alive == true
+ ?line ?match({noreply, {?NO_EXIT, state}},
+ corba:handle_cast(?MODULE, bad_function, [],
+ {?NO_EXIT, state}, [], false)),
+ %% Handle_info - stay-alive == false. Note, we cannot use ?MODULE here.
+ ?line ?match({'EXIT', _},
+ corba:handle_info(corba, "info", {?DO_EXIT, state})),
+
+ %% Handle_info - stay-alive == true. Note, we cannot use ?MODULE here.
+ ?line ?match({noreply, {?NO_EXIT, state}},
+ corba:handle_info(corba, "info", {?NO_EXIT, state})),
+ ok.
+
+callback_precond_api(doc) -> ["Precond callbak API tests", ""];
+callback_precond_api(suite) -> [];
+callback_precond_api(_) ->
+ %% Handle_call - stay-alive == false
+ ?line ?match({'EXIT', _},
+ corba:handle_call(?MODULE, foo, [],
+ {?DO_EXIT, state}, [], false, false, {wrong_mod, precond},
+ {?MODULE, postcond}, ?MODULE)),
+ %% Handle_call - stay-alive == false
+ ?line ?match({'EXIT', _},
+ corba:handle_call(?MODULE, foo, [],
+ {?DO_EXIT, state}, [], false, false, {?MODULE, bad_precond},
+ {?MODULE, postcond}, ?MODULE)),
+ %% Handle_call - stay-alive == true
+ ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
+ corba:handle_call(?MODULE, foo, [],
+ {?NO_EXIT, state}, [], false, false, {wrong_mod, precond},
+ {?MODULE, postcond}, ?MODULE)),
+ %% Handle_call - stay-alive == true
+ ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
+ corba:handle_call(?MODULE, foo, [],
+ {?NO_EXIT, state}, [], false, false, {?MODULE, bad_precond},
+ {?MODULE, postcond}, ?MODULE)),
+ %% Handle_cast - stay-alive == false
+ ?line ?match({'EXIT', _},
+ corba:handle_cast(?MODULE, foo_1w, [],
+ {?DO_EXIT, state}, [], false, {wrong_mod, precond},
+ {?MODULE, postcond}, ?MODULE)),
+ %% Handle_cast - stay-alive == false
+ ?line ?match({'EXIT', _},
+ corba:handle_cast(?MODULE, foo_1w, [],
+ {?DO_EXIT, state}, [], false, {?MODULE, bad_precond},
+ {?MODULE, postcond}, ?MODULE)),
+ %% Handle_cast - stay-alive == true
+ ?line ?match({noreply, {?NO_EXIT, state}},
+ corba:handle_cast(?MODULE, foo_1w, [],
+ {?NO_EXIT, state}, [], false, {wrong_mod, precond},
+ {?MODULE, postcond}, ?MODULE)),
+ %% Handle_cast - stay-alive == true
+ ?line ?match({noreply, {?NO_EXIT, state}},
+ corba:handle_cast(?MODULE, foo_1w, [],
+ {?NO_EXIT, state}, [], false, {?MODULE, bad_precond},
+ {?MODULE, postcond}, ?MODULE)),
+ ok.
+
+
+callback_postcond_api(doc) -> ["Postcond callbak API tests", ""];
+callback_postcond_api(suite) -> [];
+callback_postcond_api(_) ->
+ %% Handle_call - stay-alive == false
+ ?line ?match({'EXIT', _},
+ corba:handle_call(?MODULE, foo, [],
+ {?DO_EXIT, state}, [], false, false, {?MODULE, precond},
+ {wrong_mod, postcond}, ?MODULE)),
+ %% Handle_call - stay-alive == false
+ ?line ?match({'EXIT', _},
+ corba:handle_call(?MODULE, foo, [],
+ {?DO_EXIT, state}, [], false, false, {?MODULE, precond},
+ {?MODULE, bad_postcond}, ?MODULE)),
+ %% Handle_call - stay-alive == true
+ ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
+ corba:handle_call(?MODULE, foo, [],
+ {?NO_EXIT, state}, [], false, false, {?MODULE, precond},
+ {wrong_mod, postcond}, ?MODULE)),
+ %% Handle_call - stay-alive == true
+ ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
+ corba:handle_call(?MODULE, foo, [],
+ {?NO_EXIT, state}, [], false, false, {?MODULE, precond},
+ {?MODULE, bad_postcond}, ?MODULE)),
+ %% Handle_cast - stay-alive == false
+ ?line ?match({'EXIT', _},
+ corba:handle_cast(?MODULE, foo_1w, [],
+ {?DO_EXIT, state}, [], false, {?MODULE, precond},
+ {wrong_mod, postcond}, ?MODULE)),
+ %% Handle_cast - stay-alive == false
+ ?line ?match({'EXIT', _},
+ corba:handle_cast(?MODULE, foo_1w, [],
+ {?DO_EXIT, state}, [], false, {?MODULE, precond},
+ {?MODULE, bad_postcond}, ?MODULE)),
+ %% Handle_cast - stay-alive == true
+ ?line ?match({noreply, {?NO_EXIT, state}},
+ corba:handle_cast(?MODULE, foo_1w, [],
+ {?NO_EXIT, state}, [], false, {?MODULE, precond},
+ {wrong_mod, postcond}, ?MODULE)),
+ %% Handle_cast - stay-alive == true
+ ?line ?match({noreply, {?NO_EXIT, state}},
+ corba:handle_cast(?MODULE, foo_1w, [],
+ {?NO_EXIT, state}, [], false, {?MODULE, precond},
+ {?MODULE, bad_postcond}, ?MODULE)),
+ ok.
+
+
+callback_exit_api(doc) -> ["Callbak exit API tests", ""];
+callback_exit_api(suite) -> [];
+callback_exit_api(_) ->
+ %% Handle_call - stay-alive == false
+ ?line ?match({'EXIT', _},
+ corba:handle_call(?MODULE, foo, [],
+ {?DO_EXIT, exit}, [], false, false)),
+ %% Handle_call - stay-alive == true
+ ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
+ corba:handle_call(?MODULE, foo, [],
+ {?NO_EXIT, exit}, [], false, false)),
+ %% Handle_cast - stay-alive == false
+ ?line ?match({'EXIT', _},
+ corba:handle_cast(?MODULE, foo_1w, [],
+ {?DO_EXIT, exit}, [], false)),
+ %% Handle_cast - stay-alive == true
+ ?line ?match({noreply, {?NO_EXIT, exit}},
+ corba:handle_cast(?MODULE, foo_1w, [],
+ {?NO_EXIT, exit}, [], false)),
+ %% Handle_info - stay-alive == false
+ ?line ?match({'EXIT', _},
+ corba:handle_info(?MODULE, "info", {?DO_EXIT, exit})),
+
+ %% Handle_info - stay-alive == true
+ ?line ?match({noreply, {?NO_EXIT, exit}},
+ corba:handle_info(?MODULE, "info", {?NO_EXIT, exit})),
+ ok.
+
+
+callback_badarith_api(doc) -> ["callbak badarith API tests", ""];
+callback_badarith_api(suite) -> [];
+callback_badarith_api(_) ->
+ %% Handle_call - stay-alive == false
+ ?line ?match({'EXIT', _},
+ corba:handle_call(?MODULE, foo, [],
+ {?DO_EXIT, badarith}, [], false, false)),
+ %% Handle_call - stay-alive == true
+ ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
+ corba:handle_call(?MODULE, foo, [],
+ {?NO_EXIT, badarith}, [], false, false)),
+ %% Handle_cast - stay-alive == false
+ ?line ?match({'EXIT', _},
+ corba:handle_cast(?MODULE, foo_1w, [],
+ {?DO_EXIT, badarith}, [], false)),
+ %% Handle_cast - stay-alive == true
+ ?line ?match({noreply, {?NO_EXIT, badarith}},
+ corba:handle_cast(?MODULE, foo_1w, [],
+ {?NO_EXIT, badarith}, [], false)),
+ %% Handle_info - stay-alive == false
+ ?line ?match({'EXIT', _},
+ corba:handle_info(?MODULE, "info", {?DO_EXIT, badarith})),
+
+ %% Handle_info - stay-alive == true
+ ?line ?match({noreply, {?NO_EXIT, badarith}},
+ corba:handle_info(?MODULE, "info", {?NO_EXIT, badarith})),
+ ok.
+
+callback_case_clause_api(doc) -> ["callbak case_clause API tests", ""];
+callback_case_clause_api(suite) -> [];
+callback_case_clause_api(_) ->
+ %% Handle_call - stay-alive == false
+ ?line ?match({'EXIT', _},
+ corba:handle_call(?MODULE, foo, [],
+ {?DO_EXIT, case_clause}, [], false, false)),
+ %% Handle_call - stay-alive == true
+ ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
+ corba:handle_call(?MODULE, foo, [],
+ {?NO_EXIT, case_clause}, [], false, false)),
+ %% Handle_cast - stay-alive == false
+ ?line ?match({'EXIT', _},
+ corba:handle_cast(?MODULE, foo_1w, [],
+ {?DO_EXIT, case_clause}, [], false)),
+ %% Handle_cast - stay-alive == true
+ ?line ?match({noreply, {?NO_EXIT, case_clause}},
+ corba:handle_cast(?MODULE, foo_1w, [],
+ {?NO_EXIT, case_clause}, [], false)),
+ %% Handle_info - stay-alive == false
+ ?line ?match({'EXIT', _},
+ corba:handle_info(?MODULE, "info", {?DO_EXIT, case_clause})),
+
+ %% Handle_info - stay-alive == true
+ ?line ?match({noreply, {?NO_EXIT, case_clause}},
+ corba:handle_info(?MODULE, "info", {?NO_EXIT, case_clause})),
+ ok.
+
+callback_function_clause_api(doc) -> ["callbak function_clause API tests", ""];
+callback_function_clause_api(suite) -> [];
+callback_function_clause_api(_) ->
+ %% Handle_call - stay-alive == false
+ ?line ?match({'EXIT', _},
+ corba:handle_call(?MODULE, foo, [],
+ {?DO_EXIT, function_clause}, [], false, false)),
+ %% Handle_call - stay-alive == true
+ ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
+ corba:handle_call(?MODULE, foo, [],
+ {?NO_EXIT, function_clause}, [], false, false)),
+ %% Handle_cast - stay-alive == false
+ ?line ?match({'EXIT', _},
+ corba:handle_cast(?MODULE, foo_1w, [],
+ {?DO_EXIT, function_clause}, [], false)),
+ %% Handle_cast - stay-alive == true
+ ?line ?match({noreply, {?NO_EXIT, function_clause}},
+ corba:handle_cast(?MODULE, foo_1w, [],
+ {?NO_EXIT, function_clause}, [], false)),
+ %% Handle_info - stay-alive == false
+ ?line ?match({'EXIT', _},
+ corba:handle_info(?MODULE, "info", {?DO_EXIT, function_clause})),
+ %% Handle_info - stay-alive == true
+ ?line ?match({noreply, {?NO_EXIT, function_clause}},
+ corba:handle_info(?MODULE, "info", {?NO_EXIT, function_clause})),
+ ok.
+
+%% Faked mandatory operations
+init(State) ->
+ evaluate_state(State),
+ {ok, State}.
+terminate(_Reason, State) ->
+ evaluate_state(State),
+ ok.
+
+code_change(_OldVsn, State, _Extra) ->
+ evaluate_state(State),
+ {ok, State}.
+handle_call(_,_, State) ->
+ evaluate_state(State),
+ {noreply, State}.
+handle_cast(_, State) ->
+ evaluate_state(State),
+ {noreply, State}.
+handle_info(_Info, State) ->
+ evaluate_state(State),
+ {noreply, State}.
+
+foo(State) ->
+ evaluate_state(State),
+ {reply, ok, State}.
+foo(State, _Arg) ->
+ evaluate_state(State),
+ {reply, ok, State}.
+
+foo_1w(State) ->
+ evaluate_state(State),
+ {noreply, State}.
+foo_1w(State, _Arg) ->
+ evaluate_state(State),
+ {noreply, State}.
+
+precond(_Module, _Function, _Args) ->
+ ok.
+
+postcond(_Module, _Function, _Args, _Result) ->
+ ok.
+
+evaluate_state(exit) ->
+ exit("exit on purpose");
+evaluate_state(badarith) ->
+ 10 * atom;
+evaluate_state(case_clause) ->
+ case 10 of
+ false ->
+ ok
+ end;
+evaluate_state(module) ->
+ non_existing_module:bar();
+evaluate_state(function) ->
+ ?MODULE:non_existing_function();
+evaluate_state(arity) ->
+ ?MODULE:foo(to, many, arguments);
+evaluate_state(function_clause) ->
+ evaluate_state(incorrect_state);
+evaluate_state(state) ->
+ ok.
+
+%%-----------------------------------------------------------------
+%% Local functions.
+%%-----------------------------------------------------------------
+
+pseudo_calls(0, _) ->
+ ok;
+pseudo_calls(Times, Obj) ->
+ orber_test_server:pseudo_call(Obj),
+ New = Times - 1,
+ pseudo_calls(New, Obj).
+pseudo_casts(0, _) ->
+ ok;
+pseudo_casts(Times, Obj) ->
+ orber_test_server:pseudo_cast(Obj),
+ New = Times - 1,
+ pseudo_casts(New, Obj).
diff --git a/lib/orber/test/csiv2_SUITE.erl b/lib/orber/test/csiv2_SUITE.erl
new file mode 100644
index 0000000000..8103fd81ac
--- /dev/null
+++ b/lib/orber/test/csiv2_SUITE.erl
@@ -0,0 +1,940 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2005-2010. 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(csiv2_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
+-include_lib("orber/src/orber_iiop.hrl").
+-include_lib("orber/src/ifr_objects.hrl").
+-include("idl_output/orber_test_server.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming_NamingContextExt.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming_NamingContext.hrl").
+%%-include_lib("orber/src/OrberCSIv2.hrl").
+
+-define(default_timeout, ?t:minutes(5)).
+
+-define(match(ExpectedRes,Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+-define(REQUEST_ID, 0).
+
+-define(REPLY_FRAG_1, <<71,73,79,80,1,2,2,1,0,0,0,41,0,0,0,?REQUEST_ID,0,0,0,0,0,0,0,1,78,69,79,0,0,0,0,2,0,10,0,0,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,4,49>>).
+%% The fragments are identical for requests and replies.
+-define(FRAG_2, <<71,73,79,80,1,2,2,7,0,0,0,5,0,0,0,?REQUEST_ID,50>>).
+-define(FRAG_3, <<71,73,79,80,1,2,2,7,0,0,0,5,0,0,0,?REQUEST_ID,51>>).
+-define(FRAG_4, <<71,73,79,80,1,2,0,7,0,0,0,5,0,0,0,?REQUEST_ID,0>>).
+
+%% Should X509 DER generated by, for example, OpenSSL
+-define(X509DER,
+ <<42>>).
+
+%% Should X509 PEM generated by, for example, OpenSSL
+-define(X509PEM,
+ <<42>>).
+
+%% IOR exported by VB (CSIv2 activated).
+-define(VB_IOR,
+ #'IOP_IOR'
+ {type_id = "IDL:omg.org/CosNotifyComm/SequencePushConsumer:1.0",
+ profiles =
+ [#'IOP_TaggedProfile'
+ {tag = ?TAG_INTERNET_IOP,
+ profile_data =
+ #'IIOP_ProfileBody_1_1'{
+ iiop_version = #'IIOP_Version'{major = 1,
+ minor = 2},
+ host = "127.0.0.1",
+ port = 0,
+ object_key = [0,86,66,1,0,0,0,24,47,70,77,65,95,67,73,82,80,77,65,78,95,80,79,65,95,83,69,67,85,82,69,0,0,0,0,4,0,0,4,186,0,0,2,10,81,218,65,185],
+ components =
+ [#'IOP_TaggedComponent'{tag = ?TAG_SSL_SEC_TRANS,
+ component_data = #'SSLIOP_SSL'{
+ target_supports = 102,
+ target_requires = 66,
+ port = 49934}},
+ #'IOP_TaggedComponent'{tag = ?TAG_CSI_SEC_MECH_LIST,
+ component_data =
+ #'CSIIOP_CompoundSecMechList'{stateful = true,
+ mechanism_list =
+ [#'CSIIOP_CompoundSecMech'
+ {target_requires = 66,
+ transport_mech = #'IOP_TaggedComponent'{
+ tag = ?TAG_TLS_SEC_TRANS,
+ component_data =
+ #'CSIIOP_TLS_SEC_TRANS'{
+ target_supports = 102,
+ target_requires = 66,
+ addresses =
+ [#'CSIIOP_TransportAddress'
+ {host_name = "127.0.0.1",
+ port = 49934}]}},
+ as_context_mech =
+ #'CSIIOP_AS_ContextSec'{
+ target_supports = 0,
+ target_requires = 0,
+ client_authentication_mech = [],
+ target_name = []},
+ sas_context_mech =
+ #'CSIIOP_SAS_ContextSec'{
+ target_supports = 1024,
+ target_requires = 0,
+ privilege_authorities =
+ [#'CSIIOP_ServiceConfiguration'
+ {syntax = 1447174401,
+ name = "Borland"}],
+ supported_naming_mechanisms = [[6,
+ 6,
+ 103,
+ 129,
+ 2,
+ 1,
+ 1,
+ 1]],
+ supported_identity_types = 15}}]}},
+ #'IOP_TaggedComponent'
+ {tag = ?TAG_CODE_SETS,
+ component_data =
+ #'CONV_FRAME_CodeSetComponentInfo'{'ForCharData' =
+ #'CONV_FRAME_CodeSetComponent'{
+ native_code_set = 65537,
+ conversion_code_sets = [83951617]},
+ 'ForWcharData' =
+ #'CONV_FRAME_CodeSetComponent'{
+ native_code_set = 65801,
+ conversion_code_sets = []}}},
+ #'IOP_TaggedComponent'{tag = ?TAG_ORB_TYPE,
+ component_data = 1447645952},
+ #'IOP_TaggedComponent'{tag = 1447645955,
+ component_data = [0,5,7,1,127]}]}}]}).
+
+%% Common basic types
+-define(OID, {2,23,130,1,1,1}).
+
+-define(OCTET_STR, [1,2,3,4]).
+
+-define(BIT_STR, [0,1,0,1,1]).
+
+-define(BOOLEAN, false).
+
+-define(ANY, [19,5,111,116,112,67,65]).
+
+-ifdef(false).
+%% PKIX1Explicit88
+-define(AlgorithmIdentifier,
+ #'AlgorithmIdentifier'{algorithm = ?OID,
+ parameters = ?ANY}).
+
+-define(Validity, #'Validity'{notBefore = {utcTime, "19820102070533.8"},
+ notAfter = {generalTime, "19820102070533.8"}}).
+
+-define(SubjectPublicKeyInfo,
+ #'SubjectPublicKeyInfo'{algorithm = ?AlgorithmIdentifier,
+ subjectPublicKey = ?BIT_STR}).
+
+-define(AttributeTypeAndValue,
+ #'AttributeTypeAndValue'{type = ?OID,
+ value = <<19,11,69,114,105,99,115,115,111,110,32,65,66>>}).
+
+-define(RelativeDistinguishedName, [?AttributeTypeAndValue]).
+
+-define(RDNSequence, [?RelativeDistinguishedName]).
+
+-define(Name, {rdnSequence, ?RDNSequence}).
+
+-define(Version, v3).
+
+-define(CertificateSerialNumber, 1).
+
+-define(UniqueIdentifier, ?BIT_STR).
+
+-define(Extension, #'Extension'{extnID = ?OID,
+ critical = ?BOOLEAN,
+ extnValue = ?OCTET_STR}).
+
+-define(Extensions, [?Extension]).
+
+-define(TBSCertificate,
+ #'TBSCertificate'{version = ?Version,
+ serialNumber = ?CertificateSerialNumber,
+ signature = ?AlgorithmIdentifier,
+ issuer = ?Name,
+ validity = ?Validity,
+ subject = ?Name,
+ subjectPublicKeyInfo = ?SubjectPublicKeyInfo,
+ issuerUniqueID = ?UniqueIdentifier,
+ subjectUniqueID = ?UniqueIdentifier,
+ extensions = ?Extensions}).
+
+-define(Certificate, #'Certificate'{tbsCertificate = ?TBSCertificate,
+ signatureAlgorithm = ?AlgorithmIdentifier,
+ signature = ?BIT_STR}).
+
+%% PKIX1Implicit88
+
+-define(GeneralName, {registeredID, ?OID}).
+
+-define(GeneralNames, [?GeneralName]).
+
+%% PKIXAttributeCertificate
+-define(AttCertValidityPeriod,
+ #'AttCertValidityPeriod'{notBeforeTime = "19820102070533.8",
+ notAfterTime = "19820102070533.8"}).
+
+
+-define(Attribute, #'Attribute'{type = ?OID,
+ values = []}).
+
+-define(Attributes, [?Attribute]).
+
+-define(IssuerSerial, #'IssuerSerial'{issuer = ?GeneralNames,
+ serial = ?CertificateSerialNumber,
+ issuerUID = ?UniqueIdentifier}).
+
+-define(DigestedObjectType, publicKey). %% Enum
+
+-define(ObjectDigestInfo,
+ #'ObjectDigestInfo'{digestedObjectType = ?DigestedObjectType,
+ otherObjectTypeID = ?OID,
+ digestAlgorithm = ?AlgorithmIdentifier,
+ objectDigest = ?BIT_STR}).
+
+-define(V2Form, #'V2Form'{issuerName = ?GeneralNames,
+ baseCertificateID = ?IssuerSerial,
+ objectDigestInfo = ?ObjectDigestInfo}).
+
+-define(AttCertVersion, v2).
+
+-define(Holder, #'Holder'{baseCertificateID = ?IssuerSerial,
+ entityName = ?GeneralNames,
+ objectDigestInfo = ?ObjectDigestInfo}).
+
+-define(AttCertIssuer, {v2Form, ?V2Form}).
+
+-define(AttributeCertificateInfo,
+ #'AttributeCertificateInfo'{version = ?AttCertVersion,
+ holder = ?Holder,
+ issuer = ?AttCertIssuer,
+ signature = ?AlgorithmIdentifier,
+ serialNumber = ?CertificateSerialNumber,
+ attrCertValidityPeriod = ?AttCertValidityPeriod,
+ attributes = ?Attributes,
+ issuerUniqueID = ?UniqueIdentifier,
+ extensions = ?Extensions}).
+
+-define(AttributeCertificate,
+ #'AttributeCertificate'{acinfo = ?AttributeCertificateInfo,
+ signatureAlgorithm = ?AlgorithmIdentifier,
+ signatureValue = ?BIT_STR}).
+
+
+%% OrberCSIv2
+-define(AttributeCertChain,
+ #'AttributeCertChain'{attributeCert = ?AttributeCertificate,
+ certificateChain = ?CertificateChain}).
+
+-define(CertificateChain, [?Certificate]).
+
+-define(VerifyingCertChain, [?Certificate]).
+
+-endif.
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1, cases/0, init_all/1, finish_all/1,
+ init_per_testcase/2, fin_per_testcase/2,
+% code_CertificateChain_api/1,
+% code_AttributeCertChain_api/1,
+% code_VerifyingCertChain_api/1,
+% code_AttributeCertificate_api/1,
+% code_Certificate_api/1,
+% code_TBSCertificate_api/1,
+% code_CertificateSerialNumber_api/1,
+% code_Version_api/1,
+% code_AlgorithmIdentifier_api/1,
+% code_Name_api/1,
+% code_RDNSequence_api/1,
+% code_RelativeDistinguishedName_api/1,
+% code_AttributeTypeAndValue_api/1,
+% code_Attribute_api/1,
+% code_Validity_api/1,
+% code_SubjectPublicKeyInfo_api/1,
+% code_UniqueIdentifier_api/1,
+% code_Extensions_api/1,
+% code_Extension_api/1,
+% code_AttributeCertificateInfo_api/1,
+% code_AttCertVersion_api/1,
+% code_Holder_api/1,
+% code_AttCertIssuer_api/1,
+% code_AttCertValidityPeriod_api/1,
+% code_V2Form_api/1,
+% code_IssuerSerial_api/1,
+% code_ObjectDigestInfo_api/1,
+% code_OpenSSL509_api/1,
+ ssl_server_peercert_api/1,
+ ssl_client_peercert_api/1]).
+
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-export([fake_server_ORB/5]).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["API tests for multi orber interfaces using CSIv2"];
+all(suite) -> {req,
+ [mnesia],
+ {conf, init_all, cases(), finish_all}}.
+
+%% NOTE - the fragment test cases must bu first since we explicitly set a request
+%% id. Otherwise, the request-id counter would be increased and we cannot know
+%% what it is.
+cases() ->
+ [
+% code_CertificateChain_api,
+% code_AttributeCertChain_api,
+% code_VerifyingCertChain_api,
+% code_AttributeCertificate_api,
+% code_Certificate_api,
+% code_TBSCertificate_api,
+% code_CertificateSerialNumber_api,
+% code_Version_api,
+% code_AlgorithmIdentifier_api,
+% code_Name_api,
+% code_RDNSequence_api,
+% code_RelativeDistinguishedName_api,
+% code_AttributeTypeAndValue_api,
+% code_Attribute_api,
+% code_Validity_api,
+% code_SubjectPublicKeyInfo_api,
+% code_UniqueIdentifier_api,
+% code_Extensions_api,
+% code_Extension_api,
+% code_AttributeCertificateInfo_api,
+% code_AttCertVersion_api,
+% code_Holder_api,
+% code_AttCertIssuer_api,
+% code_AttCertValidityPeriod_api,
+% code_V2Form_api,
+% code_IssuerSerial_api,
+% code_ObjectDigestInfo_api,
+% code_OpenSSL509_api,
+ ssl_server_peercert_api,
+ ssl_client_peercert_api].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+
+init_per_testcase(_Case, Config) ->
+ Path = code:which(?MODULE),
+ code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
+ Dog=test_server:timetrap(?default_timeout),
+ orber:jump_start(0),
+ oe_orber_test_server:oe_register(),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ oe_orber_test_server:oe_unregister(),
+ orber:jump_stop(),
+ Path = code:which(?MODULE),
+ code:del_path(filename:join(filename:dirname(Path), "idl_output")),
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+init_all(Config) ->
+ if
+ is_list(Config) ->
+ Config;
+ true ->
+ exit("Config not a list")
+ end.
+
+finish_all(Config) ->
+ Config.
+
+%%-----------------------------------------------------------------
+%% API tests for ORB to ORB, no security
+%%-----------------------------------------------------------------
+
+
+%%-----------------------------------------------------------------
+%% Encode and decode ASN.1 X509
+%%-----------------------------------------------------------------
+
+-ifdef(false).
+%% OrberCSIv2
+code_CertificateChain_api(doc) -> ["Code CertificateChain"];
+code_CertificateChain_api(suite) -> [];
+code_CertificateChain_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _},
+ 'OrberCSIv2':encode('CertificateChain', ?CertificateChain)),
+ ?match({ok, [#'Certificate'{}]},
+ 'OrberCSIv2':decode('CertificateChain', list_to_binary(Enc))),
+ ok.
+
+code_AttributeCertChain_api(doc) -> ["Code AttributeCertChain"];
+code_AttributeCertChain_api(suite) -> [];
+code_AttributeCertChain_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _},
+ 'OrberCSIv2':encode('AttributeCertChain', ?AttributeCertChain)),
+ ?match({ok, #'AttributeCertChain'{}},
+ 'OrberCSIv2':decode('AttributeCertChain', list_to_binary(Enc))),
+ ok.
+
+code_VerifyingCertChain_api(doc) -> ["Code VerifyingCertChain"];
+code_VerifyingCertChain_api(suite) -> [];
+code_VerifyingCertChain_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _},
+ 'OrberCSIv2':encode('VerifyingCertChain', ?VerifyingCertChain)),
+ ?match({ok, [#'Certificate'{}]},
+ 'OrberCSIv2':decode('VerifyingCertChain', list_to_binary(Enc))),
+ ok.
+
+%% PKIXAttributeCertificate
+code_AttributeCertificate_api(doc) -> ["Code AttributeCertificate"];
+code_AttributeCertificate_api(suite) -> [];
+code_AttributeCertificate_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _},
+ 'OrberCSIv2':encode('AttributeCertificate', ?AttributeCertificate)),
+ ?match({ok, #'AttributeCertificate'{}},
+ 'OrberCSIv2':decode('AttributeCertificate', list_to_binary(Enc))),
+ ok.
+
+code_AttributeCertificateInfo_api(doc) -> ["Code AttributeCertificateInfo"];
+code_AttributeCertificateInfo_api(suite) -> [];
+code_AttributeCertificateInfo_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _},
+ 'OrberCSIv2':encode('AttributeCertificateInfo', ?AttributeCertificateInfo)),
+ ?match({ok, #'AttributeCertificateInfo'{}},
+ 'OrberCSIv2':decode('AttributeCertificateInfo', list_to_binary(Enc))),
+ ok.
+
+code_AttCertVersion_api(doc) -> ["Code AttCertVersion"];
+code_AttCertVersion_api(suite) -> [];
+code_AttCertVersion_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _},
+ 'OrberCSIv2':encode('AttCertVersion', ?AttCertVersion)),
+ ?match({ok, ?AttCertVersion},
+ 'OrberCSIv2':decode('AttCertVersion', list_to_binary(Enc))),
+ ok.
+
+code_Holder_api(doc) -> ["Code Holder"];
+code_Holder_api(suite) -> [];
+code_Holder_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _},
+ 'OrberCSIv2':encode('Holder', ?Holder)),
+ ?match({ok, #'Holder'{}},
+ 'OrberCSIv2':decode('Holder', list_to_binary(Enc))),
+ ok.
+
+code_AttCertIssuer_api(doc) -> ["Code AttCertIssuer"];
+code_AttCertIssuer_api(suite) -> [];
+code_AttCertIssuer_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _},
+ 'OrberCSIv2':encode('AttCertIssuer', ?AttCertIssuer)),
+ ?match({ok, {v2Form, _}},
+ 'OrberCSIv2':decode('AttCertIssuer', list_to_binary(Enc))),
+ ok.
+
+code_AttCertValidityPeriod_api(doc) -> ["Code AttCertValidityPeriod"];
+code_AttCertValidityPeriod_api(suite) -> [];
+code_AttCertValidityPeriod_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _}, 'OrberCSIv2':encode('AttCertValidityPeriod', ?AttCertValidityPeriod)),
+ ?match({ok, #'AttCertValidityPeriod'{}},
+ 'OrberCSIv2':decode('AttCertValidityPeriod', list_to_binary(Enc))),
+ ok.
+
+code_V2Form_api(doc) -> ["Code V2Form"];
+code_V2Form_api(suite) -> [];
+code_V2Form_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _},
+ 'OrberCSIv2':encode('V2Form', ?V2Form)),
+ ?match({ok, #'V2Form'{}},
+ 'OrberCSIv2':decode('V2Form', list_to_binary(Enc))),
+ ok.
+
+code_IssuerSerial_api(doc) -> ["Code IssuerSerial"];
+code_IssuerSerial_api(suite) -> [];
+code_IssuerSerial_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _},
+ 'OrberCSIv2':encode('IssuerSerial', ?IssuerSerial)),
+ ?match({ok, #'IssuerSerial'{}},
+ 'OrberCSIv2':decode('IssuerSerial', list_to_binary(Enc))),
+ ok.
+
+code_ObjectDigestInfo_api(doc) -> ["Code ObjectDigestInfo"];
+code_ObjectDigestInfo_api(suite) -> [];
+code_ObjectDigestInfo_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _},
+ 'OrberCSIv2':encode('ObjectDigestInfo', ?ObjectDigestInfo)),
+ ?match({ok, #'ObjectDigestInfo'{}},
+ 'OrberCSIv2':decode('ObjectDigestInfo', list_to_binary(Enc))),
+ ok.
+
+%% PKIX1Explicit88
+code_Certificate_api(doc) -> ["Code Certificate"];
+code_Certificate_api(suite) -> [];
+code_Certificate_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _},
+ 'OrberCSIv2':encode('Certificate', ?Certificate)),
+ ?match({ok, #'Certificate'{}},
+ 'OrberCSIv2':decode('Certificate', list_to_binary(Enc))),
+ ok.
+
+code_TBSCertificate_api(doc) -> ["Code TBSCertificate"];
+code_TBSCertificate_api(suite) -> [];
+code_TBSCertificate_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _},
+ 'OrberCSIv2':encode('TBSCertificate', ?TBSCertificate)),
+ ?match({ok, #'TBSCertificate'{}},
+ 'OrberCSIv2':decode('TBSCertificate', list_to_binary(Enc))),
+ ok.
+
+code_CertificateSerialNumber_api(doc) -> ["Code CertificateSerialNumber"];
+code_CertificateSerialNumber_api(suite) -> [];
+code_CertificateSerialNumber_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _},
+ 'OrberCSIv2':encode('CertificateSerialNumber', ?CertificateSerialNumber)),
+ ?match({ok, ?CertificateSerialNumber},
+ 'OrberCSIv2':decode('CertificateSerialNumber', list_to_binary(Enc))),
+ ok.
+
+code_Version_api(doc) -> ["Code Version"];
+code_Version_api(suite) -> [];
+code_Version_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _}, 'OrberCSIv2':encode('Version', ?Version)),
+ ?match({ok, ?Version}, 'OrberCSIv2':decode('Version', list_to_binary(Enc))),
+ ok.
+
+code_AlgorithmIdentifier_api(doc) -> ["Code AlgorithmIdentifier"];
+code_AlgorithmIdentifier_api(suite) -> [];
+code_AlgorithmIdentifier_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _}, 'OrberCSIv2':encode('AlgorithmIdentifier', ?AlgorithmIdentifier)),
+ ?match({ok, #'AlgorithmIdentifier'{}},
+ 'OrberCSIv2':decode('AlgorithmIdentifier', list_to_binary(Enc))),
+ ok.
+
+code_Name_api(doc) -> ["Code Name"];
+code_Name_api(suite) -> [];
+code_Name_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _}, 'OrberCSIv2':encode('Name', ?Name)),
+ ?match({ok, {rdnSequence,_}},
+ 'OrberCSIv2':decode('Name', list_to_binary(Enc))),
+ ok.
+
+code_RDNSequence_api(doc) -> ["Code RDNSequence"];
+code_RDNSequence_api(suite) -> [];
+code_RDNSequence_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _}, 'OrberCSIv2':encode('RDNSequence', ?RDNSequence)),
+ ?match({ok, [[#'AttributeTypeAndValue'{}]]},
+ 'OrberCSIv2':decode('RDNSequence', list_to_binary(Enc))),
+ ok.
+
+code_RelativeDistinguishedName_api(doc) -> ["Code RelativeDistinguishedName"];
+code_RelativeDistinguishedName_api(suite) -> [];
+code_RelativeDistinguishedName_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _}, 'OrberCSIv2':encode('RelativeDistinguishedName', ?RelativeDistinguishedName)),
+ ?match({ok, [#'AttributeTypeAndValue'{}]},
+ 'OrberCSIv2':decode('RelativeDistinguishedName', list_to_binary(Enc))),
+ ok.
+
+code_AttributeTypeAndValue_api(doc) -> ["Code AttributeTypeAndValue"];
+code_AttributeTypeAndValue_api(suite) -> [];
+code_AttributeTypeAndValue_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _}, 'OrberCSIv2':encode('AttributeTypeAndValue', ?AttributeTypeAndValue)),
+ ?match({ok, #'AttributeTypeAndValue'{}},
+ 'OrberCSIv2':decode('AttributeTypeAndValue', list_to_binary(Enc))),
+ ok.
+
+code_Attribute_api(doc) -> ["Code Attribute"];
+code_Attribute_api(suite) -> [];
+code_Attribute_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _}, 'OrberCSIv2':encode('Attribute', ?Attribute)),
+ ?match({ok, #'Attribute'{}},
+ 'OrberCSIv2':decode('Attribute', list_to_binary(Enc))),
+ ok.
+
+code_Validity_api(doc) -> ["Code Validity"];
+code_Validity_api(suite) -> [];
+code_Validity_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _}, 'OrberCSIv2':encode('Validity', ?Validity)),
+ ?match({ok, #'Validity'{}},
+ 'OrberCSIv2':decode('Validity', list_to_binary(Enc))),
+ ok.
+
+code_SubjectPublicKeyInfo_api(doc) -> ["Code SubjectPublicKeyInfo"];
+code_SubjectPublicKeyInfo_api(suite) -> [];
+code_SubjectPublicKeyInfo_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _}, 'OrberCSIv2':encode('SubjectPublicKeyInfo', ?SubjectPublicKeyInfo)),
+ ?match({ok, #'SubjectPublicKeyInfo'{}},
+ 'OrberCSIv2':decode('SubjectPublicKeyInfo', list_to_binary(Enc))),
+ ok.
+
+code_UniqueIdentifier_api(doc) -> ["Code UniqueIdentifier"];
+code_UniqueIdentifier_api(suite) -> [];
+code_UniqueIdentifier_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _}, 'OrberCSIv2':encode('UniqueIdentifier', ?UniqueIdentifier)),
+ ?match({ok, _}, 'OrberCSIv2':decode('UniqueIdentifier', list_to_binary(Enc))),
+ ok.
+
+code_Extensions_api(doc) -> ["Code Extensions"];
+code_Extensions_api(suite) -> [];
+code_Extensions_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _}, 'OrberCSIv2':encode('Extensions', ?Extensions)),
+ ?match({ok, [#'Extension'{}]},
+ 'OrberCSIv2':decode('Extensions', list_to_binary(Enc))),
+ ok.
+
+code_Extension_api(doc) -> ["Code Extension"];
+code_Extension_api(suite) -> [];
+code_Extension_api(_Config) ->
+ {ok, Enc} =
+ ?match({ok, _}, 'OrberCSIv2':encode('Extension', ?Extension)),
+ ?match({ok, #'Extension'{}},
+ 'OrberCSIv2':decode('Extension', list_to_binary(Enc))),
+ ok.
+
+%% OpenSSL generated x509 Certificate
+code_OpenSSL509_api(doc) -> ["Code OpenSSL generated x509 Certificate"];
+code_OpenSSL509_api(suite) -> [];
+code_OpenSSL509_api(_Config) ->
+ {ok, Cert} =
+ ?match({ok, #'Certificate'{}},
+ 'OrberCSIv2':decode('Certificate', ?X509DER)),
+ AttrCertChain = #'AttributeCertChain'{attributeCert = ?AttributeCertificate,
+ certificateChain = [Cert]},
+ {ok, EAttrCertChain} =
+ ?match({ok, _}, 'OrberCSIv2':encode('AttributeCertChain', AttrCertChain)),
+ ?match({ok, #'AttributeCertChain'{}},
+ 'OrberCSIv2':decode('AttributeCertChain', list_to_binary(EAttrCertChain))),
+ ok.
+
+-endif.
+
+%%-----------------------------------------------------------------
+%% Test ssl:peercert
+%%-----------------------------------------------------------------
+ssl_server_peercert_api(doc) -> ["Test ssl:peercert (server side)"];
+ssl_server_peercert_api(suite) -> [];
+ssl_server_peercert_api(_Config) ->
+ case os:type() of
+ vxworks ->
+ {skipped, "No SSL-support for VxWorks."};
+ _ ->
+ Options = orber_test_lib:get_options(iiop_ssl, server,
+ 2, [{iiop_ssl_port, 0}]),
+ {ok, ServerNode, ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node(Options)),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_ssl_port, []),
+ SSLOptions = orber_test_lib:get_options(ssl, client),
+ {ok, Socket} =
+ ?match({ok, _}, fake_client_ORB(ssl, ServerHost, ServerPort, SSLOptions)),
+ {ok, _PeerCert} = ?match({ok, _}, orber_socket:peercert(ssl, Socket)),
+ ?match({ok, {rdnSequence, _}}, orber_socket:peercert(ssl, Socket, [pkix, subject])),
+ ?match({ok, {rdnSequence, _}}, orber_socket:peercert(ssl, Socket, [ssl, subject])),
+% ?match({ok, #'Certificate'{}},
+% 'OrberCSIv2':decode('Certificate', PeerCert)),
+ destroy_fake_ORB(ssl, Socket),
+ ok
+ end.
+
+ssl_client_peercert_api(doc) -> ["Test ssl:peercert (client side)"];
+ssl_client_peercert_api(suite) -> [];
+ssl_client_peercert_api(_Config) ->
+ case os:type() of
+ vxworks ->
+ {skipped, "No SSL-support for VxWorks."};
+ _ ->
+ Options = orber_test_lib:get_options(iiop_ssl, client,
+ 2, [{iiop_ssl_port, 0}]),
+ {ok, ClientNode, _ClientHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node(Options)),
+ crypto:start(),
+ ssl:start(),
+ ssl:seed("testing"),
+ SSLOptions = orber_test_lib:get_options(ssl, server),
+ {ok, LSock} = ?match({ok, _}, ssl:listen(0, SSLOptions)),
+ {ok, {_Address, LPort}} = ?match({ok, {_, _}}, ssl:sockname(LSock)),
+ IOR = ?match({'IOP_IOR',_,_},
+ iop_ior:create_external({1, 2}, "IDL:FAKE:1.0",
+ "localhost", 6004, "FAKE",
+ [#'IOP_TaggedComponent'
+ {tag=?TAG_SSL_SEC_TRANS,
+ component_data=#'SSLIOP_SSL'
+ {target_supports = 2,
+ target_requires = 2,
+ port = LPort}}])),
+ spawn(orber_test_lib, remote_apply,
+ [ClientNode, corba_object, non_existent, [IOR]]),
+ {ok, Socket} = ?match({ok, _}, ssl:transport_accept(LSock)),
+ ?match(ok, ssl:ssl_accept(Socket)),
+
+ {ok, _PeerCert} = ?match({ok, _}, orber_socket:peercert(ssl, Socket)),
+ ?match({ok, {rdnSequence, _}}, orber_socket:peercert(ssl, Socket, [pkix, subject])),
+ ?match({ok, {rdnSequence, _}}, orber_socket:peercert(ssl, Socket, [ssl, subject])),
+% ?match({ok, #'Certificate'{}},
+% 'OrberCSIv2':decode('Certificate', PeerCert)),
+ ssl:close(Socket),
+ ssl:close(LSock),
+ ssl:stop(),
+ ok
+ end.
+
+%%-----------------------------------------------------------------
+%% Local functions.
+%%-----------------------------------------------------------------
+-ifdef(false).
+%% Not used yet.
+context_test(Obj) ->
+ IDToken1 = #'CSI_IdentityToken'{label = ?CSI_IdentityTokenType_ITTAbsent,
+ value = true},
+ IDToken2 = #'CSI_IdentityToken'{label = ?CSI_IdentityTokenType_ITTAnonymous,
+ value = false},
+ IDToken3 = #'CSI_IdentityToken'{label = ?CSI_IdentityTokenType_ITTPrincipalName,
+ value = [0,255]},
+ IDToken4 = #'CSI_IdentityToken'{label = ?CSI_IdentityTokenType_ITTX509CertChain,
+ value = [1,255]},
+ IDToken5 = #'CSI_IdentityToken'{label = ?CSI_IdentityTokenType_ITTDistinguishedName,
+ value = [2,255]},
+ IDToken6 = #'CSI_IdentityToken'{label = ?ULONGMAX,
+ value = [3,255]},
+
+ MTEstablishContext1 = #'CSI_SASContextBody'
+ {label = ?CSI_MsgType_MTEstablishContext,
+ value = #'CSI_EstablishContext'{client_context_id = ?ULONGLONGMAX,
+ authorization_token =
+ [#'CSI_AuthorizationElement'
+ {the_type = ?ULONGMAX,
+ the_element = [0,255]}],
+ identity_token = IDToken1,
+ client_authentication_token = [1, 255]}},
+ MTEstablishContext2 = #'CSI_SASContextBody'
+ {label = ?CSI_MsgType_MTEstablishContext,
+ value = #'CSI_EstablishContext'{client_context_id = ?ULONGLONGMAX,
+ authorization_token =
+ [#'CSI_AuthorizationElement'
+ {the_type = ?ULONGMAX,
+ the_element = [0,255]}],
+ identity_token = IDToken2,
+ client_authentication_token = [1, 255]}},
+ MTEstablishContext3 = #'CSI_SASContextBody'
+ {label = ?CSI_MsgType_MTEstablishContext,
+ value = #'CSI_EstablishContext'{client_context_id = ?ULONGLONGMAX,
+ authorization_token =
+ [#'CSI_AuthorizationElement'
+ {the_type = ?ULONGMAX,
+ the_element = [0,255]}],
+ identity_token = IDToken3,
+ client_authentication_token = [1, 255]}},
+ MTEstablishContext4 = #'CSI_SASContextBody'
+ {label = ?CSI_MsgType_MTEstablishContext,
+ value = #'CSI_EstablishContext'{client_context_id = ?ULONGLONGMAX,
+ authorization_token =
+ [#'CSI_AuthorizationElement'
+ {the_type = ?ULONGMAX,
+ the_element = [0,255]}],
+ identity_token = IDToken4,
+ client_authentication_token = [1, 255]}},
+ MTEstablishContext5 = #'CSI_SASContextBody'
+ {label = ?CSI_MsgType_MTEstablishContext,
+ value = #'CSI_EstablishContext'{client_context_id = ?ULONGLONGMAX,
+ authorization_token =
+ [#'CSI_AuthorizationElement'
+ {the_type = ?ULONGMAX,
+ the_element = [0,255]}],
+ identity_token = IDToken5,
+ client_authentication_token = [1, 255]}},
+ MTEstablishContext6 = #'CSI_SASContextBody'
+ {label = ?CSI_MsgType_MTEstablishContext,
+ value = #'CSI_EstablishContext'{client_context_id = ?ULONGLONGMAX,
+ authorization_token =
+ [#'CSI_AuthorizationElement'
+ {the_type = ?ULONGMAX,
+ the_element = [0,255]}],
+ identity_token = IDToken6,
+ client_authentication_token = [1, 255]}},
+ MTCompleteEstablishContext = #'CSI_SASContextBody'
+ {label = ?CSI_MsgType_MTCompleteEstablishContext,
+ value = #'CSI_CompleteEstablishContext'{client_context_id = ?ULONGLONGMAX,
+ context_stateful = false,
+ final_context_token = [1, 255]}},
+ MTContextError = #'CSI_SASContextBody'
+ {label = ?CSI_MsgType_MTContextError,
+ value = #'CSI_ContextError'{client_context_id = ?ULONGLONGMAX,
+ major_status = 1,
+ minor_status = 2,
+ error_token = [2,255]}},
+ MTMessageInContext = #'CSI_SASContextBody'
+ {label = ?CSI_MsgType_MTMessageInContext,
+ value = #'CSI_MessageInContext'{client_context_id = ?ULONGLONGMAX,
+ discard_context = true}},
+ Ctx = [#'IOP_ServiceContext'{context_id=?IOP_SecurityAttributeService,
+ context_data = MTEstablishContext1},
+ #'IOP_ServiceContext'{context_id=?IOP_SecurityAttributeService,
+ context_data = MTEstablishContext2},
+ #'IOP_ServiceContext'{context_id=?IOP_SecurityAttributeService,
+ context_data = MTEstablishContext3},
+ #'IOP_ServiceContext'{context_id=?IOP_SecurityAttributeService,
+ context_data = MTEstablishContext4},
+ #'IOP_ServiceContext'{context_id=?IOP_SecurityAttributeService,
+ context_data = MTEstablishContext5},
+ #'IOP_ServiceContext'{context_id=?IOP_SecurityAttributeService,
+ context_data = MTEstablishContext6},
+ #'IOP_ServiceContext'{context_id=?IOP_SecurityAttributeService,
+ context_data = MTCompleteEstablishContext},
+ #'IOP_ServiceContext'{context_id=?IOP_SecurityAttributeService,
+ context_data = MTContextError},
+ #'IOP_ServiceContext'{context_id=?IOP_SecurityAttributeService,
+ context_data = MTMessageInContext}],
+ ?line ?match(ok, orber_test_server:testing_iiop_context(Obj, [{context, Ctx}])).
+
+
+fake_server_ORB(Type, Port, Options) ->
+ start_ssl(Type),
+ {ok, ListenSocket, NewPort} =
+ orber_socket:listen(Type, Port,
+ [{active, false}|Options]),
+ Socket = orber_socket:accept(Type, ListenSocket),
+ orber_socket:post_accept(Type, Socket),
+ {ok, Socket, NewPort}.
+
+-endif.
+
+fake_server_ORB(Type, Port, Options, Action, Data) ->
+ start_ssl(Type),
+ {ok, ListenSocket, _NewPort} =
+ orber_socket:listen(Type, Port, [{active, false}|Options]),
+ Socket = orber_socket:accept(Type, ListenSocket),
+ orber_socket:post_accept(Type, Socket),
+ do_server_action(Type, Socket, Action, Data),
+ orber_socket:close(Type, Socket),
+ ok.
+
+start_ssl(ssl) ->
+ crypto:start(),
+ ssl:start(),
+ ssl:seed("testing");
+start_ssl(_) ->
+ ok.
+
+
+destroy_fake_ORB(ssl, Socket) ->
+ orber_socket:close(ssl, Socket),
+ ssl:stop();
+destroy_fake_ORB(Type, Socket) ->
+ orber_socket:close(Type, Socket).
+
+fake_client_ORB(Type, Host, Port, Options) ->
+ start_ssl(Type),
+ Socket = orber_socket:connect(Type, Host, Port, [{active, false}|Options]),
+ {ok, Socket}.
+
+-ifdef(false).
+%% Not used yet.
+
+fake_client_ORB(Type, Host, Port, Options, Action, Data) ->
+ start_ssl(Type),
+ Socket = orber_socket:connect(Type, Host, Port, [{active, false}|Options]),
+ Result = do_client_action(Type, Socket, Action, Data),
+ orber_socket:close(Type, Socket),
+ Result.
+
+do_client_action(Type, Socket, fragments, FragList) ->
+ ok = send_data(Type, Socket, FragList),
+ {ok, Bytes} = gen_tcp:recv(Socket, 0),
+ {#reply_header{request_id = ?REQUEST_ID, reply_status = no_exception}, ok, [Par]} =
+ cdr_decode:dec_message({tk_void,[tk_any],[tk_any]}, Bytes),
+ Par;
+do_client_action(Type, Socket, fragments_max, FragList) ->
+ ok = send_data(Type, Socket, FragList),
+ {ok, Bytes} = gen_tcp:recv(Socket, 0),
+ {#reply_header{request_id = ?REQUEST_ID, reply_status = system_exception}, Exc, []} =
+ cdr_decode:dec_message({tk_void,[tk_any],[tk_any]}, Bytes),
+ Exc;
+do_client_action(Type, Socket, message_error, Data) ->
+ ok = send_data(Type, Socket, Data),
+ {ok,Bytes} = gen_tcp:recv(Socket, 0),
+ 'message_error' = cdr_decode:dec_message({tk_void,[tk_any],[tk_any]}, Bytes),
+ ok;
+do_client_action(_Type, _Socket, _Action, _Data) ->
+ ok.
+
+-endif.
+
+do_server_action(Type, Socket, fragments, FragList) ->
+ {ok, _B} = gen_tcp:recv(Socket, 0),
+ ok = send_data(Type, Socket, FragList);
+do_server_action(_Type, _Socket, _Action, _Data) ->
+ ok.
+
+
+send_data(_Type, _Socket, []) ->
+ ok;
+send_data(Type, Socket, [H|T]) ->
+ orber_socket:write(Type, Socket, H),
+ send_data(Type, Socket, T).
+
diff --git a/lib/orber/test/data_types_SUITE.erl b/lib/orber/test/data_types_SUITE.erl
new file mode 100644
index 0000000000..1feb0b3b58
--- /dev/null
+++ b/lib/orber/test/data_types_SUITE.erl
@@ -0,0 +1,173 @@
+%%-----------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2002-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%
+%%
+%%
+%%-----------------------------------------------------------------
+%% File : data_types_SUITE.erl
+%% Purpose :
+%%-----------------------------------------------------------------
+
+-module(data_types_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/include/corba.hrl").
+
+-define(default_timeout, ?t:minutes(3)).
+
+-define(match(ExpectedRes, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-export([]).
+-compile(export_all).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["This suite is for testing more or less complex data types"];
+all(suite) ->
+ [fixed_type, any_type].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+init_per_testcase(_Case, Config) ->
+ Path = code:which(?MODULE),
+ code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Path = code:which(?MODULE),
+ code:del_path(filename:join(filename:dirname(Path), "idl_output")),
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: name component handling tests
+%% Description:
+%%-----------------------------------------------------------------
+fixed_type(doc) -> ["Test the Fixed Point Datatype."];
+fixed_type(suite) -> [];
+fixed_type(_) ->
+ Val1 = ?match({fixed,3,2,314}, orber_test_server:val1()),
+ _Val2 = ?match({fixed,3,2,314}, orber_test_server:val2()),
+ _Val3 = ?match({fixed,3,2,314}, orber_test_server:val3()),
+ Val4 = ?match({fixed,3,2,314}, orber_test_server:val4()),
+ Val5 = ?match({fixed,2,2,14}, orber_test_server:val5()),
+ _Val6 = ?match({fixed,1,0,3}, orber_test_server:val6()),
+ Val7 = ?match({fixed,2,2,-14}, orber_test_server:val7()),
+ _Val8 = ?match({fixed,1,0,-3}, orber_test_server:val8()),
+ Val9 = ?match({fixed,3,2,328}, orber_test_server:val9()),
+ Val10 = ?match({fixed,4,4,4396}, orber_test_server:val10()),
+ Val11 = ?match({fixed,31,29,2242857142857142857142857142857}, orber_test_server:val11()),
+ Val12 = ?match({fixed,9,6,123140001}, orber_test_server:val12()),
+ Val13 = ?match({fixed,9,1,123140001}, orber_test_server:val13()),
+ Val14 = ?match({fixed,14,6,-12313876959999}, orber_test_server:val14()),
+ Val15 = ?match({fixed,14,6,12314123240001}, orber_test_server:val15()),
+ Val16 = ?match({fixed,17,7,15163459846280001}, orber_test_server:val16()),
+ _Val17 = ?match({fixed,3,2,402}, orber_test_server:val17()),
+ _Val18 = ?match({fixed,5,4,40401}, orber_test_server:val18()),
+ _Val19 = ?match({fixed,3,0,200}, orber_test_server:val19()),
+ Val20 = ?match({fixed,31,0,1999999999999999999999999999999}, orber_test_server:val20()),
+ Val21 = ?match({fixed,1,0,0}, orber_test_server:val21()),
+ Val22 = ?match({fixed,31,0,9999999999999999999999999999998}, orber_test_server:val22()),
+ Val23 = ?match({fixed,1,0,1}, orber_test_server:val23()),
+ _Val24 = ?match({fixed,5,0,19998}, orber_test_server:val24()),
+ _Val25 = ?match({fixed,2,0,40}, orber_test_server:val25()),
+ Val26 = ?match({fixed,31,0,9999999999999999999999999999999}, orber_test_server:val26()),
+
+ ?match(Val1, fixed:create(3,2,314)),
+ Val27 = ?match({fixed,6,2,314}, fixed:create(6,2,314)),
+
+ ?match({tk_fixed,3,2}, fixed:get_typecode(Val1)),
+ ?match({tk_fixed,6,2}, fixed:get_typecode(Val27)),
+ ?match({'EXCEPTION',{'BAD_PARAM',_,_,_}}, fixed:create(3,2,3140)),
+ ?match({'EXCEPTION',{'BAD_PARAM',_,_,_}}, fixed:create(5,6,314)),
+ ?match({'EXCEPTION',{'BAD_PARAM',_,_,_}}, fixed:create(32,2,314)),
+ ?match(Val10, fixed:multiply(Val4, Val5)),
+ ?match(Val16, fixed:multiply(Val12, Val13)),
+ ?match(Val22, fixed:multiply(Val26, Val26)),
+
+ ?match(Val9, fixed:add(Val4, Val5)),
+ ?match(Val15, fixed:add(Val12, Val13)),
+ ?match(Val20, fixed:add(Val26, Val26)),
+
+ ?match(Val11, fixed:divide(Val4, Val5)),
+ ?match(Val23, fixed:divide(Val26, Val26)),
+
+ ?match(Val14, fixed:subtract(Val12, Val13)),
+ ?match(Val21, fixed:subtract(Val26, Val26)),
+
+ ?match(Val7, fixed:unary_minus(Val5)),
+ ?match(Val5, fixed:unary_minus(Val7)),
+
+
+
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: any type
+%% Description:
+%%-----------------------------------------------------------------
+any_type(doc) -> ["Test the Any Datatype."];
+any_type(suite) -> [];
+any_type(_) ->
+ ?match(#any{typecode=undefined, value=undefined},
+ any:create()),
+ ?match(#any{typecode=tk_short, value=undefined},
+ any:set_typecode(any:create(), tk_short)),
+ ?match({'EXCEPTION', #'BAD_TYPECODE'{}},
+ any:set_typecode(any:create(), "wrong")),
+ ?match({'EXCEPTION', #'BAD_TYPECODE'{}},
+ any:create("wrong", 1)),
+ ?match(#any{typecode=tk_short, value = 1},
+ any:create(tk_short, 1)),
+ ?match(tk_short,
+ any:get_typecode(any:create(tk_short, 1))),
+ ?match(1,
+ any:get_value(any:create(tk_short, 1))),
+ ?match(#any{typecode=tk_short, value=2},
+ any:set_value(any:create(tk_short, 1), 2)),
+
+ ok.
diff --git a/lib/orber/test/generated_SUITE.erl b/lib/orber/test/generated_SUITE.erl
new file mode 100644
index 0000000000..1cd1674fc4
--- /dev/null
+++ b/lib/orber/test/generated_SUITE.erl
@@ -0,0 +1,385 @@
+%%-----------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2004-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%
+%%
+%%
+%%-----------------------------------------------------------------
+%% File : generated_SUITE.erl
+%% Purpose :
+%%-----------------------------------------------------------------
+
+-module(generated_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/include/corba.hrl").
+
+-define(default_timeout, ?t:minutes(3)).
+
+-define(match(ExpectedRes, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+-define(nomatch(Not, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ Not ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS);
+ _ ->
+ AcTuAlReS
+ end
+ end()).
+
+
+-define(checktc(_Op),
+ fun(TC) ->
+ case orber_tc:check_tc(TC) of
+ false ->
+ io:format("###### ERROR ERROR ######~n~p - ~p~n", [Op, TC]),
+ ?line exit(TC);
+ true ->
+ true
+ end
+ end).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-export([]).
+-compile(export_all).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["This suite is for testing IC generated files"];
+all(suite) ->
+ ['OrberApp_IFR',
+ erlang_binary, erlang_pid, erlang_port, erlang_ref,
+ 'CosNaming_Binding', 'CosNaming_BindingList', 'CosNaming_Name',
+ 'CosNaming_NameComponent', 'CosNaming_NamingContextExt_InvalidAddress',
+ 'CosNaming_NamingContext_AlreadyBound', 'CosNaming_NamingContext_CannotProceed',
+ 'CosNaming_NamingContext_InvalidName', 'CosNaming_NamingContext_NotEmpty',
+ 'CosNaming_NamingContext_NotFound', 'CosNaming_BindingIterator',
+ 'CosNaming_NamingContext', 'CosNaming_NamingContextExt'].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case:'OrberApp_IFR'
+%% Description:
+%%-----------------------------------------------------------------
+'OrberApp_IFR'(doc) -> [""];
+'OrberApp_IFR'(suite) -> [];
+'OrberApp_IFR'(_) ->
+ ?nomatch(undefined, 'OrberApp_IFR':oe_tc(get_absolute_name)),
+ ?nomatch(undefined, 'OrberApp_IFR':oe_tc(get_user_exception_type)),
+ ?match(undefined, 'OrberApp_IFR':oe_tc(undefined)),
+ ?match([_|_], 'OrberApp_IFR':oe_get_interface()),
+ ?match("IDL:OrberApp/IFR:1.0", 'OrberApp_IFR':typeID()),
+ check_tc('OrberApp_IFR':oe_get_interface()),
+ ?match(true, 'OrberApp_IFR':oe_is_a('OrberApp_IFR':typeID())),
+ ?match(false, 'OrberApp_IFR':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: erlang_binary
+%% Description:
+%%-----------------------------------------------------------------
+erlang_binary(doc) -> [""];
+erlang_binary(suite) -> [];
+erlang_binary(_) ->
+ ?match(true, orber_tc:check_tc(erlang_binary:tc())),
+ ?match("IDL:erlang/binary:1.0", erlang_binary:id()),
+ ?match("erlang_binary", erlang_binary:name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: erlang_pid
+%% Description:
+%%-----------------------------------------------------------------
+erlang_pid(doc) -> [""];
+erlang_pid(suite) -> [];
+erlang_pid(_) ->
+ ?match(true, orber_tc:check_tc(erlang_pid:tc())),
+ ?match("IDL:erlang/pid:1.0", erlang_pid:id()),
+ ?match("erlang_pid", erlang_pid:name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: erlang_port
+%% Description:
+%%-----------------------------------------------------------------
+erlang_port(doc) -> [""];
+erlang_port(suite) -> [];
+erlang_port(_) ->
+ ?match(true, orber_tc:check_tc(erlang_port:tc())),
+ ?match("IDL:erlang/port:1.0", erlang_port:id()),
+ ?match("erlang_port", erlang_port:name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: erlang_ref
+%% Description:
+%%-----------------------------------------------------------------
+erlang_ref(doc) -> [""];
+erlang_ref(suite) -> [];
+erlang_ref(_) ->
+ ?match(true, orber_tc:check_tc(erlang_ref:tc())),
+ ?match("IDL:erlang/ref:1.0", erlang_ref:id()),
+ ?match("erlang_ref", erlang_ref:name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNaming_Binding'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNaming_Binding'(doc) -> [""];
+'CosNaming_Binding'(suite) -> [];
+'CosNaming_Binding'(_) ->
+ ?match(true, orber_tc:check_tc('CosNaming_Binding':tc())),
+ ?match("IDL:omg.org/CosNaming/Binding:1.0", 'CosNaming_Binding':id()),
+ ?match("CosNaming_Binding", 'CosNaming_Binding':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNaming_BindingList'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNaming_BindingList'(doc) -> [""];
+'CosNaming_BindingList'(suite) -> [];
+'CosNaming_BindingList'(_) ->
+ ?match(true, orber_tc:check_tc('CosNaming_BindingList':tc())),
+ ?match("IDL:omg.org/CosNaming/BindingList:1.0", 'CosNaming_BindingList':id()),
+ ?match("CosNaming_BindingList", 'CosNaming_BindingList':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNaming_Name'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNaming_Name'(doc) -> [""];
+'CosNaming_Name'(suite) -> [];
+'CosNaming_Name'(_) ->
+ ?match(true, orber_tc:check_tc('CosNaming_Name':tc())),
+ ?match("IDL:omg.org/CosNaming/Name:1.0", 'CosNaming_Name':id()),
+ ?match("CosNaming_Name", 'CosNaming_Name':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNaming_NameComponent'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNaming_NameComponent'(doc) -> [""];
+'CosNaming_NameComponent'(suite) -> [];
+'CosNaming_NameComponent'(_) ->
+ ?match(true, orber_tc:check_tc('CosNaming_NameComponent':tc())),
+ ?match("IDL:omg.org/CosNaming/NameComponent:1.0", 'CosNaming_NameComponent':id()),
+ ?match("CosNaming_NameComponent", 'CosNaming_NameComponent':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNaming_NamingContextExt_InvalidAddress'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNaming_NamingContextExt_InvalidAddress'(doc) -> [""];
+'CosNaming_NamingContextExt_InvalidAddress'(suite) -> [];
+'CosNaming_NamingContextExt_InvalidAddress'(_) ->
+ ?match(true, orber_tc:check_tc('CosNaming_NamingContextExt_InvalidAddress':tc())),
+ ?match("IDL:omg.org/CosNaming/NamingContextExt/InvalidAddress:1.0", 'CosNaming_NamingContextExt_InvalidAddress':id()),
+ ?match("CosNaming_NamingContextExt_InvalidAddress", 'CosNaming_NamingContextExt_InvalidAddress':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNaming_NamingContext_AlreadyBound'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNaming_NamingContext_AlreadyBound'(doc) -> [""];
+'CosNaming_NamingContext_AlreadyBound'(suite) -> [];
+'CosNaming_NamingContext_AlreadyBound'(_) ->
+ ?match(true, orber_tc:check_tc('CosNaming_NamingContext_AlreadyBound':tc())),
+ ?match("IDL:omg.org/CosNaming/NamingContext/AlreadyBound:1.0", 'CosNaming_NamingContext_AlreadyBound':id()),
+ ?match("CosNaming_NamingContext_AlreadyBound", 'CosNaming_NamingContext_AlreadyBound':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNaming_NamingContext_CannotProceed'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNaming_NamingContext_CannotProceed'(doc) -> [""];
+'CosNaming_NamingContext_CannotProceed'(suite) -> [];
+'CosNaming_NamingContext_CannotProceed'(_) ->
+ ?match(true, orber_tc:check_tc('CosNaming_NamingContext_CannotProceed':tc())),
+ ?match("IDL:omg.org/CosNaming/NamingContext/CannotProceed:1.0", 'CosNaming_NamingContext_CannotProceed':id()),
+ ?match("CosNaming_NamingContext_CannotProceed", 'CosNaming_NamingContext_CannotProceed':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNaming_NamingContext_InvalidName'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNaming_NamingContext_InvalidName'(doc) -> [""];
+'CosNaming_NamingContext_InvalidName'(suite) -> [];
+'CosNaming_NamingContext_InvalidName'(_) ->
+ ?match(true, orber_tc:check_tc('CosNaming_NamingContext_InvalidName':tc())),
+ ?match("IDL:omg.org/CosNaming/NamingContext/InvalidName:1.0", 'CosNaming_NamingContext_InvalidName':id()),
+ ?match("CosNaming_NamingContext_InvalidName", 'CosNaming_NamingContext_InvalidName':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNaming_NamingContext_NotEmpty'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNaming_NamingContext_NotEmpty'(doc) -> [""];
+'CosNaming_NamingContext_NotEmpty'(suite) -> [];
+'CosNaming_NamingContext_NotEmpty'(_) ->
+ ?match(true, orber_tc:check_tc('CosNaming_NamingContext_NotEmpty':tc())),
+ ?match("IDL:omg.org/CosNaming/NamingContext/NotEmpty:1.0", 'CosNaming_NamingContext_NotEmpty':id()),
+ ?match("CosNaming_NamingContext_NotEmpty", 'CosNaming_NamingContext_NotEmpty':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNaming_NamingContext_NotFound'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNaming_NamingContext_NotFound'(doc) -> [""];
+'CosNaming_NamingContext_NotFound'(suite) -> [];
+'CosNaming_NamingContext_NotFound'(_) ->
+ ?match(true, orber_tc:check_tc('CosNaming_NamingContext_NotFound':tc())),
+ ?match("IDL:omg.org/CosNaming/NamingContext/NotFound:1.0", 'CosNaming_NamingContext_NotFound':id()),
+ ?match("CosNaming_NamingContext_NotFound", 'CosNaming_NamingContext_NotFound':name()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNaming_BindingIterator'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNaming_BindingIterator'(doc) -> [""];
+'CosNaming_BindingIterator'(suite) -> [];
+'CosNaming_BindingIterator'(_) ->
+ ?nomatch(undefined, 'CosNaming_BindingIterator':oe_tc(next_one)),
+ ?nomatch(undefined, 'CosNaming_BindingIterator':oe_tc(next_n)),
+ ?nomatch(undefined, 'CosNaming_BindingIterator':oe_tc(destroy)),
+ ?match(undefined, 'CosNaming_BindingIterator':oe_tc(undefined)),
+ ?match([_|_], 'CosNaming_BindingIterator':oe_get_interface()),
+ ?match("IDL:omg.org/CosNaming/BindingIterator:1.0",
+ 'CosNaming_BindingIterator':typeID()),
+ check_tc('CosNaming_BindingIterator':oe_get_interface()),
+ ?match(true, 'CosNaming_BindingIterator':oe_is_a('CosNaming_BindingIterator':typeID())),
+ ?match(false, 'CosNaming_BindingIterator':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNaming_NamingContext'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNaming_NamingContext'(doc) -> [""];
+'CosNaming_NamingContext'(suite) -> [];
+'CosNaming_NamingContext'(_) ->
+ ?nomatch(undefined, 'CosNaming_NamingContext':oe_tc(bind)),
+ ?nomatch(undefined, 'CosNaming_NamingContext':oe_tc(rebind)),
+ ?nomatch(undefined, 'CosNaming_NamingContext':oe_tc(bind_context)),
+ ?nomatch(undefined, 'CosNaming_NamingContext':oe_tc(rebind_context)),
+ ?nomatch(undefined, 'CosNaming_NamingContext':oe_tc(resolve)),
+ ?nomatch(undefined, 'CosNaming_NamingContext':oe_tc(unbind)),
+ ?nomatch(undefined, 'CosNaming_NamingContext':oe_tc(new_context)),
+ ?nomatch(undefined, 'CosNaming_NamingContext':oe_tc(bind_new_context)),
+ ?nomatch(undefined, 'CosNaming_NamingContext':oe_tc(destroy)),
+ ?nomatch(undefined, 'CosNaming_NamingContext':oe_tc(list)),
+ ?match(undefined, 'CosNaming_NamingContext':oe_tc(undefined)),
+ ?match([_|_], 'CosNaming_NamingContext':oe_get_interface()),
+ ?match("IDL:omg.org/CosNaming/NamingContext:1.0",
+ 'CosNaming_NamingContext':typeID()),
+ check_tc('CosNaming_NamingContext':oe_get_interface()),
+ ?match(true, 'CosNaming_NamingContext':oe_is_a('CosNaming_NamingContext':typeID())),
+ ?match(false, 'CosNaming_NamingContext':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: 'CosNaming_NamingContexExt'
+%% Description:
+%%-----------------------------------------------------------------
+'CosNaming_NamingContextExt'(doc) -> [""];
+'CosNaming_NamingContextExt'(suite) -> [];
+'CosNaming_NamingContextExt'(_) ->
+ ?nomatch(undefined, 'CosNaming_NamingContextExt':oe_tc(to_string)),
+ ?nomatch(undefined, 'CosNaming_NamingContextExt':oe_tc(to_name)),
+ ?nomatch(undefined, 'CosNaming_NamingContextExt':oe_tc(to_url)),
+ ?nomatch(undefined, 'CosNaming_NamingContextExt':oe_tc(resolve_str)),
+ ?nomatch(undefined, 'CosNaming_NamingContextExt':oe_tc(bind)),
+ ?nomatch(undefined, 'CosNaming_NamingContextExt':oe_tc(rebind)),
+ ?nomatch(undefined, 'CosNaming_NamingContextExt':oe_tc(bind_context)),
+ ?nomatch(undefined, 'CosNaming_NamingContextExt':oe_tc(rebind_context)),
+ ?nomatch(undefined, 'CosNaming_NamingContextExt':oe_tc(new_context)),
+ ?nomatch(undefined, 'CosNaming_NamingContextExt':oe_tc(bind_new_context)),
+ ?nomatch(undefined, 'CosNaming_NamingContextExt':oe_tc(destroy)),
+ ?nomatch(undefined, 'CosNaming_NamingContextExt':oe_tc(list)),
+ ?match(undefined, 'CosNaming_NamingContextExt':oe_tc(undefined)),
+ ?match([_|_], 'CosNaming_NamingContextExt':oe_get_interface()),
+ ?match("IDL:omg.org/CosNaming/NamingContextExt:1.0",
+ 'CosNaming_NamingContextExt':typeID()),
+ check_tc('CosNaming_NamingContextExt':oe_get_interface()),
+ ?match(true, 'CosNaming_NamingContextExt':oe_is_a('CosNaming_NamingContextExt':typeID())),
+ ?match(true, 'CosNaming_NamingContextExt':oe_is_a('CosNaming_NamingContext':typeID())),
+ ?match(false, 'CosNaming_NamingContextExt':oe_is_a("wrong")),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% MISC functions
+%%-----------------------------------------------------------------
+check_tc([]) ->
+ ok;
+check_tc([{Op, {RetType, InParameters, OutParameters}}|T]) ->
+ io:format("checked - ~s~n", [Op]),
+ lists:all(?checktc(Op), [RetType|InParameters]),
+ lists:all(?checktc(Op), OutParameters),
+ check_tc(T).
+
+
diff --git a/lib/orber/test/idl_output/.gitignore b/lib/orber/test/idl_output/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/orber/test/idl_output/.gitignore
diff --git a/lib/orber/test/iiop_module_do_test_impl.erl b/lib/orber/test/iiop_module_do_test_impl.erl
new file mode 100644
index 0000000000..bf171a3097
--- /dev/null
+++ b/lib/orber/test/iiop_module_do_test_impl.erl
@@ -0,0 +1,112 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1998-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%
+%%
+%%
+
+-module(iiop_module_do_test_impl).
+
+
+-export([run_all/3, run_userexception/2, run_systemexception/2]).
+-export([createTestContext/0]).
+
+-export([start/0, stop/0]).
+-export([init/1, terminate/2]).
+
+
+init(_) ->
+ {ok, []}.
+
+terminate(Reason, _State) ->
+ io:format("~p terminating with reason ~p~n", [?MODULE, Reason]),
+ ok.
+
+createTestContext() ->
+ NS = corba:resolve_initial_references("NameService"),
+ NC = lname_component:set_id(lname_component:create(), "iiop_test"),
+ N = lname:insert_component(lname:create(), 1, NC),
+ 'CosNaming_NamingContext':bind_new_context(NS, N).
+
+start() ->
+ SFok = corba:create('iiop_module_do_test', "IDL:iiop_module/do_test:1.0"),
+ NS = corba:resolve_initial_references("NameService"),
+ NC1 = lname_component:set_id(lname_component:create(), "iiop_test"),
+ NC2 = lname_component:set_id(lname_component:create(), "erl_dotest"),
+ N = lname:insert_component(lname:create(), 1, NC1),
+ N1 = lname:insert_component(N, 2, NC2),
+ 'CosNaming_NamingContext':bind(NS, N1, SFok),
+ SFok.
+
+stop() ->
+ NS = corba:resolve_initial_references("NameService"),
+ NC1 = lname_component:set_id(lname_component:create(), "iiop_test"),
+ NC2 = lname_component:set_id(lname_component:create(), "erl_dotest"),
+ N = lname:insert_component(lname:create(), 1, NC1),
+ N1 = lname:insert_component(N, 2, NC2),
+ 'CosNaming_NamingContext':unbind(NS, N1).
+
+run_all(S, X, TL) ->
+ ok = iiop_module_test:send_void(X),
+ {tk_short, P1} = lists:nth(1, TL),
+ {R1, IO1, O1} = iiop_module_test:send_short(X, P1, P1),
+ RL1= [{tk_short, R1}],
+ IOL1= [{tk_short, IO1}],
+ OL1= [{tk_short, O1}],
+ {tk_ushort, P2} = lists:nth(2, TL),
+ {R2, IO2, O2} = iiop_module_test:send_ushort(X, P2, P2),
+ RL2= [{tk_ushort, R2}|RL1],
+ IOL2= [{tk_ushort, IO2}|IOL1],
+ OL2= [{tk_ushort, O2}|OL1],
+ {tk_long, P3} = lists:nth(3, TL),
+ {R3, IO3, O3} = iiop_module_test:send_long(X, P3, P3),
+ RL3= [{tk_long, R3}|RL2],
+ IOL3= [{tk_long, IO3}|IOL2],
+ OL3= [{tk_long, O3}|OL2],
+ {tk_ulong, P4} = lists:nth(4, TL),
+ {R4, IO4, O4} = iiop_module_test:send_ulong(X, P4, P4),
+ RL4= [{tk_ulong, R4}|RL3],
+ IOL4= [{tk_ulong, IO4}|IOL3],
+ OL4= [{tk_ulong, O4}|OL3],
+ {tk_float, P5} = lists:nth(5, TL),
+ {R5, IO5, O5} = iiop_module_test:send_float(X, P5, P5),
+ RL5= [{tk_float, R5}|RL4],
+ IOL5= [{tk_float, IO5}|IOL4],
+ OL5= [{tk_float, O5}|OL4],
+ {tk_double, P6} = lists:nth(6, TL),
+ {R6, IO6, O6} = iiop_module_test:send_double(X, P6, P6),
+ RL6= [{tk_double, R6}|RL5],
+ IOL6= [{tk_double, IO6}|IOL5],
+ OL6= [{tk_double, O6}|OL5],
+ {tk_boolean, P7} = lists:nth(7, TL),
+ {R7, IO7, O7} = iiop_module_test:send_boolean(X, P7, P7),
+ RL7= [{tk_boolean, R7}|RL6],
+ IOL7= [{tk_boolean, IO7}|IOL6],
+ OL7= [{tk_boolean, O7}|OL6],
+ {tk_char, P8} = lists:nth(8, TL),
+ {R8, IO8, O8} = iiop_module_test:send_char(X, P8, P8),
+ RL= [{tk_char, R8} |RL7],
+ IOL= [{tk_char, IO8} |IOL7],
+ OL= [{tk_char, O8} |OL7],
+ {{lists:reverse(RL),lists:reverse(IOL),lists:reverse(OL)}, S}.
+
+run_systemexception(S, X) ->
+ iiop_module_test:ret_systemexception(X),
+ {ok, S}.
+
+run_userexception(S, X) ->
+ iiop_module_test:ret_userexception(X),
+ {ok, S}.
diff --git a/lib/orber/test/iiop_module_test_impl.erl b/lib/orber/test/iiop_module_test_impl.erl
new file mode 100644
index 0000000000..fe334e1b26
--- /dev/null
+++ b/lib/orber/test/iiop_module_test_impl.erl
@@ -0,0 +1,128 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1998-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%
+%%
+%%
+
+-module(iiop_module_test_impl).
+-include_lib("orber/include/corba.hrl").
+-include("idl_output/iiop_module.hrl").
+
+
+-export([send_void/1, send_short/3, send_ushort/3]).
+-export([send_long/3, send_ulong/3, send_float/3]).
+-export([send_double/3, send_boolean/3, send_char/3]).
+-export([send_octet/3, send_any/3, send_object/3]).
+-export([send_struct1/3, send_union1/3, send_enum1/3]).
+-export([send_string/3, send_sequence1/3, send_array1/3]).
+-export([ret_systemexception/1, ret_userexception/1]).
+
+
+
+-export([start/0, stop/0]).
+-export([init/1, terminate/2]).
+
+
+init(_) ->
+ {ok, []}.
+
+terminate(Reason, _State) ->
+ io:format("~p terminating with reason ~p~n", [?MODULE, Reason]),
+ ok.
+
+
+start() ->
+ SFok = corba:create('iiop_module_test', "IDL:iiop_module/test:1.0"),
+ NS = corba:resolve_initial_references("NameService"),
+ NC1 = lname_component:set_id(lname_component:create(), "iiop_test"),
+ NC2 = lname_component:set_id(lname_component:create(), "erl_test"),
+ N = lname:insert_component(lname:create(), 1, NC1),
+ N1 = lname:insert_component(N, 2, NC2),
+ 'CosNaming_NamingContext':bind(NS, N1, SFok),
+ SFok.
+
+stop() ->
+ NS = corba:resolve_initial_references("NameService"),
+ NC1 = lname_component:set_id(lname_component:create(), "iiop_test"),
+ NC2 = lname_component:set_id(lname_component:create(), "erl_test"),
+ N = lname:insert_component(lname:create(), 1, NC1),
+ N1 = lname:insert_component(N, 2, NC2),
+ 'CosNaming_NamingContext':unbind(NS, N1).
+
+
+
+send_void(S) ->
+ {ok, S}.
+
+send_short(S, P1, P2) ->
+ {{P1, P1, P2}, S}.
+
+send_ushort(S, P1, P2) ->
+ {{P1, P1, P2}, S}.
+
+send_long(S, P1, P2) ->
+ {{P1, P1, P2}, S}.
+
+send_ulong(S, P1, P2) ->
+ {{P1, P1, P2}, S}.
+
+send_float(S, P1, P2) ->
+ {{P1, P1, P2}, S}.
+
+send_double(S, P1, P2) ->
+ {{P1, P1, P2}, S}.
+
+send_boolean(S, P1, P2) ->
+ {{P1, P1, P2}, S}.
+
+send_char(S, P1, P2) ->
+ {{P1, P1, P2}, S}.
+
+send_octet(S, P1, P2) ->
+ {{P1, P1, P2}, S}.
+
+send_any(S, P1, P2) ->
+ {{P1, P1, P2}, S}.
+
+send_object(S, P1, P2) ->
+ {{P1, P1, P2}, S}.
+
+send_struct1(S, P1, P2) ->
+ {{P1, P1, P2}, S}.
+
+send_union1(S, P1, P2) ->
+ {{P1, P1, P2}, S}.
+
+send_enum1(S, P1, P2) ->
+ {{P1, P1, P2}, S}.
+
+send_string(S, P1, P2) ->
+ {{P1, P1, P2}, S}.
+
+send_sequence1(S, P1, P2) ->
+ {{P1, P1, P2}, S}.
+
+send_array1(S, P1, P2) ->
+ {{P1, P1, P2}, S}.
+
+ret_systemexception(S) ->
+ throw(#'BAD_PARAM'{}),
+ {ok, S}.
+
+ret_userexception(S) ->
+ throw(#iiop_module_Except1{why="not readable",rest_of_name=["foo", "bar"]}),
+ {ok, S}.
diff --git a/lib/orber/test/iiop_test.idl b/lib/orber/test/iiop_test.idl
new file mode 100644
index 0000000000..339678106e
--- /dev/null
+++ b/lib/orber/test/iiop_test.idl
@@ -0,0 +1,111 @@
+//
+// %CopyrightBegin%
+//
+// Copyright Ericsson AB 1997-2010. 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 "cos_naming.idl"
+
+module iiop_module
+{
+
+ typedef long Array1[10];
+
+ enum Enum1 {horse, pig, cow};
+
+ typedef sequence<long> Sequence1;
+
+ typedef Sequence1 Sequence2;
+
+ struct Struct1 {
+ string s;
+ unsigned short us;
+ unsigned long ul;
+ };
+
+ union Union1 switch (short) {
+ case 0: short First;
+ case 1: string Second;
+ case 2: char Third;
+ };
+
+ exception Except1 {
+ string why;
+ sequence <string> rest_of_name;
+ };
+
+ typedef sequence<any> test_values;
+ struct test_retval {
+ test_values R;
+ test_values InOut;
+ test_values Out;
+ };
+
+ interface test;
+
+ interface do_test {
+ void run_systemexception(in test x)
+ raises(CosNaming::NamingContext::NotFound,
+ CosNaming::NamingContext::CannotProceed,
+ CosNaming::NamingContext::InvalidName);
+ void run_userexception(in test x)
+ raises(iiop_module::Except1,
+ CosNaming::NamingContext::NotFound,
+ CosNaming::NamingContext::CannotProceed,
+ CosNaming::NamingContext::InvalidName);
+ test_retval run_all(in test x, in test_values tlist)
+ raises(iiop_module::Except1,
+ CosNaming::NamingContext::NotFound,
+ CosNaming::NamingContext::CannotProceed,
+ CosNaming::NamingContext::InvalidName);
+ };
+
+ interface test {
+ // Function to run all tests from java to erlang
+ // and return the answers
+ // Primitive types
+ void send_void();
+ short send_short(in short p1, inout short p2, out short p3);
+ unsigned short send_ushort(in unsigned short p1, inout unsigned short p2,
+ out unsigned short p3);
+ long send_long(in long p1, inout long p2, out long p3);
+ unsigned long send_ulong(in unsigned long p1, inout unsigned long p2,
+ out unsigned long p3);
+ float send_float(in float p1, inout float p2, out float p3);
+ double send_double(in double p1, inout double p2, out double p3);
+ boolean send_boolean(in boolean p1, inout boolean p2, out boolean p3);
+ char send_char(in char p1, inout char p2, out char p3);
+ octet send_octet(in octet p1, inout octet p2, out octet p3);
+ any send_any(in any p1, inout any p2, out any p3);
+ Object send_object(in Object p1, inout Object p2, out Object p3);
+ // TypeCode send_typecode(in TypeCode p1, inout TypeCode p2, out TypeCode p3);
+ // Principal send_principal(in Principal p); //tested in every request
+
+ // Complex types
+ Struct1 send_struct1(in Struct1 p1, inout Struct1 p2, out Struct1 p3);
+ Union1 send_union1(in Union1 p1, inout Union1 p2, out Union1 p3);
+ Enum1 send_enum1(in Enum1 p1, inout Enum1 p2, out Enum1 p3);
+ string send_string(in string p1, inout string p2, out string p3);
+ Sequence1 send_sequence1(in Sequence1 p1, inout Sequence1 p2,
+ out Sequence1 p3);
+ Array1 send_array1(in Array1 p1, inout Array1 p2, out Array1 p3);
+
+ void ret_systemexception();
+ void ret_userexception() raises(iiop_module::Except1);
+
+
+ };
+
+};
diff --git a/lib/orber/test/iiop_test_impl.erl b/lib/orber/test/iiop_test_impl.erl
new file mode 100644
index 0000000000..fd92109c09
--- /dev/null
+++ b/lib/orber/test/iiop_test_impl.erl
@@ -0,0 +1,34 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1998-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%
+%%
+%%
+-module(iiop_test_impl).
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/test/iiop_test.hrl").
+-export([]).
+
+
+init(Env) ->
+ {ok, []}.
+
+terminate(From, Reason) ->
+ ok.
+
+send_void(State) ->
+ {ok, State}.
+
diff --git a/lib/orber/test/interceptors_SUITE.erl b/lib/orber/test/interceptors_SUITE.erl
new file mode 100644
index 0000000000..27e23a9433
--- /dev/null
+++ b/lib/orber/test/interceptors_SUITE.erl
@@ -0,0 +1,338 @@
+%%-----------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2004-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%
+%%
+%%
+%%-----------------------------------------------------------------
+%% File : interceptors_SUITE.erl
+%% Purpose :
+%%-----------------------------------------------------------------
+
+-module(interceptors_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/src/orber_iiop.hrl").
+
+-define(default_timeout, ?t:minutes(3)).
+
+-define(match(ExpectedRes, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+-define(nomatch(Not, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ Not ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS);
+ _ ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS
+ end
+ end()).
+
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-export([in_reply/6, out_request/6]).
+-compile(export_all).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["This suite is for testing Orber Interceptors"];
+all(suite) ->
+ [local_pseudo, local_default, local_local, local_global].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ Path = code:which(?MODULE),
+ code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
+ corba:orb_init([{flags, (?ORB_ENV_USE_PI bor ?ORB_ENV_LOCAL_TYPECHECKING)},
+ {local_interceptors, {native, [?MODULE]}}]),
+ orber:jump_start(2945),
+ oe_orber_test_server:oe_register(),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ oe_orber_test_server:oe_unregister(),
+ orber:jump_stop(),
+ Path = code:which(?MODULE),
+ code:del_path(filename:join(filename:dirname(Path), "idl_output")),
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: local_pseudo
+%% Description:
+%%-----------------------------------------------------------------
+local_pseudo(doc) -> [""];
+local_pseudo(suite) -> [];
+local_pseudo(_) ->
+ ?match({native, [?MODULE]}, orber:get_local_interceptors()),
+ %% Global settings
+ Obj1 = orber_test_server:oe_create(state,[{pseudo,true}]),
+ Result11 = orber_test_server:testing_iiop_ushort(Obj1, ?USHORTMAX),
+ ?match([?USHORTMAX], put(out_request, undefined)),
+ ?match(Result11, put(in_reply, undefined)),
+
+ Result12 = ?match({'EXCEPTION',_},
+ orber_test_server:testing_iiop_ushort(Obj1, ?USHORTMAX+1)),
+ ?match([(?USHORTMAX+1)], put(out_request, undefined)),
+ ?nomatch(Result12, put(in_reply, undefined)),
+
+ Result13 = orber_test_server:testing_iiop_oneway_delay(Obj1, 0),
+ ?match([0], put(out_request, undefined)),
+ ?nomatch(Result13, put(in_reply, undefined)),
+
+ Result14 = ?match({'EXCEPTION', _},
+ orber_test_server:raise_local_exception(Obj1)),
+ ?match([], put(out_request, undefined)),
+ ?match(Result14, put(in_reply, undefined)),
+
+ Result15 = ?match({'EXCEPTION',_}, orber_test_server:stop_brutal(Obj1)),
+ ?match([], put(out_request, undefined)),
+ ?match(Result15, put(in_reply, undefined)),
+
+ %% Per-object
+ Obj2 = orber_test_server:oe_create(state,[{pseudo,true},
+ {local_interceptors, false}]),
+
+ Result21 = orber_test_server:testing_iiop_ushort(Obj2, ?USHORTMAX),
+ ?nomatch([?USHORTMAX], put(out_request, undefined)),
+ ?nomatch(Result21, put(in_reply, undefined)),
+
+ Obj3 = orber_test_server:oe_create(state,[{pseudo,true},
+ {local_interceptors, true}]),
+
+ Result31 = orber_test_server:testing_iiop_ushort(Obj3, ?USHORTMAX),
+ ?match([?USHORTMAX], put(out_request, undefined)),
+ ?match(Result31, put(in_reply, undefined)),
+
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: local_default
+%% Description:
+%%-----------------------------------------------------------------
+local_default(doc) -> [""];
+local_default(suite) -> [];
+local_default(_) ->
+ ?match({native, [?MODULE]}, orber:get_local_interceptors()),
+ %% Global settings
+ Obj1 = orber_test_server:oe_create(state, []),
+ Result11 = orber_test_server:testing_iiop_ushort(Obj1, ?USHORTMAX),
+ ?match([?USHORTMAX], put(out_request, undefined)),
+ ?match(Result11, put(in_reply, undefined)),
+
+ Result12 = ?match({'EXCEPTION',_},
+ orber_test_server:testing_iiop_ushort(Obj1, ?USHORTMAX+1)),
+ ?match([(?USHORTMAX+1)], put(out_request, undefined)),
+ ?nomatch(Result12, put(in_reply, undefined)),
+
+ Result13 = orber_test_server:testing_iiop_oneway_delay(Obj1, 0),
+ ?match([0], put(out_request, undefined)),
+ ?nomatch(Result13, put(in_reply, undefined)),
+
+ Result14 = ?match({'EXCEPTION', _},
+ orber_test_server:raise_local_exception(Obj1)),
+ ?match([], put(out_request, undefined)),
+ ?match(Result14, put(in_reply, undefined)),
+
+ Result15 = ?match({'EXCEPTION',_}, orber_test_server:stop_brutal(Obj1)),
+ ?match([], put(out_request, undefined)),
+ ?match(Result15, put(in_reply, undefined)),
+
+
+ %% Per-object
+ Obj2 = orber_test_server:oe_create(state,[{local_interceptors, false}]),
+
+ Result21 = orber_test_server:testing_iiop_ushort(Obj2, ?USHORTMAX),
+ ?nomatch([?USHORTMAX], put(out_request, undefined)),
+ ?nomatch(Result21, put(in_reply, undefined)),
+ corba:dispose(Obj2),
+
+ Obj3 = orber_test_server:oe_create(state,[{local_interceptors, true}]),
+
+ Result31 = orber_test_server:testing_iiop_ushort(Obj3, ?USHORTMAX),
+ ?match([?USHORTMAX], put(out_request, undefined)),
+ ?match(Result31, put(in_reply, undefined)),
+ corba:dispose(Obj3),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: local_local
+%% Description:
+%%-----------------------------------------------------------------
+local_local(doc) -> [""];
+local_local(suite) -> [];
+local_local(_) ->
+ ?match({native, [?MODULE]}, orber:get_local_interceptors()),
+ %% Global settings
+ Obj1 = orber_test_server:oe_create(state, [{regname, {local, regname}}]),
+ Result11 = orber_test_server:testing_iiop_ushort(Obj1, ?USHORTMAX),
+ ?match([?USHORTMAX], put(out_request, undefined)),
+ ?match(Result11, put(in_reply, undefined)),
+
+ Result12 = ?match({'EXCEPTION',_},
+ orber_test_server:testing_iiop_ushort(Obj1, ?USHORTMAX+1)),
+ ?match([(?USHORTMAX+1)], put(out_request, undefined)),
+ ?nomatch(Result12, put(in_reply, undefined)),
+
+ Result13 = orber_test_server:testing_iiop_oneway_delay(Obj1, 0),
+ ?match([0], put(out_request, undefined)),
+ ?nomatch(Result13, put(in_reply, undefined)),
+
+ Result14 = ?match({'EXCEPTION', _},
+ orber_test_server:raise_local_exception(Obj1)),
+ ?match([], put(out_request, undefined)),
+ ?match(Result14, put(in_reply, undefined)),
+
+ Result15 = ?match({'EXCEPTION',_}, orber_test_server:stop_brutal(Obj1)),
+ ?match([], put(out_request, undefined)),
+ ?match(Result15, put(in_reply, undefined)),
+
+ %% Per-object
+ Obj2 = orber_test_server:oe_create(state,[{regname, {local, regname}},
+ {local_interceptors, false}]),
+
+ Result21 = orber_test_server:testing_iiop_ushort(Obj2, ?USHORTMAX),
+ ?nomatch([?USHORTMAX], put(out_request, undefined)),
+ ?nomatch(Result21, put(in_reply, undefined)),
+ corba:dispose(Obj2),
+
+ Obj3 = orber_test_server:oe_create(state,[{regname, {local, regname}},
+ {local_interceptors, true}]),
+
+ Result31 = orber_test_server:testing_iiop_ushort(Obj3, ?USHORTMAX),
+ ?match([?USHORTMAX], put(out_request, undefined)),
+ ?match(Result31, put(in_reply, undefined)),
+ corba:dispose(Obj3),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: local_global
+%% Description:
+%%-----------------------------------------------------------------
+local_global(doc) -> [""];
+local_global(suite) -> [];
+local_global(_) ->
+ ?match({native, [?MODULE]}, orber:get_local_interceptors()),
+ %% Global settings
+ Obj1 = orber_test_server:oe_create(state, [{regname, {global, regname}}]),
+ Result11 = orber_test_server:testing_iiop_ushort(Obj1, ?USHORTMAX),
+ ?match([?USHORTMAX], put(out_request, undefined)),
+ ?match(Result11, put(in_reply, undefined)),
+
+ Result12 = ?match({'EXCEPTION',_},
+ orber_test_server:testing_iiop_ushort(Obj1, ?USHORTMAX+1)),
+ ?match([(?USHORTMAX+1)], put(out_request, undefined)),
+ ?nomatch(Result12, put(in_reply, undefined)),
+
+ Result13 = orber_test_server:testing_iiop_oneway_delay(Obj1, 0),
+ ?match([0], put(out_request, undefined)),
+ ?nomatch(Result13, put(in_reply, undefined)),
+
+ Result14 = ?match({'EXCEPTION', _},
+ orber_test_server:raise_local_exception(Obj1)),
+ ?match([], put(out_request, undefined)),
+ ?match(Result14, put(in_reply, undefined)),
+
+ Result15 = ?match({'EXCEPTION',_}, orber_test_server:stop_brutal(Obj1)),
+ ?match([], put(out_request, undefined)),
+ ?match(Result15, put(in_reply, undefined)),
+
+ %% Per-object
+ Obj2 = orber_test_server:oe_create(state,[{regname, {global, regname}},
+ {local_interceptors, false}]),
+
+ Result21 = orber_test_server:testing_iiop_ushort(Obj2, ?USHORTMAX),
+ ?nomatch([?USHORTMAX], put(out_request, undefined)),
+ ?nomatch(Result21, put(in_reply, undefined)),
+ corba:dispose(Obj2),
+
+ Obj3 = orber_test_server:oe_create(state,[{regname, {global, regname}},
+ {local_interceptors, true}]),
+
+ Result31 = orber_test_server:testing_iiop_ushort(Obj3, ?USHORTMAX),
+ ?match([?USHORTMAX], put(out_request, undefined)),
+ ?match(Result31, put(in_reply, undefined)),
+ corba:dispose(Obj3),
+ ok.
+
+
+
+
+%%-----------------------------------------------------------------
+%% Local functions
+%%-----------------------------------------------------------------
+%%-----------------------------------------------------------------
+%% function : in_reply
+%%-----------------------------------------------------------------
+in_reply(Ref, _ObjKey, Ctx, Op, Reply, _Args) ->
+ error_logger:info_msg("=============== in_reply =================
+Connection: ~p
+Operation : ~p
+Reply : ~p
+Context : ~p
+==========================================~n",
+ [Ref, Op, Reply, Ctx]),
+ put(in_reply, Reply),
+ {Reply, "NewArgs"}.
+
+%%-----------------------------------------------------------------
+%% function : out_request
+%%-----------------------------------------------------------------
+out_request(Ref, _ObjKey, Ctx, Op, Params, _Args) ->
+ error_logger:info_msg("=============== out_request ==============
+Connection: ~p
+Operation : ~p
+Parameters: ~p
+Context : ~p
+==========================================~n",
+ [Ref, Op, Params, Ctx]),
+ put(out_request, Params),
+ {Params, "NewArgs"}.
diff --git a/lib/orber/test/iop_ior_10_SUITE.erl b/lib/orber/test/iop_ior_10_SUITE.erl
new file mode 100644
index 0000000000..1000c7f113
--- /dev/null
+++ b/lib/orber/test/iop_ior_10_SUITE.erl
@@ -0,0 +1,167 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1999-2010. 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%
+%%
+%%
+%%-----------------------------------------------------------------
+%%
+%% Description:
+%% Test suite for the IOR functions
+%%
+%%-----------------------------------------------------------------
+-module(iop_ior_10_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/src/orber_iiop.hrl").
+
+-define(default_timeout, ?t:minutes(3)).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-export([]).
+-compile(export_all).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["Description", "more description"];
+all(suite) ->
+ [encoding, create_and_get_ops].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: IOR encoding test
+%% Description: Just testing the string_encoding function because the
+%% other encodings is called from them.
+%%-----------------------------------------------------------------
+encoding(doc) -> ["Description", "more description"];
+encoding(suite) -> [];
+encoding(_) ->
+ V = #'IIOP_Version'{major=1,minor=0},
+ M0 = 'Module_Interface',
+ T0 = "IDL:Module/Interface:1.0",
+ H0 = "my.hostname.org",
+ P0 = 4040,
+ N0 = 'name',
+ ?line O0 = corba_fake_mk_objkey(M0, registered, N0),
+ PB0 = #'IIOP_ProfileBody_1_0'{iiop_version=V, host=H0, port=P0, object_key=O0},
+ TP0 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB0},
+ S0 = #'IOP_IOR'{type_id=T0, profiles=[TP0]},
+ N1 = list_to_pid("<0.100.0>"),
+ ?line O1 = corba_fake_mk_objkey(M0, key, N1),
+ PB1 = #'IIOP_ProfileBody_1_0'{iiop_version=V, host=H0, port=P0, object_key=O1},
+ TP1 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB1},
+ S1 = #'IOP_IOR'{type_id=T0, profiles=[TP1]},
+ O2 = "This is an external objectkey",
+ PB2 = #'IIOP_ProfileBody_1_0'{iiop_version=V, host=H0, port=P0, object_key=O2},
+ TP2 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB2},
+ S2 = #'IOP_IOR'{type_id=T0, profiles=[TP2]},
+ ?line C0 = iop_ior:string_code(S0),
+ ?line {S0, <<>>, _} = iop_ior:string_decode(C0),
+ ?line C1 = iop_ior:string_code(S1),
+ ?line {S1, <<>>, _} = iop_ior:string_decode(C1),
+ ?line C2 = iop_ior:string_code(S2),
+ ?line {S2, <<>>, _} = iop_ior:string_decode(C2),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: IOR creation test
+%% Description:
+%%-----------------------------------------------------------------
+create_and_get_ops(doc) -> ["Description", "more description"];
+create_and_get_ops(suite) -> [];
+create_and_get_ops(_) ->
+ V = #'IIOP_Version'{major=1,minor=0},
+ M0 = 'Module_Interface',
+ T0 = "IDL:Module/Interface:1.0",
+ H0 = "my.hostname.org",
+ P0 = 4040,
+ N0 = 'name',
+ ?line O0 = corba_fake_mk_objkey(M0, registered, N0),
+ PB0 = #'IIOP_ProfileBody_1_0'{iiop_version=V, host=H0, port=P0, object_key=O0},
+ TP0 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB0},
+ S0 = #'IOP_IOR'{type_id=T0, profiles=[TP0]},
+ ?line S0 = iop_ior:create({1, 0}, T0, [H0], P0, -1, O0, [], 0, 0),
+ N1 = list_to_pid("<0.100.0>"),
+ ?line O1 = corba_fake_mk_objkey(M0, key, N1),
+ {_,_,K1,_,_,_} = O1,
+ PB1 = #'IIOP_ProfileBody_1_0'{iiop_version=V, host=H0, port=P0, object_key=O1},
+ TP1 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB1},
+ S1 = #'IOP_IOR'{type_id=T0, profiles=[TP1]},
+ ?line S1 = iop_ior:create({1, 0}, T0, [H0], P0, -1, O1, [], 0, 0),
+ O2 = "This is an external objectkey",
+ PB2 = #'IIOP_ProfileBody_1_0'{iiop_version=V, host=H0, port=P0, object_key=O2},
+ TP2 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB2},
+ S2 = #'IOP_IOR'{type_id=T0, profiles=[TP2]},
+ ?line {'internal_registered', N0, _, _, M0} = iop_ior:get_key(S0),
+ ?line {'internal', K1, _, _, M0} = iop_ior:get_key(S1),
+ ?line {'external', {H0, P0, O2, _,_,
+ #host_data{protocol = normal,
+ ssl_data = undefined,
+ version = {1,0},
+ csiv2_mech = undefined,
+ csiv2_statefull = false,
+ charset = 65537,
+ wcharset = 65801,
+ ft_heartbeat = false,
+ ft_primary = false,
+ ft_group = undefined,
+ csiv2_addresses = []}}}
+ = iop_ior:get_key(S2),
+ ?line T0 = iop_ior:get_typeID(S0),
+ ?line O0 = iop_ior:get_objkey(S0),
+ ?line O1 = iop_ior:get_objkey(S1),
+ ?line O2 = iop_ior:get_objkey(S2),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Internal functions
+%%-----------------------------------------------------------------
+corba_fake_mk_objkey(Id, 'key', Pid) when is_pid(Pid) ->
+ Key = make_objkey(),
+ {Id, 'key', Key, term_to_binary(undefined), 0, 0};
+corba_fake_mk_objkey(Id, 'key', RegName) when is_atom(RegName) ->
+ Key = term_to_binary(RegName),
+ {Id, 'key', Key, term_to_binary(undefined), 0, 0};
+corba_fake_mk_objkey(Id, 'registered', RegName) when is_atom(RegName) ->
+ {Id, 'registered', RegName, term_to_binary(undefined), 0, 0}.
+
+
+make_objkey() ->
+ term_to_binary({now(), node()}).
diff --git a/lib/orber/test/iop_ior_11_SUITE.erl b/lib/orber/test/iop_ior_11_SUITE.erl
new file mode 100644
index 0000000000..35d01789ee
--- /dev/null
+++ b/lib/orber/test/iop_ior_11_SUITE.erl
@@ -0,0 +1,186 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2010. 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%
+%%
+%%
+%%-----------------------------------------------------------------
+%%
+%% Description:
+%% Test suite for the IOR functions
+%%
+%%-----------------------------------------------------------------
+-module(iop_ior_11_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/src/orber_iiop.hrl").
+
+-define(default_timeout, ?t:minutes(3)).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-export([]).
+-compile(export_all).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["Description", "more description"];
+all(suite) ->
+ [encoding, create_and_get_ops].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: IOR encoding test
+%% Description: Just testing the string_encoding function because the
+%% other encodings is called from them.
+%%-----------------------------------------------------------------
+encoding(doc) -> ["Description", "more description"];
+encoding(suite) -> [];
+encoding(_) ->
+ V = #'IIOP_Version'{major=1,minor=1},
+ M0 = 'Module_Interface',
+ T0 = "IDL:Module/Interface:1.0",
+ H0 = "my.hostname.org",
+ P0 = 4040,
+ N0 = 'name',
+ Components = case orber:iiop_ssl_port() of
+ -1 ->
+ [];
+ SSLPort ->
+ [#'IOP_TaggedComponent'{tag=?TAG_SSL_SEC_TRANS,
+ component_data=[0 |
+ cdrlib:enc_unsigned_short(2,
+ cdrlib:enc_unsigned_short(2,
+ cdrlib:enc_unsigned_short(SSLPort, [])))]}]
+ end,
+ ?line O0 = corba_fake_mk_objkey(M0, registered, N0),
+ PB0 = #'IIOP_ProfileBody_1_1'{iiop_version=V, host=H0, port=P0, object_key=O0,
+ components=Components},
+ TP0 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB0},
+ S0 = #'IOP_IOR'{type_id=T0, profiles=[TP0]},
+ N1 = list_to_pid("<0.100.0>"),
+ ?line O1 = corba_fake_mk_objkey(M0, key, N1),
+ PB1 = #'IIOP_ProfileBody_1_1'{iiop_version=V, host=H0, port=P0, object_key=O1,
+ components=[]},
+ TP1 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB1},
+ S1 = #'IOP_IOR'{type_id=T0, profiles=[TP1]},
+ O2 = "This is an external objectkey",
+ PB2 = #'IIOP_ProfileBody_1_1'{iiop_version=V, host=H0, port=P0, object_key=O2,
+ components=[]},
+ TP2 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB2},
+ S2 = #'IOP_IOR'{type_id=T0, profiles=[TP2]},
+ ?line C0 = iop_ior:string_code(S0),
+ ?line {S0, <<>>, _} = iop_ior:string_decode(C0),
+ ?line C1 = iop_ior:string_code(S1),
+ ?line {S1, <<>>, _} = iop_ior:string_decode(C1),
+ ?line C2 = iop_ior:string_code(S2),
+ ?line {S2, <<>>, _} = iop_ior:string_decode(C2),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: IOR creation test
+%% Description:
+%%-----------------------------------------------------------------
+create_and_get_ops(doc) -> ["Description", "more description"];
+create_and_get_ops(suite) -> [];
+create_and_get_ops(_) ->
+ V = #'IIOP_Version'{major=1,minor=1},
+ CSC = #'IOP_TaggedComponent'{tag=?TAG_CODE_SETS,
+ component_data=?DEFAULT_CODESETS},
+ M0 = 'Module_Interface',
+ T0 = "IDL:Module/Interface:1.0",
+ H0 = "my.hostname.org",
+ P0 = 4040,
+ N0 = 'name',
+ ?line O0 = corba_fake_mk_objkey(M0, registered, N0),
+ PB0 = #'IIOP_ProfileBody_1_1'
+ {iiop_version=V, host=H0, port=P0, object_key=O0,
+ components=[CSC]},
+ TP0 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB0},
+ S0 = #'IOP_IOR'{type_id=T0, profiles=[TP0]},
+ ?line S0 = iop_ior:create({1, 1}, T0, [H0], P0, -1, O0, [CSC], 0, 0),
+ N1 = list_to_pid("<0.100.0>"),
+ ?line O1 = corba_fake_mk_objkey(M0, key, N1),
+ {_,_,K1,_,_,_} = O1,
+ PB1 = #'IIOP_ProfileBody_1_1'
+ {iiop_version=V, host=H0, port=P0, object_key=O1,
+ components=[CSC]},
+ TP1 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB1},
+ S1 = #'IOP_IOR'{type_id=T0, profiles=[TP1]},
+ ?line S1 = iop_ior:create({1, 1}, T0, [H0], P0, -1, O1, [CSC], 0, 0),
+ O2 = "This is an external objectkey",
+ PB2 = #'IIOP_ProfileBody_1_1'{iiop_version=V, host=H0, port=P0, object_key=O2,
+ components=[]},
+ TP2 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB2},
+ S2 = #'IOP_IOR'{type_id=T0, profiles=[TP2]},
+ ?line {'internal_registered', N0, _, _, M0} = iop_ior:get_key(S0),
+ ?line {'internal', K1, _, _, M0} = iop_ior:get_key(S1),
+ ?line {'external', {H0, P0, O2, _,_,
+ #host_data{protocol = normal,
+ ssl_data = undefined,
+ version = {1,1},
+ csiv2_mech = undefined,
+ csiv2_statefull = false,
+ charset = 65537,
+ wcharset = 65801,
+ ft_heartbeat = false,
+ ft_primary = false,
+ ft_group = undefined,
+ csiv2_addresses = []}}} =
+ iop_ior:get_key(S2),
+ ?line T0 = iop_ior:get_typeID(S0),
+ ?line O0 = iop_ior:get_objkey(S0),
+ ?line O1 = iop_ior:get_objkey(S1),
+ ?line O2 = iop_ior:get_objkey(S2),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Internal functions
+%%-----------------------------------------------------------------
+corba_fake_mk_objkey(Id, 'key', Pid) when is_pid(Pid) ->
+ Key = make_objkey(),
+ {Id, 'key', Key, term_to_binary(undefined), 0, 0};
+corba_fake_mk_objkey(Id, 'key', RegName) when is_atom(RegName) ->
+ Key = term_to_binary(RegName),
+ {Id, 'key', Key, term_to_binary(undefined), 0, 0};
+corba_fake_mk_objkey(Id, 'registered', RegName) when is_atom(RegName) ->
+ {Id, 'registered', RegName, term_to_binary(undefined), 0, 0}.
+
+make_objkey() ->
+ term_to_binary({now(), node()}).
diff --git a/lib/orber/test/iop_ior_12_SUITE.erl b/lib/orber/test/iop_ior_12_SUITE.erl
new file mode 100644
index 0000000000..42db130e54
--- /dev/null
+++ b/lib/orber/test/iop_ior_12_SUITE.erl
@@ -0,0 +1,187 @@
+%%----------------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2000-2010. 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%
+%%
+%%
+%%-----------------------------------------------------------------
+%% File : iop_ior_12_SUITE.erl
+%% Description : Test suite for the IOR functions
+%%
+%%----------------------------------------------------------------------
+-module(iop_ior_12_SUITE).
+
+
+-include("test_server.hrl").
+-include_lib("orber/src/orber_iiop.hrl").
+
+-define(default_timeout, ?t:minutes(3)).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-export([]).
+-compile(export_all).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["Description", "more description"];
+all(suite) ->
+ [encoding, create_and_get_ops].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: IOR encoding test
+%% Description: Just testing the string_encoding function because the
+%% other encodings is called from them.
+%%-----------------------------------------------------------------
+encoding(doc) -> ["Description", "more description"];
+encoding(suite) -> [];
+encoding(_) ->
+ V = #'IIOP_Version'{major=1,minor=2},
+ M0 = 'Module_Interface',
+ T0 = "IDL:Module/Interface:1.0",
+ H0 = "my.hostname.org",
+ P0 = 4040,
+ N0 = 'name',
+ Components = case orber:iiop_ssl_port() of
+ -1 ->
+ [];
+ SSLPort ->
+ [#'IOP_TaggedComponent'{tag=?TAG_SSL_SEC_TRANS,
+ component_data=[0 |
+ cdrlib:enc_unsigned_short(2,
+ cdrlib:enc_unsigned_short(2,
+ cdrlib:enc_unsigned_short(SSLPort, [])))]}]
+ end,
+ ?line O0 = corba_fake_mk_objkey(M0, registered, N0),
+ PB0 = #'IIOP_ProfileBody_1_1'{iiop_version=V, host=H0, port=P0, object_key=O0,
+ components=Components},
+ TP0 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB0},
+ S0 = #'IOP_IOR'{type_id=T0, profiles=[TP0]},
+ N1 = list_to_pid("<0.100.0>"),
+ ?line O1 = corba_fake_mk_objkey(M0, key, N1),
+ PB1 = #'IIOP_ProfileBody_1_1'{iiop_version=V, host=H0, port=P0, object_key=O1,
+ components=[]},
+ TP1 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB1},
+ S1 = #'IOP_IOR'{type_id=T0, profiles=[TP1]},
+ O2 = "This is an external objectkey",
+ PB2 = #'IIOP_ProfileBody_1_1'{iiop_version=V, host=H0, port=P0, object_key=O2,
+ components=[]},
+ TP2 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB2},
+ S2 = #'IOP_IOR'{type_id=T0, profiles=[TP2]},
+ ?line C0 = iop_ior:string_code(S0),
+ ?line {S0, <<>>, _} = iop_ior:string_decode(C0),
+ ?line C1 = iop_ior:string_code(S1),
+ ?line {S1, <<>>, _} = iop_ior:string_decode(C1),
+ ?line C2 = iop_ior:string_code(S2),
+ ?line {S2, <<>>, _} = iop_ior:string_decode(C2),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: IOR creation test
+%% Description:
+%%-----------------------------------------------------------------
+create_and_get_ops(doc) -> ["Description", "more description"];
+create_and_get_ops(suite) -> [];
+create_and_get_ops(_) ->
+ V = #'IIOP_Version'{major=1,minor=2},
+ CSC = #'IOP_TaggedComponent'{tag=?TAG_CODE_SETS,
+ component_data=?DEFAULT_CODESETS},
+ M0 = 'Module_Interface',
+ T0 = "IDL:Module/Interface:1.0",
+ H0 = "my.hostname.org",
+ P0 = 4040,
+ N0 = 'name',
+ ?line O0 = corba_fake_mk_objkey(M0, registered, N0),
+ PB0 = #'IIOP_ProfileBody_1_1'
+ {iiop_version=V, host=H0, port=P0, object_key=O0,
+ components=[CSC]},
+ TP0 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB0},
+ S0 = #'IOP_IOR'{type_id=T0, profiles=[TP0]},
+ ?line S0 = iop_ior:create({1, 2}, T0, [H0], P0, -1, O0, [CSC], 0, 0),
+ N1 = list_to_pid("<0.100.0>"),
+ ?line O1 = corba_fake_mk_objkey(M0, key, N1),
+ {_,_,K1,_,_,_} = O1,
+ PB1 = #'IIOP_ProfileBody_1_1'
+ {iiop_version=V, host=H0, port=P0, object_key=O1,
+ components=[CSC]},
+ TP1 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB1},
+ S1 = #'IOP_IOR'{type_id=T0, profiles=[TP1]},
+ ?line S1 = iop_ior:create({1, 2}, T0, [H0], P0, -1, O1, [CSC], 0, 0),
+ O2 = "This is an external objectkey",
+ PB2 = #'IIOP_ProfileBody_1_1'{iiop_version=V, host=H0, port=P0, object_key=O2,
+ components=[]},
+ TP2 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB2},
+ S2 = #'IOP_IOR'{type_id=T0, profiles=[TP2]},
+ ?line {'internal_registered', N0, _, _, M0} = iop_ior:get_key(S0),
+ ?line {'internal', K1, _, _, M0} = iop_ior:get_key(S1),
+ ?line {'external', {H0, P0, O2,_,_,
+ #host_data{protocol = normal,
+ ssl_data = undefined,
+ version = {1,2},
+ csiv2_mech = undefined,
+ csiv2_statefull = false,
+ charset = 65537,
+ wcharset = 65801,
+ ft_heartbeat = false,
+ ft_primary = false,
+ ft_group = undefined,
+ csiv2_addresses = []}}}
+ = iop_ior:get_key(S2),
+ ?line T0 = iop_ior:get_typeID(S0),
+ ?line O0 = iop_ior:get_objkey(S0),
+ ?line O1 = iop_ior:get_objkey(S1),
+ ?line O2 = iop_ior:get_objkey(S2),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Internal functions
+%%-----------------------------------------------------------------
+corba_fake_mk_objkey(Id, 'key', Pid) when is_pid(Pid) ->
+ Key = make_objkey(),
+ {Id, 'key', Key, term_to_binary(undefined), 0, 0};
+corba_fake_mk_objkey(Id, 'key', RegName) when is_atom(RegName) ->
+ Key = term_to_binary(RegName),
+ {Id, 'key', Key, term_to_binary(undefined), 0, 0};
+corba_fake_mk_objkey(Id, 'registered', RegName) when is_atom(RegName) ->
+ {Id, 'registered', RegName, term_to_binary(undefined), 0, 0}.
+
+make_objkey() ->
+ term_to_binary({now(), node()}).
diff --git a/lib/orber/test/lname_SUITE.erl b/lib/orber/test/lname_SUITE.erl
new file mode 100644
index 0000000000..d1f0e7cf0e
--- /dev/null
+++ b/lib/orber/test/lname_SUITE.erl
@@ -0,0 +1,198 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-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%
+%%
+%%
+%%-----------------------------------------------------------------
+%%
+%% Description:
+%% Test suite for the Names Library module
+%%
+%%-----------------------------------------------------------------
+-module(lname_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
+-include_lib("orber/COSS/CosNaming/lname.hrl").
+
+-define(default_timeout, ?t:minutes(3)).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-export([]).
+-compile(export_all).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["Description", "more description"];
+all(suite) ->
+ [lname_component, lname].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: name component handling tests
+%% Description:
+%%-----------------------------------------------------------------
+lname_component(doc) -> ["Description", "more description"];
+lname_component(suite) -> [];
+lname_component(_) ->
+ create_test(),
+ get_tests(),
+ set_tests().
+
+create_test() ->
+ ?line #'CosNaming_NameComponent'{} = lname_component:create(),
+ ok.
+
+get_tests() ->
+ NC = #'CosNaming_NameComponent'{id="first", kind="apple"},
+ NC1 = #'CosNaming_NameComponent'{id="", kind="apple"},
+ NC2 = #'CosNaming_NameComponent'{id="first", kind=""},
+ ?line "first" = lname_component:get_id(NC),
+ ?line "apple" = lname_component:get_kind(NC),
+ ?line {'EXCEPTION', #'LNameComponent_NotSet'{}} =
+ (catch lname_component:get_id(NC1)),
+ ?line {'EXCEPTION', #'LNameComponent_NotSet'{}} =
+ (catch lname_component:get_kind(NC2)),
+ ok.
+
+set_tests() ->
+ NC = #'CosNaming_NameComponent'{id="first", kind="apple"},
+ ?line #'CosNaming_NameComponent'{id="second", kind="apple"} =
+ lname_component:set_id(NC, "second"),
+ ?line #'CosNaming_NameComponent'{id="first", kind="pear"} =
+ lname_component:set_kind(NC, "pear"),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: name handling tests
+%% Description:
+%%-----------------------------------------------------------------
+lname(doc) -> ["Description", "more description"];
+lname(suite) -> [];
+lname(_) ->
+ Name = [#'CosNaming_NameComponent'{id="first", kind="apple"},
+ #'CosNaming_NameComponent'{id="last", kind="peach"},
+ #'CosNaming_NameComponent'{id="and", kind="plum"},
+ #'CosNaming_NameComponent'{id="always", kind="orange"}],
+ insert_tests(Name),
+ get_tests(Name),
+ delete_tests(Name),
+ comparision_tests(Name),
+ convertion_tests(Name).
+
+insert_tests(Name) ->
+ NC = #'CosNaming_NameComponent'{id="new", kind="pear"},
+ ?line [NC, #'CosNaming_NameComponent'{id="first", kind="apple"},
+ #'CosNaming_NameComponent'{id="last", kind="peach"},
+ #'CosNaming_NameComponent'{id="and", kind="plum"},
+ #'CosNaming_NameComponent'{id="always", kind="orange"}] =
+ lname:insert_component(Name, 1, NC),
+ ?line [#'CosNaming_NameComponent'{id="first", kind="apple"},
+ #'CosNaming_NameComponent'{id="last", kind="peach"},
+ #'CosNaming_NameComponent'{id="and", kind="plum"},
+ #'CosNaming_NameComponent'{id="always", kind="orange"}, NC] =
+ lname:insert_component(Name, 5, NC),
+ ?line [#'CosNaming_NameComponent'{id="first", kind="apple"},
+ #'CosNaming_NameComponent'{id="last", kind="peach"},
+ #'CosNaming_NameComponent'{id="and", kind="plum"}, NC,
+ #'CosNaming_NameComponent'{id="always", kind="orange"}] =
+ lname:insert_component(Name, 4, NC),
+ ?line [#'CosNaming_NameComponent'{id="first", kind="apple"},
+ #'CosNaming_NameComponent'{id="last", kind="peach"}, NC,
+ #'CosNaming_NameComponent'{id="and", kind="plum"},
+ #'CosNaming_NameComponent'{id="always", kind="orange"}] =
+ lname:insert_component(Name, 3, NC),
+ ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ (catch lname:insert_component(Name, 6, NC)),
+ ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ (catch lname:insert_component(Name, 0, NC)),
+ ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ (catch lname:insert_component(Name, -2, NC)),
+ ok.
+
+get_tests(Name) ->
+ ?line #'CosNaming_NameComponent'{id="first", kind="apple"} =
+ lname:get_component(Name, 1),
+ ?line #'CosNaming_NameComponent'{id="always", kind="orange"} =
+ lname:get_component(Name, 4),
+ ?line #'CosNaming_NameComponent'{id="and", kind="plum"} =
+ lname:get_component(Name, 3),
+ ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ (catch lname:get_component(Name, 5)),
+ ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ (catch lname:get_component(Name, 0)),
+ ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ (catch lname:get_component(Name, -2)),
+ ok.
+
+delete_tests(Name) ->
+ ?line [#'CosNaming_NameComponent'{id="last", kind="peach"},
+ #'CosNaming_NameComponent'{id="and", kind="plum"},
+ #'CosNaming_NameComponent'{id="always", kind="orange"}] =
+ lname:delete_component(Name, 1),
+ ?line [#'CosNaming_NameComponent'{id="first", kind="apple"},
+ #'CosNaming_NameComponent'{id="last", kind="peach"},
+ #'CosNaming_NameComponent'{id="and", kind="plum"}] =
+ lname:delete_component(Name, 4),
+ ?line [#'CosNaming_NameComponent'{id="first", kind="apple"},
+ #'CosNaming_NameComponent'{id="last", kind="peach"},
+ #'CosNaming_NameComponent'{id="always", kind="orange"}] =
+ lname:delete_component(Name, 3),
+ ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ (catch lname:delete_component(Name, 6)),
+ ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ (catch lname:delete_component(Name, 0)),
+ ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ (catch lname:delete_component(Name, -2)),
+ ok.
+
+comparision_tests(Name) ->
+ ?line true = lname:equal(Name, Name),
+ ?line false = lname:equal(Name, lname:delete_component(Name, 2)),
+ ?line true = lname:less_than(lname:delete_component(Name, 2), Name),
+ ?line false = lname:less_than(Name, Name),
+ ?line false = lname:less_than(Name, lname:delete_component(Name, 2)),
+ ok.
+
+convertion_tests(Name) ->
+ ?line Name = lname:from_idl_form(Name),
+ ?line Name = lname:to_idl_form(Name),
+ ok.
diff --git a/lib/orber/test/multi_ORB_SUITE.erl b/lib/orber/test/multi_ORB_SUITE.erl
new file mode 100644
index 0000000000..d1931f5393
--- /dev/null
+++ b/lib/orber/test/multi_ORB_SUITE.erl
@@ -0,0 +1,2352 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1999-2010. 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(multi_ORB_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
+-include_lib("orber/src/orber_iiop.hrl").
+-include_lib("orber/src/ifr_objects.hrl").
+-include("idl_output/orber_test_server.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming_NamingContextExt.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming_NamingContext.hrl").
+
+
+-define(default_timeout, ?t:minutes(15)).
+
+-define(match(ExpectedRes,Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1, cases/0, init_all/1, finish_all/1, basic_PI_api/1, multi_orber_api/1,
+ init_per_testcase/2, fin_per_testcase/2, multi_pseudo_orber_api/1,
+ light_orber_api/1, light_orber2_api/1,
+ ssl_1_multi_orber_api/1, ssl_2_multi_orber_api/1, ssl_reconfigure_api/1,
+ iiop_timeout_api/1, iiop_timeout_added_api/1, setup_connection_timeout_api/1,
+ setup_multi_connection_timeout_api/1, setup_multi_connection_timeout_random_api/1,
+ setup_multi_connection_timeout_attempts_api/1,
+ fragments_server_api/1, fragments_max_server_api/1,
+ fragments_max_server_added_api/1, fragments_client_api/1,
+ light_ifr_api/1, max_requests_api/1, max_requests_added_api/1,
+ max_connections_api/1, max_packet_size_exceeded_api/1,
+ max_packet_size_ok_api/1, proxy_interface_api/1, proxy_interface_ipv6_api/1,
+ multiple_accept_api/1, implicit_context_api/1,
+ pseudo_implicit_context_api/1, pseudo_two_implicit_context_api/1,
+ oneway_implicit_context_api/1, implicit_context_roundtrip_api/1,
+ oneway_pseudo_implicit_context_api/1, flags_added_api/1,
+ oneway_pseudo_two_implicit_context_api/1,
+ local_interface_api/1, local_interface_ctx_override_api/1,
+ local_interface_acl_override_api/1, bad_giop_header_api/1,
+ bad_fragment_id_client_api/1, bad_id_cancel_request_api/1,
+ close_connections_api/1, close_connections_local_interface_api/1,
+ close_connections_local_interface_ctx_override_api/1, ssl_reconfigure_generation_3_api/1,
+ ssl_1_multi_orber_generation_3_api/1, ssl_2_multi_orber_generation_3_api/1,
+ close_connections_alt_iiop_addr_api/1, close_connections_multiple_profiles_api/1]).
+
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-export([pseudo_calls/2, pseudo_casts/2, create_fake_server_ORB/5, do_connect/3]).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["API tests for multi orber interfaces",
+ "This suite test intra-ORB communication. There are three scenarios:",
+ "* No security at all (multi_orber_api)",
+ "* Two secure orbs using ssl (ssl_multi_orb_api)",
+ "* One secure and one orb with no security. (ssl_multi_orb_api)"];
+all(suite) -> {req,
+ [mnesia],
+ {conf, init_all, cases(), finish_all}}.
+
+%% NOTE - the fragment test cases must be first since we explicitly set a request
+%% id. Otherwise, the request-id counter would be increased and we cannot know
+%% what it is.
+cases() ->
+ [fragments_server_api,
+ fragments_max_server_api,
+ fragments_max_server_added_api,
+ fragments_client_api,
+ flags_added_api,
+ bad_fragment_id_client_api,
+ bad_giop_header_api,
+ bad_id_cancel_request_api,
+ implicit_context_api,
+ pseudo_implicit_context_api,
+ pseudo_two_implicit_context_api,
+ implicit_context_roundtrip_api,
+ oneway_implicit_context_api,
+ oneway_pseudo_implicit_context_api,
+ oneway_pseudo_two_implicit_context_api,
+ proxy_interface_api,
+ proxy_interface_ipv6_api,
+ local_interface_api,
+ local_interface_ctx_override_api,
+ local_interface_acl_override_api,
+ close_connections_api,
+ close_connections_local_interface_api,
+ close_connections_local_interface_ctx_override_api,
+ close_connections_alt_iiop_addr_api,
+ close_connections_multiple_profiles_api,
+ multiple_accept_api,
+ max_requests_api,
+ max_requests_added_api,
+ max_connections_api,
+ max_packet_size_exceeded_api,
+ max_packet_size_ok_api,
+ light_ifr_api,
+ multi_pseudo_orber_api,
+ multi_orber_api,
+ light_orber_api,
+ light_orber2_api,
+ basic_PI_api,
+ iiop_timeout_api,
+ iiop_timeout_added_api,
+ setup_connection_timeout_api,
+ setup_multi_connection_timeout_api,
+ setup_multi_connection_timeout_attempts_api,
+ setup_multi_connection_timeout_random_api,
+ ssl_1_multi_orber_api,
+ ssl_1_multi_orber_generation_3_api,
+ ssl_2_multi_orber_api,
+ ssl_2_multi_orber_generation_3_api,
+ ssl_reconfigure_generation_3_api,
+ ssl_reconfigure_api
+ ].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+
+init_per_testcase(_Case, Config) ->
+ Path = code:which(?MODULE),
+ code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
+ Dog=test_server:timetrap(?default_timeout),
+ orber:jump_start(0),
+ oe_orber_test_server:oe_register(),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ oe_orber_test_server:oe_unregister(),
+ orber:jump_stop(),
+ Path = code:which(?MODULE),
+ code:del_path(filename:join(filename:dirname(Path), "idl_output")),
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+init_all(Config) ->
+ if
+ is_list(Config) ->
+ Config;
+ true ->
+ exit("Config not a list")
+ end.
+
+finish_all(Config) ->
+ Config.
+
+%%-----------------------------------------------------------------
+%% API tests for ORB to ORB, no security
+%%-----------------------------------------------------------------
+
+implicit_context_api(doc) -> ["IIOP Implicit Contex tests"];
+implicit_context_api(suite) -> [];
+implicit_context_api(_Config) ->
+ IP = orber_test_lib:get_host(),
+ Loopback = orber_test_lib:get_loopback_interface(),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_LOCAL_INTERFACE},
+ {ip_address, IP}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ %% Create a remote server
+ ?match(ok, orber_test_lib:remote_apply(ServerNode, orber_test_lib,
+ install_test_data,
+ [nameservice])),
+ IOR = ?match(#'IOP_IOR'{},
+ corba:string_to_object("corbaname::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService#mamba")),
+
+ Relay = ?match({_,_,_,_,_,_}, orber_test_server:oe_create([])),
+ ?match(ok,
+ orber_test_server:
+ relay_call(Relay,
+ [{context,
+ [#'IOP_ServiceContext'{context_id=?ORBER_GENERIC_CTX_ID,
+ context_data = {interface,
+ Loopback}}]}],
+ IOR)),
+
+ ?match([_,_], orber:iiop_connections(out)),
+ Conns = ?match([_,_],
+ orber_test_lib:remote_apply(ServerNode, orber, iiop_connections, [in])),
+ ?match(true, lists:keymember(Loopback, 1, Conns)),
+ ok.
+
+implicit_context_roundtrip_api(doc) ->
+ ["IIOP Implicit Contex roundtrip tests"];
+implicit_context_roundtrip_api(suite) -> [];
+implicit_context_roundtrip_api(_Config) ->
+ IP = orber_test_lib:get_host(),
+ Loopback = orber_test_lib:get_loopback_interface(),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_LOCAL_INTERFACE},
+ {ip_address, IP}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ %% Create a remote server
+ ?match(ok, orber_test_lib:remote_apply(ServerNode, orber_test_lib,
+ install_test_data,
+ [nameservice])),
+ Relay = ?match(#'IOP_IOR'{},
+ corba:string_to_object("corbaname::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService#mamba")),
+
+ IOR = ?match({_,_,_,_,_,_}, orber_test_server:oe_create([], [])),
+ ?match(ok,
+ orber_test_server:
+ relay_call(Relay,
+ [{context,
+ [#'IOP_ServiceContext'{context_id=?ORBER_GENERIC_CTX_ID,
+ context_data = {interface,
+ Loopback}}]}],
+ IOR)),
+ ?match([_,_], orber:iiop_connections(out)),
+ Conns = ?match([_,_],
+ orber_test_lib:remote_apply(ServerNode, orber, iiop_connections, [in])),
+ ?match(true, lists:keymember(Loopback, 1, Conns)),
+ ok.
+
+
+
+oneway_implicit_context_api(doc) -> ["IIOP Implicit Contex oneway tests"];
+oneway_implicit_context_api(suite) -> [];
+oneway_implicit_context_api(_Config) ->
+ IP = orber_test_lib:get_host(),
+ Loopback = orber_test_lib:get_loopback_interface(),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_LOCAL_INTERFACE},
+ {ip_address, IP}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ %% Create a remote server
+ ?match(ok, orber_test_lib:remote_apply(ServerNode, orber_test_lib,
+ install_test_data,
+ [nameservice])),
+ IOR = ?match(#'IOP_IOR'{},
+ corba:string_to_object("corbaname::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService#mamba")),
+
+ Relay = ?match({_,_,_,_,_,_}, orber_test_server:oe_create([])),
+ ?match(ok,
+ orber_test_server:
+ relay_cast(Relay,
+ [{context,
+ [#'IOP_ServiceContext'{context_id=?ORBER_GENERIC_CTX_ID,
+ context_data = {interface,
+ Loopback}}]}],
+ IOR)),
+
+ %% We must wait for a few seconds for the client to be able to set up the
+ %% connection (since it's a oneway operation).
+ timer:sleep(5000),
+ ?match([_,_], orber:iiop_connections(out)),
+ Conns = ?match([_,_],
+ orber_test_lib:remote_apply(ServerNode, orber, iiop_connections, [in])),
+ ?match(true, lists:keymember(Loopback, 1, Conns)),
+ ok.
+
+
+pseudo_implicit_context_api(doc) -> ["IIOP Implicit Contex tests (via pseudo object)"];
+pseudo_implicit_context_api(suite) -> [];
+pseudo_implicit_context_api(_Config) ->
+ IP = orber_test_lib:get_host(),
+ Loopback = orber_test_lib:get_loopback_interface(),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_LOCAL_INTERFACE},
+ {ip_address, IP}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ %% Create a remote server
+ ?match(ok, orber_test_lib:remote_apply(ServerNode, orber_test_lib,
+ install_test_data,
+ [nameservice])),
+ IOR = ?match(#'IOP_IOR'{},
+ corba:string_to_object("corbaname::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService#mamba")),
+
+ Relay = ?match({_,_,_,_,_,_}, orber_test_server:oe_create([], [{pseudo,true}])),
+ ?match(ok,
+ orber_test_server:
+ relay_call(Relay,
+ [{context,
+ [#'IOP_ServiceContext'{context_id=?ORBER_GENERIC_CTX_ID,
+ context_data = {interface,
+ Loopback}}]}],
+ IOR)),
+ ?match([_,_], orber:iiop_connections(out)),
+ Conns = ?match([_,_],
+ orber_test_lib:remote_apply(ServerNode, orber, iiop_connections, [in])),
+ ?match(true, lists:keymember(Loopback, 1, Conns)),
+ ok.
+
+pseudo_two_implicit_context_api(doc) ->
+ ["IIOP two Implicit Contex tests (via pseudo object)"];
+pseudo_two_implicit_context_api(suite) -> [];
+pseudo_two_implicit_context_api(_Config) ->
+ IP = orber_test_lib:get_host(),
+ Loopback = orber_test_lib:get_loopback_interface(),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_LOCAL_INTERFACE},
+ {ip_address, IP}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ %% Create a remote server
+ ?match(ok, orber_test_lib:remote_apply(ServerNode, orber_test_lib,
+ install_test_data,
+ [nameservice])),
+ IOR = ?match(#'IOP_IOR'{},
+ corba:string_to_object("corbaname::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService#mamba")),
+
+ Relay = ?match({_,_,_,_,_,_}, orber_test_server:oe_create([], [{pseudo,true}])),
+ put(oe_server_in_context,
+ [#'IOP_ServiceContext'{context_id=?ORBER_GENERIC_CTX_ID,
+ context_data = {interface,
+ IP}}]),
+ ?match(ok,
+ orber_test_server:
+ relay_call(Relay,
+ [{context,
+ [#'IOP_ServiceContext'{context_id=?ORBER_GENERIC_CTX_ID,
+ context_data = {interface,
+ Loopback}}]}],
+ IOR)),
+ ?match([_,_], orber:iiop_connections(out)),
+ Conns = ?match([_,_],
+ orber_test_lib:remote_apply(ServerNode, orber, iiop_connections, [in])),
+ ?match(true, lists:keymember(Loopback, 1, Conns)),
+ ok.
+
+oneway_pseudo_implicit_context_api(doc) -> ["IIOP Implicit Contex tests (via pseudo object oneway)"];
+oneway_pseudo_implicit_context_api(suite) -> [];
+oneway_pseudo_implicit_context_api(_Config) ->
+ IP = orber_test_lib:get_host(),
+ Loopback = orber_test_lib:get_loopback_interface(),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_LOCAL_INTERFACE},
+ {ip_address, IP}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ %% Create a remote server
+ ?match(ok, orber_test_lib:remote_apply(ServerNode, orber_test_lib,
+ install_test_data,
+ [nameservice])),
+ IOR = ?match(#'IOP_IOR'{},
+ corba:string_to_object("corbaname::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService#mamba")),
+
+ Relay = ?match({_,_,_,_,_,_}, orber_test_server:oe_create([], [{pseudo,true}])),
+ ?match(ok,
+ orber_test_server:
+ relay_cast(Relay,
+ [{context,
+ [#'IOP_ServiceContext'{context_id=?ORBER_GENERIC_CTX_ID,
+ context_data = {interface,
+ Loopback}}]}],
+ IOR)),
+ ?match([_,_], orber:iiop_connections(out)),
+ Conns = ?match([_,_],
+ orber_test_lib:remote_apply(ServerNode, orber, iiop_connections, [in])),
+ ?match(true, lists:keymember(Loopback, 1, Conns)),
+ ok.
+
+oneway_pseudo_two_implicit_context_api(doc) ->
+ ["IIOP two Implicit Contex tests (via pseudo object oneway)"];
+oneway_pseudo_two_implicit_context_api(suite) -> [];
+oneway_pseudo_two_implicit_context_api(_Config) ->
+ IP = orber_test_lib:get_host(),
+ Loopback = orber_test_lib:get_loopback_interface(),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_LOCAL_INTERFACE},
+ {ip_address, IP}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ %% Create a remote server
+ ?match(ok, orber_test_lib:remote_apply(ServerNode, orber_test_lib,
+ install_test_data,
+ [nameservice])),
+ IOR = ?match(#'IOP_IOR'{},
+ corba:string_to_object("corbaname::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService#mamba")),
+
+ Relay = ?match({_,_,_,_,_,_}, orber_test_server:oe_create([], [{pseudo,true}])),
+ %% Add incoming implicit context which must be removed.
+ put(oe_server_in_context,
+ [#'IOP_ServiceContext'{context_id=?ORBER_GENERIC_CTX_ID,
+ context_data = {interface,
+ IP}}]),
+ ?match(ok,
+ orber_test_server:
+ relay_cast(Relay,
+ [{context,
+ [#'IOP_ServiceContext'{context_id=?ORBER_GENERIC_CTX_ID,
+ context_data = {interface,
+ Loopback}}]}],
+ IOR)),
+ ?match([_,_], orber:iiop_connections(out)),
+ Conns = ?match([_,_],
+ orber_test_lib:remote_apply(ServerNode, orber, iiop_connections, [in])),
+ ?match(true, lists:keymember(Loopback, 1, Conns)),
+ ok.
+
+
+
+multiple_accept_api(doc) -> ["IIOP Multiple Accept tests"];
+multiple_accept_api(suite) -> [];
+multiple_accept_api(_Config) ->
+ IP = orber_test_lib:get_host(),
+ Loopback = orber_test_lib:get_loopback_interface(),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_LOCAL_INTERFACE},
+ {ip_address, IP}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ %% The server ORB doesn't listen to 127.0.0.1
+ ?match({'EXCEPTION',_},
+ corba:string_to_object("corbaloc::1.2@" ++Loopback++":"++integer_to_list(ServerPort)++"/NameService")),
+ ?match([], orber:iiop_connections(out)),
+
+ IOR1 = ?match(#'IOP_IOR'{},
+ corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
+ ?match({'external', {IP, ServerPort, _ObjectKey, _Counter, _TP, _NewHD}},
+ iop_ior:get_key(IOR1)),
+ ?match([_], orber:iiop_connections(out)),
+
+ {ok, Ref1} = ?match({ok, _},
+ orber_test_lib:remote_apply(ServerNode, orber,
+ add_listen_interface,
+ [Loopback, normal])),
+
+ IOR2 = ?match(#'IOP_IOR'{},
+ corba:string_to_object("corbaloc::1.2@"++Loopback++":"++integer_to_list(ServerPort)++"/NameService")),
+ ?match({'external', {Loopback, ServerPort, _ObjectKey, _Counter, _TP, _NewHD}},
+ iop_ior:get_key(IOR2)),
+ ?match([_,_], orber:iiop_connections(out)),
+
+ {ok, Ref2} = ?match({ok, _},
+ orber_test_lib:remote_apply(ServerNode, orber,
+ add_listen_interface,
+ [Loopback, normal, 9543])),
+ ?match({error, eaddrinuse},
+ orber_test_lib:remote_apply(ServerNode, orber,
+ add_listen_interface,
+ [Loopback, normal, 9543])),
+
+ IOR3 = ?match(#'IOP_IOR'{},
+ corba:string_to_object("corbaloc::1.2@"++Loopback++":9543/NameService")),
+ ?match({'external', {Loopback, 9543, _ObjectKey, _Counter, _TP, _NewHD}},
+ iop_ior:get_key(IOR3)),
+ ?match([_,_,_], orber:iiop_connections(out)),
+
+ ?match(ok,
+ orber_test_lib:remote_apply(ServerNode, orber,
+ remove_listen_interface, [Ref1])),
+ %% Wait a few seconds to be sure that the connections really has been removed.
+ timer:sleep(4000),
+ ?match([_,_], orber:iiop_connections(out)),
+
+ ?match(ok,
+ orber_test_lib:remote_apply(ServerNode, orber,
+ remove_listen_interface, [Ref2])),
+ %% Wait a few seconds to be sure that the connections really has been removed.
+ timer:sleep(4000),
+ ?match([_], orber:iiop_connections(out)),
+
+ ?match({'EXCEPTION',_},
+ corba:string_to_object("corbaloc::1.2@"++Loopback++":9543/NameService")),
+ ?match({'EXCEPTION',_},
+ corba:string_to_object("corbaloc::1.2@"++Loopback++":"++integer_to_list(ServerPort)++"/NameService")),
+
+ IOR4 = ?match(#'IOP_IOR'{},
+ corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
+ ?match({'external', {IP, ServerPort, _ObjectKey, _Counter, _TP, _NewHD}},
+ iop_ior:get_key(IOR4)),
+
+ ok.
+
+
+proxy_interface_api(doc) -> ["IIOP Proxy Interface tests",
+ "This case test if the server ORB use the correct",
+ "interface when exporting IOR:s"];
+proxy_interface_api(suite) -> [];
+proxy_interface_api(_Config) ->
+ IP = orber_test_lib:get_host(),
+ Loopback = orber_test_lib:get_loopback_interface(),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_LOCAL_INTERFACE}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ IOR1 = ?match(#'IOP_IOR'{},
+ corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
+ ?match({'external', {IP, ServerPort, _ObjectKey, _Counter, _TP, _NewHD}},
+ iop_ior:get_key(IOR1)),
+ IOR2 = ?match(#'IOP_IOR'{},
+ corba:string_to_object("corbaloc::1.2@"++Loopback++":"++integer_to_list(ServerPort)++"/NameService")),
+ ?match({'external', {Loopback, ServerPort, _ObjectKey, _Counter, _TP, _NewHD}},
+ iop_ior:get_key(IOR2)),
+ ok.
+
+proxy_interface_ipv6_api(doc) -> ["IIOP Proxy Interface tests",
+ "This case test if the server ORB use the correct",
+ "IPv6 interface when exporting IOR:s"];
+proxy_interface_ipv6_api(suite) -> [];
+proxy_interface_ipv6_api(_Config) ->
+ case orber_test_lib:version_ok() of
+ true ->
+ proxy_interface_ipv6_api2();
+ Reason ->
+ Reason
+ end.
+
+proxy_interface_ipv6_api2() ->
+ Loopback = orber_test_lib:get_loopback_interface(inet6),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, (?ORB_ENV_USE_IPV6 bor
+ ?ORB_ENV_LOCAL_INTERFACE)}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+
+ {ok, ClientNode, _ClientHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_USE_IPV6}])),
+
+ IP = orber_test_lib:remote_apply(ClientNode, orber_test_lib, get_host, []),
+
+ IOR1 = ?match(#'IOP_IOR'{},
+ orber_test_lib:remote_apply(ClientNode, corba, string_to_object,
+ ["corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService"])),
+ ?match({'external', {IP, ServerPort, _ObjectKey, _Counter, _TP, _NewHD}},
+ orber_test_lib:remote_apply(ClientNode, iop_ior, get_key, [IOR1])),
+ IOR2 = ?match(#'IOP_IOR'{},
+ orber_test_lib:remote_apply(ClientNode, corba, string_to_object,
+ ["corbaloc::1.2@"++Loopback++":"++integer_to_list(ServerPort)++"/NameService"])),
+ ?match({'external', {Loopback, ServerPort, _ObjectKey, _Counter, _TP, _NewHD}},
+ orber_test_lib:remote_apply(ClientNode, iop_ior, get_key, [IOR2])),
+ ok.
+
+local_interface_api(doc) -> ["IIOP Local Interface tests",
+ "This case test if the server ORB use the correct",
+ "local interface when connecting to another ORB"];
+local_interface_api(suite) -> [];
+local_interface_api(_Config) ->
+ IP = orber_test_lib:get_host(),
+ Loopback = orber_test_lib:get_loopback_interface(),
+ {ok, ClientNode, _ClientHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{ip_address_local, Loopback}])),
+ Port = orber:iiop_port(),
+ ?match(#'IOP_IOR'{},
+ orber_test_lib:remote_apply(ClientNode, corba, string_to_object,
+ ["corbaloc::1.2@"++IP++":"++integer_to_list(Port)++"/NameService"])),
+ [{Loopback, RemotePort}] =
+ ?match([{Loopback,_RemotePort}], orber:iiop_connections(in)),
+
+ ?match([{IP, Port}],
+ orber_test_lib:remote_apply(ClientNode, orber,
+ iiop_connections, [out])),
+ ?match([{IP, Port}], orber:find_sockname_by_peername(Loopback,RemotePort)),
+ ?match([{Loopback, RemotePort}], orber:find_peername_by_sockname(IP, Port)),
+
+ ?match([{Loopback, RemotePort}],
+ orber_test_lib:remote_apply(ClientNode, orber,
+ find_sockname_by_peername,
+ [IP, Port])),
+ ?match([{IP, Port}],
+ orber_test_lib:remote_apply(ClientNode, orber,
+ find_peername_by_sockname,
+ [Loopback,RemotePort])),
+
+
+ ok.
+
+local_interface_ctx_override_api(doc) ->
+ ["IIOP Local Interface tests",
+ "This case test if the server ORB use the correct",
+ "local interface when connecting to another ORB"];
+local_interface_ctx_override_api(suite) -> [];
+local_interface_ctx_override_api(_Config) ->
+ IP = orber_test_lib:get_host(),
+ Loopback = orber_test_lib:get_loopback_interface(),
+ {ok, ClientNode, _ClientHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{ip_address_local, IP}])),
+ Port = orber:iiop_port(),
+ ?match(#'IOP_IOR'{},
+ orber_test_lib:remote_apply(ClientNode, corba, string_to_object,
+ ["corbaloc::1.2@"++IP++":"++integer_to_list(Port)++"/NameService",
+ [#'IOP_ServiceContext'
+ {context_id=?ORBER_GENERIC_CTX_ID,
+ context_data = {interface, Loopback}}]])),
+ [{Loopback, RemotePort}] =
+ ?match([{Loopback,_RemotePort}], orber:iiop_connections(in)),
+
+ ?match([{IP, Port, Loopback}],
+ orber_test_lib:remote_apply(ClientNode, orber,
+ iiop_connections, [out])),
+ ?match([{IP, Port}], orber:find_sockname_by_peername(Loopback,RemotePort)),
+ ?match([{Loopback, RemotePort}], orber:find_peername_by_sockname(IP, Port)),
+
+ ?match([{Loopback, RemotePort}],
+ orber_test_lib:remote_apply(ClientNode, orber,
+ find_sockname_by_peername,
+ [IP, Port])),
+ ?match([{IP, Port}],
+ orber_test_lib:remote_apply(ClientNode, orber,
+ find_peername_by_sockname,
+ [Loopback,RemotePort])),
+
+ ok.
+
+local_interface_acl_override_api(doc) ->
+ ["IIOP Local Interface tests",
+ "This case test if the server ORB use the correct",
+ "local interface when connecting to another ORB"];
+local_interface_acl_override_api(suite) -> [];
+local_interface_acl_override_api(_Config) ->
+ IP = orber_test_lib:get_host(),
+ Loopback = orber_test_lib:get_loopback_interface(),
+ ACL = [{tcp_out, IP ++ "/18", [Loopback]}],
+ {ok, ClientNode, _ClientHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{ip_address_local, IP},
+ {iiop_acl, ACL},
+ {flags, ?ORB_ENV_USE_ACL_OUTGOING}])),
+ Port = orber:iiop_port(),
+ ?match(#'IOP_IOR'{},
+ orber_test_lib:remote_apply(ClientNode, corba, string_to_object,
+ ["corbaloc::1.2@"++IP++":"++integer_to_list(Port)++"/NameService",
+ [#'IOP_ServiceContext'
+ {context_id=?ORBER_GENERIC_CTX_ID,
+ context_data = {interface, IP}}]])),
+ ?match([{Loopback,_RemotePort}], orber:iiop_connections(in)),
+ ?match(#'IOP_IOR'{},
+ orber_test_lib:remote_apply(ClientNode, corba, string_to_object,
+ ["corbaloc::1.2@"++IP++":"++integer_to_list(Port)++"/NameService"])),
+
+ [{Loopback, RemotePort}] =
+ ?match([{Loopback,_RemotePort}], orber:iiop_connections(in)),
+ ?match([{IP, Port, IP}], orber_test_lib:remote_apply(ClientNode, orber,
+ iiop_connections, [out])),
+ ?match([{IP, Port}], orber:find_sockname_by_peername(Loopback,RemotePort)),
+ ?match([{Loopback, RemotePort}], orber:find_peername_by_sockname(IP, Port)),
+
+ ?match([{Loopback, RemotePort}],
+ orber_test_lib:remote_apply(ClientNode, orber,
+ find_sockname_by_peername,
+ [IP, Port])),
+ ?match([{IP, Port}],
+ orber_test_lib:remote_apply(ClientNode, orber,
+ find_peername_by_sockname,
+ [Loopback,RemotePort])),
+
+ ok.
+
+
+iiop_timeout_api(doc) -> ["IIOP TIMEOUT API tests",
+ "This case test if timeout configuration behaves correctly"];
+iiop_timeout_api(suite) -> [];
+iiop_timeout_api(_Config) ->
+
+ %% Install two secure orber.
+ {ok, ClientNode, ClientHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{iiop_timeout, 6},
+ {iiop_connection_timeout, 3},
+ {iiop_in_connection_timeout, 3}])),
+ ClientPort = orber_test_lib:remote_apply(ClientNode, orber, iiop_port, []),
+
+ {ok, ServerNode, ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{iiop_timeout, 6},
+ {iiop_connection_timeout, 3},
+ {iiop_in_connection_timeout, 12}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+
+ ?match(ok, orber_test_lib:remote_apply(ServerNode, orber_test_lib,
+ install_test_data,
+ [timeout])),
+
+ %% Tell client_orb to interoperate with server_orb.
+ ?match(ok, orber_test_lib:remote_apply(ClientNode, orber_test_lib,
+ lookup,
+ [ServerHost, ServerPort])),
+ %% Interop worked fine, perform delay tests.
+ ?match(ok, orber_test_lib:remote_apply(ClientNode, orber_test_lib,
+ timeouts,
+ [ServerHost, ServerPort, 6000])),
+
+ %% Create a connection to the "client_orb", which will now act as server.
+ ?match({'IOP_IOR',_,_},
+ corba:string_to_object("corbaloc::1.2@"++ClientHost++":"++integer_to_list(ClientPort)++"/NameService")),
+ %% Check that the connection is established.
+ ?match([{_, ClientPort}], orber:iiop_connections(out)),
+ %% Wait >3 seconds (i.e. iiop_in_connection_timeout) and check if the connection
+ %% have been closed.
+ timer:sleep(8000),
+ ?match([], orber:iiop_connections(out)),
+
+ ?match(ok, orber_test_lib:remote_apply(ServerNode, orber_test_lib,
+ uninstall_test_data,
+ [timeout])),
+ ok.
+
+iiop_timeout_added_api(doc) -> ["IIOP TIMEOUT API tests",
+ "This case test if timeout configuration behaves correctly"];
+iiop_timeout_added_api(suite) -> [];
+iiop_timeout_added_api(_Config) ->
+ IP = orber_test_lib:get_host(),
+ {ok, Node, _Host} = ?match({ok,_,_}, orber_test_lib:js_node([])),
+ Port = 1 + orber_test_lib:remote_apply(Node, orber, iiop_port, []),
+ ?match({ok, _},
+ orber_test_lib:remote_apply(Node, orber,
+ add_listen_interface,
+ [IP, normal,
+ [{iiop_in_connection_timeout, 3},
+ {flags, ?ORB_ENV_LOCAL_INTERFACE},
+ {iiop_port, Port}]])),
+
+ ?match(ok, orber_test_lib:remote_apply(Node, orber_test_lib,
+ install_test_data,
+ [timeout])),
+
+ ?match({'IOP_IOR',_,_},
+ corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(Port)++"/NameService")),
+ %% Check that the connection is established.
+ ?match([{_, Port}], orber:iiop_connections(out)),
+ %% Wait >3 seconds (i.e. iiop_in_connection_timeout) and check if the connection
+ %% have been closed.
+ timer:sleep(8000),
+ ?match([], orber:iiop_connections(out)),
+
+ ?match(ok, orber_test_lib:remote_apply(Node, orber_test_lib,
+ uninstall_test_data,
+ [timeout])),
+ ok.
+
+%%-----------------------------------------------------------------
+%% API tests for ORB to ORB using pseudo call/cast, no security
+%%-----------------------------------------------------------------
+
+multi_pseudo_orber_api(doc) ->
+ ["MULTI ORB PSEUDO API tests",
+ "This case test if data encode/decode (IIOP) for pseudo objects",
+ "produce the correct result, i.e., the test_server echos",
+ "the input parameter or an exception is raised (MARSHAL)."];
+multi_pseudo_orber_api(suite) -> [];
+multi_pseudo_orber_api(_Config) ->
+ %% --- Create a slave-node ---
+ {ok, Node, Host} =
+ ?match({ok,_,_}, orber_test_lib:js_node()),
+ Port = orber_test_lib:remote_apply(Node, orber, iiop_port, []),
+
+ ?match(ok, orber_test_lib:remote_apply(Node, orber_test_lib,
+ install_test_data,
+ [pseudo])),
+
+ NSR = ?match({'IOP_IOR',"IDL:omg.org/CosNaming/NamingContextExt:1.0",_},
+ corba:string_to_object("corbaloc::1.1@"++Host++":"++
+ integer_to_list(Port)++"/NameService")),
+ Obj =
+ ?match({'IOP_IOR',"IDL:omg.org/orber_test/server:1.0",_},
+ 'CosNaming_NamingContext':resolve(NSR, lname:new(["mamba"]))),
+ orber_test_lib:corba_object_tests(Obj, NSR),
+
+ %% Can we even contact the object?
+ ?match(ok, orber_test_server:print(Obj)),
+
+ %% Invoke one blocking call followed by several invokations.
+ spawn(?MODULE, pseudo_calls, [5, Obj]),
+ ?match({ok, 10000}, orber_test_server:pseudo_call_delay(Obj, 10000)),
+ spawn(?MODULE, pseudo_casts, [5, Obj]),
+ ?match(ok, orber_test_server:pseudo_cast_delay(Obj, 10000)),
+
+ %%--- Testing code and decode arguments ---
+ orber_test_lib:test_coding(Obj),
+
+ %% Test if exit is handled properly.
+ ?match({'EXCEPTION',{'TRANSIENT',_,_,_}},
+ orber_test_server:stop_brutal(Obj)),
+
+ ?match(ok, orber_test_lib:remote_apply(Node, orber_test_lib,
+ uninstall_test_data,
+ [pseudo])),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% API tests for ORB to ORB with local flags definition set.
+%%-----------------------------------------------------------------
+flags_added_api(doc) ->
+ ["MULTI ORB PSEUDO with local flags definition set"];
+flags_added_api(suite) -> [];
+flags_added_api(_Config) ->
+ %% --- Create a slave-node ---
+ IP = orber_test_lib:get_host(),
+ {ok, Node, _Host} =
+ ?match({ok,_,_}, orber_test_lib:js_node([])),
+ Port = 1 + orber_test_lib:remote_apply(Node, orber, iiop_port, []),
+ ?match({ok, _},
+ orber_test_lib:remote_apply(Node, orber,
+ add_listen_interface,
+ [IP, normal,
+ [{flags, (?ORB_ENV_LOCAL_INTERFACE bor
+ ?ORB_ENV_EXCLUDE_CODESET_COMPONENT)},
+ {iiop_port, Port}]])),
+
+ ?match(ok, orber_test_lib:remote_apply(Node, orber_test_lib,
+ install_test_data,
+ [pseudo])),
+ Obj = ?match({'IOP_IOR',"IDL:omg.org/orber_test/server:1.0",_},
+ corba:string_to_object("corbaname::1.1@"++IP++":"++
+ integer_to_list(Port)++"/NameService#mamba")),
+ ?match({'external', {IP, Port, _ObjectKey, _Counter,
+ #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP,
+ profile_data=
+ #'IIOP_ProfileBody_1_1'{components=[]}},
+ _NewHD}},
+ iop_ior:get_key(Obj)),
+ ?match(ok, orber_test_lib:remote_apply(Node, orber_test_lib,
+ uninstall_test_data,
+ [pseudo])),
+
+ ok.
+
+
+
+%%-----------------------------------------------------------------
+%% API tests for ORB to ORB with limited concurrent requests
+%%-----------------------------------------------------------------
+max_requests_api(doc) ->
+ ["MULTI ORB PSEUDO with limited concurrent requests tests"];
+max_requests_api(suite) -> [];
+max_requests_api(_Config) ->
+ %% --- Create a slave-node ---
+ {ok, Node, Host} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{iiop_max_in_requests, 1}])),
+ Port = orber_test_lib:remote_apply(Node, orber, iiop_port, []),
+ max_requests(Node, Host, Port).
+
+max_requests_added_api(doc) ->
+ ["MULTI ORB PSEUDO with limited concurrent requests tests"];
+max_requests_added_api(suite) -> [];
+max_requests_added_api(_Config) ->
+ %% --- Create a slave-node ---
+ [IP] = ?match([_], orber:host()),
+ {ok, Node, _Host} =
+ ?match({ok,_,_}, orber_test_lib:js_node([])),
+ Port = 1 + orber_test_lib:remote_apply(Node, orber, iiop_port, []),
+ ?match({ok, _},
+ orber_test_lib:remote_apply(Node, orber,
+ add_listen_interface,
+ [IP, normal,
+ [{iiop_max_in_requests, 1},
+ {flags, ?ORB_ENV_LOCAL_INTERFACE},
+ {iiop_port, Port}]])),
+ max_requests(Node, IP, Port).
+
+max_requests(Node, Host, Port) ->
+ ?match(ok, orber_test_lib:remote_apply(Node, orber_test_lib,
+ install_test_data,
+ [pseudo])),
+ Obj = ?match({'IOP_IOR',"IDL:omg.org/orber_test/server:1.0",_},
+ corba:string_to_object("corbaname::1.1@"++Host++":"++
+ integer_to_list(Port)++"/NameService#mamba")),
+
+ %% Can we even contact the object?
+ ?match(ok, orber_test_server:print(Obj)),
+
+ %% Invoke one blocking call followed by several invokations.
+ spawn(orber_test_server, pseudo_call_delay, [Obj, 15000]),
+ %% Wait for a second to be sure that the previous request has been sent
+ timer:sleep(1000),
+ {MegaSecsB, Before, _} = now(),
+ pseudo_calls(5, Obj),
+ {MegaSecsA, After, _} = now(),
+ %% Normally we we can perform hundreds of pseudo-calls per second. Hence,
+ %% if we add 8 seconds to 'Before' it should still be less since we only
+ %% allow one request at a time to the target ORB.
+ ?match(true, (MegaSecsB + (Before+8)*1000000) < (MegaSecsA + After*1000000)),
+
+ ?match(ok, orber_test_lib:remote_apply(Node, orber_test_lib,
+ uninstall_test_data,
+ [pseudo])),
+
+ ok.
+
+%%-----------------------------------------------------------------
+%% API tests for ORB to ORB with limited concurrent connections
+%%-----------------------------------------------------------------
+max_connections_api(doc) ->
+ ["MULTI ORB PSEUDO with limited concurrent connections tests"];
+max_connections_api(suite) -> [];
+max_connections_api(_Config) ->
+ %% --- Create a slave-node ---
+ {ok, ServerNode, ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{iiop_backlog, 0},
+ {iiop_max_in_connections, 2}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ ?match(ok, orber_test_lib:remote_apply(ServerNode, orber_test_lib,
+ install_test_data,
+ [nameservice])),
+
+ %% Claim connection 1 & 2
+ Obj = ?match({'IOP_IOR',"IDL:omg.org/orber_test/server:1.0",_},
+ corba:string_to_object("corbaname::1.2@"++ServerHost++":"++
+ integer_to_list(ServerPort)++"/NameService#mamba")),
+ %% Claim backlog
+ {ok, ClientNode, _ClientHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node()),
+
+ spawn(ClientNode, orber_test_server, print, [Obj]),
+ timer:sleep(5000),
+ ?match([_], orber_test_lib:remote_apply(ClientNode, orber,
+ iiop_connections, [])),
+
+ %% Try to connect. Should fail. Due to the behavior of different TCP stacks, backlog 1
+ %% might not be the precise value. Hence, we also need to define the iiop_timeout. Otherwise
+ %% this test case will fail. For the same reason we must GC this connection.
+ {ok, ClientNodeII, _ClientHostII} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{iiop_setup_connection_timeout, 5},
+ {iiop_timeout, 5},
+ {iiop_connection_timeout, 8}])),
+
+ ?match({'EXCEPTION', _},
+ orber_test_lib:remote_apply(ClientNodeII, orber_test_server,
+ testing_iiop_string, [Obj, "Fail"])),
+
+ %% Remove 2 connections. We need to wait a moment so that both sides has detected it.
+ timer:sleep(5000),
+ ?match([_,_], orber:iiop_connections()),
+ ?match(ok, orber_iiop_pm:close_connection([{ServerHost, ServerPort}])),
+ timer:sleep(5000),
+ [{Host, Port}] = ?match([_], orber:iiop_connections()),
+ ?match(ok, orber_iiop_pm:close_connection([{Host, Port}])),
+ timer:sleep(5000),
+ ?match([], orber:iiop_connections()),
+
+ ?match([_], orber_test_lib:remote_apply(ClientNode, orber,
+ iiop_connections, [])),
+
+ ?match([], orber_test_lib:remote_apply(ClientNodeII, orber,
+ iiop_connections, [])),
+
+ ?match({ok, "OK"},
+ orber_test_lib:remote_apply(ClientNodeII, orber_test_server,
+ testing_iiop_string, [Obj, "OK"])),
+
+ timer:sleep(4000),
+ ?match([_], orber_test_lib:remote_apply(ClientNodeII, orber,
+ iiop_connections, [])),
+
+ ?match(ok, orber_test_lib:remote_apply(ServerNode, orber_test_lib,
+ uninstall_test_data,
+ [pseudo])),
+
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% API tests for terminating connection by using an IOR.
+%%-----------------------------------------------------------------
+close_connections_api(doc) ->
+ ["Close outgoing connection "];
+close_connections_api(suite) -> [];
+close_connections_api(_Config) ->
+ %% --- Create a slave-node ---
+ IP = orber_test_lib:get_host(),
+ Loopback = orber_test_lib:get_loopback_interface(),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{ip_address, IP}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ ?match(ok, orber_test_lib:remote_apply(ServerNode, orber_test_lib,
+ install_test_data,
+ [nameservice])),
+ orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ IP = orber_test_lib:get_host(),
+
+ %% Create a connection
+ Obj = ?match({'IOP_IOR',"IDL:omg.org/orber_test/server:1.0",_},
+ corba:string_to_object("corbaname::1.2@"++IP++":"++
+ integer_to_list(ServerPort)++"/NameService#mamba")),
+ %% Check that it's up.
+ ?match([{IP, ServerPort}], orber:iiop_connections(out)),
+ %% Try to close using the wronge interface.
+ ?match(ok, orber:close_connection(Obj, Loopback)),
+ %% Should still be up.
+ ?match([{IP, ServerPort}], orber:iiop_connections(out)),
+ %% Try to close it properly
+ ?match(ok, orber:close_connection(Obj)),
+ %% Wait a moment so that both sides has detected it.
+ timer:sleep(5000),
+ %% Worked?
+ ?match([], orber:iiop_connections(out)),
+ ok.
+
+
+close_connections_local_interface_api(doc) ->
+ ["IIOP Local Interface disconnect tests",
+ "This case test if the server ORB use the correct",
+ "local interface when connecting to another ORB"];
+close_connections_local_interface_api(suite) -> [];
+close_connections_local_interface_api(_Config) ->
+ IP = orber_test_lib:get_host(),
+ Loopback = orber_test_lib:get_loopback_interface(),
+ {ok, ClientNode, _ClientHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{ip_address_local, Loopback}])),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{ip_address, IP}])),
+ Port = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ IOR = ?match(#'IOP_IOR'{},
+ orber_test_lib:remote_apply(ClientNode, corba, string_to_object,
+ ["corbaloc::1.2@"++IP++":"++integer_to_list(Port)++"/NameService"])),
+
+ %% Check that the connnection is up and running using the default interface
+ ?match([{Loopback,_RemotePort}], orber_test_lib:remote_apply(ServerNode, orber,
+ iiop_connections, [in])),
+ ?match([{IP, Port}],
+ orber_test_lib:remote_apply(ClientNode, orber,
+ iiop_connections, [out])),
+ %% Try to close the connection
+ ?match(ok, orber_test_lib:remote_apply(ClientNode, orber,
+ close_connection, [IOR])),
+ %% Wait a moment so that both sides has detected it.
+ timer:sleep(5000),
+ %% Now the connection shall be gone.
+ ?match([], orber_test_lib:remote_apply(ClientNode, orber,
+ iiop_connections, [out])),
+ ?match([], orber_test_lib:remote_apply(ServerNode, orber,
+ iiop_connections, [in])),
+
+ ok.
+
+close_connections_local_interface_ctx_override_api(doc) ->
+ ["IIOP Local Interface disconnect tests",
+ "This case test if the server ORB use the correct",
+ "local interface when connecting to another ORB"];
+close_connections_local_interface_ctx_override_api(suite) -> [];
+close_connections_local_interface_ctx_override_api(_Config) ->
+ IP = orber_test_lib:get_host(),
+ Loopback = orber_test_lib:get_loopback_interface(),
+ {ok, ClientNode, _ClientHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{ip_address_local, IP},
+ {ip_address, IP}])),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{ip_address, IP}])),
+ Port = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ IOR = ?match(#'IOP_IOR'{},
+ orber_test_lib:remote_apply(ClientNode, corba, string_to_object,
+ ["corbaloc::1.2@"++IP++":"++integer_to_list(Port)++"/NameService",
+ [#'IOP_ServiceContext'
+ {context_id=?ORBER_GENERIC_CTX_ID,
+ context_data = {interface, Loopback}}]])),
+
+ timer:sleep(2000),
+ %% Check that the connnection is up and running using the default interface
+ ?match([{Loopback,_RemotePort}], orber_test_lib:remote_apply(ServerNode, orber,
+ iiop_connections, [in])),
+
+ ?match([{IP, Port, Loopback}],
+ orber_test_lib:remote_apply(ClientNode, orber,
+ iiop_connections, [out])),
+ %% Try to close not supplying the interface.
+ ?match(ok, orber_test_lib:remote_apply(ClientNode, orber,
+ close_connection, [IOR])),
+
+ timer:sleep(2000),
+ %% The connection shall still be up and running
+ ?match([{Loopback,_RemotePort}], orber_test_lib:remote_apply(ServerNode, orber,
+ iiop_connections, [in])),
+ ?match([{IP, Port, Loopback}],
+ orber_test_lib:remote_apply(ClientNode, orber,
+ iiop_connections, [out])),
+ %% Try to close not supplying the interface.
+ ?match(ok, orber_test_lib:remote_apply(ClientNode, orber,
+ close_connection, [IOR, IP])),
+
+ timer:sleep(2000),
+ %% The connection shall still be up and running
+ ?match([{Loopback,_RemotePort}], orber_test_lib:remote_apply(ServerNode, orber,
+ iiop_connections, [in])),
+ ?match([{IP, Port, Loopback}],
+ orber_test_lib:remote_apply(ClientNode, orber,
+ iiop_connections, [out])),
+
+ %% Try to close supplying the correct interface.
+ ?match(ok, orber_test_lib:remote_apply(ClientNode, orber,
+ close_connection, [IOR, Loopback])),
+ %% Wait a moment so that both sides has detected it.
+ timer:sleep(5000),
+ %% Now the connection shall be gone.
+ ?match([], orber_test_lib:remote_apply(ServerNode, orber,
+ iiop_connections, [in])),
+ ?match([], orber_test_lib:remote_apply(ClientNode, orber,
+ iiop_connections, [out])),
+ ok.
+
+close_connections_alt_iiop_addr_api(doc) ->
+ ["IIOP alternate address disconnect tests",
+ "This case test if the server ORB use the correct",
+ "local interface when connecting to another ORB"];
+close_connections_alt_iiop_addr_api(suite) -> [];
+close_connections_alt_iiop_addr_api(_Config) ->
+ %% --- Create a slave-node ---
+ Loopback = orber_test_lib:get_loopback_interface(),
+ IP = orber_test_lib:get_host(),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{giop_version, {1, 2}},
+ {ip_address, {multiple, [IP, Loopback]}}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ ?match(ok, orber_test_lib:remote_apply(ServerNode, orber_test_lib,
+ install_test_data,
+ [{nameservice, Loopback, ServerPort}])),
+ %% Create two connections
+ Obj = ?match({'IOP_IOR',"IDL:omg.org/orber_test/server:1.0",_},
+ corba:string_to_object("corbaname::1.2@"++IP++":"++
+ integer_to_list(ServerPort)++"/NameService#mamba")),
+ ?match({'IOP_IOR',"IDL:omg.org/orber_test/server:1.0",_},
+ corba:string_to_object("corbaname::1.2@"++Loopback++":"++
+ integer_to_list(ServerPort)++"/NameService#mamba")),
+ timer:sleep(2000),
+ %% The connection shall still be up and running
+ ?match([{_,_}, {_,_}], orber:iiop_connections(out)),
+ ?match([{_,_}, {_,_}],
+ orber_test_lib:remote_apply(ServerNode, orber,
+ iiop_connections, [in])),
+
+ %% Try to close the connection
+ ?match(ok, orber:close_connection(Obj)),
+ %% Wait a moment so that both sides has detected it.
+ timer:sleep(5000),
+ %% Now the connections shall be gone.
+ ?match([], orber:iiop_connections(out)),
+ ?match([], orber_test_lib:remote_apply(ServerNode, orber,
+ iiop_connections, [in])),
+ ok.
+
+close_connections_multiple_profiles_api(doc) ->
+ ["IIOP alternate address disconnect tests",
+ "This case test if the server ORB use the correct",
+ "local interface when connecting to another ORB"];
+close_connections_multiple_profiles_api(suite) -> [];
+close_connections_multiple_profiles_api(_Config) ->
+ IP = orber_test_lib:get_host(),
+ Loopback = orber_test_lib:get_loopback_interface(),
+ %% --- Create a slave-node ---
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{ip_address,
+ {multiple, [Loopback, IP]}}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ ?match(ok, orber_test_lib:remote_apply(ServerNode, orber_test_lib,
+ install_test_data, [nameservice])),
+ %% Create two connections
+ Obj = ?match({'IOP_IOR',"IDL:omg.org/orber_test/server:1.0",_},
+ corba:string_to_object("corbaname::1.2@"++IP++":"++
+ integer_to_list(ServerPort)++"/NameService#mamba")),
+ ?match({'IOP_IOR',"IDL:omg.org/orber_test/server:1.0",_},
+ corba:string_to_object("corbaname::1.2@"++Loopback++":"++
+ integer_to_list(ServerPort)++"/NameService#mamba")),
+ %% The connection shall still be up and running
+ ?match([{_,_}, {_,_}], orber:iiop_connections(out)),
+ ?match([{_,_}, {_,_}],
+ orber_test_lib:remote_apply(ServerNode, orber,
+ iiop_connections, [in])),
+
+ %% Try to close the connection
+ ?match(ok, orber:close_connection(Obj)),
+ %% Wait a moment so that both sides has detected it.
+ timer:sleep(5000),
+ %% Now the connections shall be gone.
+ ?match([], orber:iiop_connections(out)),
+ ?match([], orber_test_lib:remote_apply(ServerNode, orber,
+ iiop_connections, [in])),
+ ok.
+
+%%-----------------------------------------------------------------
+%% API tests for ORB to ORB with iiop_packet_size set
+%%-----------------------------------------------------------------
+max_packet_size_exceeded_api(doc) ->
+ ["Exceed the maximum request size"];
+max_packet_size_exceeded_api(suite) -> [];
+max_packet_size_exceeded_api(_Config) ->
+ case catch gen_tcp:listen(0, [{packet,cdr}, {packet_size, 14}]) of
+ {'EXIT',badarg} ->
+ {skipped, "The inet option {packet_size, Max} not supported"};
+ {ok, LS} ->
+ (catch gen_tcp:close(LS)),
+ %% --- Create a slave-node ---
+ {ok, ServerNode, ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{iiop_packet_size, 1}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber,
+ iiop_port, []),
+ ?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
+ corba:string_to_object("corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService")),
+ ok
+ end.
+
+%%-----------------------------------------------------------------
+%% API tests for ORB to ORB with iiop_packet_size set
+%%-----------------------------------------------------------------
+max_packet_size_ok_api(doc) ->
+ ["Not exceed the maximum request size"];
+max_packet_size_ok_api(suite) -> [];
+max_packet_size_ok_api(_Config) ->
+ case catch gen_tcp:listen(0, [{packet,cdr}, {packet_size, 14}]) of
+ {'EXIT',badarg} ->
+ {skipped, "The inet option {packet_size, Max} not supported"};
+ {ok, LS} ->
+ (catch gen_tcp:close(LS)),
+ %% --- Create a slave-node ---
+ {ok, ServerNode, ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{iiop_packet_size, 5000}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber,
+ iiop_port, []),
+ ?match({'IOP_IOR',_,_},
+ corba:string_to_object("corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService")),
+ ok
+ end.
+
+
+
+%%-----------------------------------------------------------------
+%% API tests for ORB to ORB, no security
+%%-----------------------------------------------------------------
+
+light_ifr_api(doc) -> ["LIGHT IFR ORB API tests"];
+light_ifr_api(suite) -> [];
+light_ifr_api(_Config) ->
+
+ {ok, ClientNode, _ClientHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, 128}])),
+
+ ?match([_,_,_,_], orber_test_lib:remote_apply(ClientNode, orber, get_tables, [])),
+ ?match(ok, orber_test_lib:remote_apply(ClientNode, orber_test_lib,
+ install_test_data,
+ [nameservice])),
+
+
+ {ok, ServerNode, ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, 128}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ ?match(ok, orber_test_lib:remote_apply(ServerNode, orber_test_lib,
+ install_test_data,
+ [nameservice])),
+ ?match([_,_,_,_], orber_test_lib:remote_apply(ServerNode, orber, get_tables, [])),
+
+ Obj = ?match({'IOP_IOR',_,_},
+ corba:string_to_object("corbaname::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService#mamba")),
+ ?match(ok, orber_test_lib:remote_apply(ClientNode, orber_test_lib, test_coding, [Obj])),
+
+ ?match(0, orber_test_lib:remote_apply(ClientNode, orber_diagnostics, missing_modules, [])),
+
+ ?match(ok, orber_test_lib:remote_apply(ClientNode, mnesia, dirty_write,
+ [#orber_light_ifr{id = "FakeId1",
+ module=non_existing,
+ type=?IFR_StructDef}])),
+ ?match(ok, orber_test_lib:remote_apply(ClientNode, mnesia, dirty_write,
+ [#orber_light_ifr{id = "FakeId2",
+ module=non_existing,
+ type=?IFR_UnionDef}])),
+ ?match(ok, orber_test_lib:remote_apply(ClientNode, mnesia, dirty_write,
+ [#orber_light_ifr{id = "FakeId3",
+ module=non_existing,
+ type=?IFR_ExceptionDef}])),
+ ?match(ok, orber_test_lib:remote_apply(ClientNode, mnesia, dirty_write,
+ [#orber_light_ifr{id = "FakeId4",
+ module=non_existing,
+ type=?IFR_InterfaceDef}])),
+ ?match(ok, orber_test_lib:remote_apply(ClientNode, mnesia, dirty_write,
+ [#orber_light_ifr{id = "FakeId5",
+ module=orber_test_lib,
+ type=?IFR_InterfaceDef}])),
+ ?match(5, orber_test_lib:remote_apply(ClientNode, orber_diagnostics, missing_modules, [])),
+
+
+ ?match(ok, mnesia:dirty_write(#ir_UnionDef{ir_Internal_ID = "FakedIId1",
+ absolute_name="::Module::NonExisting"})),
+ ?match(ok, mnesia:dirty_write(#ir_StructDef{ir_Internal_ID = "FakedIId2",
+ absolute_name="::Module::NonExisting"})),
+ ?match(ok, mnesia:dirty_write(#ir_ExceptionDef{ir_Internal_ID = "FakedIId3",
+ absolute_name="::Module::NonExisting"})),
+ ?match(ok, mnesia:dirty_write(#ir_InterfaceDef{ir_Internal_ID = "FakedIId4",
+ absolute_name="::Module::NonExisting"})),
+ ?match(ok, mnesia:dirty_write(#ir_InterfaceDef{ir_Internal_ID = "FakedIId5",
+ absolute_name="::orber::test::lib"})),
+
+ ?match(5, orber_diagnostics:missing_modules()),
+
+ ?match(ok, orber_test_lib:remote_apply(ServerNode, orber_test_lib,
+ uninstall_test_data,
+ [nameservice])),
+ ?match(ok, orber_test_lib:remote_apply(ClientNode, orber_test_lib,
+ uninstall_test_data,
+ [nameservice])),
+ ok.
+
+%%-----------------------------------------------------------------
+%% API tests for ORB to ORB, no security
+%%-----------------------------------------------------------------
+
+light_orber_api(doc) -> ["LIGHT ORB API tests",
+ "This case test if a light Orber can communicate correctly",
+ "with an fully installed Orber."];
+light_orber_api(suite) -> [];
+light_orber_api(_Config) ->
+ %% --- Create a slave-node ---
+ LocalHost = net_adm:localhost(),
+ {ok, Node, _Host} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{lightweight, ["iiop://"++LocalHost++":"++integer_to_list(orber:iiop_port())]}],
+ lightweight)),
+ ?match(ok, orber:info(io)),
+ ?match([_], orber_test_lib:remote_apply(Node, orber_env, get_lightweight_nodes,[])),
+
+ ?match(ok, orber_test_lib:remote_apply(Node, orber_test_lib,
+ install_test_data,
+ [light])),
+
+ Obj1=(catch orber_test_server:oe_create(state,[{pseudo,true}])),
+ ?match({_,pseudo,orber_test_server_impl, _,_, _}, Obj1),
+ Obj2=(catch orber_test_server:oe_create(state,[])),
+ ?match({_,key,_, _,_, _}, Obj2),
+
+ NS = corba:resolve_initial_references("NameService"),
+ 'CosNaming_NamingContext':bind(NS, lname:new(["mamba"]), Obj1),
+ 'CosNaming_NamingContext':bind(NS, lname:new(["viper"]), Obj2),
+
+ ?match(ok, orber_test_lib:remote_apply(Node, orber_test_lib,
+ light_tests,
+ [LocalHost,
+ orber:iiop_port(), "viper"])),
+ ?match(ok, orber_test_lib:remote_apply(Node, orber_test_lib,
+ light_tests,
+ [LocalHost,
+ orber:iiop_port(), "mamba"])),
+
+ %% Clean up.
+
+ catch corba:dispose(Obj1),
+ catch corba:dispose(Obj2),
+ catch 'CosNaming_NamingContext':destroy(NS),
+
+ ?match(ok, orber_test_lib:remote_apply(Node, orber_test_lib,
+ uninstall_test_data,
+ [light])),
+ ok.
+%%-----------------------------------------------------------------
+%% API tests for ORB to ORB, no security
+%%-----------------------------------------------------------------
+
+light_orber2_api(doc) -> ["LIGHT ORB API tests",
+ "This case test if a light Orber can communicate correctly",
+ "with an fully installed Orber. This case test if we can",
+ "start as lightweight without first setting the environment",
+ "variable"];
+light_orber2_api(suite) -> [];
+light_orber2_api(_Config) ->
+ %% --- Create a slave-node ---
+ LocalHost = net_adm:localhost(),
+ {ok, Node, _Host} =
+ ?match({ok,_,_}, orber_test_lib:js_node([],
+ {lightweigth, ["iiop://"++LocalHost++":"++integer_to_list(orber:iiop_port())]})),
+ ?match(ok, orber:info(io)),
+ ?match([_], orber_test_lib:remote_apply(Node, orber_env, get_lightweight_nodes,[])),
+
+ ?match(ok, orber_test_lib:remote_apply(Node, orber_test_lib,
+ install_test_data,
+ [light])),
+
+ Obj1=(catch orber_test_server:oe_create(state,[{pseudo,true}])),
+ ?match({_,pseudo,orber_test_server_impl, _,_, _}, Obj1),
+ Obj2=(catch orber_test_server:oe_create(state,[])),
+ ?match({_,key,_, _,_, _}, Obj2),
+
+ NS = corba:resolve_initial_references("NameService"),
+ 'CosNaming_NamingContext':bind(NS, lname:new(["mamba"]), Obj1),
+ 'CosNaming_NamingContext':bind(NS, lname:new(["viper"]), Obj2),
+
+ ?match(ok, orber_test_lib:remote_apply(Node, orber_test_lib,
+ light_tests,
+ [LocalHost,
+ orber:iiop_port(), "viper"])),
+ ?match(ok, orber_test_lib:remote_apply(Node, orber_test_lib,
+ light_tests,
+ [LocalHost,
+ orber:iiop_port(), "mamba"])),
+
+ %% Clean up.
+
+ catch corba:dispose(Obj1),
+ catch corba:dispose(Obj2),
+ catch 'CosNaming_NamingContext':destroy(NS),
+
+ ?match(ok, orber_test_lib:remote_apply(Node, orber_test_lib,
+ uninstall_test_data,
+ [light])),
+ ok.
+
+%%-----------------------------------------------------------------
+%% API tests for ORB to ORB, no security
+%%-----------------------------------------------------------------
+
+multi_orber_api(doc) -> ["MULTI ORB API tests",
+ "This case test if data encode/decode (IIOP)",
+ "produce the correct result, i.e., the test_server echos",
+ "the input parameter or an exception is raised (MARSHAL)."];
+multi_orber_api(suite) -> [];
+multi_orber_api(_Config) ->
+
+ NewICObj1 = ?match({_,_,_,_,_,_}, orber_test_server:oe_create([])),
+ NewICObj2 = ?match({_,_,_,_,_,_}, orber_test_server:oe_create([], [{regname, {local, newic2}}])),
+ NewICObj3 = ?match({_,_,_,_,_,_}, orber_test_server:oe_create([], [{regname, {global, newic3}}])),
+ ?match(ok, orber_test_server:print(NewICObj1)),
+ ?match(ok, orber_test_server:print(NewICObj2)),
+ ?match(ok, orber_test_server:print(NewICObj3)),
+ catch corba:dispose(NewICObj1),
+ catch corba:dispose(NewICObj2),
+ catch corba:dispose(NewICObj3),
+
+ %% --- Create a slave-node ---
+ {ok, Node, Host} =
+ ?match({ok,_,_}, orber_test_lib:js_node()),
+ Port = orber_test_lib:remote_apply(Node, orber, iiop_port, []),
+
+ ?match(ok, orber_test_lib:remote_apply(Node, orber_test_lib,
+ install_test_data,
+ [nameservice])),
+
+ NSR = ?match({'IOP_IOR',"IDL:omg.org/CosNaming/NamingContextExt:1.0",_},
+ corba:string_to_object("corbaloc::1.2@"++Host++":"++
+ integer_to_list(Port)++"/NameService")),
+
+ ?match({'EXCEPTION',{'CosNaming_NamingContext_NotFound',_,_,_}},
+ 'CosNaming_NamingContext':resolve(NSR, lname:new(["not_exist"]))),
+
+ Obj = ?match({'IOP_IOR',"IDL:omg.org/orber_test/server:1.0",_},
+ 'CosNaming_NamingContext':resolve(NSR, lname:new(["mamba"]))),
+ ?match(ok, orber_test_server:print(Obj)),
+
+ Obj12B = ?match({'IOP_IOR',_,_},
+ corba:string_to_object("corbaloc::1.2@"++Host++":"++integer_to_list(Port)++"/Mamba")),
+
+ Obj11B = ?match({'IOP_IOR',_,_},
+ corba:string_to_object("corbaloc::1.1@"++Host++":"++integer_to_list(Port)++"/Mamba")),
+
+ Obj10B = ?match({'IOP_IOR',_,_},
+ corba:string_to_object("corbaloc::1.0@"++Host++":"++integer_to_list(Port)++"/Mamba")),
+
+ context_test(Obj12B),
+ context_test(Obj11B),
+
+ ?match(ok, orber_test_server:print(Obj12B)),
+ ?match(ok, orber_test_server:print(Obj11B)),
+ ?match(ok, orber_test_server:print(Obj10B)),
+ ?match({'EXCEPTION',{'CosNaming_NamingContextExt_InvalidAddress',_}},
+ corba:string_to_object("corbaloc::1.0@"++Host++":"++integer_to_list(Port)++"/Wrong")),
+
+ ?match(ok, orber_test_lib:corba_object_tests(Obj12B, NSR)),
+ ?match(ok, orber_test_lib:corba_object_tests(Obj11B, NSR)),
+ ?match(ok, orber_test_lib:corba_object_tests(Obj10B, NSR)),
+
+ %%--- Testing code and decode arguments ---
+ orber_test_lib:test_coding(Obj),
+
+ ?match({'EXCEPTION',#'BAD_CONTEXT'{}},
+ orber_test_server:
+ print(Obj12B,
+ [{context,
+ [#'IOP_ServiceContext'{context_id=?ORBER_GENERIC_CTX_ID,
+ context_data = {interface,
+ {127,0,0,1}}}]}])),
+
+ ?match({'EXCEPTION',{'TRANSIENT',_,_,_}},
+ orber_test_server:stop_brutal(Obj12B)),
+ ?match({'EXCEPTION',{'TRANSIENT',_,_,_}},
+ orber_test_server:print(Obj12B)),
+
+ ?match(ok, orber_test_lib:remote_apply(Node, orber_test_lib,
+ uninstall_test_data,
+ [nameservice])),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% API tests for ORB to ORB, no security, using basic interceptors
+%%-----------------------------------------------------------------
+basic_PI_api(doc) -> ["MULTI ORB API tests",
+ "This case test if data encode/decode (IIOP)",
+ "produce the correct result when using basic interceptors,",
+ "i.e., the test_server echos",
+ "the input parameter or an exception is raised (MARSHAL)."];
+basic_PI_api(suite) -> [];
+basic_PI_api(_Config) ->
+ %% Change configuration to use Basic Interceptors.
+ orber:configure_override(interceptors, {native, [orber_test_lib]}),
+ %% --- Create a slave-node ---
+ {ok, Node, Host} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{interceptors, {native, [orber_test_lib]}}])),
+ Port = orber_test_lib:remote_apply(Node, orber, iiop_port, []),
+
+ ?match(ok, orber_test_lib:remote_apply(Node, orber_test_lib,
+ install_test_data,
+ [nameservice])),
+
+ Obj12 = ?match({'IOP_IOR',"IDL:omg.org/orber_test/server:1.0",_},
+ corba:string_to_object("corbaname::1.2@"++Host++":"++integer_to_list(Port)++"/NameService#mamba")),
+
+ Obj11 = ?match({'IOP_IOR',"IDL:omg.org/orber_test/server:1.0",_},
+ corba:string_to_object("corbaname::1.1@"++Host++":"++integer_to_list(Port)++"/NameService#mamba")),
+
+ Obj10 = ?match({'IOP_IOR',"IDL:omg.org/orber_test/server:1.0",_},
+ corba:string_to_object("corbaname::1.0@"++Host++":"++integer_to_list(Port)++"/NameService#mamba")),
+
+ ?match(ok, corba:print_object(Obj12)),
+ ?match(ok, corba:print_object(Obj11, error_report)),
+ ?match(ok, corba:print_object(Obj10, {error_report, "Reason"})),
+
+ ?match(ok, orber_test_server:print(Obj12)),
+ ?match(ok, orber_test_server:print(Obj11)),
+ ?match(ok, orber_test_server:print(Obj10)),
+
+
+ Obj12B = ?match({'IOP_IOR',_,_},
+ corba:string_to_object("corbaloc::1.2@"++Host++":"++integer_to_list(Port)++"/Mamba")),
+
+ Obj11B = ?match({'IOP_IOR',_,_},
+ corba:string_to_object("corbaloc::1.1@"++Host++":"++integer_to_list(Port)++"/Mamba")),
+
+ Obj10B = ?match({'IOP_IOR',_,_},
+ corba:string_to_object("corbaloc::1.0@"++Host++":"++integer_to_list(Port)++"/Mamba")),
+
+ ?match(ok, corba:print_object(Obj12B, info_msg)),
+ ?match(ok, corba:print_object(Obj11B, {info_msg, "Comment"})),
+ ?match([_|_], corba:print_object(Obj10B, string)),
+
+ ?match(ok, orber_test_server:print(Obj12B)),
+ ?match(ok, orber_test_server:print(Obj11B)),
+ ?match(ok, orber_test_server:print(Obj10B)),
+ ?match({'EXCEPTION',{'CosNaming_NamingContextExt_InvalidAddress',_}},
+ corba:string_to_object("corbaloc::1.0@"++Host++":"++integer_to_list(Port)++"/Wrong")),
+
+ ?match(ok, orber_test_lib:alternate_iiop_address(Host, Port)),
+
+ context_test(Obj12B),
+ context_test(Obj11B),
+
+ %%--- Testing code and decode arguments ---
+ orber_test_lib:test_coding(Obj12),
+ orber_test_lib:test_coding(Obj11),
+ orber_test_lib:test_coding(Obj10),
+
+ application:set_env(orber, interceptors, false),
+
+ ?match(ok, orber_test_lib:remote_apply(Node, orber_test_lib,
+ uninstall_test_data,
+ [nameservice])),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% API tests for ORB to ORB, ssl security depth 1
+%%-----------------------------------------------------------------
+
+ssl_1_multi_orber_api(doc) -> ["SECURE MULTI ORB API tests (SSL depth 1)",
+ "This case set up two secure orbs and test if they can",
+ "communicate. The case also test to access one of the",
+ "secure orbs which must raise a NO_PERMISSION exception."];
+ssl_1_multi_orber_api(suite) -> [];
+ssl_1_multi_orber_api(_Config) ->
+ case os:type() of
+ vxworks ->
+ {skipped, "No SSL-support for VxWorks."};
+ _ ->
+ ServerOptions = orber_test_lib:get_options(iiop_ssl, server,
+ 1, [{iiop_ssl_port, 0}]),
+ ClientOptions = orber_test_lib:get_options(iiop_ssl, client,
+ 1, [{iiop_ssl_port, 0}]),
+ ssl_suite(ServerOptions, ClientOptions),
+ ok
+ end.
+
+ssl_1_multi_orber_generation_3_api(doc) -> ["SECURE MULTI ORB API tests (SSL depth 1)",
+ "This case set up two secure orbs and test if they can",
+ "communicate. The case also test to access one of the",
+ "secure orbs which must raise a NO_PERMISSION exception."];
+ssl_1_multi_orber_generation_3_api(suite) -> [];
+ssl_1_multi_orber_generation_3_api(_Config) ->
+ case os:type() of
+ vxworks ->
+ {skipped, "No SSL-support for VxWorks."};
+ _ ->
+ case orber_test_lib:ssl_version() of
+ 3 ->
+ ServerOptions = orber_test_lib:get_options(iiop_ssl, server,
+ 1, [{ssl_generation, 3},
+ {iiop_ssl_port, 0}]),
+ ClientOptions = orber_test_lib:get_options(iiop_ssl, client,
+ 1, [{ssl_generation, 3},
+ {iiop_ssl_port, 0}]),
+ ssl_suite(ServerOptions, ClientOptions),
+ ok;
+ _ ->
+ {skipped, "Required SSL generation not available"}
+ end
+ end.
+
+
+%%-----------------------------------------------------------------
+%% API tests for ORB to ORB, ssl security depth 2
+%%-----------------------------------------------------------------
+
+ssl_2_multi_orber_api(doc) -> ["SECURE MULTI ORB API tests (SSL depth 2)",
+ "This case set up two secure orbs and test if they can",
+ "communicate. The case also test to access one of the",
+ "secure orbs which must raise a NO_PERMISSION exception."];
+ssl_2_multi_orber_api(suite) -> [];
+ssl_2_multi_orber_api(_Config) ->
+ case os:type() of
+ vxworks ->
+ {skipped, "No SSL-support for VxWorks."};
+ _ ->
+ ServerOptions = orber_test_lib:get_options(iiop_ssl, server,
+ 2, [{iiop_ssl_port, 0}]),
+ ClientOptions = orber_test_lib:get_options(iiop_ssl, client,
+ 2, [{iiop_ssl_port, 0}]),
+ ssl_suite(ServerOptions, ClientOptions),
+ ok
+ end.
+
+ssl_2_multi_orber_generation_3_api(doc) -> ["SECURE MULTI ORB API tests (SSL depth 2)",
+ "This case set up two secure orbs and test if they can",
+ "communicate. The case also test to access one of the",
+ "secure orbs which must raise a NO_PERMISSION exception."];
+ssl_2_multi_orber_generation_3_api(suite) -> [];
+ssl_2_multi_orber_generation_3_api(_Config) ->
+ case os:type() of
+ vxworks ->
+ {skipped, "No SSL-support for VxWorks."};
+ _ ->
+ case orber_test_lib:ssl_version() of
+ 3 ->
+ ServerOptions = orber_test_lib:get_options(iiop_ssl, server,
+ 2, [{ssl_generation, 3},
+ {iiop_ssl_port, 0}]),
+ ClientOptions = orber_test_lib:get_options(iiop_ssl, client,
+ 2, [{ssl_generation, 3},
+ {iiop_ssl_port, 0}]),
+ ssl_suite(ServerOptions, ClientOptions),
+ ok;
+ _ ->
+ {skipped, "Required SSL generation not available"}
+ end
+ end.
+%%-----------------------------------------------------------------
+%% API tests for ORB to ORB, ssl security depth 2
+%%-----------------------------------------------------------------
+
+ssl_reconfigure_api(doc) -> ["SECURE MULTI ORB API tests (SSL depth 2)",
+ "This case set up two secure orbs and test if they can",
+ "communicate. The case also test to access one of the",
+ "secure orbs which must raise a NO_PERMISSION exception."];
+ssl_reconfigure_api(suite) -> [];
+ssl_reconfigure_api(_Config) ->
+ ssl_reconfigure([]).
+
+ssl_reconfigure_generation_3_api(doc) -> ["SECURE MULTI ORB API tests (SSL depth 2)",
+ "This case set up two secure orbs and test if they can",
+ "communicate. The case also test to access one of the",
+ "secure orbs which must raise a NO_PERMISSION exception."];
+ssl_reconfigure_generation_3_api(suite) -> [];
+ssl_reconfigure_generation_3_api(_Config) ->
+ case orber_test_lib:ssl_version() of
+ 3 ->
+ ssl_reconfigure([{ssl_generation, 3}]);
+
+ _ ->
+ {skipped, "Required SSL generation not available"}
+ end.
+
+ssl_reconfigure(ExtraSSLOptions) ->
+ case os:type() of
+ vxworks ->
+ {skipped, "No SSL-support for VxWorks."};
+ _ ->
+ IP = orber_test_lib:get_host(),
+ Loopback = orber_test_lib:get_loopback_interface(),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_},
+ orber_test_lib:js_node([{iiop_port, 0},
+ {flags, ?ORB_ENV_LOCAL_INTERFACE},
+ {ip_address, IP}|ExtraSSLOptions])),
+ orber_test_lib:remote_apply(ServerNode, ssl, start, []),
+ orber_test_lib:remote_apply(ServerNode, crypto, start, []),
+ orber_test_lib:remote_apply(ServerNode, ssl, seed, ["testing"]),
+ ?match(ok, orber_test_lib:remote_apply(ServerNode, orber_test_lib,
+ install_test_data,
+ [ssl])),
+ ?match({ok, _},
+ orber_test_lib:remote_apply(ServerNode, orber,
+ add_listen_interface,
+ [Loopback, normal, [{iiop_port, 5648},
+ {iiop_ssl_port, 5649},
+ {interceptors, {native, [orber_iiop_tracer_silent]}}|ExtraSSLOptions]])),
+ ServerOptions = orber_test_lib:get_options(iiop_ssl, server,
+ 2, [{flags, ?ORB_ENV_LOCAL_INTERFACE},
+ {iiop_port, 5648},
+ {iiop_ssl_port, 5649},
+ {interceptors, {native, [orber_iiop_tracer_silent]}}|ExtraSSLOptions]),
+ ?match({ok, _},
+ orber_test_lib:remote_apply(ServerNode, orber,
+ add_listen_interface,
+ [Loopback, ssl, ServerOptions])),
+
+ ClientOptions = orber_test_lib:get_options(iiop_ssl, client,
+ 2, [{iiop_ssl_port, 0}|ExtraSSLOptions]),
+ {ok, ClientNode, _ClientHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node(ClientOptions)),
+
+ ?match(ok, orber_test_lib:remote_apply(ClientNode, orber_test_lib,
+ install_test_data,
+ [ssl])),
+ orber_test_lib:remote_apply(ClientNode, ssl, start, []),
+ orber_test_lib:remote_apply(ServerNode, crypto, start, []),
+ orber_test_lib:remote_apply(ClientNode, ssl, seed, ["testing"]),
+ Obj = ?match(#'IOP_IOR'{},
+ orber_test_lib:remote_apply(ClientNode, corba,
+ string_to_object, ["corbaname:iiop:1.1@"++Loopback++":5648/NameService#mamba",
+ [{context, [#'IOP_ServiceContext'{context_id=?ORBER_GENERIC_CTX_ID,
+ context_data = {configuration, ClientOptions}}]}]])),
+ ?match(ok, orber_test_lib:remote_apply(ClientNode, orber_test_server,
+ print, [Obj])),
+
+ ok
+ end.
+
+
+
+%%-----------------------------------------------------------------
+%% API tests for Orber to Java ORB, no security
+%%-----------------------------------------------------------------
+
+%orber_java_api(doc) -> ["ERLANG-ORB <-> JAVA-ORB API tests",
+% "This case test if data encode/decode (IIOP)",
+% "produce the correct result, i.e., the test_server echos",
+% "the input parameter or an exception is raised (MARSHAL)."];
+%orber_java_api(suite) -> [];
+%orber_java_api(Config) ->
+% ok.
+
+%%------------------------------------------------------------
+%% function : ssl_suite
+%% Arguments: Config
+%% Depth
+%% Returns : ok
+%% Effect :
+%%------------------------------------------------------------
+
+ssl_suite(ServerOptions, ClientOptions) ->
+
+ {ok, ServerNode, ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node(ServerOptions)),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ SSLServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_ssl_port, []),
+
+ {ok, ClientNode, _ClientHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node(ClientOptions)),
+
+ ?match(ok, orber_test_lib:remote_apply(ServerNode, orber_test_lib,
+ install_test_data,
+ [ssl])),
+ %% Tell the client to interoperate with the server. The purpose of this
+ %% operation is to look up, using NameService, an object reference and
+ %% use it to contact the object.
+ ?match(ok, orber_test_lib:remote_apply(ClientNode, orber_test_lib,
+ lookup,
+ [ServerHost, ServerPort])),
+
+ ?match(ok, orber_test_lib:remote_apply(ClientNode, orber_test_lib,
+ alternate_ssl_iiop_address,
+ [ServerHost, ServerPort, SSLServerPort])),
+
+ %% 'This' node is not secure. Contact the server. Must refuse connection.
+ NSR = ?match({'IOP_IOR',"IDL:omg.org/CosNaming/NamingContextExt:1.0",_},
+ corba:string_to_object("corbaloc::1.2@"++ServerHost++":"++
+ integer_to_list(ServerPort)++"/NameService")),
+
+ %% Should be 'NO_PERMISSION'??
+ ?match({'EXCEPTION',{'COMM_FAILURE',_,_,_}},
+ 'CosNaming_NamingContext':resolve(NSR, lname:new(["not_exist"]))),
+
+ %% Should be 'NO_PERMISSION'??
+ ?match({'EXCEPTION',{'COMM_FAILURE',_,_,_}},
+ 'CosNaming_NamingContext':resolve(NSR, lname:new(["mamba"]))),
+
+ %% Uninstall.
+ ?match(ok, orber_test_lib:remote_apply(ServerNode, orber_test_lib,
+ uninstall_test_data,
+ [ssl])),
+ ok.
+
+%%-----------------------------------------------------------------
+%% iiop_setup_connection_timeout API tests for ORB to ORB.
+%%-----------------------------------------------------------------
+setup_connection_timeout_api(doc) -> ["iiop_setup_connection_timeout API tests for ORB to ORB."];
+setup_connection_timeout_api(suite) -> [];
+setup_connection_timeout_api(_Config) ->
+ ?match(ok, application:set_env(orber, iiop_backlog, 0)),
+ %% Wait to be sure that the configuration has kicked in.
+ timer:sleep(2000),
+ {ok, Ref, Port} = create_fake_server_ORB(normal, 0, [], listen, []),
+ ?match(ok, orber:configure(iiop_setup_connection_timeout, 5)),
+ ?match(ok, orber:info(io)),
+ IP = orber_test_lib:get_host(),
+ spawn(?MODULE, do_connect, [IP, Port, [{active, false}]]),
+ spawn(?MODULE, do_connect, [IP, Port, [{active, false}]]),
+ spawn(?MODULE, do_connect, [IP, Port, [{active, false}]]),
+ spawn(?MODULE, do_connect, [IP, Port, [{active, false}]]),
+ spawn(?MODULE, do_connect, [IP, Port, [{active, false}]]),
+ timer:sleep(2000),
+ Corbaloc = "corbaloc::1.2@"++IP++":"++integer_to_list(Port)++"/NameService",
+ ?match({'EXCEPTION', _E}, corba:string_to_object(Corbaloc)),
+ destroy_fake_ORB(Ref),
+ ?match(ok, application:set_env(orber, iiop_backlog, 5)),
+ ok.
+
+%%-----------------------------------------------------------------
+%% iiop_setup_connection_timeout API tests for ORB to ORB.
+%%-----------------------------------------------------------------
+setup_multi_connection_timeout_api(doc) ->
+ ["iiop_multi_setup_connection_timeout API tests for ORB to ORB."];
+setup_multi_connection_timeout_api(suite) -> [];
+setup_multi_connection_timeout_api(_Config) ->
+ ?match(ok, application:set_env(orber, iiop_backlog, 0)),
+ %% Wait to be sure that the configuration has kicked in.
+ timer:sleep(2000),
+ {ok, Ref, Port} = create_fake_server_ORB(normal, 0, [], listen, []),
+ ?match(ok, application:set_env(orber, iiop_out_ports, {6042, 6234})),
+ ?match(ok, orber:configure(iiop_setup_connection_timeout, 5)),
+ ?match(ok, orber:info(io)),
+ IP = orber_test_lib:get_host(),
+ spawn(?MODULE, do_connect, [IP, Port, [{active, false}]]),
+ spawn(?MODULE, do_connect, [IP, Port, [{active, false}]]),
+ spawn(?MODULE, do_connect, [IP, Port, [{active, false}]]),
+ spawn(?MODULE, do_connect, [IP, Port, [{active, false}]]),
+ spawn(?MODULE, do_connect, [IP, Port, [{active, false}]]),
+ Corbaloc = "corbaloc::1.2@"++IP++":"++integer_to_list(Port)++"/NameService",
+ timer:sleep(2000),
+ ?match({'EXCEPTION', _E}, corba:string_to_object(Corbaloc)),
+ destroy_fake_ORB(Ref),
+ ?match(ok, application:set_env(orber, iiop_backlog, 5)),
+ ?match(ok, application:set_env(orber, iiop_out_ports, undefined)),
+ ok.
+
+setup_multi_connection_timeout_attempts_api(doc) ->
+ ["iiop_multi_setup_connection_timeout API tests for ORB to ORB."];
+setup_multi_connection_timeout_attempts_api(suite) -> [];
+setup_multi_connection_timeout_attempts_api(_Config) ->
+ ?match(ok, application:set_env(orber, iiop_backlog, 0)),
+ %% Wait to be sure that the configuration has kicked in.
+ timer:sleep(2000),
+ {ok, Ref, Port} = create_fake_server_ORB(normal, 0, [], listen, []),
+ ?match(ok, application:set_env(orber, iiop_out_ports, {6042, 6234})),
+ ?match(ok, application:set_env(orber, iiop_out_ports_attempts, 1)),
+ ?match(ok, orber:configure(iiop_setup_connection_timeout, 5)),
+ ?match(ok, orber:info(io)),
+ IP = orber_test_lib:get_host(),
+ spawn(?MODULE, do_connect, [IP, Port, [{active, false}]]),
+ spawn(?MODULE, do_connect, [IP, Port, [{active, false}]]),
+ spawn(?MODULE, do_connect, [IP, Port, [{active, false}]]),
+ spawn(?MODULE, do_connect, [IP, Port, [{active, false}]]),
+ spawn(?MODULE, do_connect, [IP, Port, [{active, false}]]),
+ Corbaloc = "corbaloc::1.2@"++IP++":"++integer_to_list(Port)++"/NameService",
+ timer:sleep(2000),
+ ?match({'EXCEPTION', _E}, corba:string_to_object(Corbaloc)),
+ destroy_fake_ORB(Ref),
+ ?match(ok, application:set_env(orber, iiop_backlog, 5)),
+ ?match(ok, application:set_env(orber, iiop_out_ports, undefined)),
+ ok.
+
+setup_multi_connection_timeout_random_api(doc) ->
+ ["iiop_multi_setup_connection_timeout API tests for ORB to ORB."];
+setup_multi_connection_timeout_random_api(suite) -> [];
+setup_multi_connection_timeout_random_api(_Config) ->
+ ?match(ok, application:set_env(orber, iiop_backlog, 0)),
+ %% Wait to be sure that the configuration has kicked in.
+ timer:sleep(2000),
+ {ok, Ref, Port} = create_fake_server_ORB(normal, 0, [], listen, []),
+ ?match(ok, application:set_env(orber, iiop_out_ports, {6042, 6234})),
+ ?match(ok, application:set_env(orber, iiop_out_ports_random, true)),
+ ?match(ok, orber:configure(iiop_setup_connection_timeout, 5)),
+ ?match(ok, orber:info(io)),
+ IP = orber_test_lib:get_host(),
+ spawn(?MODULE, do_connect, [IP, Port, [{active, false}]]),
+ spawn(?MODULE, do_connect, [IP, Port, [{active, false}]]),
+ spawn(?MODULE, do_connect, [IP, Port, [{active, false}]]),
+ spawn(?MODULE, do_connect, [IP, Port, [{active, false}]]),
+ spawn(?MODULE, do_connect, [IP, Port, [{active, false}]]),
+ Corbaloc = "corbaloc::1.2@"++IP++":"++integer_to_list(Port)++"/NameService",
+ timer:sleep(2000),
+ ?match({'EXCEPTION', _E}, corba:string_to_object(Corbaloc)),
+ destroy_fake_ORB(Ref),
+ ?match(ok, application:set_env(orber, iiop_backlog, 5)),
+ ?match(ok, application:set_env(orber, iiop_out_ports, undefined)),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Sending an incorrect header to the server-side ORB.
+%%-----------------------------------------------------------------
+bad_giop_header_api(doc) -> ["Sending an incorrect header to the server-side ORB."];
+bad_giop_header_api(suite) -> [];
+bad_giop_header_api(_Config) ->
+ orber:configure_override(interceptors, {native,[orber_iiop_tracer]}),
+ orber:configure(orber_debug_level, 10),
+ ?match(ok, orber:info(io)),
+ {ok, ServerNode, ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node()),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ Req = <<"GIOP",1,2,0,100,0,0,0,5,0,0,0,10,50>> ,
+ ?match(ok, fake_client_ORB(normal, ServerHost, ServerPort, [],
+ message_error, [Req])),
+
+ application:set_env(orber, interceptors, false),
+ orber:configure(orber_debug_level, 0),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Fragmented IIOP tests (Server-side).
+%%-----------------------------------------------------------------
+-define(REQUEST_ID, 0).
+
+-define(REPLY_FRAG_1, <<71,73,79,80,1,2,2,1,0,0,0,41,0,0,0,?REQUEST_ID,0,0,0,0,0,0,0,1,78,69,79,0,0,0,0,2,0,10,0,0,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,4,49>>).
+%% The fragments are identical for requests and replies.
+-define(FRAG_2, <<71,73,79,80,1,2,2,7,0,0,0,5,0,0,0,?REQUEST_ID,50>>).
+-define(FRAG_3, <<71,73,79,80,1,2,2,7,0,0,0,5,0,0,0,?REQUEST_ID,51>>).
+-define(FRAG_4, <<71,73,79,80,1,2,0,7,0,0,0,5,0,0,0,?REQUEST_ID,0>>).
+
+
+fragments_server_api(doc) -> ["fragments API tests for server-side ORB."];
+fragments_server_api(suite) -> [];
+fragments_server_api(_Config) ->
+ %% --- Create a slave-node ---
+ {ok, Node, Host} =
+ ?match({ok,_,_}, orber_test_lib:js_node()),
+ Port = orber_test_lib:remote_apply(Node, orber, iiop_port, []),
+
+ ?match(ok, orber_test_lib:remote_apply(Node, orber_test_lib,
+ install_test_data,
+ [nameservice])),
+
+ NSR = ?match({'IOP_IOR',"IDL:omg.org/CosNaming/NamingContextExt:1.0",_},
+ corba:string_to_object("corbaloc::1.2@"++Host++":"++
+ integer_to_list(Port)++"/NameService")),
+
+ Obj = ?match({'IOP_IOR',"IDL:omg.org/orber_test/server:1.0",_},
+ 'CosNaming_NamingContext':resolve(NSR, lname:new(["mamba"]))),
+
+ Any = #any{typecode = {tk_string,0},
+ value = "123"},
+ Target = #'GIOP_TargetAddress'{label = ?GIOP_KeyAddr,
+ value = iop_ior:get_objkey(Obj)},
+ %% Fix a request header.
+ {Hdr, Body, HdrLen, _What, _Flags} =
+ cdr_encode:enc_request_split(
+ #giop_env{version = {1,2}, objkey = Target,
+ request_id = ?REQUEST_ID,
+ response_expected = true,
+ op = testing_iiop_any,
+ parameters = [49], ctx = [],
+ tc = {tk_void,[tk_char],[]},
+ host = [orber_test_lib:get_host()],
+ iiop_port = orber:iiop_port(),
+ iiop_ssl_port = orber:iiop_ssl_port(),
+ domain = orber:domain(),
+ partial_security = orber:partial_security()}),
+ NewBody =
+ case size(Body) of
+ 1 ->
+ <<0,0,0,18,0,0,0,0,0,0,0,4,49>> ;
+ Size ->
+ Aligned = Size -1,
+ <<AligmnetData:Aligned/binary,49>> = Body,
+ list_to_binary([AligmnetData, <<0,0,0,18,0,0,0,0,0,0,0,4,49>> ])
+ end,
+
+ MessSize = HdrLen+size(NewBody),
+ ReqFrag = list_to_binary([ <<"GIOP",1:8,2:8,2:8,0:8,
+ MessSize:32/big-unsigned-integer>> , Hdr |NewBody]),
+ ?match(Any, fake_client_ORB(normal, Host, Port, [], fragments,
+ [ReqFrag, ?FRAG_2, ?FRAG_3, ?FRAG_4])),
+
+ ok.
+
+%%-----------------------------------------------------------------
+%% Fragmented IIOP tests (Server-side). Exceeding Maximum.
+%%-----------------------------------------------------------------
+fragments_max_server_api(doc) -> ["Maximum fragments API tests for server-side ORB."];
+fragments_max_server_api(suite) -> [];
+fragments_max_server_api(_Config) ->
+ %% --- Create a slave-node ---
+ IP = orber_test_lib:get_host(),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{iiop_max_fragments, 2},
+ {ip_address, IP}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ fragments_max_server(ServerNode, IP, ServerPort).
+
+fragments_max_server_added_api(doc) -> ["Maximum fragments API tests for server-side ORB."];
+fragments_max_server_added_api(suite) -> [];
+fragments_max_server_added_api(_Config) ->
+ %% --- Create a slave-node ---
+ IP = orber_test_lib:get_host(),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([])),
+ ServerPort = 1 + orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ ?match({ok, _},
+ orber_test_lib:remote_apply(ServerNode, orber,
+ add_listen_interface,
+ [IP, normal,
+ [{iiop_max_fragments, 2},
+ {flags, ?ORB_ENV_LOCAL_INTERFACE},
+ {iiop_port, ServerPort}]])),
+ fragments_max_server(ServerNode, IP, ServerPort).
+
+fragments_max_server(ServerNode, ServerHost, ServerPort) ->
+ ?match(ok, orber_test_lib:remote_apply(ServerNode, orber_test_lib,
+ install_test_data,
+ [nameservice])),
+ Obj = ?match({'IOP_IOR',"IDL:omg.org/orber_test/server:1.0",_},
+ corba:string_to_object("corbaname::1.2@"++ServerHost++":"++
+ integer_to_list(ServerPort)++"/NameService#mamba")),
+ Target = #'GIOP_TargetAddress'{label = ?GIOP_KeyAddr,
+ value = iop_ior:get_objkey(Obj)},
+ %% Fix a request header.
+ {Hdr, Body, HdrLen, _What, _Flags} =
+ cdr_encode:enc_request_split(
+ #giop_env{version = {1,2},
+ objkey = Target,
+ request_id = ?REQUEST_ID,
+ response_expected = true,
+ op = testing_iiop_any,
+ parameters = [49], ctx = [],
+ tc = {tk_void,[tk_char],[]},
+ host = [orber_test_lib:get_host()],
+ iiop_port = orber:iiop_port(),
+ iiop_ssl_port = orber:iiop_ssl_port(),
+ domain = orber:domain(),
+ partial_security = orber:partial_security()}),
+ NewBody =
+ case size(Body) of
+ 1 ->
+ <<0,0,0,18,0,0,0,0,0,0,0,4,49>> ;
+ Size ->
+ Aligned = Size -1,
+ <<AligmnetData:Aligned/binary,49>> = Body,
+ list_to_binary([AligmnetData, <<0,0,0,18,0,0,0,0,0,0,0,4,49>> ])
+ end,
+
+ MessSize = HdrLen+size(NewBody),
+ ReqFrag = list_to_binary([ <<"GIOP",1:8,2:8,2:8,0:8,
+ MessSize:32/big-unsigned-integer>> , Hdr |NewBody]),
+ ?match(#'IMP_LIMIT'{},
+ fake_client_ORB(normal, ServerHost, ServerPort, [], fragments_max,
+ [ReqFrag, ?FRAG_2, ?FRAG_3, ?FRAG_4])),
+
+ ok.
+
+%%-----------------------------------------------------------------
+%% Fragmented IIOP tests (Client-side).
+%%-----------------------------------------------------------------
+fragments_client_api(doc) -> ["fragments API tests for client-side ORB."];
+fragments_client_api(suite) -> [];
+fragments_client_api(_Config) ->
+ Any = #any{typecode = {tk_string,0},
+ value = "123"},
+ application:set_env(orber, interceptors, {native,[orber_iiop_tracer]}),
+ orber:configure(orber_debug_level, 10),
+ orber:info(),
+ IOR = ?match({'IOP_IOR',_,_},
+ iop_ior:create_external({1, 2}, "IDL:FAKE:1.0",
+ "localhost", 6004, "FAKE", [])),
+ spawn(?MODULE, create_fake_server_ORB, [normal, 6004, [], fragments,
+ [?REPLY_FRAG_1, ?FRAG_2,
+ ?FRAG_3, ?FRAG_4]]),
+ ?match({ok, Any}, orber_test_server:testing_iiop_any(IOR, Any)),
+ application:set_env(orber, interceptors, false),
+ orber:configure(orber_debug_level, 0),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Fragmented IIOP tests (Client-side).
+%%-----------------------------------------------------------------
+bad_fragment_id_client_api(doc) -> ["fragments API tests for client-side ORB."];
+bad_fragment_id_client_api(suite) -> [];
+bad_fragment_id_client_api(_Config) ->
+ application:set_env(orber, interceptors, {native,[orber_iiop_tracer]}),
+ orber:configure(orber_debug_level, 10),
+ orber:info(),
+ {ok, ServerNode, ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node()),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ Req = <<71,73,79,80,1,2,2,7,0,0,0,5,0,0,0,100,50>> ,
+ ?match(ok, fake_client_ORB(normal, ServerHost, ServerPort, [],
+ message_error, [Req])),
+
+ application:set_env(orber, interceptors, false),
+ orber:configure(orber_debug_level, 0),
+
+ ok.
+
+%%-----------------------------------------------------------------
+%% Non-existing request id
+%%-----------------------------------------------------------------
+bad_id_cancel_request_api(doc) -> ["Description", "more description"];
+bad_id_cancel_request_api(suite) -> [];
+bad_id_cancel_request_api(Config) when is_list(Config) ->
+ Req10 = cdr_encode:enc_cancel_request(#giop_env{version = {1, 0},
+ request_id = 556}),
+ Req11 = cdr_encode:enc_cancel_request(#giop_env{version = {1, 1},
+ request_id = 556}),
+ Req12 = cdr_encode:enc_cancel_request(#giop_env{version = {1, 2},
+ request_id = 556}),
+ {ok, ServerNode, ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node()),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ ?match(ok, fake_client_ORB(normal, ServerHost, ServerPort, [],
+ message_error, [Req10])),
+ ?match(ok, fake_client_ORB(normal, ServerHost, ServerPort, [],
+ message_error, [Req11])),
+ ?match(ok, fake_client_ORB(normal, ServerHost, ServerPort, [],
+ message_error, [Req12])),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Local functions.
+%%-----------------------------------------------------------------
+
+do_connect(Host, Port, Options) ->
+ gen_tcp:connect(Host, Port, Options),
+ timer:sleep(20000).
+
+pseudo_calls(0, _) ->
+ ok;
+pseudo_calls(Times, Obj) ->
+ orber_test_server:pseudo_call(Obj),
+ New = Times - 1,
+ pseudo_calls(New, Obj).
+pseudo_casts(0, _) ->
+ ok;
+pseudo_casts(Times, Obj) ->
+ orber_test_server:pseudo_cast(Obj),
+ New = Times - 1,
+ pseudo_casts(New, Obj).
+
+context_test(Obj) ->
+ CodeSetCtx = #'CONV_FRAME_CodeSetContext'{char_data = 65537,
+ wchar_data = 65801},
+ FTGrp = #'FT_FTGroupVersionServiceContext'{object_group_ref_version = ?ULONGMAX},
+ FTReq = #'FT_FTRequestServiceContext'{client_id = "ClientId",
+ retention_id = ?LONGMAX,
+ expiration_time = ?ULONGLONGMAX},
+
+ IDToken1 = #'CSI_IdentityToken'{label = ?CSI_IdentityTokenType_ITTAbsent,
+ value = true},
+ IDToken2 = #'CSI_IdentityToken'{label = ?CSI_IdentityTokenType_ITTAnonymous,
+ value = false},
+ IDToken3 = #'CSI_IdentityToken'{label = ?CSI_IdentityTokenType_ITTPrincipalName,
+ value = [0,255]},
+ IDToken4 = #'CSI_IdentityToken'{label = ?CSI_IdentityTokenType_ITTX509CertChain,
+ value = [1,255]},
+ IDToken5 = #'CSI_IdentityToken'{label = ?CSI_IdentityTokenType_ITTDistinguishedName,
+ value = [2,255]},
+ IDToken6 = #'CSI_IdentityToken'{label = ?ULONGMAX,
+ value = [3,255]},
+
+ MTEstablishContext1 = #'CSI_SASContextBody'
+ {label = ?CSI_MsgType_MTEstablishContext,
+ value = #'CSI_EstablishContext'{client_context_id = ?ULONGLONGMAX,
+ authorization_token =
+ [#'CSI_AuthorizationElement'
+ {the_type = ?ULONGMAX,
+ the_element = [0,255]}],
+ identity_token = IDToken1,
+ client_authentication_token = [1, 255]}},
+ MTEstablishContext2 = #'CSI_SASContextBody'
+ {label = ?CSI_MsgType_MTEstablishContext,
+ value = #'CSI_EstablishContext'{client_context_id = ?ULONGLONGMAX,
+ authorization_token =
+ [#'CSI_AuthorizationElement'
+ {the_type = ?ULONGMAX,
+ the_element = [0,255]}],
+ identity_token = IDToken2,
+ client_authentication_token = [1, 255]}},
+ MTEstablishContext3 = #'CSI_SASContextBody'
+ {label = ?CSI_MsgType_MTEstablishContext,
+ value = #'CSI_EstablishContext'{client_context_id = ?ULONGLONGMAX,
+ authorization_token =
+ [#'CSI_AuthorizationElement'
+ {the_type = ?ULONGMAX,
+ the_element = [0,255]}],
+ identity_token = IDToken3,
+ client_authentication_token = [1, 255]}},
+ MTEstablishContext4 = #'CSI_SASContextBody'
+ {label = ?CSI_MsgType_MTEstablishContext,
+ value = #'CSI_EstablishContext'{client_context_id = ?ULONGLONGMAX,
+ authorization_token =
+ [#'CSI_AuthorizationElement'
+ {the_type = ?ULONGMAX,
+ the_element = [0,255]}],
+ identity_token = IDToken4,
+ client_authentication_token = [1, 255]}},
+ MTEstablishContext5 = #'CSI_SASContextBody'
+ {label = ?CSI_MsgType_MTEstablishContext,
+ value = #'CSI_EstablishContext'{client_context_id = ?ULONGLONGMAX,
+ authorization_token =
+ [#'CSI_AuthorizationElement'
+ {the_type = ?ULONGMAX,
+ the_element = [0,255]}],
+ identity_token = IDToken5,
+ client_authentication_token = [1, 255]}},
+ MTEstablishContext6 = #'CSI_SASContextBody'
+ {label = ?CSI_MsgType_MTEstablishContext,
+ value = #'CSI_EstablishContext'{client_context_id = ?ULONGLONGMAX,
+ authorization_token =
+ [#'CSI_AuthorizationElement'
+ {the_type = ?ULONGMAX,
+ the_element = [0,255]}],
+ identity_token = IDToken6,
+ client_authentication_token = [1, 255]}},
+ MTCompleteEstablishContext = #'CSI_SASContextBody'
+ {label = ?CSI_MsgType_MTCompleteEstablishContext,
+ value = #'CSI_CompleteEstablishContext'{client_context_id = ?ULONGLONGMAX,
+ context_stateful = false,
+ final_context_token = [1, 255]}},
+ MTContextError = #'CSI_SASContextBody'
+ {label = ?CSI_MsgType_MTContextError,
+ value = #'CSI_ContextError'{client_context_id = ?ULONGLONGMAX,
+ major_status = 1,
+ minor_status = 2,
+ error_token = [2,255]}},
+ MTMessageInContext = #'CSI_SASContextBody'
+ {label = ?CSI_MsgType_MTMessageInContext,
+ value = #'CSI_MessageInContext'{client_context_id = ?ULONGLONGMAX,
+ discard_context = true}},
+ Ctx = [#'IOP_ServiceContext'{context_id=?IOP_CodeSets,
+ context_data = CodeSetCtx},
+ #'IOP_ServiceContext'{context_id=?IOP_FT_GROUP_VERSION,
+ context_data = FTGrp},
+ #'IOP_ServiceContext'{context_id=?IOP_FT_REQUEST,
+ context_data = FTReq},
+ #'IOP_ServiceContext'{context_id=?IOP_SecurityAttributeService,
+ context_data = MTEstablishContext1},
+ #'IOP_ServiceContext'{context_id=?IOP_SecurityAttributeService,
+ context_data = MTEstablishContext2},
+ #'IOP_ServiceContext'{context_id=?IOP_SecurityAttributeService,
+ context_data = MTEstablishContext3},
+ #'IOP_ServiceContext'{context_id=?IOP_SecurityAttributeService,
+ context_data = MTEstablishContext4},
+ #'IOP_ServiceContext'{context_id=?IOP_SecurityAttributeService,
+ context_data = MTEstablishContext5},
+ #'IOP_ServiceContext'{context_id=?IOP_SecurityAttributeService,
+ context_data = MTEstablishContext6},
+ #'IOP_ServiceContext'{context_id=?IOP_SecurityAttributeService,
+ context_data = MTCompleteEstablishContext},
+ #'IOP_ServiceContext'{context_id=?IOP_SecurityAttributeService,
+ context_data = MTContextError},
+ #'IOP_ServiceContext'{context_id=?IOP_SecurityAttributeService,
+ context_data = MTMessageInContext},
+ #'IOP_ServiceContext'{context_id=?ORBER_GENERIC_CTX_ID,
+ context_data = {any_kind_of_data, {127,0,0,1}, 4001}}],
+ ?match(ok, orber_test_server:testing_iiop_context(Obj, [{context, Ctx}])).
+
+
+create_fake_server_ORB(Type, Port, Options, listen, _Data) ->
+ {ok, _ListenSocket, NewPort} =
+ orber_socket:listen(Type, Port,
+ [{backlog, 0}, {active, false}|Options]),
+ Socket = orber_socket:connect(Type, 'localhost', NewPort, [{active, false}|Options]),
+ {ok, {Type, Socket}, NewPort};
+create_fake_server_ORB(Type, Port, Options, Action, Data) ->
+ {ok, ListenSocket, _NewPort} =
+ orber_socket:listen(Type, Port, [{active, false}|Options]),
+ Socket = orber_socket:accept(Type, ListenSocket),
+ do_server_action(Type, Socket, Action, Data),
+ orber_socket:close(Type, Socket),
+ ok.
+
+destroy_fake_ORB({Type, Socket}) ->
+ orber_socket:close(Type, Socket);
+destroy_fake_ORB(_) ->
+ ok.
+
+fake_client_ORB(Type, Host, Port, Options, connect, _Data) ->
+ Socket = orber_socket:connect(Type, Host, Port, [{active, false}|Options]),
+ {Type, Socket};
+fake_client_ORB(Type, Host, Port, Options, Action, Data) ->
+ Socket = orber_socket:connect(Type, Host, Port, [{active, false}|Options]),
+ Result = do_client_action(Type, Socket, Action, Data),
+ orber_socket:close(Type, Socket),
+ Result.
+
+
+
+do_server_action(Type, Socket, fragments, FragList) ->
+ timer:sleep(3000),
+ {ok, _B} = gen_tcp:recv(Socket, 0),
+ ok = send_data(Type, Socket, FragList);
+do_server_action(_Type, _Socket, _Action, _Data) ->
+ ok.
+
+do_client_action(Type, Socket, fragments, FragList) ->
+ ok = send_data(Type, Socket, FragList),
+ timer:sleep(3000),
+ {ok, Bytes} = gen_tcp:recv(Socket, 0),
+ {#reply_header{request_id = ?REQUEST_ID, reply_status = no_exception}, ok, [Par]} =
+ cdr_decode:dec_message({tk_void,[tk_any],[tk_any]}, Bytes),
+ Par;
+do_client_action(Type, Socket, fragments_max, FragList) ->
+ ok = send_data(Type, Socket, FragList),
+ timer:sleep(3000),
+ {ok, Bytes} = gen_tcp:recv(Socket, 0),
+ {#reply_header{request_id = ?REQUEST_ID, reply_status = system_exception}, Exc, []} =
+ cdr_decode:dec_message({tk_void,[tk_any],[tk_any]}, Bytes),
+ Exc;
+do_client_action(Type, Socket, message_error, Data) ->
+ ok = send_data(Type, Socket, Data),
+ timer:sleep(3000),
+ {ok,Bytes} = gen_tcp:recv(Socket, 0),
+ 'message_error' = cdr_decode:dec_message({tk_void,[tk_any],[tk_any]}, Bytes),
+ ok;
+do_client_action(_Type, _Socket, _Action, _Data) ->
+ ok.
+
+send_data(_Type, _Socket, []) ->
+ ok;
+send_data(Type, Socket, [H|T]) ->
+ orber_socket:write(Type, Socket, H),
+ send_data(Type, Socket, T).
+
diff --git a/lib/orber/test/naming_context_SUITE.erl b/lib/orber/test/naming_context_SUITE.erl
new file mode 100644
index 0000000000..4406e01d5a
--- /dev/null
+++ b/lib/orber/test/naming_context_SUITE.erl
@@ -0,0 +1,385 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-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%
+%%
+%%
+%%-----------------------------------------------------------------
+%%
+%% Description:
+%% Test suite for Name service
+%%
+%%-----------------------------------------------------------------
+-module(naming_context_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
+-include_lib("orber/src/orber_iiop.hrl").
+-include_lib("orber/include/corba.hrl").
+
+-define(default_timeout, ?t:minutes(5)).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+
+-export([name_context/1, check_list/1, name_context_ext/1]).
+
+-export([init_all/1, finish_all/1, init_per_testcase/2, fin_per_testcase/2]).
+
+
+%%-----------------------------------------------------------------
+%% Macros
+%%-----------------------------------------------------------------
+-define(REMAP_EXCEPT(F), case catch F of
+ {'EXCEPTION', E} -> exit(E);
+ {'EXIT', E} -> exit(E);
+ R -> R
+ end).
+
+-define(match(ExpectedRes, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["Description", "more description"];
+all(suite) -> {req,
+ [mnesia],
+ {conf, init_all, cases(), finish_all}}.
+
+cases() ->
+ [name_context, check_list, name_context_ext].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+
+init_per_testcase(_Case, Config) ->
+ Path = code:which(?MODULE),
+ code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
+ ?line Dog=test_server:timetrap(?default_timeout),
+ orber:jump_start(0),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Path = code:which(?MODULE),
+ code:del_path(filename:join(filename:dirname(Path), "idl_output")),
+ orber:jump_stop(),
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+init_all(Config) ->
+ Config.
+
+finish_all(Config) ->
+ Config.
+
+%%-----------------------------------------------------------------
+%% Test Case: name handling tests
+%% Description:
+%%-----------------------------------------------------------------
+name_context(doc) -> ["Description", "more description"];
+name_context(suite) -> [];
+name_context(_) ->
+ ?REMAP_EXCEPT(name_context_run()).
+
+name_context_run() ->
+ ?line Ns = corba:resolve_initial_references("NameService"),
+
+ ?match({'EXCEPTION', #'NO_PERMISSION'{}},
+ 'CosNaming_NamingContextExt':destroy(Ns)),
+
+ %% Create a test context.
+ ?line Tc = 'CosNaming_NamingContext':bind_new_context(Ns,
+ [#'CosNaming_NameComponent'{id="testcontext",
+ kind=""}]),
+ %% Start testing
+ ?line 'CosNaming_NamingContext':bind(Tc, [#'CosNaming_NameComponent'
+ {id="hej",
+ kind=""}], Ns),
+ ?line Ns = 'CosNaming_NamingContext':resolve(Tc,
+ [#'CosNaming_NameComponent'{id="hej",
+ kind=""}]),
+ ?line Nc = 'CosNaming_NamingContext':new_context(Tc),
+ ?line 'CosNaming_NamingContext':bind(Tc, [#'CosNaming_NameComponent'
+ {id="stop",
+ kind=""}], Nc),
+ ?line Nc = 'CosNaming_NamingContext':resolve(Tc,
+ [#'CosNaming_NameComponent'{id="stop",
+ kind=""}]),
+ ?line {'EXCEPTION', E0} =
+ (catch 'CosNaming_NamingContext':bind(Tc,
+ [#'CosNaming_NameComponent'{id="stop",
+ kind=""}], Ns)),
+ ?line ok = 'CosNaming_NamingContext':rebind(Tc,
+ [#'CosNaming_NameComponent'{id="stop",
+ kind=""}], Ns),
+ ?line {'CosNaming_NamingContext_AlreadyBound', _} = E0,
+ ?line 'CosNaming_NamingContext':bind_context(Tc,
+ [#'CosNaming_NameComponent'{id="evaluate",
+ kind=""}], Nc),
+ ?line Nc =
+ 'CosNaming_NamingContext':resolve(Tc,
+ [#'CosNaming_NameComponent'{id="evaluate",
+ kind=""}]),
+ ?line 'CosNaming_NamingContext':bind(Tc,
+ [#'CosNaming_NameComponent'{id="evaluate",
+ kind=""},
+ #'CosNaming_NameComponent'{id="hej",
+ kind=""}], Ns),
+ ?line ok = 'CosNaming_NamingContext':rebind(Tc,
+ [#'CosNaming_NameComponent'{id="evaluate",
+ kind=""},
+ #'CosNaming_NameComponent'{id="hej",
+ kind=""}], Ns),
+ ?line Ns = 'CosNaming_NamingContext':resolve(Tc,
+ [#'CosNaming_NameComponent'{id="evaluate",
+ kind=""},
+ #'CosNaming_NameComponent'{id="hej",
+ kind=""}]),
+ ?line {'EXCEPTION', E1} =
+ (catch 'CosNaming_NamingContext':resolve(Tc,
+ [#'CosNaming_NameComponent'{id="stop",
+ kind=""},
+ #'CosNaming_NameComponent'{id="hej",
+ kind=""}])),
+ ?line ?match(ok, orber_diagnostics:nameservice()),
+
+ ?line {'CosNaming_NamingContext_CannotProceed', _,_,_} = E1,
+ ?line {'EXCEPTION', E2} = (catch 'CosNaming_NamingContext':destroy(Nc)),
+ ?line {'CosNaming_NamingContext_NotEmpty', _} = E2,
+ ?line ok = 'CosNaming_NamingContext':unbind(Tc,
+ [#'CosNaming_NameComponent'{id="evaluate",
+ kind=""},
+ #'CosNaming_NameComponent'{id="hej",
+ kind=""}]),
+ ?line ok = 'CosNaming_NamingContext':destroy(Nc),
+ ?line ok = 'CosNaming_NamingContext':unbind(Tc,
+ [#'CosNaming_NameComponent'{id="evaluate",
+ kind=""}]),
+ ?line ok = 'CosNaming_NamingContext':unbind(Tc,
+ [#'CosNaming_NameComponent'{id="stop",
+ kind=""}]),
+ ?line ok = 'CosNaming_NamingContext':unbind(Tc,
+ [#'CosNaming_NameComponent'{id="hej",
+ kind=""}]),
+ ?line case 'CosNaming_NamingContext':list(Tc, 3) of
+ {ok, [], ?ORBER_NIL_OBJREF} ->
+ ok;
+ _ ->
+ exit(not_empty)
+ end,
+ ?line ok = 'CosNaming_NamingContext':unbind(Ns,
+ [#'CosNaming_NameComponent'{id="testcontext",
+ kind=""}]),
+ ?line ok = 'CosNaming_NamingContext':destroy(Tc),
+ ok.
+
+
+
+check_list(doc) ->
+ ["Check that the CosNaming::NamingContext::list()",
+ "returns ok.",
+ "Own Id: OTP-2023"];
+check_list(suite) -> [];
+check_list(Config) when is_list(Config) ->
+ ?REMAP_EXCEPT(check_list_run(Config)).
+
+check_list_run(_Config) ->
+ create_default_contexts(),
+ ?line Ns = corba:resolve_initial_references("NameService"),
+ ?line {_, BL, _} = ?match({ok, _, ?ORBER_NIL_OBJREF},
+ 'CosNaming_NamingContext':list(Ns, 256)),
+
+ FF = fun(X) -> XX = hd(X#'CosNaming_Binding'.binding_name),
+ XX#'CosNaming_NameComponent'.id end,
+
+ L = lists:sort(lists:map(FF, BL)),
+ ?line ["host", "workgroup"] = L,
+
+ %% Test next_n/2
+ ?line {_, _, BI} = ?match({ok, [], _BI}, 'CosNaming_NamingContext':list(Ns, 0)),
+ ?line ?match({true, []}, 'CosNaming_BindingIterator':next_n(BI, 0)),
+ ?line ?match({true, [_]}, 'CosNaming_BindingIterator':next_n(BI, 1)),
+ ?line ?match({false, [_]}, 'CosNaming_BindingIterator':next_n(BI, 1)),
+ ?line ?match({false, []}, 'CosNaming_BindingIterator':next_n(BI, 1)),
+ ?line ?match(ok, 'CosNaming_BindingIterator':destroy(BI)),
+
+ ?line {_, _, BI2} = ?match({ok, [], _BI2}, 'CosNaming_NamingContext':list(Ns, 0)),
+ ?line ?match({true, _}, 'CosNaming_BindingIterator':next_one(BI2)),
+ ?line ?match({true, _}, 'CosNaming_BindingIterator':next_one(BI2)),
+ ?line ?match({false, _}, 'CosNaming_BindingIterator':next_one(BI2)),
+ ?line ?match(ok, 'CosNaming_BindingIterator':destroy(BI2)),
+ ?line ?match(ok, orber_diagnostics:nameservice()),
+ ok.
+
+create_default_contexts() ->
+ HostComponent = lname_component:set_id(lname_component:create(),
+ "host"),
+ HostsComponent = lname_component:set_id(lname_component:create(),
+ "hosts"),
+ ResourcesComponent = lname_component:set_id(lname_component:create(),
+ "resources"),
+ DevelopmentComponent = lname_component:set_id(lname_component:create(),
+ "development"),
+ FactoriesComponent = lname_component:set_id(lname_component:create(),
+ "factories"),
+ WGComponent = lname_component:set_id(lname_component:create(),
+ "workgroup"),
+ %% Creation of Naming Context host and it's subcontexts
+ NS = corba:resolve_initial_references("NameService"),
+ H = 'CosNaming_NamingContext':bind_new_context(NS,
+ lname:insert_component(lname:create(), 1, HostComponent)),
+ HR = 'CosNaming_NamingContext':bind_new_context(H,
+ lname:insert_component(lname:create(), 1, ResourcesComponent)),
+ 'CosNaming_NamingContext':bind_new_context(HR,
+ lname:insert_component(lname:create(), 1, FactoriesComponent)),
+ HD = 'CosNaming_NamingContext':bind_new_context(H,
+ lname:insert_component(lname:create(), 1, DevelopmentComponent)),
+ HDR = 'CosNaming_NamingContext':bind_new_context(HD,
+ lname:insert_component(lname:create(), 1, ResourcesComponent)),
+ 'CosNaming_NamingContext':bind_new_context(HDR,
+ lname:insert_component(lname:create(), 1, FactoriesComponent)),
+ %% Creation of Naming Context workgroup and it's subcontexts
+ W = 'CosNaming_NamingContext':bind_new_context(NS,
+ lname:insert_component(lname:create(), 1, WGComponent)),
+ 'CosNaming_NamingContext':bind_new_context(W,
+ lname:insert_component(lname:create(), 1, HostsComponent)),
+ WR = 'CosNaming_NamingContext':bind_new_context(W,
+ lname:insert_component(lname:create(), 1, ResourcesComponent)),
+ 'CosNaming_NamingContext':bind_new_context(WR,
+ lname:insert_component(lname:create(), 1, FactoriesComponent)),
+ WD = 'CosNaming_NamingContext':bind_new_context(W,
+ lname:insert_component(lname:create(), 1, DevelopmentComponent)),
+ WDR = 'CosNaming_NamingContext':bind_new_context(WD,
+ lname:insert_component(lname:create(), 1, ResourcesComponent)),
+ 'CosNaming_NamingContext':bind_new_context(WDR,
+ lname:insert_component(lname:create(), 1, FactoriesComponent)),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case:
+%% Description:
+%%-----------------------------------------------------------------
+name_context_ext(doc) -> ["Description", "more description"];
+name_context_ext(suite) -> [];
+name_context_ext(_Config) ->
+ ?REMAP_EXCEPT(name_context_ext_run()).
+
+name_context_ext_run() ->
+ ?line NS = ?match({_,pseudo,_, _,_, _},
+ corba:resolve_initial_references("NameService")),
+
+ Name1 = [#'CosNaming_NameComponent'{id="\\<id1\\>", kind="kind1"},
+ #'CosNaming_NameComponent'{id="id2", kind="kind2"}],
+ String1 = "\\<id1\\>.kind1/id2.kind2",
+ Name2 = [#'CosNaming_NameComponent'{id="id1", kind=""},
+ #'CosNaming_NameComponent'{id="id2", kind=""},
+ #'CosNaming_NameComponent'{id="id3", kind=""}],
+ String2 = "id1/id2/id3",
+ Name3 = [#'CosNaming_NameComponent'{id="id1", kind="kind1"},
+ #'CosNaming_NameComponent'{id="", kind=""},
+ #'CosNaming_NameComponent'{id="id3", kind="kind3"}],
+ String3 = "id1.kind1/./id3.kind3",
+ Name4 = [#'CosNaming_NameComponent'{id="id1", kind="kind1"},
+ #'CosNaming_NameComponent'{id="i.d.2", kind="kind2"},
+ #'CosNaming_NameComponent'{id="id3", kind="kind3"}],
+ String4 = "id1.kind1/i\\.d\\.2.kind2/id3.kind3",
+ Name5 = [#'CosNaming_NameComponent'{id="id1", kind=""},
+ #'CosNaming_NameComponent'{id="i/d/2", kind="kind2"},
+ #'CosNaming_NameComponent'{id="id3", kind=""}],
+ String5 = "id1/i\\/d\\/2.kind2/id3",
+
+ BadString1 = "id1./id2/id3",
+ BadString2 = "id1//id3",
+
+ ?match(String1, 'CosNaming_NamingContextExt':to_string(NS, Name1)),
+ ?match(String2, 'CosNaming_NamingContextExt':to_string(NS, Name2)),
+ ?match(String3, 'CosNaming_NamingContextExt':to_string(NS, Name3)),
+ ?match(String4, 'CosNaming_NamingContextExt':to_string(NS, Name4)),
+ ?match(String5, 'CosNaming_NamingContextExt':to_string(NS, Name5)),
+ ?match(Name1, 'CosNaming_NamingContextExt':to_name(NS, String1)),
+ ?match(Name2, 'CosNaming_NamingContextExt':to_name(NS, String2)),
+ ?match(Name3, 'CosNaming_NamingContextExt':to_name(NS, String3)),
+ ?match(Name4, 'CosNaming_NamingContextExt':to_name(NS, String4)),
+ ?match(Name5, 'CosNaming_NamingContextExt':to_name(NS, String5)),
+
+ ?match({'EXCEPTION', {'CosNaming_NamingContext_InvalidName',_}},
+ 'CosNaming_NamingContextExt':to_name(NS, BadString1)),
+ ?match({'EXCEPTION', {'CosNaming_NamingContext_InvalidName',_}},
+ 'CosNaming_NamingContextExt':to_name(NS, BadString2)),
+
+ %% Create a test context.
+ ?line Tc = ?match({_,pseudo,_, _,_, _},
+ 'CosNaming_NamingContext':bind_new_context(NS,
+ [#'CosNaming_NameComponent'{id="testcontext",
+ kind=""}])),
+ ?match(ok, 'CosNaming_NamingContext':bind(Tc, [#'CosNaming_NameComponent'
+ {id="hej",
+ kind=""}], NS)),
+
+ ?match(NS, 'CosNaming_NamingContextExt':resolve_str(Tc, "hej")),
+
+ ?match("corbaloc:rir:", 'CosNaming_NamingContextExt':to_url(Tc, "rir:", "")),
+ ?match("corbaname:rir:/NameService#org/erlang/",
+ 'CosNaming_NamingContextExt':to_url(Tc, "rir:/NameService", "org/erlang/")),
+ ?match("corbaloc::1.1@555%3cxyz.com:9999/Dev/NameService",
+ 'CosNaming_NamingContextExt':to_url(Tc, ":1.1@555\\<xyz.com:9999/Dev/NameService", "")),
+
+ %% Bad port
+ ?match({'EXCEPTION', {'CosNaming_NamingContextExt_InvalidAddress',_}},
+ 'CosNaming_NamingContextExt':to_url(Tc, ":[email protected]:99a9/", "")),
+ %% BAd IIOP-version
+ ?match({'EXCEPTION', {'CosNaming_NamingContextExt_InvalidAddress',_}},
+ 'CosNaming_NamingContextExt':to_url(Tc, ":[email protected]:99a9/", "")),
+ %% Bad IIOP-version
+ ?match({'EXCEPTION', {'CosNaming_NamingContextExt_InvalidAddress',_}},
+ 'CosNaming_NamingContextExt':to_url(Tc, ":@555xyz.com:99a9/", "")),
+ %% Bad protocol
+ ?match({'EXCEPTION', {'CosNaming_NamingContextExt_InvalidAddress',_}},
+ 'CosNaming_NamingContextExt':to_url(Tc, "iop:@555xyz.com:99a9/", "")),
+ %% Unsupported protocol
+ ?match({'EXCEPTION', {'CosNaming_NamingContextExt_InvalidAddress',_}},
+ 'CosNaming_NamingContextExt':to_url(Tc, "atm:@555xyz.com:9999/", "")),
+ %% Bad Name
+ ?match({'EXCEPTION', {'CosNaming_NamingContext_InvalidName',_}},
+ 'CosNaming_NamingContextExt':to_url(Tc, ":555xyz.com:9999/", "id1./id2.kind2")),
+
+ ok.
+
+
diff --git a/lib/orber/test/orber.spec b/lib/orber/test/orber.spec
new file mode 100644
index 0000000000..9d19ea7fc1
--- /dev/null
+++ b/lib/orber/test/orber.spec
@@ -0,0 +1,19 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2010. 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%
+%%
+{topcase, {dir, "../orber_test"}}.
diff --git a/lib/orber/test/orber_SUITE.erl b/lib/orber/test/orber_SUITE.erl
new file mode 100644
index 0000000000..f54da02c0e
--- /dev/null
+++ b/lib/orber/test/orber_SUITE.erl
@@ -0,0 +1,179 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-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%
+%%
+%%
+-module(orber_SUITE).
+-include("test_server.hrl").
+
+
+-define(default_timeout, ?t:minutes(15)).
+-define(application, orber).
+
+% Test server specific exports
+-export([all/1]).
+-export([init_per_testcase/2, fin_per_testcase/2]).
+
+% Test cases must be exported.
+-export([app_test/1, undefined_functions/1, install_load_order/1,
+ install_local_content/1]).
+
+%%
+%% all/1
+%%
+all(doc) ->
+ [];
+all(suite) ->
+ [app_test, undefined_functions,
+ install_load_order, install_local_content].
+
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+fin_per_testcase(_Case, Config) ->
+ Dog=?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+%
+% Test cases starts here.
+%
+app_test(doc) -> [];
+app_test(suite) -> [];
+app_test(_Config) ->
+ ?line ok=?t:app_test(orber),
+ ok.
+
+%% Install Orber using the load_order option.
+install_load_order(suite) ->
+ [];
+install_load_order(doc) ->
+ [];
+install_load_order(_Config) ->
+ orber:jump_stop(),
+ case catch install_load_order2() of
+ ok ->
+ orber:jump_stop();
+ What ->
+ orber:jump_stop(),
+ exit(What)
+ end.
+
+install_load_order2() ->
+ application:load(orber),
+ mnesia:start(),
+ corba:orb_init([{iiop_port, 0}]),
+ orber:install([node()], [{ifr_storage_type, ram_copies},
+ {load_order, 10}]),
+ orber:start(),
+ [H|_] = orber:get_tables(),
+ 10 = mnesia:table_info(H, load_order),
+ ok.
+
+%% Install Orber using the local_content option.
+install_local_content(suite) ->
+ [];
+install_local_content(doc) ->
+ [];
+install_local_content(_Config) ->
+ orber:jump_stop(),
+ case catch install_local_content2() of
+ ok ->
+ orber:jump_stop();
+ What ->
+ orber:jump_stop(),
+ exit(What)
+ end.
+
+install_local_content2() ->
+ application:load(orber),
+ mnesia:start(),
+ corba:orb_init([{iiop_port, 0}]),
+ orber:install([node()], [{ifr_storage_type, ram_copies},
+ {local_content, true}]),
+ orber:start(),
+ [H|_] = orber:get_tables(),
+ true = mnesia:table_info(H, local_content),
+ ok.
+
+
+
+%% Check for undefined functions
+undefined_functions(suite) ->
+ [];
+undefined_functions(doc) ->
+ [];
+undefined_functions(_Config) ->
+ App = orber,
+ Root = code:root_dir(),
+ LibDir = code:lib_dir(App),
+ EbinDir = filename:join([LibDir,"ebin"]),
+ AppFilePath = filename:join([LibDir,"ebin", "orber.app"]),
+ {ok, [{application,orber,AppFile}]} = file:consult(AppFilePath),
+ io:format("Using ~p~n~p~n", [AppFilePath, AppFile]),
+ Mods = key1search(modules, AppFile),
+ XRefTestName = undef_funcs_make_name(App, xref_test_name),
+ {ok, XRef} = xref:start(XRefTestName),
+ ok = xref:set_default(XRef,
+ [{verbose,false},{warnings,false}]),
+ XRefName = undef_funcs_make_name(App, xref_name),
+ {ok, XRefName} = xref:add_release(XRef, Root, {name,XRefName}),
+ {ok, App} = xref:replace_application(XRef, App, EbinDir),
+ {ok, Undefs} = xref:analyze(XRef, undefined_function_calls),
+ xref:stop(XRef),
+ analyze_undefined_function_calls(Undefs, Mods, []).
+
+analyze_undefined_function_calls([], _, []) ->
+ ok;
+analyze_undefined_function_calls([], _, AppUndefs) ->
+ exit({suite_failed, {undefined_function_calls, AppUndefs}});
+analyze_undefined_function_calls([{{Mod, _F, _A}, _C} = AppUndef|Undefs],
+ AppModules, AppUndefs) ->
+ %% Check that this module is our's
+ case lists:member(Mod,AppModules) of
+ true ->
+ {Calling,Called} = AppUndef,
+ {Mod1,Func1,Ar1} = Calling,
+ {Mod2,Func2,Ar2} = Called,
+ io:format("undefined function call: "
+ "~n ~w:~w/~w calls ~w:~w/~w~n",
+ [Mod1,Func1,Ar1,Mod2,Func2,Ar2]),
+ analyze_undefined_function_calls(Undefs, AppModules,
+ [AppUndef|AppUndefs]);
+ false ->
+ io:format("dropping ~p~n", [Mod]),
+ analyze_undefined_function_calls(Undefs, AppModules, AppUndefs)
+ end.
+
+%% This function is used simply to avoid cut-and-paste errors later...
+undef_funcs_make_name(App, PostFix) ->
+ list_to_atom(atom_to_list(App) ++ "_" ++ atom_to_list(PostFix)).
+
+key1search(Key, L) ->
+ case lists:keysearch(Key, 1, L) of
+ false ->
+ fail({not_found, Key, L});
+ {value, {Key, Value}} ->
+ Value
+ end.
+
+fail(Reason) ->
+ exit({suite_failed, Reason}).
+
+
+
diff --git a/lib/orber/test/orber_acl_SUITE.erl b/lib/orber/test/orber_acl_SUITE.erl
new file mode 100644
index 0000000000..2c2a768af2
--- /dev/null
+++ b/lib/orber/test/orber_acl_SUITE.erl
@@ -0,0 +1,303 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2004-2010. 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%
+%%
+%%
+%%-----------------------------------------------------------------
+%%
+%% Description:
+%% Test suite for the ACL functions
+%%
+%%-----------------------------------------------------------------
+-module(orber_acl_SUITE).
+
+-include("test_server.hrl").
+
+-define(default_timeout, ?t:minutes(5)).
+
+-define(match(ExpectedRes,Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-compile(export_all).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["Testing API for ACL (Access Control List)"];
+all(suite) ->
+ [ipv4_verify, ipv4_range, ipv4_interfaces, ipv4_bm,
+ ipv6_verify, ipv6_range, ipv6_interfaces, ipv6_bm].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+init_all(Config) ->
+ if
+ list(Config) ->
+ Config;
+ true ->
+ exit("Config not a list")
+ end.
+
+finish_all(Config) ->
+ Config.
+
+
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case :
+%% Description:
+%%-----------------------------------------------------------------
+ipv4_verify(doc) -> ["Testing IPv4 Verify Operation."];
+ipv4_verify(suite) -> [];
+ipv4_verify(_) ->
+ ?match(true, orber_acl:verify("192.168.64.148", "192.168.64.0/17", inet)),
+ ?match({false,"192.168.128.0","192.168.255.255"},
+ orber_acl:verify("192.168.64.148", "192.168.255.0/17", inet)),
+ ?match(true, orber_acl:verify("192.168.255.148", "192.168.128.0/17", inet)),
+ ?match(true, orber_acl:verify("192.168.128.148", "192.168.128.0/17", inet)),
+ ?match(true, orber_acl:verify("192.168.255.255", "192.168.128.0/16", inet)),
+ ?match({false,"192.168.0.0","192.168.255.255"},
+ orber_acl:verify("192.169.255.255", "192.168.128.0/16", inet)),
+ ?match(true, orber_acl:verify("192.168.128.255", "192.168.128.0/24", inet)),
+ ?match({false,"192.168.128.0","192.168.128.255"},
+ orber_acl:verify("192.168.255.255", "192.168.128.0/24", inet)),
+ ?match({false,"192.168.128.0","192.168.128.127"},
+ orber_acl:verify("192.168.128.255", "192.168.128.0/25", inet)),
+ ?match(true, orber_acl:verify("192.168.128.255", "192.168.128.128/25", inet)),
+ ?match(true, orber_acl:verify("192.168.128.128", "192.168.128.128/32", inet)),
+ ?match({false,"192.168.128.128.","192.168.128.128."},
+ orber_acl:verify("192.168.128.255", "192.168.128.128/32", inet)),
+ ?match(true, orber_acl:verify("192.168.128.128", "192.168.128.128", inet)),
+ ?match({false,"192.168.128.128.","192.168.128.128."},
+ orber_acl:verify("192.168.128.255", "192.168.128.128", inet)),
+ ?match(true, orber_acl:verify("192.168.128.255", "192.168.128.128/7", inet)),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case :
+%% Description:
+%%-----------------------------------------------------------------
+ipv4_range(doc) -> ["Testing IPv4 Range Operation."];
+ipv4_range(suite) -> [];
+ipv4_range(_) ->
+ ?match({ok,"192.168.0.0", "192.168.127.255"},
+ orber_acl:range("192.168.64.0/17")),
+ ?match({ok, "192.168.128.0", "192.168.255.255"},
+ orber_acl:range("192.168.255.0/17")),
+ ?match({ok,"192.168.128.0","192.168.255.255"},
+ orber_acl:range("192.168.128.0/17")),
+ ?match({ok,"192.168.0.0","192.168.255.255"},
+ orber_acl:range("192.168.128.0/16")),
+ ?match({ok,"192.168.128.0","192.168.128.255"},
+ orber_acl:range("192.168.128.0/24")),
+ ?match({ok,"192.168.128.0","192.168.128.127"},
+ orber_acl:range("192.168.128.0/25")),
+ ?match({ok,"192.168.128.128","192.168.128.255"},
+ orber_acl:range("192.168.128.128/25")),
+ ?match({ok,"192.168.128.128.","192.168.128.128."},
+ orber_acl:range("192.168.128.128/32")),
+ ?match({ok,"192.168.128.128.","192.168.128.128."},
+ orber_acl:range("192.168.128.128")),
+ ?match({ok,"192.0.0.0","193.255.255.255"},
+ orber_acl:range("192.168.128.128/7")),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case :
+%% Description:
+%%-----------------------------------------------------------------
+ipv4_interfaces(doc) -> ["Testing IPv4 Interfaces Operation."];
+ipv4_interfaces(suite) -> [];
+ipv4_interfaces(_) ->
+ ?match({ok, _},
+ orber_acl:init_acl([{tcp_in, "192.168.128.0/18", ["10.1.1.1"]},
+ {tcp_in, "192.167.64.0/18#4001/5001", ["10.1.1.2"]},
+ {tcp_in, "192.166.192.0/18"}], inet)),
+ {ok, IPTuple1} = ?match({ok, _}, inet:getaddr("192.168.128.0", inet)),
+ ?match({true, ["10.1.1.1"], 0}, orber_acl:match(IPTuple1, tcp_in, true)),
+ ?match({false, [], 0}, orber_acl:match(IPTuple1, tcp_out, true)),
+ {ok, IPTuple2} = ?match({ok, _}, inet:getaddr("192.167.64.0", inet)),
+ ?match({true, ["10.1.1.2"], {4001,5001}}, orber_acl:match(IPTuple2, tcp_in, true)),
+ ?match({false, [], 0}, orber_acl:match(IPTuple2, tcp_out, true)),
+ {ok, IPTuple3} = ?match({ok, _}, inet:getaddr("192.166.192.0", inet)),
+ ?match({true, [], 0}, orber_acl:match(IPTuple3, tcp_in, true)),
+ ?match(false, orber_acl:match(IPTuple3, tcp_out)),
+ ?match(ok, orber_acl:clear_acl()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case :
+%% Description:
+%%-----------------------------------------------------------------
+ipv4_bm(doc) -> ["Benchmarking runtime critical IPv4 Operations."];
+ipv4_bm(suite) -> [];
+ipv4_bm(_) ->
+ ?match({ok, _, _, _}, bm2([{tcp_in, "192.168.64.0/17"}], inet, "192.168.64.148")),
+ ok.
+%%-----------------------------------------------------------------
+%% Test Case :
+%% Description:
+%%-----------------------------------------------------------------
+ipv6_verify(doc) -> ["Testing IPv6 Verify Operation."];
+ipv6_verify(suite) -> [];
+ipv6_verify(_) ->
+ case orber_test_lib:version_ok() of
+ true ->
+ ?match(true, orber_acl:verify("2002:C0A8:0:0:0:0:0:0", "2002:C0A8::/48", inet6)),
+ ?match(true, orber_acl:verify("2002:C0A8:0:FFFF:FFFF:FFFF:FFFF:FFFF", "2002:C0A8::/48", inet6)),
+ ?match({false,"2002:C0A8:0:0:0:0:0:0", "2002:C0A8:0:FFFF:FFFF:FFFF:FFFF:FFFF"},
+ orber_acl:verify("2002:C0A8:1:FFFF:FFFF:FFFF:FFFF:FFFF", "2002:C0A8::/48", inet6)),
+ ?match(true, orber_acl:verify("2002:C0A8:1:FFFF:FFFF:FFFF:FFFF:FFFF", "2002:C0A8::/47", inet6)),
+ ?match({false,"2002:C0A8:0:0:0:0:0:0", "2002:C0A8:1:FFFF:FFFF:FFFF:FFFF:FFFF"},
+ orber_acl:verify("2002:C0A8:2:FFFF:FFFF:FFFF:FFFF:FFFF", "2002:C0A8::/47", inet6)),
+ ok;
+ Reason ->
+ Reason
+ end.
+
+%%-----------------------------------------------------------------
+%% Test Case :
+%% Description:
+%%-----------------------------------------------------------------
+ipv6_range(doc) -> ["Testing IPv6 Range Operation."];
+ipv6_range(suite) -> [];
+ipv6_range(_) ->
+ case orber_test_lib:version_ok() of
+ true ->
+ ?match({ok,"2002:C0A8:0:0:0:0:0:0", "2002:C0A8:0:FFFF:FFFF:FFFF:FFFF:FFFF"},
+ orber_acl:range("2002:C0A8::/48", inet6)),
+ ?match({ok,"2002:C0A8:0:0:0:0:0:0", "2002:C0A8:1:FFFF:FFFF:FFFF:FFFF:FFFF"},
+ orber_acl:range("2002:C0A8::/47", inet6)),
+ ok;
+ Reason ->
+ Reason
+ end.
+
+%%-----------------------------------------------------------------
+%% Test Case :
+%% Description:
+%%-----------------------------------------------------------------
+ipv6_interfaces(doc) -> ["Testing IPv6 Interfaces Operation."];
+ipv6_interfaces(suite) -> [];
+ipv6_interfaces(_) ->
+ case orber_test_lib:version_ok() of
+ true ->
+ ?match({ok, _}, orber_acl:init_acl([{tcp_in, "2002:C0A8::/49", ["0:0:0:0:0:0:10.1.1.1"]}], inet6)),
+ {ok, IPTuple1} = ?match({ok, _}, inet:getaddr("2002:C0A8:0:7FFF:FFFF:FFFF:FFFF:FFFF", inet6)),
+ ?match({true, ["0:0:0:0:0:0:10.1.1.1"], 0}, orber_acl:match(IPTuple1, tcp_in, true)),
+ ?match(false, orber_acl:match(IPTuple1, tcp_out)),
+ ?match(ok, orber_acl:clear_acl()),
+ ok;
+ Reason ->
+ Reason
+ end.
+
+%%-----------------------------------------------------------------
+%% Test Case :
+%% Description:
+%%-----------------------------------------------------------------
+ipv6_bm(doc) -> ["Benchmarking runtime critical IPv6 Operations."];
+ipv6_bm(suite) -> [];
+ipv6_bm(_) ->
+ case orber_test_lib:version_ok() of
+ true ->
+ ?match({ok, _, _, _}, bm2([{tcp_in, "2002:C0A8::/48"}], inet6, "2002:C0A8:0:0:0:0:0:0")),
+ ok;
+ Reason ->
+ Reason
+ end.
+
+%%-----------------------------------------------------------------
+%% Local Functions
+%%-----------------------------------------------------------------
+-define(NO_OF_TIMES, 1000).
+
+bm2(Filters, Family, Ip) ->
+ {ok, IPTuple} = inet:getaddr(Ip, Family),
+ orber_acl:init_acl(Filters, Family),
+ TimeBefore1 = erlang:now(),
+ bm_loop(IPTuple, ?NO_OF_TIMES),
+ TimeAfter1 = erlang:now(),
+ orber_acl:clear_acl(),
+ Time1 = computeTime(TimeBefore1, TimeAfter1),
+ orber_acl:init_acl(Filters, Family),
+ TimeBefore2 = erlang:now(),
+ bm_loop2(Ip, ?NO_OF_TIMES, Family),
+ TimeAfter2 = erlang:now(),
+ orber_acl:clear_acl(),
+ Time2 = computeTime(TimeBefore2, TimeAfter2),
+ orber_acl:init_acl(Filters, Family),
+ TimeBefore3 = erlang:now(),
+ bm_loop2(IPTuple, ?NO_OF_TIMES, Family),
+ TimeAfter3 = erlang:now(),
+ orber_acl:clear_acl(),
+ Time3 = computeTime(TimeBefore3, TimeAfter3),
+ {ok, round(?NO_OF_TIMES/Time1), round(?NO_OF_TIMES/Time2), round(?NO_OF_TIMES/Time3)}.
+
+
+bm_loop(_Ip, 0) ->
+ ok;
+bm_loop(Ip, N) ->
+ true = orber_acl:match(Ip, tcp_in),
+ bm_loop(Ip, N-1).
+
+bm_loop2(_Ip, 0, _Family) ->
+ ok;
+bm_loop2(Ip, N, Family) ->
+ {ok, IPTuple} = inet:getaddr(Ip, Family),
+ true = orber_acl:match(IPTuple, tcp_in),
+ bm_loop2(Ip, N-1, Family).
+
+computeTime({_MegaSecb, Secb, MicroSecb}, {_MegaSeca, Seca, MicroSeca}) ->
+ (Seca - Secb) + ((MicroSeca - MicroSecb) / 1000000).
+
+
+%%-----------------------------------------------------------------
+%% END OF MODULE
+%%-----------------------------------------------------------------
diff --git a/lib/orber/test/orber_firewall_ipv4_in_SUITE.erl b/lib/orber/test/orber_firewall_ipv4_in_SUITE.erl
new file mode 100644
index 0000000000..3ac0cb7921
--- /dev/null
+++ b/lib/orber/test/orber_firewall_ipv4_in_SUITE.erl
@@ -0,0 +1,280 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2004-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%
+%%
+%%
+
+-module(orber_firewall_ipv4_in_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
+-include_lib("orber/src/orber_iiop.hrl").
+-include_lib("orber/src/ifr_objects.hrl").
+-include("idl_output/orber_test_server.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming_NamingContextExt.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming_NamingContext.hrl").
+
+-define(default_timeout, ?t:minutes(15)).
+
+-define(match(ExpectedRes,Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1, cases/0, init_all/1, finish_all/1,
+ init_per_testcase/2, fin_per_testcase/2,
+ deny_port_api/1, deny_port_range_api/1, deny_host_api/1,
+ deny_peerhost_api/1, allow_port_range_api/1,
+ allow_host_api/1, allow_peerhost_api/1, check_address_api/1]).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["API tests for orber's firewall functionallity."];
+all(suite) -> {req,
+ [mnesia],
+ {conf, init_all, cases(), finish_all}}.
+
+%% NOTE - the fragment test cases must bu first since we explicitly set a request
+%% id. Otherwise, the request-id counter would be increased and we cannot know
+%% what it is.
+cases() ->
+ [deny_port_api, deny_port_range_api, deny_host_api, deny_peerhost_api,
+ allow_port_range_api, allow_host_api, allow_peerhost_api, check_address_api].
+
+
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+init_all(Config) ->
+ if
+ is_list(Config) ->
+ orber:jump_start([{iiop_port, 0},
+ {iiop_out_ports, {5980, 6000}}]),
+ Config;
+ true ->
+ exit("Config not a list")
+ end.
+
+finish_all(Config) ->
+ orber:jump_stop(),
+ Config.
+
+%%-----------------------------------------------------------------
+%% Incomming connections - Deny
+%%-----------------------------------------------------------------
+deny_port_api(doc) -> ["Deny Access due to invalid local port"];
+deny_port_api(suite) -> [];
+deny_port_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_USE_ACL_INCOMING},
+ {iiop_acl, [{tcp_in, IP++"/32#7000"}]}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ ?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
+ corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
+% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+ ok.
+
+deny_port_range_api(doc) -> ["Deny Access due to invalid local port range"];
+deny_port_range_api(suite) -> [];
+deny_port_range_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_USE_ACL_INCOMING},
+ {iiop_acl, [{tcp_in, IP++"/32#7000/8000"}]}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ ?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
+ corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
+% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+ ok.
+
+
+deny_host_api(doc) -> ["Deny Access due to invalid host"];
+deny_host_api(suite) -> [];
+deny_host_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_USE_ACL_INCOMING},
+ {iiop_acl, [{tcp_in, "123.123.123.123/32"}]}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ ?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
+ corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
+% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+ ok.
+
+deny_peerhost_api(doc) -> ["Deny Access due to invalid peerhost"];
+deny_peerhost_api(suite) -> [];
+deny_peerhost_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_USE_ACL_INCOMING},
+ {iiop_acl, [{tcp_in, IP++"/32", ["123.123.123.123"]}]}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ ?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
+ corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
+% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Incomming connections - Allow
+%%-----------------------------------------------------------------
+allow_port_range_api(doc) -> ["Allow Access due to valid local port range"];
+allow_port_range_api(suite) -> [];
+allow_port_range_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_USE_ACL_INCOMING},
+ {iiop_acl, [{tcp_in, IP++"/32#5980/6000"}]}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ IOR =
+ ?match({'IOP_IOR',_,_},
+ corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
+ ?match(false, corba_object:not_existent(IOR)),
+% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+ ok.
+
+
+allow_host_api(doc) -> ["Allow Access due to valid host"];
+allow_host_api(suite) -> [];
+allow_host_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_USE_ACL_INCOMING},
+ {iiop_acl, [{tcp_in, IP++"/32"}]}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ IOR =
+ ?match({'IOP_IOR',_,_},
+ corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
+ ?match(false, corba_object:not_existent(IOR)),
+% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+ ok.
+
+allow_peerhost_api(doc) -> ["Allow Access due to valid peerhost"];
+allow_peerhost_api(suite) -> [];
+allow_peerhost_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_USE_ACL_INCOMING},
+ {iiop_acl, [{tcp_in, IP++"/32", [IP]}]}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ IOR =
+ ?match({'IOP_IOR',_,_},
+ corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService",
+ [#'IOP_ServiceContext'
+ {context_id=?ORBER_GENERIC_CTX_ID,
+ context_data = {interface, IP}}])),
+ ?match(false, corba_object:not_existent(IOR,
+ [#'IOP_ServiceContext'
+ {context_id=?ORBER_GENERIC_CTX_ID,
+ context_data = {interface, IP}}])),
+% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test corbaloc strings
+%%-----------------------------------------------------------------
+check_address_api(doc) -> ["Test corbaloc strings"];
+check_address_api(suite) -> [];
+check_address_api(_Config) ->
+ ?match({[[iiop,{1,0},"10.0.0.1",2809]],"NameService"},
+ orber_cosnaming_utils:addresses(":10.0.0.1/NameService")),
+ ?match({[[iiop,{1,0},"10.0.0.1",2809]],[]},
+ orber_cosnaming_utils:addresses(":10.0.0.1")),
+ ?match({[[iiop,{1,2},"10.0.0.1",2809]],"NameService"},
+ orber_cosnaming_utils:addresses(":[email protected]/NameService")),
+ ?match({[[iiop,{1,0},"10.0.0.1",4001]],"NameService"},
+ orber_cosnaming_utils:addresses(":10.0.0.1:4001/NameService")),
+ ?match({[[iiop,{1,1},"10.0.0.1",4001]],"NameService"},
+ orber_cosnaming_utils:addresses(":[email protected]:4001/NameService")),
+ ?match({[[iiop,{1,1},"10.0.0.1",4001]],[]},
+ orber_cosnaming_utils:addresses(":[email protected]:4001")),
+ ?match({[[iiop,{1,1},"10.0.0.1",4001]],[]},
+ orber_cosnaming_utils:addresses("iiop:[email protected]:4001")),
+ ?match({[[iiop,{1,1},"10.0.0.1",4001]],[]},
+ orber_cosnaming_utils:addresses("iiop:[email protected]:4001/")),
+
+ ?match({[[iiop,{1,1},"myhost",4001]],[]},
+ orber_cosnaming_utils:addresses("iiop:1.1@myhost:4001")),
+ ?match({[[iiop,{1,1},"myhost.full.name",4001]],"NameService"},
+ orber_cosnaming_utils:addresses("iiop:[email protected]:4001/NameService")),
+ ?match({[[iiop,{1,1},"myhost",4001],
+ [iiop,{1,1},"myhost.full.name",2809]],"NameService"},
+ orber_cosnaming_utils:addresses("iiop:1.1@myhost:4001,iiop:[email protected]/NameService")),
+
+ ?match({[[iiop,{1,1},"123.12.23.2",4001],
+ [iiop,{1,1},"10.0.0.1",4001]], "NameService"},
+ orber_cosnaming_utils:addresses(":[email protected]:4001,:[email protected]:4001/NameService")),
+ ?match({[[iiop,{1,1},"123.12.23.2",4001],
+ [iiop,{1,1},"10.0.0.1",4001]], []},
+ orber_cosnaming_utils:addresses(":[email protected]:4001,:[email protected]:4001")),
+ ?match({[[iiop,{1,0},"123.12.23.2",4001],
+ [iiop,{1,1},"10.0.0.1",4001]], "NameService"},
+ orber_cosnaming_utils:addresses(":123.12.23.2:4001,:[email protected]:4001/NameService")),
+ ?match({[[iiop,{1,1},"123.12.23.2",4001],
+ [iiop,{1,0},"10.0.0.1",4001]], "NameService"},
+ orber_cosnaming_utils:addresses(":[email protected]:4001,:10.0.0.1:4001/NameService")),
+ ?match({[[iiop,{1,1},"123.12.23.2",2809],
+ [iiop,{1,1},"10.0.0.1",4001]], "NameService"},
+ orber_cosnaming_utils:addresses(":[email protected],:[email protected]:4001/NameService")),
+ ?match({[[iiop,{1,1},"123.12.23.2",4001],
+ [iiop,{1,1},"10.0.0.1",2809]], "NameService"},
+ orber_cosnaming_utils:addresses(":[email protected]:4001,:[email protected]/NameService")),
+ ?match({[[iiop,{1,0},"123.12.23.2",2809],
+ [iiop,{1,0},"10.0.0.1",2809]], "NameService"},
+ orber_cosnaming_utils:addresses(":123.12.23.2,:10.0.0.1/NameService")),
+ ?match({[[iiop,{1,0},"123.12.23.2",2809],
+ [iiop,{1,0},"10.0.0.1",2809]], []},
+ orber_cosnaming_utils:addresses(":123.12.23.2,:10.0.0.1/")),
+ ?match({[[iiop,{1,0},"123.12.23.2",2809],
+ [iiop,{1,0},"10.0.0.1",2809]], []},
+ orber_cosnaming_utils:addresses("iiop:123.12.23.2,:10.0.0.1/")),
+
+ [IP] = ?match([_], orber:host()),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_USE_ACL_INCOMING},
+ {iiop_acl, [{tcp_in, IP++"/32"}]}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ ?match({'IOP_IOR',_,_},
+ corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
+% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+
+ ok.
+
diff --git a/lib/orber/test/orber_firewall_ipv4_out_SUITE.erl b/lib/orber/test/orber_firewall_ipv4_out_SUITE.erl
new file mode 100644
index 0000000000..193fc72f7c
--- /dev/null
+++ b/lib/orber/test/orber_firewall_ipv4_out_SUITE.erl
@@ -0,0 +1,224 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2004-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%
+%%
+%%
+
+-module(orber_firewall_ipv4_out_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
+-include_lib("orber/src/orber_iiop.hrl").
+-include_lib("orber/src/ifr_objects.hrl").
+-include("idl_output/orber_test_server.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming_NamingContextExt.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming_NamingContext.hrl").
+
+-define(default_timeout, ?t:minutes(15)).
+
+-define(match(ExpectedRes,Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1, cases/0, init_all/1, finish_all/1,
+ init_per_testcase/2, fin_per_testcase/2,
+ deny_port_api/1, deny_port_range_api/1, deny_host_api/1,
+ allow_port_api/1, allow_port_range_api/1, allow_host_api/1,
+ local_interface_api/1]).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["API tests for orber's firewall functionallity."];
+all(suite) -> {req,
+ [mnesia],
+ {conf, init_all, cases(), finish_all}}.
+
+%% NOTE - the fragment test cases must bu first since we explicitly set a request
+%% id. Otherwise, the request-id counter would be increased and we cannot know
+%% what it is.
+cases() ->
+ [deny_port_api, deny_port_range_api, deny_host_api,
+ allow_port_api, allow_port_range_api, allow_host_api,
+ local_interface_api].
+
+
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+init_all(Config) ->
+ if
+ is_list(Config) ->
+ orber:jump_start([{iiop_port, 0},
+ {iiop_out_ports, {5980, 6000}}]),
+ Config;
+ true ->
+ exit("Config not a list")
+ end.
+
+finish_all(Config) ->
+ orber:jump_stop(),
+ Config.
+
+%%-----------------------------------------------------------------
+%% Incomming connections - Deny
+%%-----------------------------------------------------------------
+deny_port_api(doc) -> ["Deny Access due to invalid local port"];
+deny_port_api(suite) -> [];
+deny_port_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ ServerPort = orber:iiop_port(),
+ {ok, ClientNode, _ClientHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_USE_ACL_OUTGOING},
+ {iiop_acl, [{tcp_out, IP++"/32#" ++ integer_to_list(ServerPort+10)}]}])),
+ ?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
+ orber_test_lib:remote_apply(ClientNode, corba, string_to_object,
+ ["corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService"])),
+% ?line catch orber_test_lib:destroy_node(ClientNode, timeout),
+ ok.
+
+deny_port_range_api(doc) -> ["Deny Access due to invalid local port range"];
+deny_port_range_api(suite) -> [];
+deny_port_range_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ ServerPort = orber:iiop_port(),
+ {ok, ClientNode, _ClientHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_USE_ACL_OUTGOING},
+ {iiop_acl, [{tcp_out, IP++"/32#"++integer_to_list(ServerPort+100)++ "/" ++ integer_to_list(ServerPort+120)}]}])),
+ ?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
+ orber_test_lib:remote_apply(ClientNode, corba, string_to_object,
+ ["corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService"])),
+% ?line catch orber_test_lib:destroy_node(ClientNode, timeout),
+ ok.
+
+
+deny_host_api(doc) -> ["Deny Access due to invalid host"];
+deny_host_api(suite) -> [];
+deny_host_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ {ok, ClientNode, _ClientHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_USE_ACL_OUTGOING},
+ {iiop_acl, [{tcp_out, "123.123.123.123/32"}]}])),
+ ServerPort = orber:iiop_port(),
+ ?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
+ orber_test_lib:remote_apply(ClientNode, corba, string_to_object,
+ ["corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService"])),
+% ?line catch orber_test_lib:destroy_node(ClientNode, timeout),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Incomming connections - Allow
+%%-----------------------------------------------------------------
+allow_port_api(doc) -> ["Allow Access due to valid local port range"];
+allow_port_api(suite) -> [];
+allow_port_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ ServerPort = orber:iiop_port(),
+ {ok, ClientNode, _ClientHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_USE_ACL_OUTGOING},
+ {iiop_acl, [{tcp_out, IP++"/32#"++integer_to_list(ServerPort)}]}])),
+ IOR =
+ ?match({'IOP_IOR',_,_},
+ orber_test_lib:remote_apply(ClientNode, corba, string_to_object,
+ ["corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService"])),
+ ?match(false,
+ orber_test_lib:remote_apply(ClientNode, corba_object, not_existent, [IOR])),
+% ?line catch orber_test_lib:destroy_node(ClientNode, timeout),
+ ok.
+
+allow_port_range_api(doc) -> ["Allow Access due to valid local port range"];
+allow_port_range_api(suite) -> [];
+allow_port_range_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ ServerPort = orber:iiop_port(),
+ {ok, ClientNode, _ClientHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_USE_ACL_OUTGOING},
+ {iiop_acl, [{tcp_out, IP++"/32#" ++ integer_to_list(ServerPort-10) ++ "/" ++ integer_to_list(ServerPort+10)}]}])),
+ IOR =
+ ?match({'IOP_IOR',_,_},
+ orber_test_lib:remote_apply(ClientNode, corba, string_to_object,
+ ["corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService"])),
+ ?match(false,
+ orber_test_lib:remote_apply(ClientNode, corba_object, not_existent, [IOR])),
+% ?line catch orber_test_lib:destroy_node(ClientNode, timeout),
+ ok.
+
+
+allow_host_api(doc) -> ["Allow Access due to valid host"];
+allow_host_api(suite) -> [];
+allow_host_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ {ok, ClientNode, _ClientHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_USE_ACL_OUTGOING},
+ {iiop_acl, [{tcp_out, IP++"/32"}]}])),
+ ServerPort = orber:iiop_port(),
+ IOR =
+ ?match({'IOP_IOR',_,_},
+ orber_test_lib:remote_apply(ClientNode, corba, string_to_object,
+ ["corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService"])),
+ ?match(false,
+ orber_test_lib:remote_apply(ClientNode, corba_object, not_existent, [IOR])),
+% ?line catch orber_test_lib:destroy_node(ClientNode, timeout),
+ ok.
+
+local_interface_api(doc) -> ["Allow Access due to valid host via a spcific interface"];
+local_interface_api(suite) -> [];
+local_interface_api(_Config) ->
+ IP = orber_test_lib:get_host(),
+ Loopback = orber_test_lib:get_loopback_interface(),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{iiop_port, 0},
+ {iiop_out_ports, {5980, 6000}},
+ {ip_address, IP}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+
+ {ok, ClientNode, _ClientHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_USE_ACL_OUTGOING},
+ {iiop_acl, [{tcp_out, IP, [Loopback]}]}])),
+ IOR =
+ ?match({'IOP_IOR',_,_},
+ orber_test_lib:remote_apply(ClientNode, corba, string_to_object,
+ ["corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService"])),
+ ?match(false,
+ orber_test_lib:remote_apply(ClientNode, corba_object, not_existent, [IOR])),
+% ?line catch orber_test_lib:destroy_node(ClientNode, timeout),
+ ok.
+
diff --git a/lib/orber/test/orber_firewall_ipv6_in_SUITE.erl b/lib/orber/test/orber_firewall_ipv6_in_SUITE.erl
new file mode 100644
index 0000000000..83f48cba0c
--- /dev/null
+++ b/lib/orber/test/orber_firewall_ipv6_in_SUITE.erl
@@ -0,0 +1,311 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2004-2010. 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(orber_firewall_ipv6_in_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
+-include_lib("orber/src/orber_iiop.hrl").
+-include_lib("orber/src/ifr_objects.hrl").
+-include("idl_output/orber_test_server.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming_NamingContextExt.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming_NamingContext.hrl").
+
+-define(default_timeout, ?t:minutes(15)).
+
+-define(match(ExpectedRes,Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1, cases/0, init_all/1, finish_all/1,
+ init_per_testcase/2, fin_per_testcase/2,
+ deny_port_api/1, deny_port_range_api/1, deny_host_api/1,
+ deny_peerhost_api/1, allow_port_range_api/1,
+ allow_host_api/1, allow_peerhost_api/1, check_address_api/1]).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["API tests for orber's firewall functionallity."];
+all(suite) -> {req,
+ [mnesia],
+ {conf, init_all, cases(), finish_all}}.
+
+%% NOTE - the fragment test cases must bu first since we explicitly set a request
+%% id. Otherwise, the request-id counter would be increased and we cannot know
+%% what it is.
+cases() ->
+ [deny_port_api, deny_port_range_api, deny_host_api, deny_peerhost_api,
+ allow_port_range_api, allow_host_api, allow_peerhost_api,
+ check_address_api].
+
+
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ orber:jump_start([{iiop_port, 0},
+ {iiop_out_ports, {5980, 6000}},
+ {flags, ?ORB_ENV_USE_IPV6}]),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ orber:jump_stop(),
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+init_all(Config) ->
+ case orber_test_lib:version_ok() of
+ true ->
+ if
+ is_list(Config) ->
+ Config;
+ true ->
+ exit("Config not a list")
+ end;
+ Reason ->
+ Reason
+ end.
+
+finish_all(Config) ->
+ Config.
+
+
+%%-----------------------------------------------------------------
+%% Incomming connections - Deny
+%%-----------------------------------------------------------------
+deny_port_api(doc) -> ["Deny Access due to invalid local port"];
+deny_port_api(suite) -> [];
+deny_port_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ {ok, ServerNode, ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, (?ORB_ENV_USE_IPV6 bor
+ ?ORB_ENV_USE_ACL_INCOMING)},
+ {iiop_acl, [{tcp_in, IP++"/128#7000"}]}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ ?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
+ corba:string_to_object("corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService")),
+ % ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+ ok.
+
+deny_port_range_api(doc) -> ["Deny Access due to invalid local port range"];
+deny_port_range_api(suite) -> [];
+deny_port_range_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ {ok, ServerNode, ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, (?ORB_ENV_USE_IPV6 bor
+ ?ORB_ENV_USE_ACL_INCOMING)},
+ {iiop_acl, [{tcp_in, IP++"/128#7000/8000"}]}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ ?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
+ corba:string_to_object("corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService")),
+% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+ ok.
+
+
+deny_host_api(doc) -> ["Deny Access due to invalid host"];
+deny_host_api(suite) -> [];
+deny_host_api(_Config) ->
+ {ok, ServerNode, ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, (?ORB_ENV_USE_IPV6 bor
+ ?ORB_ENV_USE_ACL_INCOMING)},
+ {iiop_acl, [{tcp_in, "0:0:0:0:0:0:10.1.1.1/128"}]}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ ?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
+ corba:string_to_object("corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService")),
+% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+ ok.
+
+deny_peerhost_api(doc) -> ["Deny Access due to invalid peer host"];
+deny_peerhost_api(suite) -> [];
+deny_peerhost_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ {ok, ServerNode, ServerHost} =
+ ?match({ok,_,_},
+ orber_test_lib:js_node([{flags, (?ORB_ENV_USE_IPV6 bor
+ ?ORB_ENV_USE_ACL_INCOMING)},
+ {iiop_acl, [{tcp_in, IP++"/128", ["0:0:0:0:0:0:10.1.1.1"]}]}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ ?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
+ corba:string_to_object("corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService")),
+% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Incomming connections - Allow
+%%-----------------------------------------------------------------
+allow_port_range_api(doc) -> ["Allow Access due to valid local port range"];
+allow_port_range_api(suite) -> [];
+allow_port_range_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ {ok, ServerNode, ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, (?ORB_ENV_USE_IPV6 bor
+ ?ORB_ENV_USE_ACL_INCOMING)},
+ {iiop_acl, [{tcp_in, IP++"/128#5980/6000"}]}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ IOR =
+ ?match({'IOP_IOR',_,_},
+ corba:string_to_object("corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService")),
+ ?match(false, corba_object:not_existent(IOR)),
+% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+ ok.
+
+
+allow_host_api(doc) -> ["Allow Access due to valid host"];
+allow_host_api(suite) -> [];
+allow_host_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ {ok, ServerNode, ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, (?ORB_ENV_USE_IPV6 bor
+ ?ORB_ENV_USE_ACL_INCOMING)},
+ {iiop_acl, [{tcp_in, IP++"/128"}]}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ IOR =
+ ?match({'IOP_IOR',_,_},
+ corba:string_to_object("corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService")),
+ ?match(false, corba_object:not_existent(IOR)),
+
+% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+ ok.
+
+allow_peerhost_api(doc) -> ["Allow Access due to valid host"];
+allow_peerhost_api(suite) -> [];
+allow_peerhost_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ {ok, ServerNode, ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, (?ORB_ENV_USE_IPV6 bor
+ ?ORB_ENV_USE_ACL_INCOMING)},
+ {iiop_acl, [{tcp_in, IP++"/128", [IP]}]}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ IOR =
+ ?match({'IOP_IOR',_,_},
+ corba:string_to_object("corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService",
+ [#'IOP_ServiceContext'
+ {context_id=?ORBER_GENERIC_CTX_ID,
+ context_data = {interface, IP}}])),
+ ?match(false, corba_object:not_existent(IOR,
+ [#'IOP_ServiceContext'
+ {context_id=?ORBER_GENERIC_CTX_ID,
+ context_data = {interface, IP}}])),
+
+% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test corbaloc strings
+%%-----------------------------------------------------------------
+check_address_api(doc) -> ["Test corbaloc strings"];
+check_address_api(suite) -> [];
+check_address_api(_Config) ->
+ ?match({[[iiop,{1,0},"0:0:0:0:0:FFFF:C02A:2A2A",2809]],"NameService"},
+ orber_cosnaming_utils:addresses(":0:0:0:0:0:FFFF:C02A:2A2A/NameService")),
+ ?match({[[iiop,{1,0},"0:0:0:0:0:FFFF:C02A:2A2A",2809]],[]},
+ orber_cosnaming_utils:addresses(":0:0:0:0:0:FFFF:C02A:2A2A")),
+ ?match({[[iiop,{1,2},"0:0:0:0:0:FFFF:C02A:2A2A",2809]],"NameService"},
+ orber_cosnaming_utils:addresses(":1.2@0:0:0:0:0:FFFF:C02A:2A2A/NameService")),
+ ?match({[[iiop,{1,0},"0:0:0:0:0:FFFF:C02A:2A2A",4001]],"NameService"},
+ orber_cosnaming_utils:addresses(":0:0:0:0:0:FFFF:C02A:2A2A:4001/NameService")),
+ ?match({[[iiop,{1,1},"0:0:0:0:0:FFFF:C02A:2A2A",4001]],"NameService"},
+ orber_cosnaming_utils:addresses(":1.1@0:0:0:0:0:FFFF:C02A:2A2A:4001/NameService")),
+ ?match({[[iiop,{1,1},"0:0:0:0:0:FFFF:C02A:2A2A",4001]],[]},
+ orber_cosnaming_utils:addresses(":1.1@0:0:0:0:0:FFFF:C02A:2A2A:4001")),
+ ?match({[[iiop,{1,1},"0:0:0:0:0:FFFF:C02A:2A2A",4001]],[]},
+ orber_cosnaming_utils:addresses("iiop:1.1@0:0:0:0:0:FFFF:C02A:2A2A:4001")),
+
+ ?match({[[iiop,{1,0},"0:0:0:0:0:FFFF:10.11.11.11",2809]],"NameService"},
+ orber_cosnaming_utils:addresses(":0:0:0:0:0:FFFF:10.11.11.11/NameService")),
+ ?match({[[iiop,{1,0},"0:0:0:0:0:FFFF:10.11.11.11",2809]],[]},
+ orber_cosnaming_utils:addresses(":0:0:0:0:0:FFFF:10.11.11.11")),
+ ?match({[[iiop,{1,2},"0:0:0:0:0:FFFF:10.11.11.11",2809]],"NameService"},
+ orber_cosnaming_utils:addresses(":1.2@0:0:0:0:0:FFFF:10.11.11.11/NameService")),
+ ?match({[[iiop,{1,0},"0:0:0:0:0:FFFF:10.11.11.11",4001]],"NameService"},
+ orber_cosnaming_utils:addresses(":0:0:0:0:0:FFFF:10.11.11.11:4001/NameService")),
+ ?match({[[iiop,{1,1},"0:0:0:0:0:FFFF:10.11.11.11",4001]],"NameService"},
+ orber_cosnaming_utils:addresses(":1.1@0:0:0:0:0:FFFF:10.11.11.11:4001/NameService")),
+ ?match({[[iiop,{1,1},"0:0:0:0:0:FFFF:10.11.11.11",4001]],[]},
+ orber_cosnaming_utils:addresses(":1.1@0:0:0:0:0:FFFF:10.11.11.11:4001/")),
+ ?match({[[iiop,{1,1},"0:0:0:0:0:FFFF:10.11.11.11",4001]],[]},
+ orber_cosnaming_utils:addresses("iiop:1.1@0:0:0:0:0:FFFF:10.11.11.11:4001/")),
+
+ ?match({[[iiop,{1,1},"myhost",4001]],[]},
+ orber_cosnaming_utils:addresses("iiop:1.1@myhost:4001")),
+ ?match({[[iiop,{1,1},"myhost.full.name",4001]],"NameService"},
+ orber_cosnaming_utils:addresses("iiop:[email protected]:4001/NameService")),
+ ?match({[[iiop,{1,1},"myhost",4001],
+ [iiop,{1,1},"myhost.full.name",2809]],"NameService"},
+ orber_cosnaming_utils:addresses("iiop:1.1@myhost:4001,iiop:[email protected]/NameService")),
+
+ ?match({[[iiop,{1,1},"0:0:0:0:0:FFFF:10.11.11.11",4001],
+ [iiop,{1,1},"0:0:0:0:0:FFFF:C02A:2A2A",4001]], "NameService"},
+ orber_cosnaming_utils:addresses(":1.1@0:0:0:0:0:FFFF:10.11.11.11:4001,:1.1@0:0:0:0:0:FFFF:C02A:2A2A:4001/NameService")),
+ ?match({[[iiop,{1,1},"0:0:0:0:0:FFFF:10.11.11.11",4001],
+ [iiop,{1,1},"0:0:0:0:0:FFFF:C02A:2A2A",4001]], []},
+ orber_cosnaming_utils:addresses(":1.1@0:0:0:0:0:FFFF:10.11.11.11:4001,:1.1@0:0:0:0:0:FFFF:C02A:2A2A:4001")),
+ ?match({[[iiop,{1,0},"0:0:0:0:0:FFFF:10.11.11.11",4001],
+ [iiop,{1,1},"0:0:0:0:0:FFFF:C02A:2A2A",4001]], "NameService"},
+ orber_cosnaming_utils:addresses(":0:0:0:0:0:FFFF:10.11.11.11:4001,:1.1@0:0:0:0:0:FFFF:C02A:2A2A:4001/NameService")),
+ ?match({[[iiop,{1,1},"0:0:0:0:0:FFFF:10.11.11.11",4001],
+ [iiop,{1,0},"0:0:0:0:0:FFFF:C02A:2A2A",4001]], "NameService"},
+ orber_cosnaming_utils:addresses(":1.1@0:0:0:0:0:FFFF:10.11.11.11:4001,:0:0:0:0:0:FFFF:C02A:2A2A:4001/NameService")),
+ ?match({[[iiop,{1,1},"0:0:0:0:0:FFFF:10.11.11.11",2809],
+ [iiop,{1,1},"0:0:0:0:0:FFFF:C02A:2A2A",4001]], "NameService"},
+ orber_cosnaming_utils:addresses(":1.1@0:0:0:0:0:FFFF:10.11.11.11,:1.1@0:0:0:0:0:FFFF:C02A:2A2A:4001/NameService")),
+ ?match({[[iiop,{1,1},"0:0:0:0:0:FFFF:10.11.11.11",4001],
+ [iiop,{1,1},"0:0:0:0:0:FFFF:C02A:2A2A",2809]], "NameService"},
+ orber_cosnaming_utils:addresses(":1.1@0:0:0:0:0:FFFF:10.11.11.11:4001,:1.1@0:0:0:0:0:FFFF:C02A:2A2A/NameService")),
+ ?match({[[iiop,{1,0},"0:0:0:0:0:FFFF:10.11.11.11",2809],
+ [iiop,{1,0},"0:0:0:0:0:FFFF:C02A:2A2A",2809]], "NameService"},
+ orber_cosnaming_utils:addresses(":0:0:0:0:0:FFFF:10.11.11.11,:0:0:0:0:0:FFFF:C02A:2A2A/NameService")),
+ ?match({[[iiop,{1,0},"0:0:0:0:0:FFFF:10.11.11.11",2809],
+ [iiop,{1,0},"0:0:0:0:0:FFFF:C02A:2A2A",2809]], []},
+ orber_cosnaming_utils:addresses(":0:0:0:0:0:FFFF:10.11.11.11,:0:0:0:0:0:FFFF:C02A:2A2A/")),
+ ?match({[[iiop,{1,0},"0:0:0:0:0:FFFF:10.11.11.11",2809],
+ [iiop,{1,0},"0:0:0:0:0:FFFF:C02A:2A2A",2809]], []},
+ orber_cosnaming_utils:addresses("iiop:0:0:0:0:0:FFFF:10.11.11.11,:0:0:0:0:0:FFFF:C02A:2A2A/")),
+
+ [IP] = ?match([_], orber:host()),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, (?ORB_ENV_USE_IPV6 bor
+ ?ORB_ENV_USE_ACL_INCOMING)},
+ {iiop_acl, [{tcp_in, IP++"/128"}]}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ ?match({'IOP_IOR',_,_},
+ corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
+% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+ ok.
+
+
diff --git a/lib/orber/test/orber_firewall_ipv6_out_SUITE.erl b/lib/orber/test/orber_firewall_ipv6_out_SUITE.erl
new file mode 100644
index 0000000000..e1856b9a47
--- /dev/null
+++ b/lib/orber/test/orber_firewall_ipv6_out_SUITE.erl
@@ -0,0 +1,231 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2004-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%
+%%
+%%
+
+-module(orber_firewall_ipv6_out_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
+-include_lib("orber/src/orber_iiop.hrl").
+-include_lib("orber/src/ifr_objects.hrl").
+-include("idl_output/orber_test_server.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming_NamingContextExt.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming_NamingContext.hrl").
+
+-define(default_timeout, ?t:minutes(15)).
+
+-define(match(ExpectedRes,Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1, cases/0, init_all/1, finish_all/1,
+ init_per_testcase/2, fin_per_testcase/2,
+ deny_port_api/1, deny_port_range_api/1, deny_host_api/1,
+ allow_port_api/1, allow_port_range_api/1, allow_host_api/1,
+ local_interface_api/1]).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["API tests for orber's firewall functionallity."];
+all(suite) -> {req,
+ [mnesia],
+ {conf, init_all, cases(), finish_all}}.
+
+%% NOTE - the fragment test cases must bu first since we explicitly set a request
+%% id. Otherwise, the request-id counter would be increased and we cannot know
+%% what it is.
+cases() ->
+ [deny_port_api, deny_port_range_api, deny_host_api,
+ allow_port_api, allow_port_range_api, allow_host_api,
+ local_interface_api].
+
+
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ orber:jump_start([{iiop_port, 0},
+ {iiop_out_ports, {5980, 6000}},
+ {flags, ?ORB_ENV_USE_IPV6}]),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ orber:jump_stop(),
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+init_all(Config) ->
+ case orber_test_lib:version_ok() of
+ true ->
+ if
+ is_list(Config) ->
+ Config;
+ true ->
+ exit("Config not a list")
+ end;
+ Reason ->
+ Reason
+ end.
+
+finish_all(Config) ->
+ Config.
+
+
+%%-----------------------------------------------------------------
+%% Incomming connections - Deny
+%%-----------------------------------------------------------------
+deny_port_api(doc) -> ["Deny Access due to invalid local port"];
+deny_port_api(suite) -> [];
+deny_port_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ ServerPort = orber:iiop_port(),
+ {ok, ServerNode, ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, (?ORB_ENV_USE_IPV6 bor
+ ?ORB_ENV_USE_ACL_OUTGOING)},
+ {iiop_acl, [{tcp_out, IP++"/128#" ++ integer_to_list(ServerPort+10)}]}])),
+ ?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
+ orber_test_lib:remote_apply(ServerNode, corba, string_to_object,
+ ["corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService"])),
+% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+ ok.
+
+deny_port_range_api(doc) -> ["Deny Access due to invalid local port range"];
+deny_port_range_api(suite) -> [];
+deny_port_range_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ ServerPort = orber:iiop_port(),
+ {ok, ServerNode, ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, (?ORB_ENV_USE_IPV6 bor
+ ?ORB_ENV_USE_ACL_OUTGOING)},
+ {iiop_acl, [{tcp_out, IP++"/128#"++integer_to_list(ServerPort+100)++ "/" ++ integer_to_list(ServerPort+120)}]}])),
+ ?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
+ orber_test_lib:remote_apply(ServerNode, corba, string_to_object,
+ ["corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService"])),
+% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+ ok.
+
+
+deny_host_api(doc) -> ["Deny Access due to invalid host"];
+deny_host_api(suite) -> [];
+deny_host_api(_Config) ->
+ {ok, ServerNode, ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, (?ORB_ENV_USE_IPV6 bor
+ ?ORB_ENV_USE_ACL_OUTGOING)},
+ {iiop_acl, [{tcp_out, "0:0:0:0:0:0:10.1.1.1/128"}]}])),
+ ServerPort = orber:iiop_port(),
+ ?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
+ orber_test_lib:remote_apply(ServerNode, corba, string_to_object,
+ ["corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService"])),
+% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Incomming connections - Allow
+%%-----------------------------------------------------------------
+allow_port_api(doc) -> ["Allow Access due to valid local port"];
+allow_port_api(suite) -> [];
+allow_port_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ ServerPort = orber:iiop_port(),
+ {ok, ServerNode, ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, (?ORB_ENV_USE_IPV6 bor
+ ?ORB_ENV_USE_ACL_OUTGOING)},
+ {iiop_acl, [{tcp_out, IP++"/128#" ++ integer_to_list(ServerPort)}]}])),
+ IOR =
+ ?match({'IOP_IOR',_,_},
+ orber_test_lib:remote_apply(ServerNode, corba, string_to_object,
+ ["corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService"])),
+ ?match(false,
+ orber_test_lib:remote_apply(ServerNode, corba_object, not_existent, [IOR])),
+% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+ ok.
+
+allow_port_range_api(doc) -> ["Allow Access due to valid local port range"];
+allow_port_range_api(suite) -> [];
+allow_port_range_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ ServerPort = orber:iiop_port(),
+ {ok, ServerNode, ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, (?ORB_ENV_USE_IPV6 bor
+ ?ORB_ENV_USE_ACL_OUTGOING)},
+ {iiop_acl, [{tcp_out, IP++"/128#" ++ integer_to_list(ServerPort-10) ++ "/" ++ integer_to_list(ServerPort+10)}]}])),
+ IOR =
+ ?match({'IOP_IOR',_,_},
+ orber_test_lib:remote_apply(ServerNode, corba, string_to_object,
+ ["corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService"])),
+ ?match(false,
+ orber_test_lib:remote_apply(ServerNode, corba_object, not_existent, [IOR])),
+% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+ ok.
+
+
+allow_host_api(doc) -> ["Allow Access due to valid host"];
+allow_host_api(suite) -> [];
+allow_host_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ {ok, ServerNode, ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, (?ORB_ENV_USE_IPV6 bor
+ ?ORB_ENV_USE_ACL_OUTGOING)},
+ {iiop_acl, [{tcp_out, IP}]}])),
+ ServerPort = orber:iiop_port(),
+ IOR =
+ ?match({'IOP_IOR',_,_},
+ orber_test_lib:remote_apply(ServerNode, corba, string_to_object,
+ ["corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService"])),
+ ?match(false,
+ orber_test_lib:remote_apply(ServerNode, corba_object, not_existent, [IOR])),
+% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+ ok.
+
+local_interface_api(doc) -> ["Allow Access due to valid host via a spcific interface"];
+local_interface_api(suite) -> [];
+local_interface_api(_Config) ->
+ [IP] = ?match([_], orber:host()),
+ {ok, ServerNode, ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, (?ORB_ENV_USE_IPV6 bor
+ ?ORB_ENV_USE_ACL_OUTGOING)},
+ {iiop_acl, [{tcp_out, IP, [IP]}]}])),
+ ServerPort = orber:iiop_port(),
+ IOR =
+ ?match({'IOP_IOR',_,_},
+ orber_test_lib:remote_apply(ServerNode, corba, string_to_object,
+ ["corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService"])),
+ ?match(false,
+ orber_test_lib:remote_apply(ServerNode, corba_object, not_existent, [IOR])),
+% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+ ok.
+
diff --git a/lib/orber/test/orber_nat_SUITE.erl b/lib/orber/test/orber_nat_SUITE.erl
new file mode 100644
index 0000000000..5b295dd1aa
--- /dev/null
+++ b/lib/orber/test/orber_nat_SUITE.erl
@@ -0,0 +1,372 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2006-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%
+%%
+%%
+
+-module(orber_nat_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
+-include_lib("orber/src/orber_iiop.hrl").
+-include_lib("orber/src/ifr_objects.hrl").
+-include("idl_output/orber_test_server.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming_NamingContextExt.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming_NamingContext.hrl").
+
+
+-define(default_timeout, ?t:minutes(15)).
+
+-define(match(ExpectedRes,Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1, cases/0, init_all/1, finish_all/1,
+ init_per_testcase/2, fin_per_testcase/2,
+ nat_ip_address/1, nat_ip_address_multiple/1,
+ nat_ip_address_local/1, nat_ip_address_local_local/1,
+ nat_iiop_port/1, nat_iiop_port_local/1,
+ nat_iiop_port_local_local/1, nat_iiop_ssl_port/1,
+ nat_iiop_ssl_port_local/1]).
+
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["API tests for multi orber interfaces",
+ "This suite test intra-ORB communication. There are three scenarios:",
+ "* No security at all (multi_orber_api)",
+ "* Two secure orbs using ssl (ssl_multi_orb_api)",
+ "* One secure and one orb with no security. (ssl_multi_orb_api)"];
+all(suite) -> {req,
+ [mnesia],
+ {conf, init_all, cases(), finish_all}}.
+
+cases() ->
+ [
+ nat_ip_address,
+ nat_ip_address_multiple,
+ nat_ip_address_local,
+ nat_iiop_port,
+ nat_iiop_port_local,
+ nat_ip_address_local_local,
+ nat_iiop_port_local_local,
+ nat_iiop_ssl_port,
+ nat_iiop_ssl_port_local
+ ].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+
+init_per_testcase(_Case, Config) ->
+ Path = code:which(?MODULE),
+ code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
+ Dog=test_server:timetrap(?default_timeout),
+ orber:jump_start([{iiop_port, 0},
+ {flags, 0}]),
+ oe_orber_test_server:oe_register(),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ oe_orber_test_server:oe_unregister(),
+ orber:jump_stop(),
+ Path = code:which(?MODULE),
+ code:del_path(filename:join(filename:dirname(Path), "idl_output")),
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+init_all(Config) ->
+ if
+ is_list(Config) ->
+ Config;
+ true ->
+ exit("Config not a list")
+ end.
+
+finish_all(Config) ->
+ Config.
+
+%%-----------------------------------------------------------------
+%% API tests for NAT
+%%-----------------------------------------------------------------
+
+nat_ip_address(doc) -> ["This case test if the server ORB use the correct",
+ "interface when exporting IOR:s"];
+nat_ip_address(suite) -> [];
+nat_ip_address(_Config) ->
+ IP = orber_test_lib:get_host(),
+ Loopback = orber_test_lib:get_loopback_interface(),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_ENABLE_NAT},
+ {nat_ip_address, Loopback}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ IOR = ?match(#'IOP_IOR'{},
+ corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
+ ?match({'external', {Loopback, ServerPort, _ObjectKey, _Counter, _TP, _NewHD}},
+ iop_ior:get_key(IOR)),
+ ok.
+
+nat_ip_address_multiple(doc) -> ["This case test if the server ORB use the correct",
+ "interface when exporting IOR:s"];
+nat_ip_address_multiple(suite) -> [];
+nat_ip_address_multiple(_Config) ->
+ IP = orber_test_lib:get_host(),
+
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_ENABLE_NAT},
+ {nat_ip_address, {multiple, ["10.0.0.1"]}}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ IOR = ?match(#'IOP_IOR'{},
+ corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
+ ?match({'external', {"10.0.0.1", ServerPort, _ObjectKey, _Counter, _TP, _NewHD}},
+ iop_ior:get_key(IOR)),
+ ok.
+
+nat_ip_address_local(doc) -> ["This case test if the server ORB use the correct",
+ "interface when exporting IOR:s"];
+nat_ip_address_local(suite) -> [];
+nat_ip_address_local(_Config) ->
+ IP = orber_test_lib:get_host(),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_ENABLE_NAT},
+ {nat_ip_address, {local, "10.0.0.1", [{IP, "127.0.0.1"}]}}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ IOR = ?match(#'IOP_IOR'{},
+ corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
+ ?match({'external', {"10.0.0.1", ServerPort, _ObjectKey, _Counter, _TP, _NewHD}},
+ iop_ior:get_key(IOR)),
+ ok.
+
+nat_ip_address_local_local(doc) -> ["This case test if the server ORB use the correct",
+ "interface when exporting IOR:s"];
+nat_ip_address_local_local(suite) -> [];
+nat_ip_address_local_local(_Config) ->
+ IP = orber_test_lib:get_host(),
+ Loopback = orber_test_lib:get_loopback_interface(),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags,
+ (?ORB_ENV_LOCAL_INTERFACE bor
+ ?ORB_ENV_ENABLE_NAT)},
+ {nat_ip_address, {local, "10.0.0.1", [{IP, "10.0.0.2"}]}}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ IOR1 = ?match(#'IOP_IOR'{},
+ corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
+ ?match({'external', {"10.0.0.2", ServerPort, _ObjectKey, _Counter, _TP, _NewHD}},
+ iop_ior:get_key(IOR1)),
+ IOR2 = ?match(#'IOP_IOR'{},
+ corba:string_to_object("corbaloc::1.2@"++Loopback++":"++integer_to_list(ServerPort)++"/NameService")),
+ ?match({'external', {"10.0.0.1", ServerPort, _ObjectKey, _Counter, _TP, _NewHD}},
+ iop_ior:get_key(IOR2)),
+ ok.
+
+nat_iiop_port(doc) -> ["This case test if the server ORB use the correct",
+ "port when exporting IOR:s"];
+nat_iiop_port(suite) -> [];
+nat_iiop_port(_Config) ->
+ IP = orber_test_lib:get_host(),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_ENABLE_NAT},
+ {nat_iiop_port, 42}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ IOR = ?match(#'IOP_IOR'{},
+ corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
+ ?match({'external', {_IP, 42, _ObjectKey, _Counter, _TP, _NewHD}},
+ iop_ior:get_key(IOR)),
+ ok.
+
+nat_iiop_port_local(doc) -> ["This case test if the server ORB use the correct",
+ "port when exporting IOR:s"];
+nat_iiop_port_local(suite) -> [];
+nat_iiop_port_local(_Config) ->
+ IP = orber_test_lib:get_host(),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags, ?ORB_ENV_ENABLE_NAT},
+ {nat_iiop_port, {local, 42, [{4001, 43}]}}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ IOR = ?match(#'IOP_IOR'{},
+ corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
+ ?match({'external', {_IP, 42, _ObjectKey, _Counter, _TP, _NewHD}},
+ iop_ior:get_key(IOR)),
+ ok.
+
+nat_iiop_port_local_local(doc) -> ["This case test if the server ORB use the correct",
+ "port when exporting IOR:s"];
+nat_iiop_port_local_local(suite) -> [];
+nat_iiop_port_local_local(_Config) ->
+ IP = orber_test_lib:get_host(),
+ Loopback = orber_test_lib:get_loopback_interface(),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node([{flags,
+ (?ORB_ENV_LOCAL_INTERFACE bor
+ ?ORB_ENV_ENABLE_NAT)},
+ {ip_address, IP}])),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ orber_test_lib:remote_apply(ServerNode, orber_env, configure_override, [nat_iiop_port, {local, 42, [{ServerPort, 43}]}]),
+ IOR1 = ?match(#'IOP_IOR'{},
+ corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
+ ?match({'external', {IP, 43, _ObjectKey, _Counter, _TP, _NewHD}},
+ iop_ior:get_key(IOR1)),
+ {ok, Ref} = ?match({ok, _},
+ orber_test_lib:remote_apply(ServerNode, orber,
+ add_listen_interface,
+ [Loopback, normal, 10088])),
+ IOR2 = ?match(#'IOP_IOR'{},
+ corba:string_to_object("corbaloc::1.2@"++Loopback++":10088/NameService")),
+ ?match({'external', {IP, 42, _ObjectKey, _Counter, _TP, _NewHD}},
+ iop_ior:get_key(IOR2)),
+ ?match(ok,
+ orber_test_lib:remote_apply(ServerNode, orber,
+ remove_listen_interface, [Ref])),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% API tests for ORB to ORB, ssl security depth 1
+%%-----------------------------------------------------------------
+
+nat_iiop_ssl_port(doc) -> ["SECURE MULTI ORB API tests (SSL depth 1)",
+ "Make sure NAT works for SSL"];
+nat_iiop_ssl_port(suite) -> [];
+nat_iiop_ssl_port(_Config) ->
+ case os:type() of
+ vxworks ->
+ {skipped, "No SSL-support for VxWorks."};
+ _ ->
+ IP = orber_test_lib:get_host(),
+ ServerOptions = orber_test_lib:get_options(iiop_ssl, server,
+ 1, [{iiop_ssl_port, 0},
+ {flags, ?ORB_ENV_ENABLE_NAT},
+ {ip_address, IP}]),
+ ClientOptions = orber_test_lib:get_options(iiop_ssl, client,
+ 1, [{iiop_ssl_port, 0}]),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node(ServerOptions)),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ SSLServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_ssl_port, []),
+ NATSSLServerPort = SSLServerPort+1,
+ {ok, Ref} = ?match({ok, _},
+ orber_test_lib:remote_apply(ServerNode, orber,
+ add_listen_interface,
+ [IP, ssl, NATSSLServerPort])),
+ orber_test_lib:remote_apply(ServerNode, orber_env, configure_override,
+ [nat_iiop_ssl_port,
+ {local, NATSSLServerPort, [{4001, 43}]}]),
+
+ {ok, ClientNode, _ClientHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node(ClientOptions)),
+ ?match(ok, orber_test_lib:remote_apply(ServerNode, orber_test_lib,
+ install_test_data,
+ [ssl])),
+
+ IOR1 = ?match(#'IOP_IOR'{},
+ orber_test_lib:remote_apply(ClientNode, corba,
+ string_to_object,
+ ["corbaname::1.2@"++IP++":"++
+ integer_to_list(ServerPort)++"/NameService#mamba"])),
+
+ ?match({'external', {_IP, _Port, _ObjectKey, _Counter, _TP,
+ #host_data{protocol = ssl,
+ ssl_data = #'SSLIOP_SSL'{port = NATSSLServerPort}}}},
+ iop_ior:get_key(IOR1)),
+ ?match(ok, orber_test_lib:remote_apply(ServerNode, orber_test_lib,
+ uninstall_test_data,
+ [ssl])),
+ ?match(ok,
+ orber_test_lib:remote_apply(ServerNode, orber,
+ remove_listen_interface, [Ref])),
+ ok
+ end.
+
+nat_iiop_ssl_port_local(doc) -> ["SECURE MULTI ORB API tests (SSL depth 1)",
+ "Make sure NAT works for SSL"];
+nat_iiop_ssl_port_local(suite) -> [];
+nat_iiop_ssl_port_local(_Config) ->
+ case os:type() of
+ vxworks ->
+ {skipped, "No SSL-support for VxWorks."};
+ _ ->
+ IP = orber_test_lib:get_host(),
+ ServerOptions = orber_test_lib:get_options(iiop_ssl, server,
+ 1, [{iiop_ssl_port, 0},
+ {flags,
+ (?ORB_ENV_LOCAL_INTERFACE bor
+ ?ORB_ENV_ENABLE_NAT)},
+ {ip_address, IP}]),
+ ClientOptions = orber_test_lib:get_options(iiop_ssl, client,
+ 1, [{iiop_ssl_port, 0}]),
+ {ok, ServerNode, _ServerHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node(ServerOptions)),
+ ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
+ SSLServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_ssl_port, []),
+ NATSSLServerPort = SSLServerPort+1,
+ {ok, Ref} = ?match({ok, _},
+ orber_test_lib:remote_apply(ServerNode, orber,
+ add_listen_interface,
+ [IP, ssl, NATSSLServerPort])),
+ orber_test_lib:remote_apply(ServerNode, orber_env, configure_override,
+ [nat_iiop_ssl_port,
+ {local, NATSSLServerPort, [{NATSSLServerPort, NATSSLServerPort}]}]),
+
+ {ok, ClientNode, _ClientHost} =
+ ?match({ok,_,_}, orber_test_lib:js_node(ClientOptions)),
+ ?match(ok, orber_test_lib:remote_apply(ServerNode, orber_test_lib,
+ install_test_data,
+ [ssl])),
+
+ IOR1 = ?match(#'IOP_IOR'{},
+ orber_test_lib:remote_apply(ClientNode, corba,
+ string_to_object,
+ ["corbaname::1.2@"++IP++":"++
+ integer_to_list(ServerPort)++"/NameService#mamba"])),
+
+ ?match({'external', {_IP, _Port, _ObjectKey, _Counter, _TP,
+ #host_data{protocol = ssl,
+ ssl_data = #'SSLIOP_SSL'{port = NATSSLServerPort}}}},
+ iop_ior:get_key(IOR1)),
+ ?match(ok, orber_test_lib:remote_apply(ServerNode, orber_test_lib,
+ uninstall_test_data,
+ [ssl])),
+ ?match(ok,
+ orber_test_lib:remote_apply(ServerNode, orber,
+ remove_listen_interface, [Ref])),
+ ok
+ end.
+
diff --git a/lib/orber/test/orber_test.idl b/lib/orber/test/orber_test.idl
new file mode 100644
index 0000000000..3d943f2d18
--- /dev/null
+++ b/lib/orber/test/orber_test.idl
@@ -0,0 +1,95 @@
+//
+// %CopyrightBegin%
+//
+// Copyright Ericsson AB 1997-2010. 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 Module
+{
+
+ enum Enum {horse, pig, cow};
+
+ struct Struct0 {
+ long l;
+ short s;
+ char c;
+ };
+
+ struct Struct1 {
+ string s;
+ unsigned short us;
+ unsigned long ul;
+ };
+
+ struct Struct2 {
+ sequence <long> long_sequence;
+ Enum e;
+ octet o;
+ };
+
+ struct HEADER {
+ short EID;
+ short NDW;
+ short SSID;
+ };
+
+ enum Enum1 {orange,banana, apple};
+
+ union Union switch (short) {
+ case 0: short First;
+ case 1: string Second;
+ case 2: char Third;
+ };
+
+ union Union1 switch (Enum){
+ case horse: short horse;
+ case pig: sequence <string> Second;
+ case cow: Enum1 Third;
+ };
+
+ union Union2 switch (Enum){
+ case horse: long a[10];
+ case pig: Union u;
+ case cow: Union1 u1;
+ };
+
+ exception Except1 {
+ string why;
+ sequence <string> rest_of_name;
+ };
+
+ exception Except2 {
+ Enum1 e;
+ Struct2 s;
+ };
+
+ exception Except3 {
+ Union1 u;
+ unsigned short s;
+ Object o ;
+ };
+
+ exception Except4 {};
+
+ interface I1 {
+ void a();
+ };
+
+ interface I2 {
+ void a();
+ };
+
+};
+
diff --git a/lib/orber/test/orber_test_lib.erl b/lib/orber/test/orber_test_lib.erl
new file mode 100644
index 0000000000..a694dc58c4
--- /dev/null
+++ b/lib/orber/test/orber_test_lib.erl
@@ -0,0 +1,1498 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1999-2010. 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(orber_test_lib).
+-include("test_server.hrl").
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/include/ifr_types.hrl").
+-include_lib("orber/src/orber_iiop.hrl").
+-include("idl_output/orber_test_server.hrl").
+-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
+
+-define(match(ExpectedRes,Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+-export([js_node/2,
+ js_node/1,
+ js_node/0,
+ slave_sup/0,
+ remote_apply/4,
+ install_test_data/1,
+ light_tests/3,
+ uninstall_test_data/1,
+ destroy_node/2,
+ lookup/2,
+ alternate_iiop_address/2,
+ create_alternate_iiop_address/2,
+ alternate_ssl_iiop_address/3,
+ create_alternate_ssl_iiop_address/3,
+ test_coding/1,
+ test_coding/2,
+ corba_object_tests/2,
+ timeouts/3,
+ precond/3,
+ postcond/4,
+ oe_get_interface/0,
+ create_components_IOR/1,
+ get_options/2,
+ get_options/3,
+ get_options/4,
+ version_ok/0,
+ ssl_version/0,
+ get_loopback_interface/0,
+ get_loopback_interface/1,
+ get_host/0,
+ get_host/1]).
+
+%% Interceptor functions.
+-export([new_out_connection/3,
+ new_in_connection/3,
+ closed_in_connection/1,
+ closed_out_connection/1,
+ in_request_encoded/6,
+ in_reply_encoded/6,
+ out_reply_encoded/6,
+ out_request_encoded/6,
+ in_request/6,
+ in_reply/6,
+ out_reply/6,
+ out_request/6]).
+
+%%------------------------------------------------------------
+%% function : ssl_version
+%% Arguments:
+%% Returns : integer()
+%% Effect :
+%%
+%%------------------------------------------------------------
+ssl_version() ->
+ case catch erlang:system_info(otp_release) of
+ Version when is_list(Version) ->
+ if
+ "R12B" < Version ->
+ 3;
+ true ->
+ 2
+ end;
+ _ ->
+ 2
+ end.
+
+%%------------------------------------------------------------
+%% function : version_ok
+%% Arguments:
+%% Returns : true | {skipped, Reason}
+%% Effect :
+%%
+%%------------------------------------------------------------
+version_ok() ->
+ {ok, Hostname} = inet:gethostname(),
+ case inet:getaddr(Hostname, inet6) of
+ {error,nxdomain} ->
+ {skipped, "Inet cannot handle IPv6"};
+ _ ->
+ case inet:getaddr("0:0:0:0:0:FFFF:127.0.0.1", inet6) of
+ {error,nxdomain} ->
+ {skipped, "Inet cannot handle IPv6"};
+ _ ->
+ case gen_tcp:listen(0, [{reuseaddr, true}, inet6]) of
+ {ok, LSock} ->
+ gen_tcp:close(LSock),
+ true;
+ {error, _} ->
+ {skipped, "Inet cannot handle IPv6"}
+ end
+ end
+ end.
+%%------------------------------------------------------------
+%% function : get_host
+%% Arguments: Family - inet | inet6
+%% Returns : string()
+%% Effect :
+%%
+%%------------------------------------------------------------
+get_host() ->
+ get_host(inet).
+get_host(Family) ->
+ case os:type() of
+ {win32, _} ->
+ case os:version() of
+ {6, _, _} when Family == inet ->
+ "127.0.0.1";
+ {6, _, _} ->
+ "0:0:0:0:0:FFFF:7F00:0001";
+ _ ->
+ [IP] = ?match([_], orber:host()),
+ IP
+ end;
+ _ ->
+ [IP] = ?match([_], orber:host()),
+ IP
+ end.
+
+%%------------------------------------------------------------
+%% function : get_loopback_interface
+%% Arguments: Family - inet | inet6
+%% Returns : string()
+%% Effect :
+%%
+%%------------------------------------------------------------
+get_loopback_interface() ->
+ get_loopback_interface(inet).
+get_loopback_interface(Family) ->
+ case os:type() of
+ {win32, _} ->
+ case os:version() of
+ {6, _, _} when Family == inet ->
+ "127.0.0.2";
+ {6, _, _} ->
+ "0:0:0:0:0:FFFF:7F00:0002";
+ _ when Family == inet ->
+ "127.0.0.1";
+ _ ->
+ "0:0:0:0:0:FFFF:7F00:0001"
+ end;
+ _ when Family == inet ->
+ "127.0.0.1";
+ _ ->
+ "0:0:0:0:0:FFFF:7F00:0001"
+ end.
+
+%%------------------------------------------------------------
+%% function : js_node/4
+%% Arguments: Port - which iiop_port (integer())
+%% InitOptions - [{Key, Value}]
+%% {Type, StartOptions} - {lightweight, [{Key, Value}]}
+%% Returns : {ok, Node} | {error, _}
+%% Effect : Starts a new slave-node with given (optinally)
+%% extra arguments. If fails it retries 'Retries' times.
+%%------------------------------------------------------------
+js_node() ->
+ js_node([], []).
+
+js_node(InitOptions) when is_list(InitOptions) ->
+ js_node(InitOptions, []).
+
+js_node(InitOptions, StartOptions) when is_list(InitOptions) ->
+ {A,B,C} = erlang:now(),
+ [_, Host] = string:tokens(atom_to_list(node()), [$@]),
+ _NewInitOptions = check_options(InitOptions),
+ js_node_helper(Host, 0, lists:concat([A,'_',B,'_',C]),
+ InitOptions, 10, StartOptions).
+
+js_node_helper(Host, Port, Name, Options, Retries, StartOptions) ->
+ case starter(Host, Name, create_paths()) of
+ {ok, NewNode} ->
+ case net_adm:ping(NewNode) of
+ pong ->
+ start_ssl(lists:member({secure, ssl}, Options), NewNode),
+ {ok, Cwd} = file:get_cwd(),
+ Path = code:get_path(),
+ ok = rpc:call(NewNode, file, set_cwd, [Cwd]),
+ true = rpc:call(NewNode, code, set_path, [Path]),
+ rpc:call(NewNode, application, load, [orber]),
+ ok = rpc:call(NewNode, corba, orb_init,
+ [[{iiop_port, Port},
+ {orber_debug_level, 10}|Options]]),
+ start_orber(StartOptions, NewNode),
+ spawn_link(NewNode, ?MODULE, slave_sup, []),
+ rpc:multicall([node() | nodes()], global, sync, []),
+ ok = rpc:call(NewNode, orber, info, [io]),
+ {ok, NewNode, Host};
+ _ ->
+ {error, "net_adm:ping(Node) failed"}
+ end;
+ {error, Reason} when Retries == 0 ->
+ {error, Reason};
+ {error, Reason} ->
+ io:format("Could not start slavenode ~p:~p due to: ~p~n",
+ [Host, Port, Reason]),
+ timer:sleep(500),
+ js_node_helper(Host, Port, Name, Options, Retries-1, StartOptions)
+ end.
+
+check_options(Options) ->
+ case {os:type(), os:version()} of
+ {{win32, _}, {6, _, _}} ->
+ %% Vista, need to run additional checks.
+ case {orber_tb:keysearch(ip_address, Options),
+ orber_tb:keysearch(flags, Options, 0)} of
+ {undefined, Flags} ->
+ case ?ORB_FLAG_TEST(Flags, ?ORB_ENV_USE_IPV6) of
+ true ->
+ [{ip_address, get_host(inet6)}|Options];
+ false ->
+ [{ip_address, get_host(inet)}|Options]
+ end;
+ _ ->
+ Options
+ end;
+ _ ->
+ Options
+ end.
+
+starter(Host, Name, Args) ->
+ case os:type() of
+ vxworks ->
+ test_server:start_node(Name, slave, [{args,Args}]);
+ _ ->
+ slave:start_link(Host, Name, Args)
+ end.
+
+slave_sup() ->
+ process_flag(trap_exit, true),
+ receive
+ {'EXIT', _, _} ->
+ case os:type() of
+ vxworks ->
+ erlang:halt();
+ _ ->
+ ignore
+ end
+ end.
+
+start_ssl(true, Node) ->
+ rpc:call(Node, ssl, start, []),
+ rpc:call(Node, crypto, start, []),
+ rpc:call(Node, ssl, seed, ["testing"]);
+start_ssl(_, _) ->
+ ok.
+
+start_orber({lightweigth, Options}, Node) ->
+ ok = rpc:call(Node, orber, start_lightweight, [Options]);
+start_orber(lightweight, Node) ->
+ ok = rpc:call(Node, orber, start_lightweight, []);
+start_orber(_, Node) ->
+ ok = rpc:call(Node, orber, jump_start, []).
+
+
+%%-----------------------------------------------------------------
+%% Type - ssl | iiop_ssl
+%% Role - 'server' | 'client'
+%% Options - [{Key, Value}]
+%%-----------------------------------------------------------------
+get_options(Type, Role) ->
+ get_options(Type, Role, 2, []).
+
+get_options(ssl, Role, Level) ->
+ get_options(ssl, Role, Level, []).
+
+get_options(ssl, Role, 2, Options) ->
+ Dir = filename:join([code:lib_dir(ssl), "examples", "certs", "etc"]),
+ [{depth, 2},
+ {verify, 2},
+ {keyfile, filename:join([Dir, Role, "key.pem"])},
+ {cacertfile, filename:join([Dir, Role, "cacerts.pem"])},
+ {certfile, filename:join([Dir, Role, "cert.pem"])}|Options];
+get_options(iiop_ssl, _Role, 2, Options) ->
+ Dir = filename:join([code:lib_dir(ssl), "examples", "certs", "etc"]),
+ [{ssl_server_depth, 2},
+ {ssl_server_verify, 2},
+ {ssl_server_certfile, filename:join([Dir, "server", "cert.pem"])},
+ {ssl_server_cacertfile, filename:join([Dir, "server", "cacerts.pem"])},
+ {ssl_server_keyfile, filename:join([Dir, "server", "key.pem"])},
+ {ssl_client_depth, 2},
+ {ssl_client_verify, 2},
+ {ssl_client_certfile, filename:join([Dir, "client", "cert.pem"])},
+ {ssl_client_cacertfile, filename:join([Dir, "client", "cacerts.pem"])},
+ {ssl_client_keyfile, filename:join([Dir, "client", "key.pem"])},
+ {secure, ssl}|Options];
+get_options(iiop_ssl, _Role, 1, Options) ->
+ Dir = filename:join([code:lib_dir(ssl), "examples", "certs", "etc"]),
+ [{ssl_server_depth, 1},
+ {ssl_server_verify, 0},
+ {ssl_server_certfile, filename:join([Dir, "server", "cert.pem"])},
+ {ssl_server_cacertfile, filename:join([Dir, "server", "cacerts.pem"])},
+ {ssl_server_keyfile, filename:join([Dir, "server", "key.pem"])},
+ {ssl_client_depth, 1},
+ {ssl_client_verify, 0},
+ {ssl_client_certfile, filename:join([Dir, "client", "cert.pem"])},
+ {ssl_client_cacertfile, filename:join([Dir, "client", "cacerts.pem"])},
+ {ssl_client_keyfile, filename:join([Dir, "client", "key.pem"])},
+ {secure, ssl}|Options].
+
+
+create_paths() ->
+ Path = filename:dirname(code:which(?MODULE)),
+ " -pa " ++ Path ++ " -pa " ++
+ filename:join(Path, "idl_output") ++
+ " -pa " ++
+ filename:join(Path, "all_SUITE_data") ++
+ " -pa " ++
+ filename:dirname(code:which(orber)).
+
+%%------------------------------------------------------------
+%% function : destroy_node
+%% Arguments: Node - which node to destroy.
+%% Type - normal | ssl
+%% Returns :
+%% Effect :
+%%------------------------------------------------------------
+
+destroy_node(Node, Type) ->
+ stopper(Node, Type).
+
+stopper(Node, _Type) ->
+ case os:type() of
+ vxworks ->
+ test_server:stop_node(Node);
+ _ ->
+ slave:stop(Node)
+ end.
+
+
+%%------------------------------------------------------------
+%% function : remote_apply
+%% Arguments: N - Node, M - Module,
+%% F - Function, A - Arguments (list)
+%% Returns :
+%% Effect :
+%%------------------------------------------------------------
+remote_apply(N, M,F,A) ->
+ case rpc:call(N, M, F, A) of
+ {badrpc, Reason} ->
+ exit(Reason);
+ Other ->
+ Other
+ end.
+
+
+
+%%------------------------------------------------------------
+%% function : install_test_data
+%% Arguments: WhichSuite
+%% Returns : ok
+%% Effect : Installs test data associated with 'WhichSuite'
+%%------------------------------------------------------------
+
+install_test_data(nameservice) ->
+ oe_orber_test_server:oe_register(),
+ Mamba = orber_test_server:oe_create([], [{regname, {local, mamba}}]),
+ true = corba:add_initial_service("Mamba", Mamba),
+ NS = corba:resolve_initial_references("NameService"),
+ NC1 = lname_component:set_id(lname_component:create(), "mamba"),
+ N = lname:insert_component(lname:create(), 1, NC1),
+ 'CosNaming_NamingContext':bind(NS, N,Mamba);
+
+install_test_data({nameservice, AltAddr, AltPort}) ->
+ oe_orber_test_server:oe_register(),
+ Obj = orber_test_server:oe_create([], [{regname, {local, mamba}}]),
+ Mamba = corba:add_alternate_iiop_address(Obj, AltAddr, AltPort),
+ true = corba:add_initial_service("Mamba", Mamba),
+ NS = corba:resolve_initial_references("NameService"),
+ NC1 = lname_component:set_id(lname_component:create(), "mamba"),
+ N = lname:insert_component(lname:create(), 1, NC1),
+ 'CosNaming_NamingContext':bind(NS, N,Mamba);
+
+install_test_data(timeout) ->
+ oe_orber_test_server:oe_register(),
+ Mamba = orber_test_server:oe_create([], {local, mamba}),
+ Viper = orber_test_timeout_server:oe_create([], {local, viper}),
+ NS = corba:resolve_initial_references("NameService"),
+ NC1 = lname_component:set_id(lname_component:create(), "mamba"),
+ N1 = lname:insert_component(lname:create(), 1, NC1),
+ NC2 = lname_component:set_id(lname_component:create(), "viper"),
+ N2 = lname:insert_component(lname:create(), 1, NC2),
+ 'CosNaming_NamingContext':bind(NS, N1, Mamba),
+ 'CosNaming_NamingContext':bind(NS, N2, Viper);
+
+install_test_data(pseudo) ->
+ oe_orber_test_server:oe_register(),
+ Mamba = orber_test_server:oe_create([], [{pseudo,true}]),
+ NS = corba:resolve_initial_references("NameService"),
+ NC1 = lname_component:set_id(lname_component:create(), "mamba"),
+ N = lname:insert_component(lname:create(), 1, NC1),
+ 'CosNaming_NamingContext':bind(NS, N,Mamba);
+
+install_test_data(ssl) ->
+ oe_orber_test_server:oe_register(),
+ Mamba = orber_test_server:oe_create([], [{regname, {local, mamba}}]),
+ NS = corba:resolve_initial_references("NameService"),
+ NC1 = lname_component:set_id(lname_component:create(), "mamba"),
+ N = lname:insert_component(lname:create(), 1, NC1),
+ 'CosNaming_NamingContext':bind(NS, N,Mamba);
+
+install_test_data(ssl_simple) ->
+ oe_orber_test_server:oe_register();
+
+install_test_data(light) ->
+ %% Nothing to do at the moment but we might in the future
+ ok;
+
+install_test_data(_) ->
+ {error, "no_implement"}.
+
+
+%%------------------------------------------------------------
+%% function : uninstall_test_data
+%% Arguments: WhichSuite
+%% Returns : ok
+%% Effect : Uninstalls test data associated with 'WhichSuite'
+%%------------------------------------------------------------
+
+uninstall_test_data(pseudo) ->
+ NS = corba:resolve_initial_references("NameService"),
+ NC1 = lname_component:set_id(lname_component:create(), "mamba"),
+ N = lname:insert_component(lname:create(), 1, NC1),
+ _Obj = (catch 'CosNaming_NamingContext':resolve(NS, N)),
+ catch 'CosNaming_NamingContext':destroy(NS),
+ oe_orber_test_server:oe_unregister();
+
+uninstall_test_data(timeout) ->
+ NS = corba:resolve_initial_references("NameService"),
+ NC1 = lname_component:set_id(lname_component:create(), "mamba"),
+ N1 = lname:insert_component(lname:create(), 1, NC1),
+
+ NC2 = lname_component:set_id(lname_component:create(), "viper"),
+ N2 = lname:insert_component(lname:create(), 1, NC2),
+ Mamba = (catch 'CosNaming_NamingContext':resolve(NS, N1)),
+ Viper = (catch 'CosNaming_NamingContext':resolve(NS, N2)),
+ catch corba:dispose(Mamba),
+ catch corba:dispose(Viper),
+ catch 'CosNaming_NamingContext':destroy(NS),
+ oe_orber_test_server:oe_unregister();
+
+uninstall_test_data(nameservice) ->
+ true = corba:remove_initial_service("Mamba"),
+ NS = corba:resolve_initial_references("NameService"),
+ NC1 = lname_component:set_id(lname_component:create(), "mamba"),
+ N = lname:insert_component(lname:create(), 1, NC1),
+ Obj = (catch 'CosNaming_NamingContext':resolve(NS, N)),
+ catch corba:dispose(Obj),
+ catch 'CosNaming_NamingContext':destroy(NS),
+ oe_orber_test_server:oe_unregister();
+
+uninstall_test_data(ssl) ->
+ NS = corba:resolve_initial_references("NameService"),
+ NC1 = lname_component:set_id(lname_component:create(), "mamba"),
+ N = lname:insert_component(lname:create(), 1, NC1),
+ Obj = (catch 'CosNaming_NamingContext':resolve(NS, N)),
+ catch corba:dispose(Obj),
+ catch 'CosNaming_NamingContext':destroy(NS),
+ oe_orber_test_server:oe_unregister();
+
+uninstall_test_data(ssl_simple) ->
+ oe_orber_test_server:oe_unregister();
+
+uninstall_test_data(light) ->
+ %% Nothing to do at the moment but we might in the future
+ ok;
+
+uninstall_test_data(_) ->
+ {error, "no_implement"}.
+
+%%------------------------------------------------------------
+%% function : corba_object_tests
+%% Arguments: TestServerObj a orber_test_server ref
+%% OtherObj - any other Orber object.
+%% Returns : term()
+%% Effect :
+%%------------------------------------------------------------
+
+corba_object_tests(TestServerObj, OtherObj) ->
+ ?match(false,
+ corba_object:is_a(TestServerObj, "IDL:orber_parent/inherrit:1.0")),
+ ?match(true,
+ corba_object:is_a(TestServerObj, "IDL:omg.org/orber_parent/inherrit:1.0")),
+ ?match(true,
+ corba_object:is_a(TestServerObj, "IDL:omg.org/orber_test/server:1.0")),
+ ?match(false,
+ corba_object:is_a(TestServerObj, "IDL:orber_test/server:1.0")),
+ ?match(false,
+ corba_object:is_a(TestServerObj, "IDL:omg.org/orber_parent/inherrit:1.1")),
+ ?match(false,
+ corba_object:is_a(TestServerObj, "NotValidIFRID")),
+ ?match(false,
+ corba_object:is_nil(TestServerObj)),
+ ?match(false,
+ corba_object:is_equivalent(OtherObj,TestServerObj)),
+ ?match(true,
+ corba_object:is_equivalent(TestServerObj,TestServerObj)),
+ ?match(false, corba_object:non_existent(TestServerObj)),
+ ?match(false, corba_object:not_existent(TestServerObj)),
+ ?match(#fullinterfacedescription{}, corba_object:get_interface(TestServerObj)),
+
+ ok.
+
+%%------------------------------------------------------------
+%% function : lookup
+%% Arguments: Port - which port the other orb uses.
+%% Returns : term()
+%% Effect :
+%%------------------------------------------------------------
+
+lookup(Host, Port) ->
+ Key = Host++":"++integer_to_list(Port),
+ NSR = corba:resolve_initial_references_remote("NameService",
+ ["iiop://"++Key]),
+
+ NC1 = lname_component:set_id(lname_component:create(), "not_exist"),
+ N1 = lname:insert_component(lname:create(), 1, NC1),
+ ?match({'EXCEPTION',{'CosNaming_NamingContext_NotFound',_,_,_}},
+ 'CosNaming_NamingContext':resolve(NSR, N1)),
+
+ NC2 = lname_component:set_id(lname_component:create(), "mamba"),
+ N2 = lname:insert_component(lname:create(), 1, NC2),
+ Obj = ?match({'IOP_IOR',"IDL:omg.org/orber_test/server:1.0",_},
+ 'CosNaming_NamingContext':resolve(NSR, N2)),
+ orber_test_server:print(Obj),
+ Obj2 = ?match({'IOP_IOR',"IDL:omg.org/orber_test/server:1.0",_},
+ corba:string_to_object("corbaname:iiop:1.1@"++Key++"/NameService#mamba")),
+
+ orber_test_server:print(Obj2),
+
+ NSR2 = ?match({'IOP_IOR',"IDL:omg.org/CosNaming/NamingContextExt:1.0",_},
+ corba:string_to_object("corbaloc:iiop:1.1@"++Key++"/NameService")),
+ Obj3 = ?match({'IOP_IOR',"IDL:omg.org/orber_test/server:1.0",_},
+ 'CosNaming_NamingContext':resolve(NSR2, N2)),
+ orber_test_server:print(Obj3).
+
+%%------------------------------------------------------------
+%% function : alternate_iiop_address
+%% Arguments: Port - which port the other orb uses.
+%% Returns : term()
+%% Effect :
+%%------------------------------------------------------------
+alternate_iiop_address(Host, Port) ->
+ IOR = create_alternate_iiop_address(Host, Port),
+
+ ?match(false, corba_object:non_existent(IOR)),
+ ?match({'object_forward',_}, corba:locate(IOR)),
+ ?match({'object_forward',_}, corba:locate(IOR, 10000)),
+ ok.
+
+%%------------------------------------------------------------
+%% function : create_alternate_iiop_address
+%% Arguments: Port - which port the other orb uses.
+%% Returns : term()
+%% Effect :
+%%------------------------------------------------------------
+create_alternate_iiop_address(Host, Port) ->
+ MC = [#'IOP_TaggedComponent'{tag = ?TAG_ORB_TYPE,
+ component_data = ?ORBER_ORB_TYPE_1},
+ #'IOP_TaggedComponent'{tag = ?TAG_CODE_SETS,
+ component_data = ?DEFAULT_CODESETS},
+ #'IOP_TaggedComponent'{tag = ?TAG_ALTERNATE_IIOP_ADDRESS,
+ component_data = #'ALTERNATE_IIOP_ADDRESS'{
+ 'HostID' = Host,
+ 'Port' = Port}},
+ #'IOP_TaggedComponent'{tag = ?TAG_ALTERNATE_IIOP_ADDRESS,
+ component_data = #'ALTERNATE_IIOP_ADDRESS'{
+ 'HostID' = Host,
+ 'Port' = 8000}},
+ #'IOP_TaggedComponent'{tag = ?TAG_ALTERNATE_IIOP_ADDRESS,
+ component_data = #'ALTERNATE_IIOP_ADDRESS'{
+ 'HostID' = Host,
+ 'Port' = 8000}}],
+ #'IOP_IOR'{type_id=TypeID,
+ profiles=P1} = _IORA = iop_ior:create({1,2},
+ "IDL:omg.org/CosNaming/NamingContextExt:1.0",
+ [Host], 8000, -1,
+ "NameService", MC, 0, 0),
+ #'IOP_IOR'{profiles=P2} = _IORB = iop_ior:create({1,1},
+ "IDL:omg.org/CosNaming/NamingContextExt:1.0",
+ [Host], 8000, -1,
+ "NameService", [], 0, 0),
+ #'IOP_IOR'{type_id=TypeID, profiles=P2++P1}.
+
+
+%%------------------------------------------------------------
+%% function : create_components_IOR
+%% Arguments:
+%% Returns : term()
+%% Effect :
+%%------------------------------------------------------------
+create_components_IOR(Version) ->
+ MC = [#'IOP_TaggedComponent'{tag = ?TAG_ORB_TYPE,
+ component_data = ?ORBER_ORB_TYPE_1},
+ #'IOP_TaggedComponent'{tag = ?TAG_CODE_SETS,
+ component_data = ?DEFAULT_CODESETS},
+ #'IOP_TaggedComponent'{tag = ?TAG_ALTERNATE_IIOP_ADDRESS,
+ component_data = #'ALTERNATE_IIOP_ADDRESS'{
+ 'HostID' = "127.0.0.1",
+ 'Port' = 4001}},
+ #'IOP_TaggedComponent'{tag = ?TAG_SSL_SEC_TRANS,
+ component_data = #'SSLIOP_SSL'{target_supports = 0,
+ target_requires = 1,
+ port = 2}},
+ #'IOP_TaggedComponent'{tag = ?TAG_FT_GROUP,
+ component_data =
+ #'FT_TagFTGroupTaggedComponent'
+ {version = #'GIOP_Version'{major = 1,
+ minor = 2},
+ ft_domain_id = "FT_FTDomainId",
+ object_group_id = ?ULONGLONGMAX,
+ object_group_ref_version = ?LONGMAX}},
+ #'IOP_TaggedComponent'{tag = ?TAG_FT_PRIMARY,
+ component_data =
+ #'FT_TagFTPrimaryTaggedComponent'{primary = true}},
+ #'IOP_TaggedComponent'{tag = ?TAG_FT_HEARTBEAT_ENABLED,
+ component_data =
+ #'FT_TagFTHeartbeatEnabledTaggedComponent'{heartbeat_enabled = true}},
+ #'IOP_TaggedComponent'{tag = ?TAG_CSI_SEC_MECH_LIST,
+ component_data =
+ #'CSIIOP_CompoundSecMechList'
+ {stateful = false,
+ mechanism_list =
+ [#'CSIIOP_CompoundSecMech'
+ {target_requires = 6,
+ transport_mech =
+ #'IOP_TaggedComponent'
+ {tag=?TAG_TLS_SEC_TRANS,
+ component_data=#'CSIIOP_TLS_SEC_TRANS'
+ {target_supports = 7,
+ target_requires = 8,
+ addresses =
+ [#'CSIIOP_TransportAddress'{host_name = "127.0.0.1",
+ port = 6001}]}},
+ as_context_mech =
+ #'CSIIOP_AS_ContextSec'
+ {target_supports = 9, target_requires = 10,
+ client_authentication_mech = [1, 255],
+ target_name = [2,255]},
+ sas_context_mech =
+ #'CSIIOP_SAS_ContextSec'
+ {target_supports = 11, target_requires = 12,
+ privilege_authorities =
+ [#'CSIIOP_ServiceConfiguration'
+ {syntax = ?ULONGMAX,
+ name = [3,255]}],
+ supported_naming_mechanisms = [[4,255],[5,255]],
+ supported_identity_types = ?ULONGMAX}},
+ #'CSIIOP_CompoundSecMech'
+ {target_requires = 6,
+ transport_mech =
+ #'IOP_TaggedComponent'
+ {tag=?TAG_NULL_TAG,
+ component_data=[]},
+ as_context_mech =
+ #'CSIIOP_AS_ContextSec'
+ {target_supports = 9, target_requires = 10,
+ client_authentication_mech = [1, 255],
+ target_name = [2,255]},
+ sas_context_mech =
+ #'CSIIOP_SAS_ContextSec'
+ {target_supports = 11, target_requires = 12,
+ privilege_authorities =
+ [#'CSIIOP_ServiceConfiguration'
+ {syntax = ?ULONGMAX,
+ name = [3,255]}],
+ supported_naming_mechanisms = [[4,255],[5,255]],
+ supported_identity_types = ?ULONGMAX}},
+ #'CSIIOP_CompoundSecMech'
+ {target_requires = 6,
+ transport_mech =
+ #'IOP_TaggedComponent'
+ {tag=?TAG_SECIOP_SEC_TRANS,
+ component_data=#'CSIIOP_SECIOP_SEC_TRANS'
+ {target_supports = 7,
+ target_requires = 8,
+ mech_oid = [0,255],
+ target_name = [0,255],
+ addresses =
+ [#'CSIIOP_TransportAddress'{host_name = "127.0.0.1",
+ port = 6001}]}},
+ as_context_mech =
+ #'CSIIOP_AS_ContextSec'
+ {target_supports = 9, target_requires = 10,
+ client_authentication_mech = [1, 255],
+ target_name = [2,255]},
+ sas_context_mech =
+ #'CSIIOP_SAS_ContextSec'
+ {target_supports = 11, target_requires = 12,
+ privilege_authorities =
+ [#'CSIIOP_ServiceConfiguration'
+ {syntax = ?ULONGMAX,
+ name = [3,255]}],
+ supported_naming_mechanisms = [[4,255],[5,255]],
+ supported_identity_types = ?ULONGMAX}}]}}],
+ iop_ior:create(Version, "IDL:omg.org/CosNaming/NamingContextExt:1.0",
+ ["127.0.0.1"], 5001, -1,
+ "NameService", MC, 0, 0).
+
+
+%%------------------------------------------------------------
+%% function : alternate_ssl_iiop_address
+%% Arguments: Port - which port the other orb uses.
+%% Returns : term()
+%% Effect :
+%%------------------------------------------------------------
+alternate_ssl_iiop_address(Host, Port, SSLPort) ->
+ IOR = create_alternate_ssl_iiop_address(Host, Port, SSLPort),
+
+ ?match(false, corba_object:non_existent(IOR)),
+ ?match({'object_forward',_}, corba:locate(IOR)),
+ ?match({'object_forward',_}, corba:locate(IOR, 10000)),
+ ok.
+
+
+%%------------------------------------------------------------
+%% function : create_alternate_ssl_iiop_address
+%% Arguments: Port - which port the other orb uses.
+%% Returns : term()
+%% Effect :
+%%------------------------------------------------------------
+create_alternate_ssl_iiop_address(Host, Port, SSLPort) ->
+ MC = [#'IOP_TaggedComponent'{tag = ?TAG_ORB_TYPE,
+ component_data = ?ORBER_ORB_TYPE_1},
+ #'IOP_TaggedComponent'{tag = ?TAG_CODE_SETS,
+ component_data = ?DEFAULT_CODESETS},
+ #'IOP_TaggedComponent'{tag = ?TAG_ALTERNATE_IIOP_ADDRESS,
+ component_data = #'ALTERNATE_IIOP_ADDRESS'{
+ 'HostID' = Host,
+ 'Port' = Port}},
+ #'IOP_TaggedComponent'{tag = ?TAG_ALTERNATE_IIOP_ADDRESS,
+ component_data = #'ALTERNATE_IIOP_ADDRESS'{
+ 'HostID' = Host,
+ 'Port' = 8000}},
+ #'IOP_TaggedComponent'{tag = ?TAG_ALTERNATE_IIOP_ADDRESS,
+ component_data = #'ALTERNATE_IIOP_ADDRESS'{
+ 'HostID' = Host,
+ 'Port' = 8000}},
+ #'IOP_TaggedComponent'{tag=?TAG_SSL_SEC_TRANS,
+ component_data=#'SSLIOP_SSL'{target_supports = 2,
+ target_requires = 2,
+ port = SSLPort}}],
+ #'IOP_IOR'{type_id=TypeID,
+ profiles=P1} = _IORA = iop_ior:create_external({1,2},
+ "IDL:omg.org/CosNaming/NamingContextExt:1.0",
+ Host, 8000,
+ "NameService", MC),
+ #'IOP_IOR'{profiles=P2} = _IORB = iop_ior:create_external({1,1},
+ "IDL:omg.org/CosNaming/NamingContextExt:1.0",
+ Host, 8000,
+ "NameService", []),
+ #'IOP_IOR'{type_id=TypeID, profiles=P2++P1}.
+
+
+%%------------------------------------------------------------
+%% function : timeouts
+%% Arguments: Port - which port the other orb uses.
+%% Returns : term()
+%% Effect :
+%%------------------------------------------------------------
+
+timeouts(Host, Port, ReqT) ->
+ NSR = corba:resolve_initial_references_remote("NameService",
+ ["iiop://"++Host++":"++integer_to_list(Port)]),
+ NC1 = lname_component:set_id(lname_component:create(), "mamba"),
+ N1 = lname:insert_component(lname:create(), 1, NC1),
+ NC2 = lname_component:set_id(lname_component:create(), "viper"),
+ N2 = lname:insert_component(lname:create(), 1, NC2),
+ Mamba = 'CosNaming_NamingContext':resolve(NSR, N1),
+ Viper = 'CosNaming_NamingContext':resolve(NSR, N2),
+
+ ?match({'EXCEPTION',{'TIMEOUT',_,_,_}},
+ orber_test_timeout_server:twoway_function(Viper, ReqT, ReqT*2)),
+ ?match(ok, orber_test_timeout_server:oneway_function(Viper, ReqT*2)),
+
+ ?match({'EXCEPTION',{'TIMEOUT',_,_,_}},
+ orber_test_server:testing_iiop_twoway_delay(Mamba, ReqT)),
+ ?match(ok, orber_test_server:testing_iiop_oneway_delay(Mamba, ReqT)),
+
+ %% Since the objects are stalled we must wait until they are available again
+ %% to be able to run any more tests and get the correct results.
+ timer:sleep(ReqT*4),
+
+ ?match(ok, orber_test_timeout_server:twoway_function(Viper, ReqT*2, ReqT)),
+ ?match(ok, orber_test_timeout_server:oneway_function(Viper, ReqT*2)),
+
+ ?match(ok, orber_test_server:testing_iiop_twoway_delay(Mamba, 0)),
+ ?match(ok, orber_test_server:testing_iiop_oneway_delay(Mamba, 0)),
+
+ timer:sleep(ReqT*4),
+ ok.
+
+%%------------------------------------------------------------
+%% function : light_tests
+%% Arguments: Host - which node to contact.
+%% Port - which port the other orb uses.
+%% Returns : term()
+%% Effect :
+%%------------------------------------------------------------
+
+light_tests(Host, Port, ObjName) ->
+ NSR = corba:resolve_initial_references_remote("NameService",
+ ["iiop://"++Host++":"++integer_to_list(Port)]),
+ NC1 = lname_component:set_id(lname_component:create(), "not_exist"),
+ N1 = lname:insert_component(lname:create(), 1, NC1),
+ %% We cannot handle any unknown replies (besides those found in stub).
+ ?match({'EXCEPTION',
+ {'CosNaming_NamingContext_NotFound',
+ "IDL:omg.org/CosNaming/NamingContext/NotFound:1.0",_,_}},
+ 'CosNaming_NamingContext':resolve(NSR, N1)),
+ NC2 = lname_component:set_id(lname_component:create(), ObjName),
+ N2 = lname:insert_component(lname:create(), 1, NC2),
+ Obj = ?match({'IOP_IOR',"IDL:omg.org/orber_test/server:1.0",_},
+ 'CosNaming_NamingContext':resolve(NSR, N2)),
+ Nodes = orber:get_lightweight_nodes(),
+ io:format("Light Nodes: ~p~n", [Nodes]),
+ orber_test_server:print(Obj),
+ test_coding(Obj),
+ ok.
+
+
+%%------------------------------------------------------------
+%% function : test_coding_simple
+%% Arguments: ObjReference
+%% Returns : term()
+%% Effect : test encode/decode for all simple datatypes.
+%%------------------------------------------------------------
+
+test_coding(Obj) ->
+ test_coding(Obj, false).
+
+test_coding(Obj, Local) ->
+ %%--- Testing code and decode arguments ---
+ ?match({ok, 1.5}, orber_test_server:testing_iiop_float(Obj, 1.5)),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_float(Obj, atom)),
+
+ ?match({ok,1.0}, orber_test_server:testing_iiop_double(Obj, 1.0)),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_double(Obj, "wrong")),
+
+ ?match({ok,0}, orber_test_server:testing_iiop_short(Obj, 0)),
+ ?match({ok,?SHORTMAX}, orber_test_server:testing_iiop_short(Obj, ?SHORTMAX)),
+ ?match({ok,?SHORTMIN}, orber_test_server:testing_iiop_short(Obj, ?SHORTMIN)),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_short(Obj, atomic)),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_short(Obj, ?SHORTMAX+1)),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_short(Obj, ?SHORTMIN-1)),
+
+ ?match({ok,0}, orber_test_server:testing_iiop_ushort(Obj, 0)),
+ ?match({ok,?USHORTMAX}, orber_test_server:testing_iiop_ushort(Obj, ?USHORTMAX)),
+ ?match({ok,?USHORTMIN}, orber_test_server:testing_iiop_ushort(Obj, ?USHORTMIN)),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_ushort(Obj, ?USHORTMAX+1)),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_ushort(Obj, ?USHORTMIN-1)),
+
+ ?match({ok,0}, orber_test_server:testing_iiop_long(Obj, 0)),
+ ?match({ok,?LONGMAX}, orber_test_server:testing_iiop_long(Obj, ?LONGMAX)),
+ ?match({ok,?LONGMIN}, orber_test_server:testing_iiop_long(Obj, ?LONGMIN)),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_long(Obj, "wrong")),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_long(Obj, ?LONGMAX+1)),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_long(Obj, ?LONGMIN-1)),
+
+ ?match({ok,0}, orber_test_server:testing_iiop_longlong(Obj, 0)),
+ ?match({ok,?LONGLONGMAX}, orber_test_server:testing_iiop_longlong(Obj, ?LONGLONGMAX)),
+ ?match({ok,?LONGLONGMIN}, orber_test_server:testing_iiop_longlong(Obj, ?LONGLONGMIN)),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_longlong(Obj, "wrong")),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_longlong(Obj, ?LONGLONGMAX+1)),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_longlong(Obj, ?LONGLONGMIN-1)),
+
+ ?match({ok,0}, orber_test_server:testing_iiop_ulong(Obj, 0)),
+ ?match({ok,?ULONGMAX}, orber_test_server:testing_iiop_ulong(Obj, ?ULONGMAX)),
+ ?match({ok,?ULONGMIN}, orber_test_server:testing_iiop_ulong(Obj, ?ULONGMIN)),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_ulong(Obj, ?ULONGMAX+1)),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_ulong(Obj, ?ULONGMIN-1)),
+
+ ?match({ok,0}, orber_test_server:testing_iiop_ulonglong(Obj, 0)),
+ ?match({ok,?ULONGLONGMAX}, orber_test_server:testing_iiop_ulonglong(Obj, ?ULONGLONGMAX)),
+ ?match({ok,?ULONGLONGMIN}, orber_test_server:testing_iiop_ulonglong(Obj, ?ULONGLONGMIN)),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_ulonglong(Obj, ?ULONGLONGMAX+1)),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_ulonglong(Obj, ?ULONGLONGMIN-1)),
+
+ ?match({ok,98}, orber_test_server:testing_iiop_char(Obj, 98)),
+ ?match({ok,$b}, orber_test_server:testing_iiop_char(Obj, $b)),
+
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_char(Obj, atomic)),
+
+ ?match({ok,65535}, orber_test_server:testing_iiop_wchar(Obj, 65535)),
+ ?match({ok,$b}, orber_test_server:testing_iiop_wchar(Obj, $b)),
+
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_wchar(Obj, atomic)),
+
+ ?match({ok,true}, orber_test_server:testing_iiop_bool(Obj, true)),
+ ?match({ok,false}, orber_test_server:testing_iiop_bool(Obj, false)),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_bool(Obj, atom)),
+
+ ?match({ok,1}, orber_test_server:testing_iiop_octet(Obj, 1)),
+% No real guards for this case.
+% ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+% orber_test_server:testing_iiop_octet(Obj, 1.5)),
+ IOR12 = create_components_IOR({1,2}),
+ ?match({ok,Obj}, orber_test_server:testing_iiop_obj(Obj, Obj)),
+ ?match({ok,IOR12}, orber_test_server:testing_iiop_obj(Obj, IOR12)),
+ PObj = orber_test_server:oe_create([], [{pseudo,true}]),
+ ?match({ok, _}, orber_test_server:testing_iiop_obj(Obj, PObj)),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_obj(Obj, "no_object")),
+ ?match({ok,"string"}, orber_test_server:testing_iiop_string(Obj, "string")),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_string(Obj, "ToLongString")),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_string(Obj, atomic)),
+
+ ?match({ok,[65535]}, orber_test_server:testing_iiop_wstring(Obj, [65535])),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_wstring(Obj, "ToLongWstring")),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_wstring(Obj, atomic)),
+
+ ?match({ok, one},
+ orber_test_server:testing_iiop_enum(Obj, one)),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_enum(Obj, three)),
+ ?match({ok,[1,2,3]},
+ orber_test_server:testing_iiop_seq(Obj, [1,2,3])),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_seq(Obj, [1,2,3,4])),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_seq(Obj, false)),
+
+
+ ?match({ok,[#orber_test_server_struc{a=1, b=2}]},
+ orber_test_server:testing_iiop_struc_seq(Obj,
+ [#orber_test_server_struc{a=1, b=2}])),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_struc_seq(Obj, false)),
+
+ ?match({ok,[#orber_test_server_uni{label=1, value=66}]},
+ orber_test_server:testing_iiop_uni_seq(Obj,
+ [#orber_test_server_uni{label=1, value=66}])),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_uni_seq(Obj, false)),
+
+ ?match({ok,{"one", "two"}},
+ orber_test_server:testing_iiop_array(Obj, {"one", "two"})),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_array(Obj, {"one", "two", "three"})),
+ ?match({ok,#orber_test_server_struc{a=1, b=2}},
+ orber_test_server:testing_iiop_struct(Obj,
+ #orber_test_server_struc{a=1, b=2})),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_struct(Obj,
+ #orber_test_server_struc{a="WRONG", b=2})),
+ ?match({ok,#orber_test_server_uni{label=1, value=66}},
+ orber_test_server:testing_iiop_union(Obj,
+ #orber_test_server_uni{label=1, value=66})),
+
+ ?match({ok,#orber_test_server_uni_d{label=1, value=66}},
+ orber_test_server:testing_iiop_union_d(Obj,
+ #orber_test_server_uni_d{label=1, value=66})),
+
+ ?match({ok,#orber_test_server_uni_d{label=2, value=true}},
+ orber_test_server:testing_iiop_union_d(Obj,
+ #orber_test_server_uni_d{label=2, value=true})),
+
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_union_d(Obj,
+ #orber_test_server_uni_d{label=2, value=66})),
+
+ case Local of
+ true ->
+ ?match({ok,#orber_test_server_uni{label=2, value=66}},
+ orber_test_server:testing_iiop_union(Obj,
+ #orber_test_server_uni{label=2, value=66}));
+ false ->
+ ?match({ok,#orber_test_server_uni{label=2, value=undefined}},
+ orber_test_server:testing_iiop_union(Obj,
+ #orber_test_server_uni{label=2, value=66}))
+ end,
+
+ C1 = orber_test_server:fixed52const1(),
+ C2 = orber_test_server:fixed52const2(),
+ C3 = orber_test_server:fixed52const3(),
+
+ C4 = orber_test_server:fixed52negconst1(),
+ C5 = orber_test_server:fixed52negconst2(),
+ C6 = orber_test_server:fixed52negconst3(),
+
+ ?match({ok,C1}, orber_test_server:testing_iiop_fixed(Obj, C1)),
+ ?match({ok,C2}, orber_test_server:testing_iiop_fixed(Obj, C2)),
+ ?match({ok,C3}, orber_test_server:testing_iiop_fixed(Obj, C3)),
+ ?match({ok,C4}, orber_test_server:testing_iiop_fixed(Obj, C4)),
+ ?match({ok,C5}, orber_test_server:testing_iiop_fixed(Obj, C5)),
+ ?match({ok,C6}, orber_test_server:testing_iiop_fixed(Obj, C6)),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_fixed(Obj, #fixed{digits = 5,
+ scale = 2,
+ value = 123450})),
+
+ ?match(ok, orber_test_server:testing_iiop_void(Obj)),
+
+ ?match({'EXCEPTION',{'BAD_QOS',_,_,_}},
+ orber_test_server:pseudo_call_raise_exc(Obj, 1)),
+ ?match({'EXCEPTION',{'BAD_QOS',_,_,_}},
+ orber_test_server:pseudo_call_raise_exc(Obj, 2)),
+ ?match({'EXCEPTION',{'orber_test_server_UserDefinedException',_}},
+ orber_test_server:raise_local_exception(Obj)),
+ ?match({'EXCEPTION',{'orber_test_server_ComplexUserDefinedException',_,
+ [#orber_test_server_struc{a=1, b=2}]}},
+ orber_test_server:raise_complex_local_exception(Obj)),
+ %% Test all TypeCodes
+ ?match({ok, #any{typecode = tk_long, value = 1}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_long,
+ value = 1})),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_long,
+ value = "wrong"})),
+ ?match({ok, #any{typecode = tk_float, value = 1.5}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_float,
+ value = 1.5})),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_long,
+ value = "wrong"})),
+ ?match({ok, #any{typecode = tk_double}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_double,
+ value = 1.0})),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_double,
+ value = "wrong"})),
+ ?match({ok, #any{typecode = tk_short, value = -1}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_short,
+ value = -1})),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_short,
+ value = atomic})),
+ ?match({ok, #any{typecode = tk_ushort, value = 1}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_ushort,
+ value = 1})),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_ushort,
+ value = -1})),
+ ?match({ok, #any{typecode = tk_long, value = 1}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_long,
+ value = 1})),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_long,
+ value = "wrong"})),
+ ?match({ok, #any{typecode = tk_longlong, value = 1}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_longlong,
+ value = 1})),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_longlong,
+ value = "wrong"})),
+ ?match({ok, #any{typecode = tk_ulong, value = 1}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_ulong,
+ value = 1})),
+ ?match({ok, #any{typecode = tk_ulong, value = 4294967295}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_ulong,
+ value = 4294967295})),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_ulong,
+ value = 4294967296})),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_ulong,
+ value = -1})),
+ ?match({ok, #any{typecode = tk_ulonglong, value = 1}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_ulonglong,
+ value = 1})),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_ulonglong,
+ value = -1})),
+ ?match({ok, #any{typecode = tk_char, value = 98}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_char,
+ value = 98})),
+ ?match({ok, #any{typecode = tk_char, value = $b}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_char,
+ value = $b})),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_char,
+ value = atomic})),
+ ?match({ok, #any{typecode = tk_wchar, value = 65535}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_wchar,
+ value = 65535})),
+ ?match({ok, #any{typecode = tk_wchar, value = $b}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_wchar,
+ value = $b})),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_wchar,
+ value = atomic})),
+ ?match({ok, #any{typecode = tk_boolean, value = true}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_boolean,
+ value = true})),
+ ?match({ok, #any{typecode = tk_boolean, value = false}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_boolean,
+ value = false})),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_boolean,
+ value = 1})),
+ ?match({ok, #any{typecode = tk_octet, value = 1}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_octet,
+ value = 1})),
+ ?match({ok, #any{typecode = {tk_objref, "IDL:omg.org/orber_test/server:1.0", "server"}, value = Obj}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = {tk_objref, "IDL:omg.org/orber_test/server:1.0", "server"},
+ value = Obj})),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = {tk_objref, "IDL:omg.org/orber_test/server:1.0", "server"},
+ value = "No Object"})),
+ ?match({ok, #any{typecode = {tk_string, 6}, value = "string"}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = {tk_string, 6},
+ value = "string"})),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = tk_string,
+ value = atomic})),
+ ?match({ok, #any{typecode = {tk_wstring, 1}, value = [65535]}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = {tk_wstring, 1},
+ value = [65535]})),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = {tk_wstring, 1},
+ value = atomic})),
+ ?match({ok, #any{typecode = {tk_enum, "IDL:omg.org/orber_test/server/enumerant:1.0", "enumerant", ["one","two"]},
+ value = two}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = {tk_enum, "IDL:omg.org/orber_test/server/enumerant:1.0", "enumerant", ["one","two"]},
+ value = two})),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = {tk_enum, "IDL:omg.org/orber_test/server/enumerant:1.0", "enumerant", ["one","two"]},
+ value = three})),
+
+
+ ?match({ok, #any{typecode = {tk_sequence, tk_long, 3},
+ value = [1,2,3]}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = {tk_sequence, tk_long, 3},
+ value = [1,2,3]})),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = {tk_sequence, tk_long, 3},
+ value = false})),
+
+
+
+ ?match({ok, #any{typecode = {tk_array,{tk_string,0},2},
+ value = {"one", "two"}}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = {tk_array,{tk_string,0},2},
+ value = {"one", "two"}})),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = {tk_array,{tk_string,0},2},
+ value = {"one", "two", "three"}})),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = {tk_array,{tk_string,0},2},
+ value = {1, 2}})),
+ ?match({ok, #any{typecode = {tk_struct,"IDL:omg.org/orber_test/server/struc:1.0",
+ "struc",
+ [{"a",tk_long},{"b",tk_short}]},
+ value = #orber_test_server_struc{a=1, b=2}}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = {tk_struct,"IDL:omg.org/orber_test/server/struc:1.0",
+ "struc",
+ [{"a",tk_long},{"b",tk_short}]},
+ value = #orber_test_server_struc{a=1, b=2}})),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = {tk_struct,"IDL:omg.org/orber_test/server/struc:1.0",
+ "struc",
+ [{"a",tk_long},{"b",tk_short}]},
+ value = #orber_test_server_struc{a=1, b="string"}})),
+ ?match({ok, #any{typecode =
+ {tk_union,"IDL:omg.org/orber_test/server/uni:1.0",
+ "uni", tk_long, -1, [{1,"a",tk_long}]},
+ value = #orber_test_server_uni{label=1, value=66}}},
+ orber_test_server:
+ testing_iiop_any(Obj,
+ #any{typecode =
+ {tk_union,"IDL:omg.org/orber_test/server/uni:1.0",
+ "uni", tk_long, -1, [{1,"a",tk_long}]},
+ value = #orber_test_server_uni{label=1, value=66}})),
+ case Local of
+ true ->
+ ?match({ok, #any{typecode =
+ {tk_union,"IDL:omg.org/orber_test/server/uni:1.0",
+ "uni", tk_long, -1, [{1,"a",tk_long}]},
+ value = #orber_test_server_uni{label=2, value=66}}},
+ orber_test_server:
+ testing_iiop_any(Obj,
+ #any{typecode =
+ {tk_union,"IDL:omg.org/orber_test/server/uni:1.0",
+ "uni", tk_long, -1, [{1,"a",tk_long}]},
+ value = #orber_test_server_uni{label=2, value=66}}));
+ false ->
+ ?match({ok, #any{typecode =
+ {tk_union,"IDL:omg.org/orber_test/server/uni:1.0",
+ "uni", tk_long, -1, [{1,"a",tk_long}]},
+ value = #orber_test_server_uni{label=2, value=undefined}}},
+ orber_test_server:
+ testing_iiop_any(Obj,
+ #any{typecode =
+ {tk_union,"IDL:omg.org/orber_test/server/uni:1.0",
+ "uni", tk_long, -1, [{1,"a",tk_long}]},
+ value = #orber_test_server_uni{label=2, value=66}}))
+ end,
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:
+ testing_iiop_any(Obj,
+ #any{typecode =
+ {tk_union,"IDL:omg.org/orber_test/server/uni:1.0",
+ "uni", tk_long, -1, [{1,"a",tk_long}]},
+ value = #orber_test_server_uni{label=1, value="string"}})),
+
+ ?match({ok, #any{typecode = {tk_fixed,5,2},
+ value = #fixed{digits = 5, scale = 2, value = 12345}}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = {tk_fixed,5,2},
+ value = #fixed{digits = 5,
+ scale = 2,
+ value = 12345}})),
+ ?match({ok, #any{typecode = {tk_fixed,10,2},
+ value = #fixed{digits = 10, scale = 2, value = 1234567890}}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = {tk_fixed,10,2},
+ value = #fixed{digits = 10,
+ scale = 2,
+ value = 1234567890}})),
+ ?match({ok, #any{typecode = {tk_fixed,6,2},
+ value = #fixed{digits = 6, scale = 2, value = 300000}}},
+ orber_test_server:testing_iiop_any(Obj, #any{typecode = {tk_fixed,6,2},
+ value = #fixed{digits = 6,
+ scale = 2,
+ value = 300000}})),
+ ?match({'EXCEPTION',{'MARSHAL',_,_,_}},
+ orber_test_server:
+ testing_iiop_server_marshal(Obj, "string")),
+ ok.
+
+%%--------------- Testing Post- & Pre-cond -------------------
+precond(Module, Function, Args) ->
+ error_logger:info_msg("=============== pre-condition ============
+Module : ~p
+Function : ~p
+Arguments : ~p
+==========================================~n", [Module, Function, Args]),
+ ok.
+
+postcond(Module, Function, Args, Result) ->
+ error_logger:info_msg("=============== post-condition ===========
+Module : ~p
+Function : ~p
+Arguments : ~p
+Result : ~p
+==========================================~n", [Module, Function, Args, Result]),
+ ok.
+
+%%--------------- Testing Missing Module ---------------------
+oe_get_interface() ->
+ non_existing_module:tc(foo).
+
+%%--------------- INTERCEPTOR FUNCTIONS ----------------------
+%%------------------------------------------------------------
+%% function : new_in_connection
+%% Arguments:
+%% Returns :
+%%------------------------------------------------------------
+new_in_connection(Arg, CHost, Port) ->
+ Host = node(),
+ [{SHost, SPort}] = orber:find_sockname_by_peername(CHost, Port),
+ Peers = orber:find_peername_by_sockname(SHost, SPort),
+ error_logger:info_msg("=============== new_in_connection ========
+Node : ~p
+From Host : ~p
+From Port : ~p
+To Host : ~p
+To Port : ~p
+Peers : ~p
+Arg : ~p
+==========================================~n",
+ [Host, CHost, Port, SHost, SPort, Peers, Arg]),
+ {Host}.
+
+%%------------------------------------------------------------
+%% function : new_out_connection
+%% Arguments:
+%% Returns :
+%%------------------------------------------------------------
+new_out_connection(Arg, SHost, Port) ->
+ Host = node(),
+ error_logger:info_msg("=============== new_out_connection =======
+Node : ~p
+To Host : ~p
+To Port : ~p
+Arg : ~p
+==========================================~n",
+ [Host, SHost, Port, Arg]),
+ {Host}.
+
+%%------------------------------------------------------------
+%% function : closed_in_connection
+%% Arguments:
+%% Returns :
+%%------------------------------------------------------------
+closed_in_connection(Arg) ->
+ error_logger:info_msg("=============== closed_in_connection =====
+Node : ~p
+Connection: ~p
+==========================================~n",
+ [node(), Arg]),
+ Arg.
+
+%%------------------------------------------------------------
+%% function : closed_out_connection
+%% Arguments:
+%% Returns :
+%%------------------------------------------------------------
+closed_out_connection(Arg) ->
+ error_logger:info_msg("=============== closed_out_connection ====
+Node : ~p
+Connection: ~p
+==========================================~n",
+ [node(), Arg]),
+ Arg.
+
+%%------------------------------------------------------------
+%% function : in_request_encoded
+%% Arguments:
+%% Returns :
+%%------------------------------------------------------------
+in_request_encoded(Ref, _ObjKey, Ctx, Op,
+ <<100:8,101:8,102:8,103:8,104:8,105:8,106:8,107:8,108:8,109:8,110:8,T/binary>>, _Args) ->
+ error_logger:info_msg("=============== in_request_encoded =======
+Connection: ~p
+Operation : ~p
+Body : ~p
+Context : ~p
+==========================================~n",
+ [Ref, Op, T, Ctx]),
+ {T, "NewArgs"}.
+
+%%------------------------------------------------------------
+%% function : in_reply_encoded
+%% Arguments:
+%% Returns :
+%%------------------------------------------------------------
+in_reply_encoded(Ref, _ObjKey, Ctx, Op,
+ <<100:8,101:8,102:8,103:8,104:8,105:8,106:8,107:8,108:8,109:8,110:8,T/binary>>,
+ _Args) ->
+ error_logger:info_msg("============== in_reply_encoded ==========
+Connection: ~p
+Operation : ~p
+Body : ~p
+Context : ~p
+==========================================~n",
+ [Ref, Op, T, Ctx]),
+ {T, "NewArgs"}.
+
+%%------------------------------------------------------------
+%% function : out_reply_encoded
+%% Arguments:
+%% Returns :
+%%------------------------------------------------------------
+out_reply_encoded(Ref, _ObjKey, Ctx, Op, List, _Args) ->
+ error_logger:info_msg("============== out_reply_encoded =========
+Connection: ~p
+Operation : ~p
+Body : ~p
+Context : ~p
+==========================================~n",
+ [Ref, Op, List, Ctx]),
+ {list_to_binary([<<100:8,101:8,102:8,103:8,104:8,105:8,106:8,107:8,108:8,109:8,110:8>>|List]), "NewArgs"}.
+
+%%------------------------------------------------------------
+%% function : out_request_encoded
+%% Arguments:
+%% Returns :
+%%------------------------------------------------------------
+out_request_encoded(Ref, _ObjKey, Ctx, Op, List, _Args) ->
+ error_logger:info_msg("============== out_request_encoded =======
+Connection: ~p
+Operation : ~p
+Body : ~p
+Context : ~p
+==========================================~n",
+ [Ref, Op, List, Ctx]),
+ {list_to_binary([<<100:8,101:8,102:8,103:8,104:8,105:8,106:8,107:8,108:8,109:8,110:8>>|List]), "NewArgs"}.
+
+%%------------------------------------------------------------
+%% function : in_request
+%% Arguments:
+%% Returns :
+%%------------------------------------------------------------
+in_request(Ref, _ObjKey, Ctx, Op, Params, _Args) ->
+ error_logger:info_msg("=============== in_request ===============
+Connection: ~p
+Operation : ~p
+Parameters: ~p
+Context : ~p
+==========================================~n",
+ [Ref, Op, Params, Ctx]),
+ {Params, "NewArgs"}.
+
+%%------------------------------------------------------------
+%% function : in_reply
+%% Arguments:
+%% Returns :
+%%------------------------------------------------------------
+in_reply(Ref, _ObjKey, Ctx, Op, Reply, _Args) ->
+ error_logger:info_msg("=============== in_reply =================
+Connection: ~p
+Operation : ~p
+Reply : ~p
+Context : ~p
+==========================================~n",
+ [Ref, Op, Reply, Ctx]),
+ {Reply, "NewArgs"}.
+
+%%------------------------------------------------------------
+%% function : postinvoke
+%% Arguments:
+%% Returns :
+%%------------------------------------------------------------
+out_reply(Ref, _ObjKey, Ctx, Op, Reply, _Args) ->
+ error_logger:info_msg("=============== out_reply ================
+Connection: ~p
+Operation : ~p
+Reply : ~p
+Context : ~p
+==========================================~n",
+ [Ref, Op, Reply, Ctx]),
+ {Reply, "NewArgs"}.
+
+%%------------------------------------------------------------
+%% function : postinvoke
+%% Arguments:
+%% Returns :
+%%------------------------------------------------------------
+out_request(Ref, _ObjKey, Ctx, Op, Params, _Args) ->
+ error_logger:info_msg("=============== out_request ==============
+Connection: ~p
+Operation : ~p
+Parameters: ~p
+Context : ~p
+==========================================~n",
+ [Ref, Op, Params, Ctx]),
+ {Params, "NewArgs"}.
+
+
+%%--------------- END OF MODULE ------------------------------
+
+
+
diff --git a/lib/orber/test/orber_test_server.cfg b/lib/orber/test/orber_test_server.cfg
new file mode 100644
index 0000000000..84c671f795
--- /dev/null
+++ b/lib/orber/test/orber_test_server.cfg
@@ -0,0 +1,27 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1999-2010. 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%
+%%
+{timeout, "orber_test::timeout_server"}.
+{this, "orber_test::timeout_server"}.
+{{handle_info, "orber_test::timeout_server"}, true}.
+{this, "orber_test::server"}.
+{{handle_info, "orber_test::server"}, true}.
+{{postcond, "orber_test::server::testing_iiop_union_d"}, {orber_test_lib, postcond}}.
+{{postcond, "orber_test::server::testing_iiop_array"}, {orber_test_lib, postcond}}.
+{{precond, "orber_test::server::testing_iiop_array"}, {orber_test_lib, precond}}.
+{{precond, "orber_test::server::testing_iiop_enum"}, {orber_test_lib, precond}}.
diff --git a/lib/orber/test/orber_test_server.idl b/lib/orber/test/orber_test_server.idl
new file mode 100644
index 0000000000..a88211c941
--- /dev/null
+++ b/lib/orber/test/orber_test_server.idl
@@ -0,0 +1,153 @@
+//
+// %CopyrightBegin%
+//
+// Copyright Ericsson AB 1999-2010. 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%
+//
+
+#ifndef _ORBER_TEST_SERVER_IDL
+#define _ORBER_TEST_SERVER_IDL
+#pragma prefix "omg.org"
+
+module orber_parent {
+ interface inherrit {
+ void print();
+ };
+};
+
+module orber_test {
+
+ // interface server
+ interface server : orber_parent::inherrit {
+ typedef string array[2];
+ typedef sequence <long, 3> seq;
+ typedef wstring<6> WstrLength6;
+ typedef string<6> StrLength6;
+
+ struct struc {long a; short b;};
+ union uni switch(long) {
+ case 1: long a;};
+
+ union uni_d switch(long) {
+ case 1: long a;
+ default: boolean b;
+ };
+ enum enumerant {one, two};
+
+ exception UserDefinedException {};
+
+ typedef sequence<struc> StrucSeq;
+ typedef sequence<uni> UniSeq;
+ exception ComplexUserDefinedException { StrucSeq strseq; };
+
+ // Testing fixed
+ const fixed val1 = 3.14D;
+ const fixed val2 = 003.14D;
+ const fixed val3 = 003.1400D;
+ const fixed val4 = 3.1400D;
+ const fixed val5 = .1400D;
+ const fixed val6 = 3.D;
+ const fixed val7 = -.1400D;
+ const fixed val8 = -3.D;
+ const fixed val9 = val4+val5;
+ const fixed val10 = val4*val5;
+ const fixed val11 = val4/val5;
+ const fixed val12 = 123.140001D;
+ const fixed val13 = 12314000.1D;
+ const fixed val14 = val12-val13;
+ const fixed val15 = val12+val13;
+ const fixed val16 = val12*val13;
+ const fixed val17 = 2.01D+2.01D;
+ const fixed val18 = 2.01D*2.01D;
+ const fixed val19 = 200D;
+ const fixed val20 = 9999999999999999999999999999999D+9999999999999999999999999999999D;
+ const fixed val21 = 9999999999999999999999999999999D-9999999999999999999999999999999D;
+ const fixed val22 = 9999999999999999999999999999999D*9999999999999999999999999999999D;
+ const fixed val23 = 9999999999999999999999999999999D/9999999999999999999999999999999D;
+ const fixed val24 = 9999D+9999D;
+ const fixed val25 = 400D/10D;
+ const fixed val26 = 9999999999999999999999999999999D;
+
+
+ typedef fixed<5,2> fixed52;
+ const fixed52 fixed52const1 = 123.45d;
+ const fixed52 fixed52const2 = 123.00d;
+ const fixed52 fixed52const3 = 023.00d;
+ const fixed52 fixed52negconst1 = -123.45d;
+ const fixed52 fixed52negconst2 = -123.00d;
+ const fixed52 fixed52negconst3 = -023.00d;
+
+ void stop_normal();
+
+ void stop_brutal();
+
+ // Testing encode and decode
+ void testing_iiop_float(inout float Fl);
+ void testing_iiop_double(inout double Do);
+ void testing_iiop_short(inout short Sh);
+ void testing_iiop_ushort(inout unsigned short Us);
+ void testing_iiop_long(inout long Lo);
+ void testing_iiop_longlong(inout long long LLo);
+ void testing_iiop_ulong(inout unsigned long Ulo);
+ void testing_iiop_ulonglong(inout unsigned long long LLo);
+ void testing_iiop_char(inout char Ch);
+ void testing_iiop_wchar(inout wchar WCh);
+ void testing_iiop_bool(inout boolean Bool);
+ void testing_iiop_octet(inout octet Oct);
+ void testing_iiop_any(inout any AnyType);
+ void testing_iiop_obj(inout Object Obj);
+ void testing_iiop_string(inout StrLength6 Str);
+ void testing_iiop_wstring(inout WstrLength6 WStr);
+ void testing_iiop_struct(inout struc Stru);
+ void testing_iiop_union(inout uni Uni);
+ void testing_iiop_union_d(inout uni_d Uni);
+ void testing_iiop_enum(inout enumerant Enumerant);
+ void testing_iiop_seq(inout seq Seq);
+ void testing_iiop_uni_seq(inout UniSeq USeq);
+ void testing_iiop_struc_seq(inout StrucSeq SSeq);
+ void testing_iiop_array(inout array Arr);
+ void testing_iiop_fixed(inout fixed52 MyFixed);
+ void testing_iiop_void();
+ void testing_iiop_context();
+ void testing_iiop_server_marshal(inout StrLength6 Str);
+
+ oneway void testing_iiop_oneway_delay(in long Time);
+ void testing_iiop_twoway_delay(in long Time);
+
+ // Testing relay calls/casts to, for example, test that sending implicit
+ // Contexts works.
+ void relay_call(in Object Target);
+ oneway void relay_cast(in Object Target);
+
+ // Testing pseudo calls/casts
+ void pseudo_call();
+ oneway void pseudo_cast();
+ void pseudo_call_delay(inout long Lo);
+ oneway void pseudo_cast_delay(in long Lo);
+ void pseudo_call_raise_exc(in long Lo);
+ void raise_local_exception()
+ raises(UserDefinedException);
+ void raise_complex_local_exception()
+ raises(ComplexUserDefinedException);
+ };
+
+ interface timeout_server {
+ oneway void oneway_function(in long time);
+ void twoway_function(in long time);
+ };
+
+};
+
+#endif
diff --git a/lib/orber/test/orber_test_server_impl.erl b/lib/orber/test/orber_test_server_impl.erl
new file mode 100644
index 0000000000..35296cb619
--- /dev/null
+++ b/lib/orber/test/orber_test_server_impl.erl
@@ -0,0 +1,262 @@
+%%
+%% %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%
+%%
+%%
+
+-module(orber_test_server_impl).
+-include_lib("orber/include/corba.hrl").
+-include("idl_output/orber_test_server.hrl").
+
+%%--------------- specified functions ------------------------
+-export([stop_normal/2,
+ stop_brutal/2,
+ print/2,
+ %% Testing code and decode arguments
+ testing_iiop_float/3,
+ testing_iiop_double/3,
+ testing_iiop_short/3,
+ testing_iiop_ushort/3,
+ testing_iiop_long/3,
+ testing_iiop_longlong/3,
+ testing_iiop_ulong/3,
+ testing_iiop_ulonglong/3,
+ testing_iiop_char/3,
+ testing_iiop_wchar/3,
+ testing_iiop_bool/3,
+ testing_iiop_octet/3,
+ testing_iiop_any/3,
+ testing_iiop_obj/3,
+ testing_iiop_string/3,
+ testing_iiop_wstring/3,
+ testing_iiop_struct/3,
+ testing_iiop_union/3,
+ testing_iiop_union_d/3,
+ testing_iiop_enum/3,
+ testing_iiop_seq/3,
+ testing_iiop_uni_seq/3,
+ testing_iiop_struc_seq/3,
+ testing_iiop_array/3,
+ testing_iiop_fixed/3,
+ testing_iiop_void/2,
+ testing_iiop_context/2,
+ testing_iiop_server_marshal/3,
+ relay_call/3,
+ relay_cast/3,
+ %% Testing pseudo calls.
+ pseudo_call/2,
+ pseudo_cast/2,
+ pseudo_call_delay/3,
+ pseudo_cast_delay/3,
+ pseudo_call_raise_exc/3,
+ %% Testing raise locally defined exception.
+ raise_local_exception/2,
+ raise_complex_local_exception/2,
+ %% Test timeout functionality
+ testing_iiop_oneway_delay/3,
+ testing_iiop_twoway_delay/3]).
+
+
+%%--------------- gen_server specific ------------------------
+-export([init/1, terminate/2]).
+-export([handle_call/3, handle_cast/2, handle_info/2, code_change/3]).
+
+%%--------------- LOCAL DATA ---------------------------------
+
+%%------------------------------------------------------------
+%% function : init, terminate
+%%------------------------------------------------------------
+init(State) ->
+ process_flag(trap_exit,true),
+ {ok, State}.
+
+terminate(Reason, State) ->
+ io:format("orber_test_server:terminate(~p ~p)~n",[Reason, State]),
+ ok.
+
+code_change(_OldVsn, State, _Extra) ->
+ {ok, State}.
+handle_call(_,_, State) ->
+ {noreply, State}.
+handle_cast(_, State) ->
+ {noreply, State}.
+handle_info(_Info, State) ->
+ {noreply, State}.
+
+%%--------------- SERVER FUNCTIONS ---------------------------
+
+print(Self, State) ->
+ io:format("orber_test_server:print(~p ~p)~n",[Self, State]),
+ {reply, ok, State}.
+
+stop_normal(_Self, State) ->
+ {stop, normal, ok, State}.
+
+stop_brutal(_Self, _State) ->
+ exit("killed_brutal").
+
+
+%% Testing code and decode arguments
+testing_iiop_float(_Self, State, Float) ->
+ {reply, {ok, Float}, State}.
+
+testing_iiop_double(_Self, State, Double) ->
+ {reply, {ok, Double}, State}.
+
+testing_iiop_short(_Self, State, Short) ->
+ {reply, {ok, Short}, State}.
+
+testing_iiop_ushort(_Self, State, Ushort) ->
+ {reply, {ok, Ushort}, State}.
+
+testing_iiop_long(_Self, State, Long) ->
+ {reply, {ok, Long}, State}.
+
+testing_iiop_longlong(_Self, State, LLong) ->
+ {reply, {ok, LLong}, State}.
+
+testing_iiop_ulong(_Self, State, Ulong) ->
+ {reply, {ok, Ulong}, State}.
+
+testing_iiop_ulonglong(_Self, State, ULlong) ->
+ {reply, {ok, ULlong}, State}.
+
+testing_iiop_char(_Self, State, Char) ->
+ {reply, {ok, Char}, State}.
+
+testing_iiop_wchar(_Self, State, WChar) ->
+ {reply, {ok, WChar}, State}.
+
+testing_iiop_bool(_Self, State, Boolean) ->
+ {reply, {ok, Boolean}, State}.
+
+testing_iiop_octet(_Self, State, Octet) ->
+ {reply, {ok, Octet}, State}.
+
+testing_iiop_any(_Self, State, Any) ->
+ {reply, {ok, Any}, State}.
+
+testing_iiop_obj(_Self, State, Obj) ->
+ {reply, {ok, Obj}, State}.
+
+testing_iiop_string(_Self, State, String) ->
+ {reply, {ok, String}, State}.
+
+testing_iiop_wstring(_Self, State, WString) ->
+ {reply, {ok, WString}, State}.
+
+testing_iiop_struct(_Self, State, Struct) ->
+ {reply, {ok, Struct}, State}.
+
+testing_iiop_union(_Self, State, Union) ->
+ {reply, {ok, Union}, State}.
+
+testing_iiop_union_d(_Self, State, Union) ->
+ {reply, {ok, Union}, State}.
+
+testing_iiop_enum(_Self, State, Enum) ->
+ {reply, {ok, Enum}, State}.
+
+testing_iiop_seq(_Self, State, Sequence) ->
+ {reply, {ok, Sequence}, State}.
+
+testing_iiop_uni_seq(_Self, State, Sequence) ->
+ {reply, {ok, Sequence}, State}.
+
+testing_iiop_struc_seq(_Self, State, Sequence) ->
+ {reply, {ok, Sequence}, State}.
+
+testing_iiop_array(_Self, State, Array) ->
+ {reply, {ok, Array}, State}.
+
+testing_iiop_fixed(_Self, State, Fixed) ->
+ {reply, {ok, Fixed}, State}.
+
+testing_iiop_void(_Self, State) ->
+ {reply, ok, State}.
+
+testing_iiop_context(_Self, State) ->
+ Ctx = get(oe_server_in_context),
+ io:format("orber_test_server:testing_iiop_context( ~p )~n", [Ctx]),
+ {reply, ok, State}.
+
+testing_iiop_server_marshal(_Self, State, _String) ->
+ {reply, {ok, false}, State}.
+
+testing_iiop_oneway_delay(_Self, State, Time) ->
+ timer:sleep(Time),
+ {noreply, State}.
+
+testing_iiop_twoway_delay(_Self, State, Time) ->
+ timer:sleep(Time),
+ {reply, ok, State}.
+
+raise_local_exception(_Self, State) ->
+ corba:raise(#'orber_test_server_UserDefinedException'{}),
+ {reply, ok, State}.
+
+raise_complex_local_exception(_Self, State) ->
+ corba:raise(#'orber_test_server_ComplexUserDefinedException'{strseq=
+ [#orber_test_server_struc{a=1, b=2}]}),
+ {reply, ok, State}.
+
+%% Testing relay calls/casts to, for example, test that sending implicit
+%% Contexts works.
+relay_call(_Self, State, Target) ->
+ io:format("orber_test_server:relay_call( ~p ) Pre~n", [get(oe_server_in_context)]),
+ orber_test_server:testing_iiop_context(Target),
+ io:format("orber_test_server:relay_call( ~p ) Post~n", [get(oe_server_in_context)]),
+ {reply, ok, State}.
+
+relay_cast(_Self, State, Target) ->
+ io:format("orber_test_server:relay_cast( ~p ) Pre~n", [get(oe_server_in_context)]),
+ orber_test_server:testing_iiop_context(Target),
+ io:format("orber_test_server:relay_cast( ~p ) Post~n", [get(oe_server_in_context)]),
+ {noreply, State}.
+
+%% Testing pseudo calls.
+pseudo_call(_Self, State) ->
+ io:format("orber_test_server:pseudo_call( ~p )~n", [now()]),
+ {reply, ok, State}.
+
+pseudo_cast(_Self, State) ->
+ io:format("orber_test_server:pseudo_cast( ~p )~n", [now()]),
+ {noreply, State}.
+pseudo_call_delay(_Self, State, Time) ->
+ io:format("orber_test_server:pseudo_call_delay( ~p )~n", [now()]),
+ timer:sleep(Time),
+ io:format("orber_test_server:pseudo_call_delay( ~p )~n", [now()]),
+ {reply, {ok, Time}, State}.
+
+pseudo_cast_delay(_Self, State, Time) ->
+ io:format("orber_test_server:pseudo_cast_delay( ~p )~n", [now()]),
+ timer:sleep(Time),
+ io:format("orber_test_server:pseudo_cast_delay( ~p )~n", [now()]),
+ {noreply, State}.
+
+pseudo_call_raise_exc(_Self, State, 1) ->
+ io:format("orber_test_server:pseudo_call_raise_exc( ~p )~n",[1]),
+ {reply, {'EXCEPTION', #'BAD_QOS'{completion_status=?COMPLETED_NO}}, State};
+pseudo_call_raise_exc(_Self, State, 2) ->
+ io:format("orber_test_server:pseudo_call_raise_exc( ~p )~n",[2]),
+ corba:raise(#'BAD_QOS'{completion_status=?COMPLETED_NO}),
+ {reply, ok, State}.
+
+%%--------------- LOCAL FUNCTIONS ----------------------------
+
+%%--------------- END OF MODULE ------------------------------
+
diff --git a/lib/orber/test/orber_test_timeout_server_impl.erl b/lib/orber/test/orber_test_timeout_server_impl.erl
new file mode 100644
index 0000000000..138eb51d92
--- /dev/null
+++ b/lib/orber/test/orber_test_timeout_server_impl.erl
@@ -0,0 +1,65 @@
+%%--------------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2000-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%
+%%
+%%
+%%----------------------------------------------------------------------
+%% File : orber_test_timeout_server_impl.erl
+%% Purpose :
+%%----------------------------------------------------------------------
+
+-module(orber_test_timeout_server_impl).
+
+-export([oneway_function/3, twoway_function/3]).
+
+
+%%--------------- gen_server specific ------------------------
+-export([init/1, terminate/2, code_change/3, handle_info/2]).
+
+%%------------------------------------------------------------
+%% function : server specific
+%%------------------------------------------------------------
+init(State) ->
+ %% 'trap_exit' optional
+ process_flag(trap_exit,true),
+ {ok, State}.
+
+terminate(_Reason, _State) ->
+ ok.
+
+code_change(_OldVsn, State, _Extra) ->
+ {ok, State}.
+
+%% If use IC option {{handle_info, "Module::Interface"}, true}
+handle_info(_Info, State) ->
+ %% Await the next invocation.
+ {noreply, State}.
+
+%%--- two-way ------------------------------------------------
+twoway_function(_OE_THIS, State, Time) ->
+ timer:sleep(Time),
+ {reply, ok, State}.
+
+
+%%--- one-way ------------------------------------------------
+oneway_function(_OE_THIS, State, Time) ->
+ timer:sleep(Time),
+ {noreply, State}.
+
+%%--------------- END OF MODULE ------------------------------
+
diff --git a/lib/orber/test/orber_web_SUITE.erl b/lib/orber/test/orber_web_SUITE.erl
new file mode 100644
index 0000000000..ffa7468853
--- /dev/null
+++ b/lib/orber/test/orber_web_SUITE.erl
@@ -0,0 +1,443 @@
+%%-----------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2004-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%
+%%
+%%
+%%-----------------------------------------------------------------
+%% File : orber_web_SUITE.erl
+%% Purpose :
+%%-----------------------------------------------------------------
+
+-module(orber_web_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/src/orber_iiop.hrl").
+
+-define(default_timeout, ?t:minutes(3)).
+
+-define(match(ExpectedRes, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ ExpectedRes ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS;
+ _ ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS)
+ end
+ end()).
+
+-define(nomatch(Not, Expr),
+ fun() ->
+ AcTuAlReS = (catch (Expr)),
+ case AcTuAlReS of
+ Not ->
+ io:format("###### ERROR ERROR ######~n~p~n",
+ [AcTuAlReS]),
+ ?line exit(AcTuAlReS);
+ _ ->
+ io:format("------ CORRECT RESULT ------~n~p~n",
+ [AcTuAlReS]),
+ AcTuAlReS
+ end
+ end()).
+
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-export([]).
+-compile(export_all).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["This suite is for testing the Orber Web API"];
+all(suite) ->
+ [menu, configure, info, nameservice, ifr_select, ifr_data,
+ create, delete_ctx, add_ctx, delete_obj, server].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ Path = code:which(?MODULE),
+ code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
+ orber:jump_start(2875),
+ oe_orber_test_server:oe_register(),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ oe_orber_test_server:oe_unregister(),
+ orber:jump_stop(),
+ Path = code:which(?MODULE),
+ code:del_path(filename:join(filename:dirname(Path), "idl_output")),
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: menu
+%% Description:
+%%-----------------------------------------------------------------
+menu(doc) -> [""];
+menu(suite) -> [];
+menu(_) ->
+ Node = atom_to_list(node()),
+ OK = orber_web:menu(env, [{"node", Node}]),
+ ?match(OK, orber_web:menu(env, [])),
+ ?match(OK, orber_web:menu(env, [42, {"node", Node}, "wrong"])),
+ ?match({'EXIT', _E}, orber_web:menu(env, [{"node", localhost}])),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: configure
+%% Description:
+%%-----------------------------------------------------------------
+configure(doc) -> [""];
+configure(suite) -> [];
+configure(_) ->
+ Node = atom_to_list(node()),
+ ?match({'EXIT', _}, orber_web:configure(env, [])),
+ ?match({'EXIT', _}, orber_web:configure(env, [{"node", localhost},
+ {"data", atom}])),
+ ?match([_H|_T], orber_web:configure(env, [{"node", Node}, {"data", ""}])),
+ ?match([_H|_T], orber_web:configure(env, [{"node", Node},
+ {"data", "[{orber_debug_level, 9}]"}])),
+ ?match({ok, 9}, application:get_env(orber, orber_debug_level)),
+ ?match([_H|_T], orber_web:configure(env, [{"node", "bad_node"},
+ {"data", "[{orber_debug_level, 9}]"}])),
+ ?match({error, _}, orber_web:configure(env, [{"node", Node},
+ {"data", "{orber_debug_level 9}"}])),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: info
+%% Description:
+%%-----------------------------------------------------------------
+info(doc) -> [""];
+info(suite) -> [];
+info(_) ->
+ ?match({'EXIT', _}, orber_web:info(env, [])),
+ ?match({'EXIT', _}, orber_web:info(env, [{"node", localhost}])),
+ ?match([_H|_T], orber_web:info(env, [{"node", atom_to_list(node())}])),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: nameservice
+%% Description:
+%%-----------------------------------------------------------------
+nameservice(doc) -> [""];
+nameservice(suite) -> [];
+nameservice(_) ->
+ NodeStr = atom_to_list(node()),
+ ?match({'EXIT', _}, orber_web:nameservice(env, [{"node", localhost},
+ {"context", "root"}])),
+ ?match({'EXIT', _}, orber_web:nameservice(env, [{"node", localhost},
+ {"context", "id1"}])),
+ ?match([_H|_T], orber_web:nameservice(env, [{"node", "bad_node"},
+ {"context", "root"}])),
+ ?match([_,_,_,NodeStr|_], orber_web:nameservice(env, [{"node", NodeStr},
+ {"context", "root"}])),
+ ?match({ok,_}, orber_web:nameservice(env, [{"node", NodeStr},
+ {"context", "id1"}])),
+ ?match([_H|_T], orber_web:add_ctx(env, [{"node", NodeStr},
+ {"context", "root"},
+ {"id", "id1"}])),
+ ?match([_H|_T], orber_web:add_ctx(env, [{"node", NodeStr},
+ {"context", "id1"},
+ {"id", "id2"}])),
+ [_,_,_,IOR] =
+ ?match([_,_,_,_], orber_web:create(env, [{"node", NodeStr},
+ {"module", "orber_test_server"},
+ {"arguments", "[]"},
+ {"options", "[{pseudo, true}]"},
+ {"namestr", "id1/id2/id3"},
+ {"bind", "rebind"}])),
+ ?match(#'IOP_IOR'{}, corba:string_to_object(IOR)),
+
+ ?match([_,"id1"|_], orber_web:nameservice(env, [{"node", NodeStr},
+ {"context", "id1"}])),
+ ?nomatch({error, _}, orber_web:nameservice(env, [{"node", NodeStr},
+ {"context", "id1/id2"},
+ {"object", "id3"}])),
+
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: ifr_select
+%% Description:
+%%-----------------------------------------------------------------
+ifr_select(doc) -> [""];
+ifr_select(suite) -> [];
+ifr_select(_) ->
+ ?match({'EXIT', _}, orber_web:ifr_select(env, [])),
+ ?match({'EXIT', _}, orber_web:ifr_select(env, [{"node", localhost}])),
+ ?match([_H|_T], orber_web:ifr_select(env, [{"node", "bad_node"}])),
+ ?match([_H|_T], orber_web:ifr_select(env, [{"node", atom_to_list(node())}])),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: ifr_data
+%% Description:
+%%-----------------------------------------------------------------
+ifr_data(doc) -> [""];
+ifr_data(suite) -> [];
+ifr_data(_) ->
+ ?match({'EXIT', _}, orber_web:ifr_data(env, [])),
+ ?match({'EXIT', _}, orber_web:ifr_data(env, [{"node", localhost},
+ {"table", "ir_ModuleDef"}])),
+ ?match({error, _}, orber_web:ifr_data(env, [{"node", "bad_host"},
+ {"table", "ir_ModuleDef"}])),
+ ?match({'EXIT', _}, orber_web:ifr_data(env, [{"node", atom_to_list(node())},
+ {"table", "bad_table"}])),
+ ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())},
+ {"table", "ir_ModuleDef"}])),
+ ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())},
+ {"table", "ir_InterfaceDef"}])),
+ ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())},
+ {"table", "ir_StructDef"}])),
+ ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())},
+ {"table", "ir_ExceptionDef"}])),
+ ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())},
+ {"table", "ir_ConstantDef"}])),
+ ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())},
+ {"table", "ir_EnumDef"}])),
+ ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())},
+ {"table", "ir_AliasDef"}])),
+ ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())},
+ {"table", "ir_AttributeDef"}])),
+ ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())},
+ {"table", "ir_OperationDef"}])),
+ ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())},
+ {"table", "ir_Contained"}])),
+ ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())},
+ {"table", "ir_TypedefDef"}])),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: create
+%% Description:
+%%-----------------------------------------------------------------
+create(doc) -> [""];
+create(suite) -> [];
+create(_) ->
+ NodeStr = atom_to_list(node()),
+ ?match({'EXIT', _}, orber_web:create(env, [])),
+ ?match({'EXIT', _}, orber_web:create(env, [{"node", localhost}])),
+ ?match({error, _}, orber_web:create(env, [{"node", NodeStr},
+ {"module", "orber_test_server"},
+ {"arguments", "[]"},
+ {"options", "[bad_option 42]"},
+ {"namestr", "[]"},
+ {"bind", "rebind"}])),
+ ?match({error, _}, orber_web:create(env, [{"node", NodeStr},
+ {"module", "orber_test_server"},
+ {"arguments", "[bad_argument 42]"},
+ {"options", "[]"},
+ {"namestr", "[]"},
+ {"bind", "rebind"}])),
+
+ ?match([_, NodeStr|_T], orber_web:create(env, [{"node", NodeStr}])),
+
+ [_,IOR] = ?match([_,_], orber_web:create(env, [{"node", NodeStr},
+ {"module", "orber_test_server"},
+ {"arguments", "[]"},
+ {"options", "[]"},
+ {"namestr", ""},
+ {"bind", "rebind"}])),
+ ?match(#'IOP_IOR'{}, corba:string_to_object(IOR)),
+
+ [_,_,_,_,_,IOR2] =
+ ?match([_,_,_,_,_,_], orber_web:create(env, [{"node", NodeStr},
+ {"module", "orber_test_server"},
+ {"arguments", "[]"},
+ {"options", "[]"},
+ {"namestr", "id1"},
+ {"bind", "rebind"}])),
+ ?match(#'IOP_IOR'{}, corba:string_to_object(IOR2)),
+
+ [_,_,_,IOR3] =
+ ?match([_,_,_,_], orber_web:create(env, [{"node", NodeStr},
+ {"module", "orber_test_server"},
+ {"arguments", "[]"},
+ {"options", "[{pseudo, true}]"},
+ {"namestr", "id2"},
+ {"bind", "rebind"}])),
+ ?match(#'IOP_IOR'{}, corba:string_to_object(IOR3)),
+
+ [_,IOR4] =?match([_,_], orber_web:create(env, [{"node", NodeStr},
+ {"module", "orber_test_server"},
+ {"arguments", "[]"},
+ {"options", "[{pseudo, true}]"},
+ {"namestr", ""},
+ {"bind", "rebind"}])),
+ ?match(#'IOP_IOR'{}, corba:string_to_object(IOR4)),
+
+ ?match([_], orber_web:create(env, [{"node", NodeStr},
+ {"module", "orber_test_server"},
+ {"arguments", "[]"},
+ {"options", "[{unknown, option}]"},
+ {"namestr", "id1"},
+ {"bind", "rebind"}])),
+
+ ?match([_, "id1"], orber_web:create(env, [{"node", NodeStr},
+ {"module", "orber_test_server"},
+ {"arguments", "[]"},
+ {"options", "[]"},
+ {"namestr", "id1"},
+ {"bind", "bind"}])),
+
+ ?match([_, "id2"], orber_web:create(env, [{"node", NodeStr},
+ {"module", "orber_test_server"},
+ {"arguments", "[]"},
+ {"options", "[{pseudo, true}]"},
+ {"namestr", "id2"},
+ {"bind", "bind"}])),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: delete_ctx
+%% Description:
+%%-----------------------------------------------------------------
+delete_ctx(doc) -> [""];
+delete_ctx(suite) -> [];
+delete_ctx(_) ->
+ ?match({ok, _}, orber_web:delete_ctx(env, [{"node", atom_to_list(node())},
+ {"context", "id1"}])),
+ ?match([_H|_T], orber_web:add_ctx(env, [{"node", atom_to_list(node())},
+ {"context", "root"},
+ {"id", "id1"}])),
+ ?match([_H|_T], orber_web:delete_ctx(env, [{"node", atom_to_list(node())},
+ {"context", "id1"}])),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: add_ctx
+%% Description:
+%%-----------------------------------------------------------------
+add_ctx(doc) -> [""];
+add_ctx(suite) -> [];
+add_ctx(_) ->
+ ?match({error, _}, orber_web:add_ctx(env, [{"node", "bad_node"},
+ {"context", "root"},
+ {"id", "id1"}])),
+ ?match([_H|_T], orber_web:add_ctx(env, [{"node", atom_to_list(node())},
+ {"context", "root"},
+ {"id", ""}])),
+ ?match([_H|_T], orber_web:add_ctx(env, [{"node", atom_to_list(node())},
+ {"context", "root"},
+ {"id", "id1"}])),
+ ?match([_H|_T], orber_web:add_ctx(env, [{"node", atom_to_list(node())},
+ {"context", "id1"},
+ {"id", "id2"}])),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: delete_obj
+%% Description:
+%%-----------------------------------------------------------------
+delete_obj(doc) -> [""];
+delete_obj(suite) -> [];
+delete_obj(_) ->
+ NodeStr = atom_to_list(node()),
+ ?match({error, _}, orber_web:delete_obj(env, [{"node", "bad_node"},
+ {"context", "id1"},
+ {"action", "unbind"}])),
+ ?match({error, _}, orber_web:delete_obj(env, [{"node", "bad_node"},
+ {"context", "id1"},
+ {"action", "both"}])),
+ ?match({'EXIT', _}, orber_web:delete_obj(env, [{"node", bad_node},
+ {"context", "id1"},
+ {"action", "both"}])),
+ ?match({error, _}, orber_web:delete_obj(env, [{"node", NodeStr},
+ {"context", "non/existing"},
+ {"action", "unbind"}])),
+ [_,_,_,_,_,IOR2] =
+ ?match([_,_,_,_,_,_], orber_web:create(env, [{"node", NodeStr},
+ {"module", "orber_test_server"},
+ {"arguments", "[]"},
+ {"options", "[]"},
+ {"namestr", "id1"},
+ {"bind", "rebind"}])),
+ ?match(#'IOP_IOR'{}, corba:string_to_object(IOR2)),
+
+ ?match({error, _}, orber_web:delete_obj(env, [{"node", NodeStr},
+ {"context", "bad/INS./id"},
+ {"action", "unbind"}])),
+
+ [_,_,_,IOR3] =
+ ?match([_,_,_,_], orber_web:create(env, [{"node", NodeStr},
+ {"module", "orber_test_server"},
+ {"arguments", "[]"},
+ {"options", "[{pseudo, true}]"},
+ {"namestr", "id2"},
+ {"bind", "rebind"}])),
+ ?match(#'IOP_IOR'{}, corba:string_to_object(IOR3)),
+
+ ?match([_, "id1"|_], orber_web:delete_obj(env, [{"node", NodeStr},
+ {"context", "id1"},
+ {"action", "unbind"}])),
+ ?match([_, "id2"|_], orber_web:delete_obj(env, [{"node", NodeStr},
+ {"context", "id2"},
+ {"action", "unbind"}])),
+
+
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: server
+%% Description:
+%%-----------------------------------------------------------------
+server(doc) -> [""];
+server(suite) -> [];
+server(_) ->
+ NodeStr = "node=" ++ atom_to_list(node()),
+ {ok, Pid} = ?match({ok,_}, orber_web_server:start()),
+ ?match({error,{already_started, Pid}}, orber_web_server:start_link()),
+ ?match({error,{already_started,Pid}}, orber_web_server:start()),
+ ?match({orber, _}, orber_web_server:config_data()),
+ ?match([_H|_T], orber_web_server:ifr_select(env, "node=badnode")),
+ ?match([_H|_T], orber_web_server:ifr_select(env, "node=" ++ NodeStr)),
+ ?match([_H|_T], orber_web_server:menu(env, NodeStr)),
+ ?match([_H|_T], orber_web_server:configure(env, NodeStr ++ "&data=[{orber_debug_level, 9}]")),
+ ?match([_H|_T], orber_web_server:nameservice(env, NodeStr ++ "&context=root")),
+ ?match([_H|_T], orber_web_server:info(env, NodeStr)),
+ ?match([_H|_T], orber_web_server:ifr_data(env, NodeStr ++ "&table=ir_ModuleDef")),
+ ?match([_H|_T], orber_web_server:create(env, NodeStr)),
+ ?match([_H|_T], orber_web_server:add_ctx(env, NodeStr ++ "&context=root&id=id1")),
+ ?match([_H|_T], orber_web_server:delete_ctx(env, NodeStr++"&context=id1")),
+ ?match([_H|_T], orber_web_server:delete_obj(env, NodeStr++"&context=id1&action=unbind")),
+ ?match([_H|_T], orber_web_server:default_selection(env, NodeStr)),
+ ?match(ok, orber_web_server:stop()),
+ ok.
+
+
diff --git a/lib/orber/test/tc_SUITE.erl b/lib/orber/test/tc_SUITE.erl
new file mode 100644
index 0000000000..807a663219
--- /dev/null
+++ b/lib/orber/test/tc_SUITE.erl
@@ -0,0 +1,661 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2004-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%
+%%
+%%
+%%-----------------------------------------------------------------
+%%
+%% Description:
+%% Test suite for the basic typecode functions
+%%
+%%-----------------------------------------------------------------
+-module(tc_SUITE).
+
+-include("test_server.hrl").
+-include_lib("orber/src/orber_iiop.hrl").
+
+-define(default_timeout, ?t:minutes(3)).
+
+-define(match(Expr),
+ fun() ->
+ case (catch (Expr)) of
+ AcTuAlReS when is_binary(AcTuAlReS)->
+ io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
+ [AcTuAlReS]),
+ exit(AcTuAlReS);
+ _ ->
+ ok
+ end
+ end()).
+-define(SUB_ELIST, [{"null", orber_tc:null()},
+ {"void", orber_tc:void()},
+ {"short", orber_tc:short()},
+ {"unsigned_short", orber_tc:unsigned_short()},
+ {"long", orber_tc:long()},
+ {"unsigned_long", orber_tc:unsigned_long()},
+ {"long_long", orber_tc:long_long()},
+ {"unsigned_long_long", orber_tc:unsigned_long_long()},
+ {"float", orber_tc:'float'()},
+ {"double", orber_tc:double()},
+ {"longdouble", orber_tc:longdouble()},
+ {"boolean", orber_tc:boolean()},
+ {"char", orber_tc:char()},
+ {"wchar", orber_tc:wchar()},
+ {"octet", orber_tc:octet()},
+ {"any", orber_tc:any()},
+ {"typecode", orber_tc:typecode()},
+ {"principal", orber_tc:principal()},
+ {"object_reference", orber_tc:object_reference("Id", "Name")}]).
+
+-define(ELIST, [{"null", orber_tc:null()},
+ {"void", orber_tc:void()},
+ {"short", orber_tc:short()},
+ {"unsigned_short", orber_tc:unsigned_short()},
+ {"long", orber_tc:long()},
+ {"unsigned_long", orber_tc:unsigned_long()},
+ {"long_long", orber_tc:long_long()},
+ {"unsigned_long_long", orber_tc:unsigned_long_long()},
+ {"float", orber_tc:'float'()},
+ {"double", orber_tc:double()},
+ {"longdouble", orber_tc:longdouble()},
+ {"boolean", orber_tc:boolean()},
+ {"char", orber_tc:char()},
+ {"wchar", orber_tc:wchar()},
+ {"octet", orber_tc:octet()},
+ {"any", orber_tc:any()},
+ {"typecode", orber_tc:typecode()},
+ {"principal", orber_tc:principal()},
+ {"object_reference", orber_tc:object_reference("Id", "Name")},
+ {"struct", orber_tc:struct("Id", "Name", ?SUB_ELIST)},
+ {"enum", orber_tc:enum("Id", "Name", ["E1", "E2"])},
+ {"string", orber_tc:string(1)},
+ {"wstring", orber_tc:wstring(0)},
+ {"sequence", orber_tc:sequence(orber_tc:enum("Id", "Name",
+ ["E1", "E2"]), 0)},
+ {"array", orber_tc:array(orber_tc:enum("Id", "Name",
+ ["E1", "E2"]), 2)},
+ {"alias", orber_tc:alias("id", "name",
+ orber_tc:enum("Id", "Name",
+ ["E1", "E2"]))},
+ {"exception", orber_tc:exception("Id", "Name", ?SUB_ELIST)}]).
+
+-define(VELIST, [{"null", orber_tc:null(), 42},
+ {"void", orber_tc:void(), 42},
+ {"short", orber_tc:short(), 42},
+ {"unsigned_short", orber_tc:unsigned_short(), 42},
+ {"long", orber_tc:long(), 42},
+ {"unsigned_long", orber_tc:unsigned_long(), 42},
+ {"long_long", orber_tc:long_long(), 42},
+ {"unsigned_long_long", orber_tc:unsigned_long_long(), 42},
+ {"float", orber_tc:'float'(), 42},
+ {"double", orber_tc:double(), 42},
+ {"longdouble", orber_tc:longdouble(), 42},
+ {"boolean", orber_tc:boolean(), 42},
+ {"char", orber_tc:char(), 42},
+ {"wchar", orber_tc:wchar(), 42},
+ {"octet", orber_tc:octet(), 42},
+ {"any", orber_tc:any(), 42},
+ {"typecode", orber_tc:typecode(), 42},
+ {"principal", orber_tc:principal(), 42},
+ {"object_reference", orber_tc:object_reference("Id", "Name"), 42},
+ {"struct", orber_tc:struct("Id", "Name", ?SUB_ELIST), 42},
+ {"enum", orber_tc:enum("Id", "Name", ["E1", "E2"]), 42},
+ {"string", orber_tc:string(1), 42},
+ {"wstring", orber_tc:wstring(0), 42},
+ {"sequence", orber_tc:sequence(orber_tc:enum("Id", "Name",
+ ["E1", "E2"]), 0), 42},
+ {"array", orber_tc:array(orber_tc:enum("Id", "Name",
+ ["E1", "E2"]), 2), 42},
+ {"alias", orber_tc:alias("id", "name",
+ orber_tc:enum("Id", "Name",
+ ["E1", "E2"])), 42},
+ {"exception", orber_tc:exception("Id", "Name", ?SUB_ELIST), 42}]).
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([all/1]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-export([]).
+-compile(export_all).
+
+%%-----------------------------------------------------------------
+%% Func: all/1
+%% Args:
+%% Returns:
+%%-----------------------------------------------------------------
+all(doc) -> ["Description", "more description"];
+all(suite) ->
+ [null, void,
+ short, ushort,
+ long, ulong,
+ longlong, ulonglong,
+ boolean, char, wchar, octet,
+ float, double, longdouble,
+ any, typecode, principal, object_reference,
+ struct, union, enum, string, wstring, sequence, array,
+ alias, exception, fixed, value, value_box, native,
+ abstract_interface, indirection, get_tc].
+
+%%-----------------------------------------------------------------
+%% Init and cleanup functions.
+%%-----------------------------------------------------------------
+
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+
+
+fin_per_testcase(_Case, Config) ->
+ Dog = ?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: null test
+%% Description:
+%%-----------------------------------------------------------------
+null(doc) -> [];
+null(suite) -> [];
+null(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:null()),
+ ?line code(orber_tc:null()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: void test
+%% Description:
+%%-----------------------------------------------------------------
+void(doc) -> [];
+void(suite) -> [];
+void(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:void()),
+ ?line code(orber_tc:void()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: short integer test
+%% Description:
+%%-----------------------------------------------------------------
+short(doc) -> [];
+short(suite) -> [];
+short(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:short()),
+ ?line code(orber_tc:short()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: unsigned short integer test
+%% Description:
+%%-----------------------------------------------------------------
+ushort(doc) -> [];
+ushort(suite) -> [];
+ushort(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:unsigned_short()),
+ ?line code(orber_tc:unsigned_short()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: long integer test
+%% Description:
+%%-----------------------------------------------------------------
+long(doc) -> [];
+long(suite) -> [];
+long(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:long()),
+ ?line code(orber_tc:long()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: unsigned long integer test
+%% Description:
+%%-----------------------------------------------------------------
+ulong(doc) -> [];
+ulong(suite) -> [];
+ulong(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:unsigned_long()),
+ ?line code(orber_tc:unsigned_long()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: long integer test
+%% Description:
+%%-----------------------------------------------------------------
+longlong(doc) -> [];
+longlong(suite) -> [];
+longlong(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:long_long()),
+ ?line code(orber_tc:long_long()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: unsigned long integer test
+%% Description:
+%%-----------------------------------------------------------------
+ulonglong(doc) -> [];
+ulonglong(suite) -> [];
+ulonglong(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:unsigned_long_long()),
+ ?line code(orber_tc:unsigned_long_long()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: float test
+%% Description:
+%%-----------------------------------------------------------------
+float(doc) -> [];
+float(suite) -> [];
+float(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:'float'()),
+ ?line code(orber_tc:'float'()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: double test
+%% Description:
+%%-----------------------------------------------------------------
+double(doc) -> [];
+double(suite) -> [];
+double(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:double()),
+ ?line code(orber_tc:double()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: longdouble test
+%% Description:
+%%-----------------------------------------------------------------
+longdouble(doc) -> [];
+longdouble(suite) -> [];
+longdouble(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:longdouble()),
+ ?line code(orber_tc:longdouble()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: boolean test
+%% Description:
+%%-----------------------------------------------------------------
+boolean(doc) -> [];
+boolean(suite) -> [];
+boolean(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:boolean()),
+ ?line code(orber_tc:boolean()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: character test
+%% Description:
+%%-----------------------------------------------------------------
+char(doc) -> [];
+char(suite) -> [];
+char(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:char()),
+ ?line code(orber_tc:char()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: character test
+%% Description:
+%%-----------------------------------------------------------------
+wchar(doc) -> [];
+wchar(suite) -> [];
+wchar(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:wchar()),
+ ?line code(orber_tc:wchar()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: octet test
+%% Description:
+%%-----------------------------------------------------------------
+octet(doc) -> [];
+octet(suite) -> [];
+octet(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:octet()),
+ ?line code(orber_tc:octet()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: any test
+%% Description:
+%%-----------------------------------------------------------------
+any(doc) -> [];
+any(suite) -> [];
+any(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:any()),
+ ?line code(orber_tc:any()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: typecode test
+%% Description:
+%%-----------------------------------------------------------------
+typecode(doc) -> [];
+typecode(suite) -> [];
+typecode(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:typecode()),
+ ?line code(orber_tc:typecode()),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: principal test
+%% Description:
+%%-----------------------------------------------------------------
+principal(doc) -> [];
+principal(suite) -> [];
+principal(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:principal()),
+ ?line code(orber_tc:principal()),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: object_reference test
+%% Description:
+%%-----------------------------------------------------------------
+object_reference(doc) -> [];
+object_reference(suite) -> [];
+object_reference(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:object_reference("Id", "Name")),
+ ?line false = orber_tc:check_tc(orber_tc:object_reference(42, "Name")),
+ ?line false = orber_tc:check_tc(orber_tc:object_reference("Id", 42)),
+ ?line code(orber_tc:object_reference("Id", "Name")),
+ ?line ?match(code(orber_tc:object_reference(42, "Name"))),
+ ?line ?match(code(orber_tc:object_reference("Id", 42))),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: struct
+%% Description:
+%%-----------------------------------------------------------------
+struct(doc) -> [];
+struct(suite) -> [];
+struct(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:struct("Id", "Name", ?ELIST)),
+ ?line false = orber_tc:check_tc(orber_tc:struct(42, "Name", ?ELIST)),
+ ?line false = orber_tc:check_tc(orber_tc:struct("Id", false, ?ELIST)),
+ ?line false = orber_tc:check_tc(orber_tc:struct("Id", "Name", ?VELIST)),
+ ?line false = orber_tc:check_tc(orber_tc:struct("Id", "Name", "wrong")),
+ ?line code(orber_tc:struct("Id", "Name", ?ELIST)),
+ ?line ?match(code(orber_tc:struct(42, "Name", ?ELIST))),
+ ?line ?match(code(orber_tc:struct("Id", false, ?ELIST))),
+ ?line ?match(code(orber_tc:struct("Id", "Name", ?VELIST))),
+ ?line ?match(code(orber_tc:struct("Id", "Name", "wrong"))),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: union
+%% Description:
+%%-----------------------------------------------------------------
+union(doc) -> [];
+union(suite) -> [];
+union(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:union("Id", "Name", orber_tc:long(),
+ -1, [{1, "long", orber_tc:long()},
+ {2, "longlong", orber_tc:long()}])),
+ ?line false = orber_tc:check_tc(orber_tc:union("Id", "Name", orber_tc:long(),
+ -1, ?ELIST)),
+ ?line false = orber_tc:check_tc(orber_tc:union(42, "Name", orber_tc:long(),
+ -1, [{1, "long", orber_tc:long()},
+ {2, "longlong", orber_tc:long()}])),
+ ?line false = orber_tc:check_tc(orber_tc:union("Id", false, orber_tc:long(),
+ -1, [{1, "long", orber_tc:long()},
+ {2, "longlong", orber_tc:long()}])),
+ ?line false = orber_tc:check_tc(orber_tc:union("Id", "Name", bad_tc,
+ -1, [{1, "long", orber_tc:long()},
+ {2, "longlong", orber_tc:long()}])),
+ ?line false = orber_tc:check_tc(orber_tc:union("Id", "Name", orber_tc:long(),
+ "wrong", [{1, "long", orber_tc:long()},
+ {2, "longlong", orber_tc:long()}])),
+
+ ?line code(orber_tc:union("Id", "Name", orber_tc:long(),
+ -1, [{1, "long", orber_tc:long()},
+ {2, "longlong", orber_tc:long()}])),
+ ok.
+
+
+%%-----------------------------------------------------------------
+%% Test Case: enum test
+%% Description:
+%%-----------------------------------------------------------------
+enum(doc) -> [];
+enum(suite) -> [];
+enum(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:enum("Id", "Name",
+ ["E1", "E2", "E3"])),
+ ?line false = orber_tc:check_tc(orber_tc:enum(42, "Name",
+ ["E1", "E2", "E3"])),
+ ?line false = orber_tc:check_tc(orber_tc:enum("Id", false,
+ ["E1", "E2", "E3"])),
+ ?line false = orber_tc:check_tc(orber_tc:enum("Id", "Name",
+ ["E1", false, "E3"])),
+ ?line code(orber_tc:enum("Id", "Name", ["E1", "E2", "E3"])),
+ ?line ?match(code(orber_tc:enum(false, "Name", ["E1", "E2", "E3"]))),
+ ?line ?match(code(orber_tc:enum("Id", 42, ["E1", "E2", "E3"]))),
+ ?line ?match(code(orber_tc:enum("Id", "Name", ["E1", false, "E3"]))),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: string
+%% Description:
+%%-----------------------------------------------------------------
+string(doc) -> [];
+string(suite) -> [];
+string(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:string(0)),
+ ?line true = orber_tc:check_tc(orber_tc:string(1)),
+ ?line false = orber_tc:check_tc(orber_tc:string("wrong")),
+ ?line code(orber_tc:string(0)),
+ ?line code(orber_tc:string(1)),
+ ?line ?match(code(orber_tc:string(-1))),
+ ?line ?match(code(orber_tc:string(?ULONGMAX+1))),
+ ?line ?match(code(orber_tc:string("wrong"))),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: wstring
+%% Description:
+%%-----------------------------------------------------------------
+wstring(doc) -> [];
+wstring(suite) -> [];
+wstring(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:wstring(0)),
+ ?line true = orber_tc:check_tc(orber_tc:wstring(1)),
+ ?line false = orber_tc:check_tc(orber_tc:wstring("wrong")),
+ ?line code(orber_tc:wstring(0)),
+ ?line code(orber_tc:wstring(1)),
+ ?line ?match(code(orber_tc:wstring(-1))),
+ ?line ?match(code(orber_tc:wstring(?ULONGMAX+1))),
+ ?line ?match(code(orber_tc:wstring(false))),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: sequence
+%% Description:
+%%-----------------------------------------------------------------
+sequence(doc) -> [];
+sequence(suite) -> [];
+sequence(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:sequence(orber_tc:struct("Id", "Name", ?ELIST), 0)),
+ ?line code(orber_tc:sequence(orber_tc:struct("Id", "Name", ?ELIST), 0)),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: array
+%% Description:
+%%-----------------------------------------------------------------
+array(doc) -> [];
+array(suite) -> [];
+array(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:array(orber_tc:struct("Id", "Name", ?ELIST), 1)),
+ ?line code(orber_tc:array(orber_tc:struct("Id", "Name", ?ELIST), 1)),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: alias
+%% Description:
+%%-----------------------------------------------------------------
+alias(doc) -> [];
+alias(suite) -> [];
+alias(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:alias("Id", "Name", orber_tc:struct("Id", "Name", ?ELIST))),
+ ?line false = orber_tc:check_tc(orber_tc:alias(false, "Name", orber_tc:struct("Id", "Name", ?ELIST))),
+ ?line false = orber_tc:check_tc(orber_tc:alias("Id", 42, orber_tc:struct("Id", "Name", ?ELIST))),
+ ?line false = orber_tc:check_tc(orber_tc:alias("Id", "Name", "wrong")),
+ ?line code(orber_tc:alias("Id", "Name", orber_tc:struct("Id", "Name", ?ELIST))),
+ ?line ?match(code(orber_tc:alias("Id", "Name", orber_tc:struct("Id", "Name", ?VELIST)))),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: exception
+%% Description:
+%%-----------------------------------------------------------------
+exception(doc) -> [];
+exception(suite) -> [];
+exception(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:exception("Id", "Name", ?ELIST)),
+ ?line false = orber_tc:check_tc(orber_tc:exception(42, "Name", ?ELIST)),
+ ?line false = orber_tc:check_tc(orber_tc:exception("Id", false, ?ELIST)),
+ ?line false = orber_tc:check_tc(orber_tc:exception("Id", "Name", "wrong")),
+ ?line code(orber_tc:exception("Id", "Name", ?ELIST)),
+ ?line ?match(code(orber_tc:exception(42, "Name", ?ELIST))),
+ ?line ?match(code(orber_tc:exception("Id", false, ?ELIST))),
+ ?line ?match(code(orber_tc:exception("Id", "Name", "wrong"))),
+
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: fixed
+%% Description:
+%%-----------------------------------------------------------------
+fixed(doc) -> [];
+fixed(suite) -> [];
+fixed(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:fixed(25, 2)),
+ ?line code(orber_tc:fixed(25, 2)),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: value
+%% Description:
+%%-----------------------------------------------------------------
+value(doc) -> [];
+value(suite) -> [];
+value(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:value("Id", "Name", 42,
+ orber_tc:fixed(25, 2), ?VELIST)),
+ ?line false = orber_tc:check_tc(orber_tc:value(42, "Name", 42,
+ orber_tc:fixed(25, 2), ?VELIST)),
+ ?line false = orber_tc:check_tc(orber_tc:value("Id", 42, 42,
+ orber_tc:fixed(25, 2), ?VELIST)),
+ ?line false = orber_tc:check_tc(orber_tc:value("Id", "Name", "wrong",
+ orber_tc:fixed(25, 2), ?VELIST)),
+ ?line false = orber_tc:check_tc(orber_tc:value("Id", "Name", "42",
+ orber_tc:fixed(25, 2), ?VELIST)),
+ ?line false = orber_tc:check_tc(orber_tc:value("Id", "Name", "42",
+ ?VELIST, ?VELIST)),
+ ?line false = orber_tc:check_tc(orber_tc:value("Id", "Name", "42",
+ orber_tc:fixed(25, 2), false)),
+
+ ?line code(orber_tc:value("Id", "Name", 42, orber_tc:long(), ?VELIST)),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: value_box
+%% Description:
+%%-----------------------------------------------------------------
+value_box(doc) -> [];
+value_box(suite) -> [];
+value_box(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:value_box("Id", "Name",
+ orber_tc:fixed(25, 2))),
+ ?line false = orber_tc:check_tc(orber_tc:value_box(42, "Name",
+ orber_tc:fixed(25, 2))),
+ ?line false = orber_tc:check_tc(orber_tc:value_box("Id", 42,
+ orber_tc:fixed(25, 2))),
+ ?line false = orber_tc:check_tc(orber_tc:value_box("Id", "Name", "wrong")),
+ ?line code(orber_tc:value_box("Id", "Name", orber_tc:long())),
+ ?line ?match(code(orber_tc:value_box(42, "Name", orber_tc:short()))),
+ ?line ?match(code(orber_tc:value_box("Id", 42, orber_tc:char()))),
+ ?line ?match(code(orber_tc:value_box("Id", "Name", false))),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: native
+%% Description:
+%%-----------------------------------------------------------------
+native(doc) -> [];
+native(suite) -> [];
+native(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:native("Id", "Name")),
+ ?line false = orber_tc:check_tc(orber_tc:native(42, "Name")),
+ ?line false = orber_tc:check_tc(orber_tc:native("Id", 42)),
+ ?line code(orber_tc:native("Id", "Name")),
+ ?line ?match(code(orber_tc:native(42, "Name"))),
+ ?line ?match(code(orber_tc:native("Id", 42))),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: abstract_interface
+%% Description:
+%%-----------------------------------------------------------------
+abstract_interface(doc) -> [];
+abstract_interface(suite) -> [];
+abstract_interface(_) ->
+ ?line true = orber_tc:check_tc(orber_tc:abstract_interface("RepId", "Name")),
+ ?line false = orber_tc:check_tc(orber_tc:abstract_interface(false, "Name")),
+ ?line false = orber_tc:check_tc(orber_tc:abstract_interface("RepId", 42)),
+ ?line code(orber_tc:abstract_interface("RepId", "Name")),
+ ?line ?match(code(orber_tc:abstract_interface(42, "Name"))),
+ ?line ?match(code(orber_tc:abstract_interface("Id", 42))),
+ ok.
+
+
+
+%%-----------------------------------------------------------------
+%% Test Case: indirection
+%% Description:
+%%-----------------------------------------------------------------
+indirection(doc) -> [];
+indirection(suite) -> [];
+indirection(_) ->
+ ?line true = orber_tc:check_tc({'none', 42}),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Test Case: get_tc
+%% Description:
+%%-----------------------------------------------------------------
+get_tc(doc) -> [];
+get_tc(suite) -> [];
+get_tc(_) ->
+ TC = 'CosNaming_Binding':tc(),
+ ?line TC = orber_tc:get_tc({'CosNaming_Binding', 42}),
+ ?line ?match(orber_tc:get_tc({'none', 42})),
+ ok.
+
+%%-----------------------------------------------------------------
+%% MISC Operations
+%%-----------------------------------------------------------------
+code(Value) ->
+ cdr_encode:enc_type({1,2}, tk_TypeCode, Value).
diff --git a/lib/orber/vsn.mk b/lib/orber/vsn.mk
index 79847451d2..ec349ee189 100644
--- a/lib/orber/vsn.mk
+++ b/lib/orber/vsn.mk
@@ -1,7 +1,8 @@
ORBER_VSN = 3.6.16
-TICKETS = OTP-8489
+TICKETS = OTP-8489 \
+ OTP-8543
TICKETS_3.6.15 = OTP-8353 \
OTP-8354 \
diff --git a/lib/public_key/asn1/Makefile b/lib/public_key/asn1/Makefile
index fbea701be9..94abec083c 100644
--- a/lib/public_key/asn1/Makefile
+++ b/lib/public_key/asn1/Makefile
@@ -1,19 +1,19 @@
#
# %CopyrightBegin%
-#
-# Copyright Ericsson AB 2008-2009. All Rights Reserved.
-#
+#
+# Copyright Ericsson AB 2008-2010. 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%
#
@@ -40,7 +40,7 @@ RELSYSDIR = $(RELEASE_PATH)/lib/public_key-$(VSN)
ASN_TOP = OTP-PUB-KEY
ASN_MODULES = PKIX1Explicit88 PKIX1Implicit88 PKIX1Algorithms88 \
- PKIXAttributeCertificate OTP-PKIX
+ PKIXAttributeCertificate PKCS-1 PKCS-3 OTP-PKIX
ASN_ASNS = $(ASN_MODULES:%=%.asn1)
ASN_ERLS = $(ASN_TOP).erl
ASN_HRLS = $(ASN_TOP).hrl
@@ -110,4 +110,6 @@ OTP-PUB-KEY.asn1db: PKIX1Algorithms88.asn1 \
PKIX1Explicit88.asn1 \
PKIX1Implicit88.asn1 \
PKIXAttributeCertificate.asn1 \
+ PKCS-1.asn1\
+ PKCS-3.asn1\
OTP-PKIX.asn1
diff --git a/lib/public_key/asn1/OTP-PUB-KEY.set.asn b/lib/public_key/asn1/OTP-PUB-KEY.set.asn
index 2f9ccd6b0e..5c76d13115 100644
--- a/lib/public_key/asn1/OTP-PUB-KEY.set.asn
+++ b/lib/public_key/asn1/OTP-PUB-KEY.set.asn
@@ -4,4 +4,5 @@ PKIX1Implicit88.asn1
PKIXAttributeCertificate.asn1
PKIX1Algorithms88.asn1
PKCS-1.asn1
+PKCS-3.asn1
DSS.asn1
diff --git a/lib/public_key/asn1/PKCS-3.asn1 b/lib/public_key/asn1/PKCS-3.asn1
new file mode 100644
index 0000000000..64180b3a85
--- /dev/null
+++ b/lib/public_key/asn1/PKCS-3.asn1
@@ -0,0 +1,21 @@
+PKCS-3 {
+ iso(1) member-body(2) us(840) rsadsi(113549)
+ pkcs(1) 3
+}
+
+DEFINITIONS EXPLICIT TAGS ::=
+
+BEGIN
+
+pkcs-3 OBJECT IDENTIFIER ::=
+ { iso(1) member-body(2) us(840) rsadsi(113549)
+ pkcs(1) 3 }
+
+dhKeyAgreement OBJECT IDENTIFIER ::= { pkcs-3 1 }
+
+DHParameter ::= SEQUENCE {
+ prime INTEGER, -- p
+ base INTEGER, -- g
+ privateValueLength INTEGER OPTIONAL }
+
+END \ No newline at end of file
diff --git a/lib/public_key/doc/src/notes.xml b/lib/public_key/doc/src/notes.xml
index a5fbc81093..33a424f432 100644
--- a/lib/public_key/doc/src/notes.xml
+++ b/lib/public_key/doc/src/notes.xml
@@ -33,6 +33,27 @@
<rev>A</rev>
<file>notes.xml</file>
</header>
+<section><title>Public_Key 0.6</title>
+
+<section><title>Improvements and New Features</title>
+<list>
+ <item>
+ <p>
+ Support for Diffie-Hellman. ssl-3.11 requires
+ public_key-0.6.</p>
+ <p>
+ Own Id: OTP-7046</p>
+ </item>
+ <item>
+ <p>
+ Moved extended key usage test for ssl values to ssl.</p>
+ <p>
+ Own Id: OTP-8553 Aux Id: seq11541, OTP-8554 </p>
+ </item>
+</list>
+</section>
+
+</section>
<section><title>Public_Key 0.5</title>
diff --git a/lib/public_key/src/pubkey_cert.erl b/lib/public_key/src/pubkey_cert.erl
index 0ccc74799c..8f7dfa8352 100644
--- a/lib/public_key/src/pubkey_cert.erl
+++ b/lib/public_key/src/pubkey_cert.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2008-2010. 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%
%%
@@ -455,24 +455,6 @@ validate_extensions([#'Extension'{extnID = ?'id-ce-keyUsage',
AccErr)
end;
-validate_extensions([#'Extension'{extnID = ?'id-ce-extKeyUsage',
- extnValue = KeyUse,
- critical = true} | Rest],
- #path_validation_state{} = ValidationState,
- ExistBasicCon, SelfSigned, UnknownExtensions, Verify,
- AccErr0) ->
- case is_valid_extkey_usage(KeyUse) of
- true ->
- validate_extensions(Rest, ValidationState, ExistBasicCon,
- SelfSigned, UnknownExtensions,
- Verify, AccErr0);
- false ->
- AccErr =
- not_valid({bad_cert, invalid_ext_key_usage}, Verify, AccErr0),
- validate_extensions(Rest, ValidationState, ExistBasicCon,
- SelfSigned, UnknownExtensions, Verify, AccErr)
- end;
-
validate_extensions([#'Extension'{extnID = ?'id-ce-subjectAltName',
extnValue = Names} | Rest],
ValidationState, ExistBasicCon,
@@ -590,13 +572,6 @@ validate_extensions([Extension | Rest], ValidationState,
is_valid_key_usage(KeyUse, Use) ->
lists:member(Use, KeyUse).
-is_valid_extkey_usage(?'id-kp-clientAuth') ->
- true;
-is_valid_extkey_usage(?'id-kp-serverAuth') ->
- true;
-is_valid_extkey_usage(_) ->
- false.
-
validate_subject_alt_names([]) ->
true;
validate_subject_alt_names([AltName | Rest]) ->
diff --git a/lib/public_key/src/pubkey_crypto.erl b/lib/public_key/src/pubkey_crypto.erl
index fe4e97fcc5..4ab655e977 100644
--- a/lib/public_key/src/pubkey_crypto.erl
+++ b/lib/public_key/src/pubkey_crypto.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2008-2010. 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%
%%
@@ -26,7 +26,7 @@
-export([encrypt_public/3, decrypt_private/3,
encrypt_private/3, decrypt_public/3,
- sign/2, sign/3, verify/5]).
+ sign/2, sign/3, verify/5, gen_key/2]).
-define(UINT32(X), X:32/unsigned-big-integer).
@@ -44,10 +44,14 @@
%%
%% Description: Public key encrypts PlainText.
%%--------------------------------------------------------------------
-encrypt_public(PlainText, #'RSAPublicKey'{modulus=N,publicExponent=E},Padding) ->
- crypto:rsa_public_encrypt(PlainText, [crypto:mpint(E),crypto:mpint(N)],Padding);
-encrypt_public(PlainText, #'RSAPrivateKey'{modulus=N,publicExponent=E},Padding) ->
- crypto:rsa_public_encrypt(PlainText, [crypto:mpint(E),crypto:mpint(N)],Padding).
+encrypt_public(PlainText, #'RSAPublicKey'{modulus=N,publicExponent=E},
+ Padding) ->
+ crypto:rsa_public_encrypt(PlainText, [crypto:mpint(E),crypto:mpint(N)],
+ Padding);
+encrypt_public(PlainText, #'RSAPrivateKey'{modulus=N,publicExponent=E},
+ Padding) ->
+ crypto:rsa_public_encrypt(PlainText, [crypto:mpint(E),crypto:mpint(N)],
+ Padding).
encrypt_private(PlainText, #'RSAPrivateKey'{modulus = N,
publicExponent = E,
@@ -67,15 +71,20 @@ encrypt_private(PlainText, #'RSAPrivateKey'{modulus = N,
%% Description: Uses private key to decrypt public key encrypted data.
%%--------------------------------------------------------------------
decrypt_private(CipherText,
- #'RSAPrivateKey'{modulus = N,publicExponent = E,privateExponent = D},
+ #'RSAPrivateKey'{modulus = N,publicExponent = E,
+ privateExponent = D},
Padding) ->
crypto:rsa_private_decrypt(CipherText,
- [crypto:mpint(E), crypto:mpint(N),crypto:mpint(D)],
- Padding).
-decrypt_public(CipherText, #'RSAPublicKey'{modulus = N, publicExponent = E}, Padding) ->
- crypto:rsa_public_decrypt(CipherText,[crypto:mpint(E), crypto:mpint(N)], Padding);
-decrypt_public(CipherText, #'RSAPrivateKey'{modulus = N, publicExponent = E}, Padding) ->
- crypto:rsa_public_decrypt(CipherText,[crypto:mpint(E), crypto:mpint(N)], Padding).
+ [crypto:mpint(E), crypto:mpint(N),
+ crypto:mpint(D)], Padding).
+decrypt_public(CipherText, #'RSAPublicKey'{modulus = N, publicExponent = E},
+ Padding) ->
+ crypto:rsa_public_decrypt(CipherText,[crypto:mpint(E), crypto:mpint(N)],
+ Padding);
+decrypt_public(CipherText, #'RSAPrivateKey'{modulus = N, publicExponent = E},
+ Padding) ->
+ crypto:rsa_public_decrypt(CipherText,[crypto:mpint(E), crypto:mpint(N)],
+ Padding).
%%--------------------------------------------------------------------
%% Function: sign(PlainText, Key) ->
@@ -125,10 +134,24 @@ verify(sha, PlainText, Signature, Key, #'Dss-Parms'{p = P, q = Q, g = G}) ->
[crypto:mpint(P), crypto:mpint(Q),
crypto:mpint(G), crypto:mpint(Key)]).
+
+%%--------------------------------------------------------------------
+%% Function: gen_key(Type, Params) ->
+%% Type = diffie_hellman
+%% Params = [P,G] | [Y, P, G]
+%% Description: Generates keys.
+%% -----------------------------------------------------------------
+gen_key(diffie_hellman, [Y, P, G]) ->
+ crypto:dh_generate_key(crypto:mpint(Y), [crypto:mpint(P),
+ crypto:mpint(G)]);
+gen_key(diffie_hellman, [P, G]) ->
+ crypto:dh_generate_key([crypto:mpint(P), crypto:mpint(G)]).
+
+%%% TODO: Support rsa, dss key_gen
+
%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
-
sized_binary(Binary) when is_binary(Binary) ->
Size = size(Binary),
<<?UINT32(Size), Binary/binary>>;
diff --git a/lib/public_key/src/pubkey_pem.erl b/lib/public_key/src/pubkey_pem.erl
index abd46fa00e..9fc17b6f73 100644
--- a/lib/public_key/src/pubkey_pem.erl
+++ b/lib/public_key/src/pubkey_pem.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2008-2010. 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%
%%
@@ -155,7 +155,7 @@ unhex(S) ->
unhex(S, []).
unhex("", Acc) ->
- lists:reverse(Acc);
+ list_to_binary(lists:reverse(Acc));
unhex([D1, D2 | Rest], Acc) ->
unhex(Rest, [erlang:list_to_integer([D1, D2], 16) | Acc]).
diff --git a/lib/public_key/src/public_key.appup.src b/lib/public_key/src/public_key.appup.src
index ee0f9a3cc1..46e5ecca33 100644
--- a/lib/public_key/src/public_key.appup.src
+++ b/lib/public_key/src/public_key.appup.src
@@ -1,18 +1,40 @@
%% -*- erlang -*-
{"%VSN%",
[
+ {"0.5",
+ [
+ {update, public_key, soft, soft_purge, soft_purge, []},
+ {update, pubkey_crypto, soft, soft_purge, soft_purge, []},
+ {update, pubkey_pem, soft, soft_purge, soft_purge, []},
+ {update, pubkey_cert, soft, soft_purge, soft_purge, []}
+ ]
+ },
{"0.4",
[
{update, public_key, soft, soft_purge, soft_purge, []},
- {update, pubkey_cert_records, soft, soft_purge, soft_purge, []}
+ {update, pubkey_cert_records, soft, soft_purge, soft_purge, []},
+ {update, pubkey_crypto, soft, soft_purge, soft_purge, []},
+ {update, pubkey_pem, soft, soft_purge, soft_purge, []},
+ {update, pubkey_cert, soft, soft_purge, soft_purge, []}
]
}
],
[
+ {"0.5",
+ [
+ {update, public_key, soft, soft_purge, soft_purge, []},
+ {update, pubkey_crypto, soft, soft_purge, soft_purge, []},
+ {update, pubkey_pem, soft, soft_purge, soft_purge, []},
+ {update, pubkey_cert, soft, soft_purge, soft_purge, []}
+ ]
+ },
{"0.4",
[
{update, public_key, soft, soft_purge, soft_purge, []},
- {update, pubkey_cert_records, soft, soft_purge, soft_purge, []}
+ {update, pubkey_cert_records, soft, soft_purge, soft_purge, []},
+ {update, pubkey_crypto, soft, soft_purge, soft_purge, []},
+ {update, pubkey_pem, soft, soft_purge, soft_purge, []},
+ {update, pubkey_cert, soft, soft_purge, soft_purge, []}
]
}
]}.
diff --git a/lib/public_key/src/public_key.erl b/lib/public_key/src/public_key.erl
index 52c695523f..157e76bb21 100644
--- a/lib/public_key/src/public_key.erl
+++ b/lib/public_key/src/public_key.erl
@@ -23,13 +23,12 @@
-include("public_key.hrl").
--export([decode_private_key/1, decode_private_key/2,
+-export([decode_private_key/1, decode_private_key/2, decode_dhparams/1,
decrypt_private/2, decrypt_private/3, encrypt_public/2,
encrypt_public/3, decrypt_public/2, decrypt_public/3,
- encrypt_private/2, encrypt_private/3,
- sign/2, sign/3,
+ encrypt_private/2, encrypt_private/3, gen_key/1, sign/2, sign/3,
verify_signature/3, verify_signature/4, verify_signature/5,
- pem_to_der/1, pem_to_der/2,
+ pem_to_der/1, pem_to_der/2, der_to_pem/2,
pkix_decode_cert/2, pkix_encode_cert/1, pkix_transform/2,
pkix_is_self_signed/1, pkix_is_fixed_dh_cert/1,
pkix_issuer_id/2,
@@ -62,6 +61,21 @@ decode_private_key(KeyInfo = {dsa_private_key, _, _}, Password) ->
DerEncoded = pubkey_pem:decode_key(KeyInfo, Password),
'OTP-PUB-KEY':decode('DSAPrivateKey', DerEncoded).
+
+%%--------------------------------------------------------------------
+%% Function: decode_dhparams(DhParamInfo) ->
+%% {ok, DhParams} | {error, Reason}
+%%
+%% DhParamsInfo = {Type, der_bin(), ChipherInfo} - as returned from
+%% pem_to_der/[1,2] for DH parameters.
+%% Type = dh_params
+%% ChipherInfo = opaque() | no_encryption
+%%
+%% Description: Decodes an asn1 der encoded DH parameters.
+%%--------------------------------------------------------------------
+decode_dhparams({dh_params, DerEncoded, not_encrypted}) ->
+ 'OTP-PUB-KEY':decode('DHParameter', DerEncoded).
+
%%--------------------------------------------------------------------
%% Function: decrypt_private(CipherText, Key) ->
%% decrypt_private(CipherText, Key, Options) -> PlainTex
@@ -109,6 +123,18 @@ encrypt_private(PlainText, Key, Options) ->
pubkey_crypto:encrypt_private(PlainText, Key, Padding).
%%--------------------------------------------------------------------
+%% Function: gen_key(Params) -> Keys
+%%
+%% Params = #'DomainParameters'{} - Currently only supported option
+%% Keys = {PublicDHKey = integer(), PrivateDHKey = integer()}
+%%
+%% Description: Generates keys. Currently supports Diffie-Hellman keys.
+%%--------------------------------------------------------------------
+gen_key(#'DHParameter'{prime = P, base = G}) when is_integer(P),
+ is_integer(G) ->
+ pubkey_crypto:gen_key(diffie_hellman, [P, G]).
+
+%%--------------------------------------------------------------------
%% Function: pem_to_der(CertSource) ->
%% pem_to_der(CertSource, Password) -> {ok, [Entry]} |
%% {error, Reason}
@@ -116,7 +142,6 @@ encrypt_private(PlainText, Key, Options) ->
%% CertSource = File | CertData
%% CertData = binary()
%% File = path()
-%% Password = string()
%% Entry = {entry_type(), der_bin(), ChipherInfo}
%% ChipherInfo = opague() | no_encryption
%% der_bin() = binary()
@@ -127,7 +152,9 @@ encrypt_private(PlainText, Key, Options) ->
%% entries as asn1 der encoded entities. Currently supported entry
%% types are certificates, certificate requests, rsa private keys and
%% dsa private keys. In the case of a key entry ChipherInfo will be
-%% used by decode_private_key/2 if the key is protected by a password.
+%% private keys and Diffie Hellam parameters .In the case of a key
+%% entry ChipherInfo will be used by decode_private_key/2 if the key
+%% is protected by a password.
%%--------------------------------------------------------------------
pem_to_der(CertSource) ->
pem_to_der(CertSource, no_passwd).
@@ -137,6 +164,9 @@ pem_to_der(File, Password) when is_list(File) ->
pem_to_der(PemBin, Password) when is_binary(PemBin) ->
pubkey_pem:decode(PemBin, Password).
+der_to_pem(File, TypeDerList) ->
+ pubkey_pem:write_file(File, TypeDerList).
+
%%--------------------------------------------------------------------
%% Function: pkix_decode_cert(BerCert, Type) -> {ok, Cert} | {error, Reason}
%%
@@ -288,9 +318,10 @@ sign(Msg, #'RSAPrivateKey'{} = Key) when is_binary(Msg) ->
sign(Msg, #'DSAPrivateKey'{} = Key) when is_binary(Msg) ->
pubkey_crypto:sign(Msg, Key);
-sign(#'OTPTBSCertificate'{signature = SigAlg} = TBSCert, Key) ->
+sign(#'OTPTBSCertificate'{signature = #'SignatureAlgorithm'{algorithm = Alg}
+ = SigAlg} = TBSCert, Key) ->
Msg = pubkey_cert_records:encode_tbs_cert(TBSCert),
- DigestType = pubkey_cert:digest_type(SigAlg),
+ DigestType = pubkey_cert:digest_type(Alg),
Signature = pubkey_crypto:sign(DigestType, Msg, Key),
Cert = #'OTPCertificate'{tbsCertificate= TBSCert,
signatureAlgorithm = SigAlg,
diff --git a/lib/public_key/vsn.mk b/lib/public_key/vsn.mk
index f4d5281e94..da1465d538 100644
--- a/lib/public_key/vsn.mk
+++ b/lib/public_key/vsn.mk
@@ -1,6 +1,7 @@
-PUBLIC_KEY_VSN = 0.5
-
-TICKETS = OTP-8372
+PUBLIC_KEY_VSN = 0.6
+TICKETS = OTP-7046 \
+ OTP-8553
+#TICKETS_o.5 = OTP-8372
#TICKETS_0.4 = OTP-8250
#TICKETS_0.3 = OTP-8100 OTP-8142
#TICKETS_0.2 = OTP-7860
diff --git a/lib/reltool/bin/reltool.escript b/lib/reltool/bin/reltool.escript
new file mode 100644
index 0000000000..0dcd5ad1e9
--- /dev/null
+++ b/lib/reltool/bin/reltool.escript
@@ -0,0 +1,249 @@
+#!/usr/bin/env escript
+%% -*- erlang -*-
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2010. 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_lib("reltool/src/reltool.hrl").
+
+main(Args) ->
+ process_flag(trap_exit, true),
+ try
+ Tokens = scan_args(Args, [], []),
+ {Options, Actions} = parse_args(Tokens, []),
+ case invoke(Options, Actions) of
+ ok ->
+ safe_stop(0);
+ {error, ReasonString} ->
+ fatal_error(ReasonString, 2)
+ end
+ catch
+ throw:usage ->
+ usage(),
+ safe_stop(1);
+ exit:Reason ->
+ String = lists:flatten(io_lib:format("EXIT: ~p", [Reason])),
+ fatal_error(String, 3)
+ end.
+
+usage() ->
+ Usage =
+ [
+ "[Config] [--window]",
+ "[Config] --create_config [-defaults] [-derived] [ConfigFile]",
+ "[Config] --create_rel RelName [RelFile]",
+ "[Config] --create_script RelName [ScriptFile]",
+ "[Config] --create_target TargetDir",
+ "[Config] --create_target_spec [SpecFile]",
+ "[Config] --eval_target_spec Spec TargetDir RootDir"
+ ],
+ Script = script_name(),
+ String = lists:flatten([[Script, " ", U, "\n"] || U <- Usage]),
+ io:format("Erlang/OTP release management tool\n\n"
+ "~s\nConfig = ConfigFile | '{sys, [sys()]}'\n"
+ "Spec = SpecFile | '{spec, [target_spec()}']\n\n"
+ "See User's guide and Reference manual for more info.\n",
+ [String]).
+
+safe_stop(Code) ->
+ init:stop(Code),
+ timer:sleep(infinity).
+
+invoke(Options, Actions) ->
+ case Actions of
+ [] ->
+ invoke(Options, [["--window"]]);
+ [["--window"]] ->
+ start_window(Options);
+ [["--create_config" | OptArgs]] ->
+ DefArg = "-defaults",
+ DerivArg = "-derived",
+ InclDef = lists:member(DefArg, OptArgs),
+ InclDeriv = lists:member(DerivArg, OptArgs),
+ case reltool:get_config(Options, InclDef, InclDeriv) of
+ {ok, Config} ->
+ String = pretty("config", Config),
+ case OptArgs -- [DefArg, DerivArg] of
+ [] ->
+ format("~s", [String]);
+ [ConfigFile] ->
+ write_file(ConfigFile, String);
+ _ ->
+ throw(usage)
+ end;
+ {error, Reason} ->
+ {error, Reason}
+ end;
+ [["--create_rel", RelName | OptArgs]] ->
+ case reltool:get_rel(Options, RelName) of
+ {ok, Rel} ->
+ String = pretty("rel", Rel),
+ case OptArgs of
+ [] ->
+ format("~s", [String]);
+ [RelFile] ->
+ write_file(RelFile, String);
+ _ ->
+ throw(usage)
+ end;
+ {error, Reason} ->
+ {error, Reason}
+ end;
+ [["--create_script", RelName | OptArgs]] ->
+ case reltool:get_script(Options, RelName) of
+ {ok, Script} ->
+ String = pretty("script", Script),
+ case OptArgs of
+ [] ->
+ format("~s", [String]);
+ [ScriptFile] ->
+ write_file(ScriptFile, String);
+ _ ->
+ throw(usage)
+ end;
+ {error, Reason} ->
+ {error, Reason}
+ end;
+ [["--create_target", TargetDir]] ->
+ reltool:create_target(Options, TargetDir);
+ [["--create_target_spec" | OptArgs]] ->
+ case reltool:get_target_spec(Options) of
+ {ok, Script} ->
+ String = pretty("target_spec", Script),
+ case OptArgs of
+ [] ->
+ format("~s", [String]);
+ [SpecFile] ->
+ write_file(SpecFile, String);
+ _ ->
+ throw(usage)
+ end;
+ {error, Reason} ->
+ {error, Reason}
+ end;
+ [["--eval_target_spec", TargetSpec, TargetDir, RootDir]] ->
+ try
+ {ok, Tokens, _} = erl_scan:string(TargetSpec ++ ". "),
+ {ok, {spec, Spec}} = erl_parse:parse_term(Tokens),
+ reltool:eval_target_spec(Spec, TargetDir, RootDir)
+ catch
+ error:{badmatch, _} ->
+ case file:consult(TargetSpec) of
+ {ok, Spec2} ->
+ reltool:eval_target_spec(Spec2, TargetDir, RootDir);
+ {error, Reason} ->
+ Text = file:format_error(Reason),
+ {error, TargetSpec ++ ": " ++ Text}
+ end
+ end;
+ _ ->
+ throw(usage)
+ end.
+
+start_window(Options) ->
+ case reltool:start_link(Options) of
+ {ok, WinPid} ->
+ receive
+ {'EXIT', WinPid, shutdown} ->
+ ok;
+ {'EXIT', WinPid, normal} ->
+ ok;
+ {'EXIT', WinPid, Reason} ->
+ exit(Reason)
+ end;
+ {error, Reason} ->
+ {error, Reason}
+ end.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Helpers
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+script_name() ->
+ filename:basename(escript:script_name(), ".escript").
+
+fatal_error(String, Code) ->
+ io:format(standard_error, "~s: ~s\n", [script_name(), String]),
+ safe_stop(Code).
+
+write_file(File, IoList) ->
+ case file:write_file(File, IoList) of
+ ok ->
+ ok;
+ {error, Reason} ->
+ {error, file:format_error(Reason)}
+ end.
+
+format(Format, Args) ->
+ io:format(Format, Args),
+ %% Wait a while for the I/O to be processed
+ timer:sleep(timer:seconds(1)).
+
+pretty(Tag, Term) ->
+ lists:flatten(io_lib:format("%% ~s generated at ~w ~w\n~p.\n\n",
+ [Tag, date(), time(), Term])).
+
+scan_args([H | T], Single, Multi) ->
+ case H of
+ "--" ++ _ when Single =:= [] ->
+ scan_args(T, [H], Multi);
+ "--" ++ _ ->
+ scan_args(T, [H], [lists:reverse(Single) | Multi]);
+ _ ->
+ scan_args(T, [H | Single], Multi)
+ end;
+scan_args([], [], Multi) ->
+ lists:reverse(Multi);
+scan_args([], Single, Multi) ->
+ lists:reverse([lists:reverse(Single) | Multi]).
+
+parse_args([H | T] = Args, Options) ->
+ case H of
+ ["--wx_debug" | Levels] ->
+ Dbg =
+ fun(L) ->
+ case catch list_to_integer(L) of
+ {'EXIT', _} ->
+ case catch list_to_atom(L) of
+ {'EXIT', _} ->
+ exit("Illegal wx debug level: " ++ L);
+ Atom ->
+ Atom
+ end;
+ Int ->
+ Int
+ end
+ end,
+ Levels2 = lists:map(Dbg, Levels),
+ parse_args(T, [{wx_debug, Levels2} | Options]);
+ ["--" ++ _ | _] ->
+ %% No more options
+ {lists:reverse(Options), Args};
+ [Config] ->
+ try
+ {ok, Tokens, _} = erl_scan:string(Config ++ ". "),
+ {ok, {sys, _} = Sys} = erl_parse:parse_term(Tokens),
+ parse_args(T, [{config, Sys} | Options])
+ catch
+ error:{badmatch, _} ->
+ parse_args(T, [{config, Config} | Options]);
+ X:Y ->
+ io:format("\n\n~p\n\n", [{X, Y}])
+ end
+ end;
+parse_args([], Options) ->
+ {lists:reverse(Options), []}.
diff --git a/lib/reltool/doc/src/reltool.xml b/lib/reltool/doc/src/reltool.xml
index 9786928ae8..0c2b7d2a2b 100644
--- a/lib/reltool/doc/src/reltool.xml
+++ b/lib/reltool/doc/src/reltool.xml
@@ -67,14 +67,14 @@
<taglist>
- <tag><c><![CDATA[config]]></c></tag>
+ <tag><c>config</c></tag>
<item>
<p>This is the main option and it controls the configuration
of <c>reltool</c>. It can either be a <c>sys</c> tuple or
a name of a <c>file</c> containing a sys tuple.</p>
</item>
- <tag><c><![CDATA[trap_exit]]></c></tag>
+ <tag><c>trap_exit></c></tag>
<item>
<p>This option controls the error handling behavior of
<c>reltool</c>. By default the window processes traps
@@ -82,7 +82,7 @@
<c>trap_exit</c> to <c>false</c>.</p>
</item>
- <tag><c><![CDATA[wx_debug]]></c></tag>
+ <tag><c>wx_debug</c></tag>
<item>
<p>This option controls the debug level of <c>wx</c>. As its
name indicates it is only useful for debugging. See
@@ -97,27 +97,27 @@
<taglist>
- <tag><c><![CDATA[erts]]></c></tag>
+ <tag><c>erts</c></tag>
<item>
<p>Erts specific configuration. See application level options
below.</p>
</item>
- <tag><c><![CDATA[escript]]></c></tag>
+ <tag><c>escript</c></tag>
<item>
<p>Escript specific configuration. An escript has a mandatory
file name and escript level options that are described
below.</p>
</item>
- <tag><c><![CDATA[app]]></c></tag>
+ <tag><c>app</c></tag>
<item>
<p>Application specific configuration. An application has a
mandatory name and application level options that are
described below.</p>
</item>
- <tag><c><![CDATA[mod_cond]]></c></tag>
+ <tag><c>mod_cond</c></tag>
<item>
<p>This parameter controls the module inclusion policy. It
defaults to <c>all</c> which means that if an application is
@@ -134,28 +134,28 @@
system level is used as default for all applications.</p>
</item>
- <tag><c><![CDATA[incl_cond]]></c></tag>
+ <tag><c>incl_cond</c></tag>
<item>
- <p>This parameter controls the application and escript
- inclusion policy. It defaults to <c>derived</c> which means
- that the applications that not have any explicit
- <c>incl_cond</c> setting, will only be included if any other
- (explicitly or implicitly included) application uses it. The
- value <c>include</c> implies that all applications and
- escripts that that not have any explicit <c>incl_cond</c>
- setting will be included. <c>exclude</c> implies that all
- applications and escripts) that that not have any explicit
- <c>incl_cond</c> setting will be excluded.</p>
+ <p>This parameter controls the application and escript
+ inclusion policy. It defaults to <c>derived</c> which means
+ that the applications that not have any explicit
+ <c>incl_cond</c> setting, will only be included if any other
+ (explicitly or implicitly included) application uses it. The
+ value <c>include</c> implies that all applications and
+ escripts that that not have any explicit <c>incl_cond</c>
+ setting will be included. <c>exclude</c> implies that all
+ applications and escripts) that that not have any explicit
+ <c>incl_cond</c> setting will be excluded.</p>
</item>
- <tag><c><![CDATA[boot_rel]]></c></tag>
+ <tag><c>boot_rel</c></tag>
<item>
<p>A target system may have several releases but the one given
as <c>boot_rel</c> will be used as default when the system is
booting up.</p>
</item>
- <tag><c><![CDATA[rel]]></c></tag>
+ <tag><c>rel</c></tag>
<item>
<p>Release specific configuration. Each release maps to a
<c>rel</c>, <c>script</c> and <c>boot </c> file. See the
@@ -165,38 +165,38 @@
applications.</p>
</item>
- <tag><c><![CDATA[relocatable]]></c></tag>
+ <tag><c>relocatable</c></tag>
<item>
- <p>This parameter controls whether the <c>erl</c> executable
- in the target system automatically should determine where it
- is installed or if it should use a hardcoded path to the
- installation. In the latter case the target system must be
- installed with <c>reltool:install/2</c> before it can be
- used. If the system is relocatable, the file tree containing
- the target system can be moved to another location without
- re-installation. The default is <c>true</c>.</p>
+ <p>This parameter controls whether the <c>erl</c> executable
+ in the target system automatically should determine where it
+ is installed or if it should use a hardcoded path to the
+ installation. In the latter case the target system must be
+ installed with <c>reltool:install/2</c> before it can be
+ used. If the system is relocatable, the file tree containing
+ the target system can be moved to another location without
+ re-installation. The default is <c>true</c>.</p>
</item>
- <tag><c><![CDATA[profile]]></c></tag>
+ <tag><c>profile</c></tag>
<item>
- <p>The creation of the specification for a target system is
- performed in two steps. In the first step a complete
- specification is generated. It will likely contain much more
- files than you are interested in your customized target
- system. In the second step the specification will be filtered
- according to your filters. There you have the ability to
- specify filters per application as well as system wide
- filters. You can also select a <c>profile</c> for your
- system. Depending on the <c>profile</c>, different default
- filters will be used. There are three different profiles to
- choose from: <c>development</c>, <c>embedded</c> and
- <c>standalone</c>. <c>development</c> is default. The
- parameters that are affected by the <c>profile</c> are:
- <c>incl_sys_filters</c>, <c>excl_sys_filters</c>,
- <c>incl_app_filters</c> and <c>excl_app_filters</c>.</p>
+ <p>The creation of the specification for a target system is
+ performed in two steps. In the first step a complete
+ specification is generated. It will likely contain much more
+ files than you are interested in your customized target
+ system. In the second step the specification will be filtered
+ according to your filters. There you have the ability to
+ specify filters per application as well as system wide
+ filters. You can also select a <c>profile</c> for your
+ system. Depending on the <c>profile</c>, different default
+ filters will be used. There are three different profiles to
+ choose from: <c>development</c>, <c>embedded</c> and
+ <c>standalone</c>. <c>development</c> is default. The
+ parameters that are affected by the <c>profile</c> are:
+ <c>incl_sys_filters</c>, <c>excl_sys_filters</c>,
+ <c>incl_app_filters</c> and <c>excl_app_filters</c>.</p>
</item>
- <tag><c><![CDATA[app_file]]></c></tag>
+ <tag><c>app_file</c></tag>
<item>
<p>This parameter controls the default handling of the
<c>app</c> files when a target system is generated. It
@@ -213,7 +213,7 @@
and <c>strip</c>.</p>
</item>
- <tag><c><![CDATA[debug_info]]></c></tag>
+ <tag><c>debug_info</c></tag>
<item>
<p>The <c>debug_info</c> parameter controls whether the debug
information in the beam file should be kept (<c>keep</c>) or
@@ -221,7 +221,7 @@
system.</p>
</item>
- <tag><c><![CDATA[incl_sys_filters]]></c></tag>
+ <tag><c>incl_sys_filters</c></tag>
<item>
<p>This parameter normally contains a list of regular
expressions that controls which files in the system that
@@ -235,7 +235,7 @@
<c>[".*"]</c>.</p>
</item>
- <tag><c><![CDATA[excl_sys_filters]]></c></tag>
+ <tag><c>excl_sys_filters</c></tag>
<item>
<p>This parameter normally contains a list of regular
expressions that controls which files in the system that not
@@ -245,7 +245,7 @@
<c>excl_sys_filters</c>. This parameter defaults to
<c>[]</c>.</p>
</item>
- <tag><c><![CDATA[incl_app_filters]]></c></tag>
+ <tag><c>incl_app_filters</c></tag>
<item>
<p>This parameter normally contains a list of regular
expressions that controls which application specific files
@@ -256,7 +256,7 @@
parameter defaults to <c>[".*"]</c>.</p>
</item>
- <tag><c><![CDATA[excl_app_filters]]></c></tag>
+ <tag><c>excl_app_filters</c></tag>
<item>
<p>This parameter normally contains a list of regular
expressions that controls which application specific files
@@ -267,7 +267,7 @@
<c>[]</c>.</p>
</item>
- <tag><c><![CDATA[incl_archive_filters]]></c></tag>
+ <tag><c>incl_archive_filters</c></tag>
<item>
<p>This parameter normally contains a list of regular
expressions that controls which top level directories in an
@@ -280,7 +280,7 @@
parameter defaults to <c>[".*"]</c>.</p>
</item>
- <tag><c><![CDATA[excl_archive_filters]]></c></tag>
+ <tag><c>excl_archive_filters</c></tag>
<item>
<p>This parameter normally contains a list of regular
expressions that controls which top level directories in an
@@ -291,7 +291,7 @@
parameter defaults to <c>["^include$","^priv$"]</c>.</p>
</item>
- <tag><c><![CDATA[archive_opts]]></c></tag>
+ <tag><c>archive_opts</c></tag>
<item>
<p>This parameter contains a list of options that are given to
<c>zip:create/3</c> when application specific files are
@@ -307,7 +307,7 @@
supported:</p>
<taglist>
- <tag><c><![CDATA[incl_cond]]></c></tag>
+ <tag><c>incl_cond</c></tag>
<item>
<p>The value of this parameter overrides the parameter with the
same name on system level.</p>
@@ -318,62 +318,62 @@
supported:</p>
<taglist>
- <tag><c><![CDATA[vsn]]></c></tag>
+ <tag><c>vsn</c></tag>
<item>
<p>The version of the application. In an installed system there may
exist several versions of an application. The <c>vsn</c> parameter
controls which version of the application that will be choosen. If it
is omitted, the latest version will be choosen.</p>
</item>
- <tag><c><![CDATA[mod]]></c></tag>
+ <tag><c>mod</c></tag>
<item>
<p>Module specific configuration. A module has a mandatory
name and module level options that are described below.</p>
</item>
- <tag><c><![CDATA[mod_cond]]></c></tag>
+ <tag><c>mod_cond</c></tag>
<item>
<p>The value of this parameter overrides the parameter with the
same name on system level.</p>
</item>
- <tag><c><![CDATA[incl_cond]]></c></tag>
+ <tag><c>incl_cond</c></tag>
<item>
<p>The value of this parameter overrides the parameter with the
same name on system level.</p>
</item>
- <tag><c><![CDATA[app_file]]></c></tag>
+ <tag><c>app_file</c></tag>
<item>
<p>The value of this parameter overrides the parameter with the
same name on system level.</p>
</item>
- <tag><c><![CDATA[debug_info]]></c></tag>
+ <tag><c>debug_info</c></tag>
<item>
<p>The value of this parameter overrides the parameter with the
same name on system level.</p>
</item>
- <tag><c><![CDATA[incl_app_filters]]></c></tag>
+ <tag><c>incl_app_filters</c></tag>
<item>
<p>The value of this parameter overrides the parameter with the
same name on system level.</p>
</item>
- <tag><c><![CDATA[excl_app_filters]]></c></tag>
+ <tag><c>excl_app_filters</c></tag>
<item>
<p>The value of this parameter overrides the parameter with the
same name on system level.</p>
</item>
- <tag><c><![CDATA[incl_archive_filters]]></c></tag>
+ <tag><c>incl_archive_filters</c></tag>
<item>
<p>The value of this parameter overrides the parameter with the
same name on system level.</p>
</item>
- <tag><c><![CDATA[excl_archive_filters]]></c></tag>
+ <tag><c>excl_archive_filters</c></tag>
<item>
<p>The value of this parameter overrides the parameter with the
same name on system level.</p>
</item>
- <tag><c><![CDATA[archive_opts]]></c></tag>
+ <tag><c>archive_opts</c></tag>
<item>
<p>The value of this parameter overrides the parameter with the
same name on system level.</p>
@@ -384,18 +384,18 @@
supported:</p>
<taglist>
- <tag><c><![CDATA[incl_cond]]></c></tag>
+ <tag><c>incl_cond</c></tag>
<item>
- <p>This parameter controls whether the module is included or not. By
- default the <c>mod_incl</c> parameter on application and system level
- will be used to control whether the module is included or not. The
- value of <c>incl_cond</c> overrides the module inclusion policy.
- <c>include</c> implies that the module is included, while
- <c>exclude</c> implies that the module not is included.
- <c>derived</c> implies that the is included if any included uses the
- module.</p>
+ <p>This parameter controls whether the module is included or not. By
+ default the <c>mod_incl</c> parameter on application and system level
+ will be used to control whether the module is included or not. The
+ value of <c>incl_cond</c> overrides the module inclusion policy.
+ <c>include</c> implies that the module is included, while
+ <c>exclude</c> implies that the module not is included.
+ <c>derived</c> implies that the is included if any included uses the
+ module.</p>
</item>
- <tag><c><![CDATA[debug_info]]></c></tag>
+ <tag><c>debug_info</c></tag>
<item>
<p>The value of this parameter overrides the parameter with
the same name on application level.</p>
@@ -477,7 +477,9 @@ mod_name() = atom()
profile() = development | embedded | standalone
re_regexp() = string()
reason() = string()
-regexps() = [re_regexp()] | {add, [re_regexp()]} | {del, [re_regexp()]}
+regexps() = [re_regexp()]
+ | {add, [re_regexp()]}
+ | {del, [re_regexp()]}
rel_file() = term()
rel_name() = string()
rel_vsn() = string()
@@ -487,7 +489,19 @@ script_file() = term()
server() = server_pid() | options()
server_pid() = pid()
target_dir() = file()
-window_pid() = pid()]]></code>
+window_pid() = pid()
+base_dir() = dir()
+base_file() = file()
+top_dir() = file()
+top_file() = file()
+target_spec() = [target_spec()]
+ | {create_dir, base_dir(), [target_spec()]}
+ | {create_dir, base_dir(), top_dir(), [target_spec()]}
+ | {archive, base_file(), [archive_opt()], [target_spec()]}
+ | {copy_file, base_file()}
+ | {copy_file, base_file(), top_file()}
+ | {write_file, base_file(), iolist()}
+ | {strip_beam_file, base_file()}]]></code>
<marker id="start"></marker>
</section>
@@ -497,9 +511,9 @@ window_pid() = pid()]]></code>
<name>create_target(Server, TargetDir) -> ok | {error, Reason}</name>
<fsummary>Create a target system</fsummary>
<type>
- <v>Server = server()</v>
+ <v>Server = server()</v>
<v>TargetDir = target_dir()</v>
- <v>Reason = reason()</v>
+ <v>Reason = reason()</v>
</type>
<desc><p>Create a target system. Gives the same result as
<c>{ok,TargetSpec}=reltool:get_target_spec(Server)</c> and
@@ -604,6 +618,17 @@ window_pid() = pid()]]></code>
</func>
<func>
+ <name>get_status(Server) -> {ok, [Warning]} | {error, Reason}</name>
+ <fsummary>Get contents of a release file</fsummary>
+ <type>
+ <v>Server = server()</v>
+ <v>Warning = string()</v>
+ <v>Reason = reason()</v>
+ </type>
+ <desc><p>Get status about the configuration</p></desc>
+ </func>
+
+ <func>
<name>get_server(WindowPid) -> {ok, ServerPid} | {error, Reason}</name>
<fsummary>Start server process with options</fsummary>
<type>
diff --git a/lib/reltool/doc/src/reltool_examples.xml b/lib/reltool/doc/src/reltool_examples.xml
index d6db246f6c..bce9413b52 100644
--- a/lib/reltool/doc/src/reltool_examples.xml
+++ b/lib/reltool/doc/src/reltool_examples.xml
@@ -249,11 +249,11 @@ Eshell V5.7.3 (abort with ^G)
<pre>
5&gt; {ok, Server} = reltool:start_server([{config, {sys, [{boot_rel, "NAME"},
{rel, "NAME", "VSN",
- [kernel, stdlib, sasl]}]}}]).
+ [sasl]}]}}]).
{ok,&lt;0.1288.0&gt;}
6&gt; reltool:get_config(Server).
{ok,{sys,[{boot_rel,"NAME"},
- {rel,"NAME","VSN",[kernel,stdlib,sasl]}]}}
+ {rel,"NAME","VSN",[sasl]}]}}
7&gt; reltool:get_rel(Server, "NAME").
{ok,{release,{"NAME","VSN"},
{erts,"5.7"},
diff --git a/lib/reltool/src/Makefile b/lib/reltool/src/Makefile
index 7fac7cbf88..4e6a112b7e 100644
--- a/lib/reltool/src/Makefile
+++ b/lib/reltool/src/Makefile
@@ -28,7 +28,6 @@ include ../vsn.mk
VSN = $(RELTOOL_VSN)
APP_VSN = "reltool-$(VSN)"
-
# ----------------------------------------------------
# Release directory specification
# ----------------------------------------------------
@@ -39,25 +38,20 @@ RELSYSDIR = $(RELEASE_PATH)/lib/reltool-$(VSN)
# Target Specs
# ----------------------------------------------------
-MODULES = \
- reltool \
- reltool_app_win \
- reltool_fgraph \
- reltool_fgraph_win \
- reltool_mod_win \
- reltool_sys_win \
- reltool_server \
- reltool_target \
- reltool_utils
-
-HRL_FILES =
-
-INTERNAL_HRL_FILES = reltool.hrl reltool_fgraph.hrl
+include files.mk
ERL_FILES = $(MODULES:%=%.erl)
TARGET_FILES= $(MODULES:%=$(EBIN)/%.$(EMULATOR))
+APP_FILE = reltool.app
+APP_SRC = $(APP_FILE).src
+APP_TARGET = $(EBIN)/$(APP_FILE)
+
+APPUP_FILE = reltool.appup
+APPUP_SRC = $(APPUP_FILE).src
+APPUP_TARGET = $(EBIN)/$(APPUP_FILE)
+
# ----------------------------------------------------
# FLAGS
# ----------------------------------------------------
@@ -69,15 +63,28 @@ ERL_COMPILE_FLAGS += +'{parse_transform,sys_pre_attributes}' \
# Targets
# ----------------------------------------------------
-debug opt: $(TARGET_FILES) $(HRL_FILES)
+debug:
+ @${MAKE} TYPE=debug opt
+
+opt: $(TARGET_FILES) $(APP_TARGET) $(APPUP_TARGET)
clean:
- rm -f $(TARGET_FILES)
+ rm -f $(TARGET_FILES) $(APP_TARGET) $(APPUP_TARGET)
rm -f core
docs:
# ----------------------------------------------------
+# Special Build Targets
+# ----------------------------------------------------
+
+$(APP_TARGET): $(APP_SRC) ../vsn.mk
+ sed -e 's;%VSN%;$(VSN);' $< > $@
+
+$(APPUP_TARGET): $(APPUP_SRC) ../vsn.mk
+ sed -e 's;%VSN%;$(VSN);' $< > $@
+
+# ----------------------------------------------------
# Dependencies
# ----------------------------------------------------
@@ -94,6 +101,7 @@ release_spec: opt
$(INSTALL_DATA) $(INTERNAL_HRL_FILES) $(ERL_FILES) $(RELSYSDIR)/src
$(INSTALL_DIR) $(RELSYSDIR)/ebin
$(INSTALL_DATA) $(TARGET_FILES) $(RELSYSDIR)/ebin
+ $(INSTALL_DATA) $(APP_TARGET) $(APPUP_TARGET) $(RELSYSDIR)/ebin
release_docs_spec:
diff --git a/lib/reltool/src/files.mk b/lib/reltool/src/files.mk
new file mode 100644
index 0000000000..99a1f1c14a
--- /dev/null
+++ b/lib/reltool/src/files.mk
@@ -0,0 +1,32 @@
+#-*-makefile-*- ; force emacs to enter makefile-mode
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 2010. 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%
+
+MODULES = \
+ reltool \
+ reltool_app_win \
+ reltool_fgraph \
+ reltool_fgraph_win \
+ reltool_mod_win \
+ reltool_sys_win \
+ reltool_server \
+ reltool_target \
+ reltool_utils
+
+HRL_FILES =
+
+INTERNAL_HRL_FILES = reltool.hrl reltool_fgraph.hrl
diff --git a/lib/reltool/src/reltool.app.src b/lib/reltool/src/reltool.app.src
index f83042c157..b80753e8fc 100644
--- a/lib/reltool/src/reltool.app.src
+++ b/lib/reltool/src/reltool.app.src
@@ -1,37 +1,38 @@
%% This is an -*- erlang -*- file.
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2009-2010. 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%
%%
+%% %CopyrightEnd%
{application, reltool,
- [{description, "Release management tool"},
- {vsn, "%VSN%"},
- {modules, [
- reltool,
- reltool_app,
- reltool_fgraph,
- reltool_fgraph_win,
- reltool_gen,
- reltool_mod,
- reltool_sys,
- reltool_server,
- reltool_utils
- ]},
- {applications, [kernel, stdlib]}
- ]
-}.
+ [{description, "Reltool the release management tool"},
+ {vsn, "%VSN%"},
+ {modules,
+ [
+ reltool_app_win,
+ reltool,
+ reltool_fgraph,
+ reltool_fgraph_win,
+ reltool_mod_win,
+ reltool_server,
+ reltool_sys_win,
+ reltool_target,
+ reltool_utils
+ ]},
+ {registered, []},
+ {applications, [stdlib, kernel]},
+ {env, []}
+ ]}.
diff --git a/lib/reltool/src/reltool.appup.src b/lib/reltool/src/reltool.appup.src
new file mode 100644
index 0000000000..c02edd2afb
--- /dev/null
+++ b/lib/reltool/src/reltool.appup.src
@@ -0,0 +1,22 @@
+%% This is an -*- erlang -*- file.
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2010. 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%
+
+{"%VSN%",
+ [ ]
+}.
diff --git a/lib/reltool/src/reltool.erl b/lib/reltool/src/reltool.erl
index e6a8bca069..9dd0a24f46 100644
--- a/lib/reltool/src/reltool.erl
+++ b/lib/reltool/src/reltool.erl
@@ -20,9 +20,8 @@
%% Public
-export([
- main/1, % Escript
start/0, start/1, start_link/1, debug/0, % GUI
- start_server/1, get_server/1, stop/1,
+ start_server/1, get_server/1, get_status/1, stop/1,
get_config/1, get_config/3, get_rel/2, get_script/2,
create_target/2, get_target_spec/1, eval_target_spec/3,
install/2
@@ -32,39 +31,26 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Main function for escript
--spec main([escript_arg()]) -> ok.
-main(_) ->
- process_flag(trap_exit, true),
- {ok, WinPid} = start_link([]),
- receive
- {'EXIT', WinPid, shutdown} ->
- ok;
- {'EXIT', WinPid, normal} ->
- ok;
- {'EXIT', WinPid, Reason} ->
- io:format("EXIT: ~p\n", [Reason]),
- erlang:halt(1)
- end.
-
%% Start main window process
--spec start() -> {ok, window_pid()}.
+-spec start() -> {ok, window_pid()} | {error, reason()}.
start() ->
start([]).
%% Start main window process
--spec start(options()) -> {ok, window_pid() | {error, reason()}}.
+-spec start(options()) -> {ok, window_pid()} | {error, reason()}.
start(Options)when is_list(Options) ->
- {ok, WinPid} = start_link(Options),
- unlink(WinPid),
- {ok, WinPid}.
+ case start_link(Options) of
+ {ok, WinPid} ->
+ unlink(WinPid),
+ {ok, WinPid};
+ Other->
+ Other
+ end.
%% Start main window process with wx debugging enabled
--spec debug() -> {ok, window_pid()}.
+-spec debug() -> {ok, window_pid()} | {error, reason()}.
debug() ->
- {ok, WinPid} = start_link([{wx_debug, 2}]),
- unlink(WinPid),
- {ok, WinPid}.
+ start([{wx_debug, 2}]).
%% Start main window process with options
-spec start_link(options()) -> {ok, window_pid() | {error, reason()}}.
@@ -110,20 +96,48 @@ stop(Pid) when is_pid(Pid) ->
end.
%% Internal library function
--spec eval_server(server(), fun((server_pid()) -> term())) ->
+-spec eval_server(server(), boolean(), fun((server_pid()) -> term())) ->
{ok, server_pid()} | {error, reason()}.
-eval_server(Pid, Fun) when is_pid(Pid) ->
+eval_server(Pid, DisplayWarnings, Fun)
+ when is_pid(Pid) ->
Fun(Pid);
-eval_server(Options, Fun) when is_list(Options), is_function(Fun, 1) ->
- case start_server(Options) of
- {ok, Pid} ->
- Res = Fun(Pid),
- stop(Pid),
- Res;
- {error, Reason} ->
- {error, Reason}
+eval_server(Options, DisplayWarnings, Fun)
+ when is_list(Options) ->
+ TrapExit = process_flag(trap_exit, true),
+ Res = case start_server(Options) of
+ {ok, Pid} ->
+ apply_fun(Pid, DisplayWarnings, Fun);
+ {error, Reason} ->
+ {error, Reason}
+ end,
+ process_flag(trap_exit, TrapExit),
+ Res.
+
+apply_fun(Pid, false, Fun) ->
+ Res = Fun(Pid),
+ stop(Pid),
+ Res;
+apply_fun(Pid, true, Fun) ->
+ case get_status(Pid) of
+ {ok, Warnings} ->
+ [io:format("~p: ~s\n", [?APPLICATION, W]) || W <- Warnings],
+ apply_fun(Pid, false, Fun);
+ {error, Reason} ->
+ stop(Pid),
+ {error, Reason}
end.
+%% Get status about the configuration
+-type warning() :: string().
+-spec get_status(server()) ->
+ {ok, [warning()]} | {error, reason()}.
+get_status(PidOrOptions)
+ when is_pid(PidOrOptions); is_list(PidOrOptions) ->
+ eval_server(PidOrOptions, false,
+ fun(Pid) ->
+ reltool_server:get_status(Pid)
+ end).
+
%% Get reltool configuration
-spec get_config(server()) -> {ok, config()} | {error, reason()}.
get_config(PidOrOption) ->
@@ -133,7 +147,7 @@ get_config(PidOrOption) ->
{ok, config()} | {error, reason()}.
get_config(PidOrOptions, InclDef, InclDeriv)
when is_pid(PidOrOptions); is_list(PidOrOptions) ->
- eval_server(PidOrOptions,
+ eval_server(PidOrOptions, true,
fun(Pid) ->
reltool_server:get_config(Pid, InclDef, InclDeriv)
end).
@@ -142,7 +156,7 @@ get_config(PidOrOptions, InclDef, InclDeriv)
-spec get_rel(server(), rel_name()) -> {ok, rel_file()} | {error, reason()}.
get_rel(PidOrOptions, RelName)
when is_pid(PidOrOptions); is_list(PidOrOptions) ->
- eval_server(PidOrOptions,
+ eval_server(PidOrOptions, true,
fun(Pid) -> reltool_server:get_rel(Pid, RelName) end).
%% Get contents of boot script file
@@ -150,21 +164,22 @@ get_rel(PidOrOptions, RelName)
{ok, script_file()} | {error, reason()}.
get_script(PidOrOptions, RelName)
when is_pid(PidOrOptions); is_list(PidOrOptions) ->
- eval_server(PidOrOptions,
+ eval_server(PidOrOptions, true,
fun(Pid) -> reltool_server:get_script(Pid, RelName) end).
%% Generate a target system
-spec create_target(server(), target_dir()) -> ok | {error, reason()}.
create_target(PidOrOptions, TargetDir)
when is_pid(PidOrOptions); is_list(PidOrOptions) ->
- eval_server(PidOrOptions,
+ eval_server(PidOrOptions, true,
fun(Pid) -> reltool_server:gen_target(Pid, TargetDir) end).
%% Generate a target system
-spec get_target_spec(server()) -> {ok, target_spec()} | {error, reason()}.
get_target_spec(PidOrOptions)
when is_pid(PidOrOptions); is_list(PidOrOptions) ->
- eval_server(PidOrOptions, fun(Pid) -> reltool_server:gen_spec(Pid) end).
+ eval_server(PidOrOptions, true,
+ fun(Pid) -> reltool_server:gen_spec(Pid) end).
%% Generate a target system
-spec eval_target_spec(target_spec(), root_dir(), target_dir()) ->
diff --git a/lib/reltool/src/reltool.hrl b/lib/reltool/src/reltool.hrl
index 8a6a2142fd..1a34ced89d 100644
--- a/lib/reltool/src/reltool.hrl
+++ b/lib/reltool/src/reltool.hrl
@@ -17,7 +17,7 @@
%% %CopyrightEnd%
-define(APPLICATION, reltool).
--define(MISSING_APP, '*MISSING*').
+-define(MISSING_APP_NAME, '*MISSING*').
-define(MISSING_APP_TEXT, "*MISSING*").
-type file() :: string().
@@ -104,7 +104,7 @@
-type rel_file() :: term().
-type script_file() :: term().
-type reason() :: string().
--type escript_arg() :: string().
+
-type base_dir() :: dir().
-type base_file() :: file().
-type top_dir() :: file().
@@ -112,10 +112,7 @@
-type target_spec() :: [target_spec()]
| {create_dir, base_dir(), [target_spec()]}
| {create_dir, base_dir(), top_dir(), [target_spec()]}
- | {archive,
- base_file(),
- [archive_opt()],
- [target_spec()]}
+ | {archive, base_file(), [archive_opt()], [target_spec()]}
| {copy_file, base_file()}
| {copy_file, base_file(), top_file()}
| {write_file, base_file(), iolist()}
@@ -139,57 +136,58 @@
-record(mod,
{%% Static
- name :: mod_name(),
- app_name :: app_name(),
- incl_cond :: incl_cond() | undefined,
- debug_info :: debug_info() | undefined,
- is_app_mod :: boolean(),
+ name :: mod_name(),
+ app_name :: app_name(),
+ incl_cond :: incl_cond() | undefined,
+ debug_info :: debug_info() | undefined,
+ is_app_mod :: boolean(),
is_ebin_mod :: boolean(),
- uses_mods :: [mod_name()],
- exists :: boolean(),
+ uses_mods :: [mod_name()],
+ exists :: boolean(),
+
%% Dynamic
- status :: status(),
- used_by_mods :: [mod_name()],
+ status :: status(),
+ used_by_mods :: [mod_name()],
is_pre_included :: boolean() | undefined,
- is_included :: boolean() | undefined
+ is_included :: boolean() | undefined
}).
-record(app_info,
{
- description = "",
- id = "",
- vsn = "",
- modules = [],
- maxP = infinity,
- maxT = infinity,
- registered = [],
- incl_apps = [],
- applications = [],
- env = [],
- mod = undefined,
- start_phases = undefined
+ description = "" :: string(),
+ id = "" :: string(),
+ vsn = "" :: app_vsn(),
+ modules = [] :: [mod_name()],
+ maxP = infinity :: integer() | infinity,
+ maxT = infinity :: integer() | infinity,
+ registered = [] :: [atom()],
+ incl_apps = [] :: [app_name()],
+ applications = [] :: [app_name()],
+ env = [] :: [{atom(), term()}],
+ mod = undefined :: {mod_name(), [term()]} | undefined,
+ start_phases = undefined :: [{atom(), term()}] | undefined
}).
-record(app,
{%% Static info
- name :: app_name(),
- is_escript :: boolean(),
+ name :: app_name(),
+ is_escript :: boolean(),
use_selected_vsn :: boolean() | undefined,
- active_dir :: dir(),
- sorted_dirs :: [dir()],
- vsn :: app_vsn(),
- label :: app_label(),
- info :: #app_info{} | undefined,
- mods :: [#mod{}],
+ active_dir :: dir(),
+ sorted_dirs :: [dir()],
+ vsn :: app_vsn(),
+ label :: app_label(),
+ info :: #app_info{} | undefined,
+ mods :: [#mod{}],
%% Static source cond
- mod_cond :: mod_cond() | undefined,
+ mod_cond :: mod_cond() | undefined,
incl_cond :: incl_cond() | undefined,
%% Static target cond
- debug_info :: debug_info() | undefined,
- app_file :: app_file() | undefined,
- app_type :: app_type(),
+ debug_info :: debug_info() | undefined,
+ app_file :: app_file() | undefined,
+ app_type :: app_type() | undefined,
incl_app_filters :: incl_app_filters(),
excl_app_filters :: excl_app_filters(),
incl_archive_filters :: incl_archive_filters(),
@@ -197,19 +195,20 @@
archive_opts :: [archive_opt()],
%% Dynamic
- status :: status(),
- uses_mods :: [mod_name()],
- used_by_mods :: [mod_name()],
- uses_apps :: [app_name()],
- used_by_apps :: [app_name()],
+ status :: status(),
+ uses_mods :: [mod_name()],
+ used_by_mods :: [mod_name()],
+ uses_apps :: [app_name()],
+ used_by_apps :: [app_name()],
is_pre_included :: boolean(),
- is_included :: boolean()
+ is_included :: boolean(),
+ rels :: [rel_name()]
}).
-record(rel_app,
{
- name :: app_name(),
- app_type :: app_type(),
+ name :: app_name(),
+ app_type :: app_type(),
incl_apps :: [incl_app()]
}).
@@ -231,21 +230,22 @@
apps :: [#app{}],
%% Target cond
- boot_rel :: boot_rel(),
- rels :: [#rel{}],
- emu_name :: emu_name(),
- profile :: profile(),
- incl_sys_filters :: incl_sys_filters(),
- excl_sys_filters :: excl_sys_filters(),
- incl_app_filters :: incl_app_filters(),
- excl_app_filters :: excl_app_filters(),
+ boot_rel :: boot_rel(),
+ rels :: [#rel{}],
+ emu_name :: emu_name(),
+ profile :: profile(),
+ incl_sys_filters :: incl_sys_filters(),
+ excl_sys_filters :: excl_sys_filters(),
+ incl_app_filters :: incl_app_filters(),
+ excl_app_filters :: excl_app_filters(),
incl_archive_filters :: incl_archive_filters(),
excl_archive_filters :: excl_archive_filters(),
- archive_opts :: [archive_opt()],
- relocatable :: boolean(),
- app_type :: app_type(),
- app_file :: app_file(),
- debug_info :: debug_info()
+ archive_opts :: [archive_opt()],
+ relocatable :: boolean(),
+ rel_app_type :: app_type(),
+ embedded_app_type :: app_type() | undefined,
+ app_file :: app_file(),
+ debug_info :: debug_info()
}).
-record(regexp, {source, compiled}).
@@ -268,7 +268,8 @@
-define(DEFAULT_EMU_NAME, "beam").
-define(DEFAULT_PROFILE, development).
-define(DEFAULT_RELOCATABLE, true).
--define(DEFAULT_APP_TYPE, permanent).
+-define(DEFAULT_REL_APP_TYPE, permanent).
+-define(DEFAULT_EMBEDDED_APP_TYPE, undefined).
-define(DEFAULT_APP_FILE, keep).
-define(DEFAULT_DEBUG_INFO, keep).
@@ -282,22 +283,23 @@
-define(DEFAULT_EXCL_APP_FILTERS, []).
-define(EMBEDDED_INCL_SYS_FILTERS, ["^bin",
- "^erts",
- "^lib",
- "^releases"]).
+ "^erts",
+ "^lib",
+ "^releases"]).
-define(EMBEDDED_EXCL_SYS_FILTERS,
["^bin/(erlc|dialyzer|typer)(|\\.exe)\$",
"^erts.*/bin/(erlc|dialyzer|typer)(|\\.exe)\$",
"^erts.*/bin/.*(debug|pdb)"]).
-define(EMBEDDED_INCL_APP_FILTERS, ["^ebin",
- "^priv",
- "^include"]).
+ "^include",
+ "^priv"]).
-define(EMBEDDED_EXCL_APP_FILTERS, []).
+-define(EMBEDDED_APP_TYPE, load).
-define(STANDALONE_INCL_SYS_FILTERS, ["^bin/(erl|epmd)(|\\.exe|\\.ini)\$",
- "^bin/start(|_clean).boot\$",
- "^erts.*/bin",
- "^lib\$"]).
+ "^bin/start(|_clean).boot\$",
+ "^erts.*/bin",
+ "^lib\$"]).
-define(STANDALONE_EXCL_SYS_FILTERS,
["^erts.*/bin/(erlc|dialyzer|typer)(|\\.exe)\$",
"^erts.*/bin/(start|escript|to_erl|run_erl)(|\\.exe)\$",
diff --git a/lib/reltool/src/reltool_mod_win.erl b/lib/reltool/src/reltool_mod_win.erl
index c2544cc2d8..f68c61fd6f 100644
--- a/lib/reltool/src/reltool_mod_win.erl
+++ b/lib/reltool/src/reltool_mod_win.erl
@@ -514,7 +514,7 @@ select_image(Xref, ModName) ->
{ok, M} = reltool_server:get_mod(Xref, ModName),
Image =
case M#mod.is_included of
- _ when M#mod.app_name =:= ?MISSING_APP -> ?ERR_IMAGE;
+ _ when M#mod.app_name =:= ?MISSING_APP_NAME -> ?ERR_IMAGE;
true -> ?TICK_IMAGE;
false -> ?WARN_IMAGE;
undefined -> ?ERR_IMAGE
@@ -674,7 +674,7 @@ do_goto_function(#state{active_page = P} = S, [FunName]) ->
find_regexp_forward(S, "^" ++ FunName ++ "(");
do_goto_function(S, [ModStr, FunStr]) ->
case reltool_server:get_mod(S#state.xref_pid, list_to_atom(ModStr)) of
- {ok, Mod} when Mod#mod.app_name =/= ?MISSING_APP ->
+ {ok, Mod} when Mod#mod.app_name =/= ?MISSING_APP_NAME ->
S2 = create_code_page(S#state{mod = Mod}, ModStr),
find_regexp_forward(S2, "^" ++ FunStr ++ "(");
{ok, _} ->
diff --git a/lib/reltool/src/reltool_server.erl b/lib/reltool/src/reltool_server.erl
index a7064f7651..039ad56aa8 100644
--- a/lib/reltool/src/reltool_server.erl
+++ b/lib/reltool/src/reltool_server.erl
@@ -132,19 +132,20 @@ init(Options) ->
end.
do_init(Options) ->
- case parse_options(Options) of
- {#state{parent_pid = ParentPid, common = C, sys = Sys} = S, Status} ->
- %% process_flag(trap_exit, (S#state.common)#common.trap_exit),
- proc_lib:init_ack(ParentPid,
- {ok, self(), C, Sys#sys{apps = undefined}}),
- {S2, Status2} = refresh(S, true, Status),
- {S3, Status3} = analyse(S2#state{old_sys = S2#state.sys}, Status2),
- case Status3 of
- {ok, _Warnings} ->
- loop(S3#state{status = Status3, old_status = {ok, []}});
- {error, Reason} ->
- exit(Reason)
- end
+ {S, Status} = parse_options(Options),
+ #state{parent_pid = ParentPid, common = C, sys = Sys} = S,
+
+ %% process_flag(trap_exit, (S#state.common)#common.trap_exit),
+ proc_lib:init_ack(ParentPid,
+ {ok, self(), C, Sys#sys{apps = undefined}}),
+ {S2, Status2} = refresh(S, true, Status),
+ {S3, Status3} =
+ analyse(S2#state{old_sys = S2#state.sys}, Status2),
+ case Status3 of
+ {ok, _Warnings} -> % BUGBUG: handle warnings
+ loop(S3#state{status = Status3, old_status = {ok, []}});
+ {error, Reason} ->
+ exit(Reason)
end.
parse_options(Opts) ->
@@ -161,33 +162,28 @@ parse_options(Opts) ->
rels = reltool_utils:default_rels(),
emu_name = ?DEFAULT_EMU_NAME,
profile = ?DEFAULT_PROFILE,
- incl_sys_filters =
- reltool_utils:decode_regexps(incl_sys_filters,
- ?DEFAULT_INCL_SYS_FILTERS,
- []),
- excl_sys_filters =
- reltool_utils:decode_regexps(excl_sys_filters,
- ?DEFAULT_EXCL_SYS_FILTERS,
- []),
- incl_app_filters =
- reltool_utils:decode_regexps(incl_app_filters,
- ?DEFAULT_INCL_APP_FILTERS,
- []),
- excl_app_filters =
- reltool_utils:decode_regexps(excl_app_filters,
- ?DEFAULT_EXCL_APP_FILTERS,
- []),
+ incl_sys_filters = dec_re(incl_sys_filters,
+ ?DEFAULT_INCL_SYS_FILTERS,
+ []),
+ excl_sys_filters = dec_re(excl_sys_filters,
+ ?DEFAULT_EXCL_SYS_FILTERS,
+ []),
+ incl_app_filters = dec_re(incl_app_filters,
+ ?DEFAULT_INCL_APP_FILTERS,
+ []),
+ excl_app_filters = dec_re(excl_app_filters,
+ ?DEFAULT_EXCL_APP_FILTERS,
+ []),
relocatable = ?DEFAULT_RELOCATABLE,
- app_type = ?DEFAULT_APP_TYPE,
+ rel_app_type = ?DEFAULT_REL_APP_TYPE,
+ embedded_app_type = ?DEFAULT_EMBEDDED_APP_TYPE,
app_file = ?DEFAULT_APP_FILE,
- incl_archive_filters =
- reltool_utils:decode_regexps(incl_archive_filters,
- ?DEFAULT_INCL_ARCHIVE_FILTERS,
- []),
- excl_archive_filters =
- reltool_utils:decode_regexps(excl_archive_filters,
- ?DEFAULT_EXCL_ARCHIVE_FILTERS,
- []),
+ incl_archive_filters = dec_re(incl_archive_filters,
+ ?DEFAULT_INCL_ARCHIVE_FILTERS,
+ []),
+ excl_archive_filters = dec_re(excl_archive_filters,
+ ?DEFAULT_EXCL_ARCHIVE_FILTERS,
+ []),
archive_opts = ?DEFAULT_ARCHIVE_OPTS,
debug_info = ?DEFAULT_DEBUG_INFO},
C2 = #common{sys_debug = [],
@@ -199,6 +195,9 @@ parse_options(Opts) ->
S = #state{options = Opts},
parse_options(Opts, S, C2, Sys, {ok, []}).
+dec_re(Key, Regexps, Old) ->
+ reltool_utils:decode_regexps(Key, Regexps, Old).
+
parse_options([{Key, Val} | KeyVals], S, C, Sys, Status) ->
case Key of
parent ->
@@ -261,6 +260,7 @@ loop(#state{common = C, sys = Sys} = S) ->
{ok, _Warnings} ->
S5#state{status = Status3, old_status = S#state.status};
{error, _} ->
+ %% Keep old state
S
end,
reltool_utils:reply(ReplyTo, Ref, Status3),
@@ -277,9 +277,9 @@ loop(#state{common = C, sys = Sys} = S) ->
Reply =
case lists:keysearch(RelName, #rel.name, Sys#sys.rels) of
{value, Rel} ->
- {ok, reltool_target:gen_rel(Rel, Sys)};
+ reltool_target:gen_rel(Rel, Sys);
false ->
- {error, "No such release"}
+ {error, "No such release: " ++ RelName}
end,
reltool_utils:reply(ReplyTo, Ref, Reply),
?MODULE:loop(S);
@@ -292,7 +292,7 @@ loop(#state{common = C, sys = Sys} = S) ->
Vars = [],
reltool_target:gen_script(Rel, Sys, PathFlag, Vars);
false ->
- {error, "No such release"}
+ {error, "No such release: " ++ RelName}
end,
reltool_utils:reply(ReplyTo, Ref, Reply),
?MODULE:loop(S);
@@ -302,7 +302,7 @@ loop(#state{common = C, sys = Sys} = S) ->
[M] ->
{ok, M};
[] ->
- {ok, missing_mod(ModName, ?MISSING_APP)}
+ {ok, missing_mod(ModName, ?MISSING_APP_NAME)}
end,
reltool_utils:reply(ReplyTo, Ref, Reply),
?MODULE:loop(S);
@@ -312,7 +312,8 @@ loop(#state{common = C, sys = Sys} = S) ->
{value, App} ->
{ok, App};
false ->
- {error, enoent}
+ {error, "No such application: " ++
+ atom_to_list(AppName)}
end,
reltool_utils:reply(ReplyTo, Ref, Reply),
?MODULE:loop(S);
@@ -327,6 +328,7 @@ loop(#state{common = C, sys = Sys} = S) ->
reltool_utils:reply(ReplyTo, Ref, {ok, App2, Warnings}),
?MODULE:loop(S3);
{error, Reason} ->
+ %% Keep old state
reltool_utils:reply(ReplyTo, Ref, {error, Reason}),
?MODULE:loop(S)
end;
@@ -372,16 +374,20 @@ loop(#state{common = C, sys = Sys} = S) ->
(Sys2#sys.lib_dirs =/= Sys#sys.lib_dirs) orelse
(Sys2#sys.escripts =/= Sys#sys.escripts),
{S3, Status} = refresh(S2, Force, {ok, []}),
- {S4, Status2} = analyse(S3#state{old_sys = S#state.sys}, Status),
- S6 =
- case Status2 of
- {ok, _Warnings} ->
- S4#state{status = Status2, old_status = S#state.status};
- {error, _} ->
- S
- end,
- reltool_utils:reply(ReplyTo, Ref, Status2),
- ?MODULE:loop(S6);
+ {S4, Status2} =
+ analyse(S3#state{old_sys = S#state.sys}, Status),
+ {S5, Status3} =
+ case Status2 of
+ {ok, _Warnings} -> % BUGBUG: handle warnings
+ {S4#state{status = Status2,
+ old_status = S#state.status},
+ Status2};
+ {error, _} ->
+ %% Keep old state
+ {S, Status2}
+ end,
+ reltool_utils:reply(ReplyTo, Ref, Status3),
+ ?MODULE:loop(S5);
{call, ReplyTo, Ref, get_status} ->
reltool_utils:reply(ReplyTo, Ref, S#state.status),
?MODULE:loop(S);
@@ -427,15 +433,24 @@ do_set_app(#state{sys = Sys} = S, App, Status) ->
Sys2 = Sys#sys{apps = Apps2, escripts = Escripts},
{S#state{sys = Sys2}, Status2}.
-analyse(#state{common = C, sys = #sys{apps = Apps0} = Sys} = S, Status) ->
- Apps = lists:keydelete(?MISSING_APP, #app.name, Apps0),
+analyse(#state{common = C,
+ sys = #sys{apps = Apps0, rels = Rels} = Sys} = S,
+ Status) ->
+ Apps = lists:keydelete(?MISSING_APP_NAME, #app.name, Apps0),
ets:delete_all_objects(C#common.app_tab),
ets:delete_all_objects(C#common.mod_tab),
ets:delete_all_objects(C#common.mod_used_by_tab),
- MissingApp = default_app(?MISSING_APP, "missing"),
+ MissingApp = default_app(?MISSING_APP_NAME, "missing"),
ets:insert(C#common.app_tab, MissingApp),
- Apps2 = lists:map(fun(App) -> app_init_is_included(C, Sys, App) end, Apps),
+ {RevRelApps, Status2} = apps_in_rels(Rels, Apps, Status),
+ RelApps2 = lists:reverse(RevRelApps),
+ {Apps2, Status3} =
+ lists:mapfoldl(fun(App, Acc) ->
+ app_init_is_included(C, Sys, App, RelApps2, Acc)
+ end,
+ Status2,
+ Apps),
Apps3 =
case app_propagate_is_included(C, Sys, Apps2, []) of
[] ->
@@ -452,17 +467,59 @@ analyse(#state{common = C, sys = #sys{apps = Apps0} = Sys} = S, Status) ->
app_propagate_is_used_by(C, Apps3),
Apps4 = read_apps(C, Sys, Apps3, []),
%% io:format("Missing app: ~p\n",
- %% [lists:keysearch(?MISSING_APP, #app.name, Apps4)]),
+ %% [lists:keysearch(?MISSING_APP_NAME, #app.name, Apps4)]),
Sys2 = Sys#sys{apps = Apps4},
- try
- Status2 = verify_config(Sys2, Status),
- {S#state{sys = Sys2}, Status2}
- catch
- throw:{error, Status3} ->
- {S, Status3}
+
+ case verify_config(RelApps2, Sys2, Status3) of
+ {ok, _Warnings} = Status4 ->
+ {S#state{sys = Sys2}, Status4};
+ {error, _} = Status4 ->
+ {S, Status4}
end.
-app_init_is_included(C, Sys, #app{mods = Mods} = A) ->
+apps_in_rels(Rels, Apps, Status) ->
+ lists:foldl(fun(Rel, {RelApps, S}) ->
+ {MoreRelApps, S2} = apps_in_rel(Rel, Apps, S),
+ {MoreRelApps ++ RelApps, S2}
+ end,
+ {[], Status},
+ Rels).
+
+apps_in_rel(#rel{name = RelName, rel_apps = RelApps}, Apps, Status) ->
+ Mandatory = [{RelName, kernel}, {RelName, stdlib}],
+ Other = [{RelName, AppName} ||
+ RA <- RelApps,
+ AppName <- [RA#rel_app.name | RA#rel_app.incl_apps],
+ not lists:keymember(AppName, 2, Mandatory)],
+ more_apps_in_rels(Mandatory ++ Other, Apps, [], Status).
+
+more_apps_in_rels([{RelName, AppName} = RA | RelApps], Apps, Acc, Status) ->
+ case lists:member(RA, Acc) of
+ true ->
+ more_apps_in_rels(RelApps, Apps, Acc, Status);
+ false ->
+ case lists:keysearch(AppName, #app.name, Apps) of
+ {value, #app{info = #app_info{applications = InfoApps}}} ->
+ Extra = [{RelName, N} || N <- InfoApps],
+ {Acc2, Status2} =
+ more_apps_in_rels(Extra, Apps, [RA | Acc], Status),
+ more_apps_in_rels(RelApps, Apps, Acc2, Status2);
+ false ->
+ Text = lists:concat(["Release ", RelName,
+ " uses non existing application ",
+ AppName]),
+ Status2 = reltool_utils:return_first_error(Status, Text),
+ more_apps_in_rels(RelApps, Apps, Acc, Status2)
+ end
+ end;
+more_apps_in_rels([], _Apps, Acc, Status) ->
+ {Acc, Status}.
+
+app_init_is_included(C,
+ Sys,
+ #app{name = AppName, mods = Mods} = A,
+ RelApps,
+ Status) ->
AppCond =
case A#app.incl_cond of
undefined -> Sys#sys.incl_cond;
@@ -473,24 +530,37 @@ app_init_is_included(C, Sys, #app{mods = Mods} = A) ->
undefined -> Sys#sys.mod_cond;
_ -> A#app.mod_cond
end,
- IsIncl =
- case AppCond of
- include -> true;
- exclude -> false;
- derived -> undefined
+ Rels = [RelName || {RelName, AN} <- RelApps, AN =:= AppName],
+ {Default, IsPreIncl, IsIncl, Status2} =
+ case {AppCond, Rels} of
+ {include, _} ->
+ {undefined, true, true, Status};
+ {exclude, []} ->
+ {undefined, false, false, Status};
+ {exclude, [RelName | _]} -> % App is included in at least one rel
+ Text = lists:concat(["Application ", AppName, " is used "
+ "in release ", RelName, " and cannot "
+ "be excluded"]),
+ TmpStatus = reltool_utils:return_first_error(Status, Text),
+ {undefined, false, false, TmpStatus};
+ {derived, []} ->
+ {undefined, undefined, undefined, Status};
+ {derived, [_ | _]} -> % App is included in at least one rel
+ {true, undefined, true, Status}
end,
- A2 = A#app{is_pre_included = IsIncl, is_included = IsIncl},
+ A2 = A#app{is_pre_included = IsPreIncl,
+ is_included = IsIncl,
+ rels = Rels},
ets:insert(C#common.app_tab, A2),
lists:foreach(fun(Mod) ->
mod_init_is_included(C,
Mod,
ModCond,
AppCond,
- undefined)
+ Default)
end,
Mods),
- %%app_mod_init_is_included(C, AppName, Info, ModCond, AppCond),
- A2.
+ {A2, Status2}.
mod_init_is_included(C, M, ModCond, AppCond, Default) ->
%% print(M#mod.name, hipe, "incl_cond -> ~p\n", [AppCond]),
@@ -635,7 +705,7 @@ mod_mark_is_included(C, Sys, UsedByName, [ModName | ModNames], Acc) ->
Acc2)
end;
[] ->
- M = missing_mod(ModName, ?MISSING_APP),
+ M = missing_mod(ModName, ?MISSING_APP_NAME),
M2 = M#mod{is_included = true},
ets:insert(C#common.mod_tab, M2),
ets:insert(C#common.mod_used_by_tab, {UsedByName, ModName}),
@@ -646,7 +716,7 @@ mod_mark_is_included(_C, _Sys, _UsedByName, [], Acc) ->
Acc.
app_propagate_is_used_by(C, [#app{mods = Mods, name = Name} | Apps]) ->
- case Name =:= ?MISSING_APP of
+ case Name =:= ?MISSING_APP_NAME of
true -> ok;
false -> ok
end,
@@ -672,8 +742,6 @@ mod_propagate_is_used_by(_C, []) ->
read_apps(C, Sys, [#app{mods = Mods, is_included = IsIncl} = A | Apps], Acc) ->
{Mods2, IsIncl2} = read_apps(C, Sys, A, Mods, [], IsIncl),
- %% reltool_utils:print(A#app.name, stdlib, "Mods2: ~p\n",
- %% [[M#mod.status || M <- Mods2]]),
Status =
case lists:keysearch(missing, #mod.status, Mods2) of
{value, _} -> missing;
@@ -736,9 +804,7 @@ filter_app(A) ->
Mods = [M#mod{is_app_mod = undefined,
is_ebin_mod = undefined,
uses_mods = undefined,
- exists = false,
- is_pre_included = undefined,
- is_included = undefined} ||
+ exists = false} ||
M <- A#app.mods,
M#mod.incl_cond =/= undefined],
if
@@ -747,8 +813,7 @@ filter_app(A) ->
label = undefined,
info = undefined,
mods = [],
- uses_mods = undefined,
- is_included = undefined}};
+ uses_mods = undefined}};
Mods =:= [],
A#app.mod_cond =:= undefined,
A#app.incl_cond =:= undefined,
@@ -778,8 +843,7 @@ filter_app(A) ->
label = undefined,
info = undefined,
mods = Mods,
- uses_mods = undefined,
- is_included = undefined}}
+ uses_mods = undefined}}
end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -816,16 +880,16 @@ refresh_app(#app{name = AppName,
end,
%% Add non-existing modules
+ AppInfoMods = AppInfo#app_info.modules,
AppModNames =
case AppInfo#app_info.mod of
{StartModName, _} ->
- case lists:member(StartModName,
- AppInfo#app_info.modules) of
- true -> AppInfo#app_info.modules;
- false -> [StartModName | AppInfo#app_info.modules]
+ case lists:member(StartModName, AppInfoMods) of
+ true -> AppInfoMods;
+ false -> [StartModName | AppInfoMods]
end;
undefined ->
- AppInfo#app_info.modules
+ AppInfoMods
end,
MissingMods = add_missing_mods(AppName, EbinMods, AppModNames),
@@ -862,11 +926,15 @@ read_app_info(AppFileOrBin, AppFile, AppName, DefaultVsn, Status) ->
parse_app_info(AppFile, Info, AI, Status);
{ok, _BadApp} ->
Text = lists:concat([AppName,
- ": Illegal contents in app file ", AppFile]),
+ ": Illegal contents in app file ", AppFile,
+ ", application tuple with arity 3 expected."]),
{missing_app_info(DefaultVsn),
reltool_utils:add_warning(Status, Text)};
- {error, Text} when Text =:= EnoentText->
- {missing_app_info(DefaultVsn), Status};
+ {error, Text} when Text =:= EnoentText ->
+ Text2 = lists:concat([AppName,
+ ": Missing app file ", AppFile, "."]),
+ {missing_app_info(DefaultVsn),
+ reltool_utils:add_warning(Status, Text2)};
{error, Text} ->
Text2 = lists:concat([AppName,
": Cannot parse app file ",
@@ -1045,7 +1113,7 @@ do_get_config(S, InclDef, InclDeriv) ->
false -> shrink_sys(S);
true -> S
end,
- {ok, reltool_target:gen_config(S2#state.sys, InclDef)}.
+ reltool_target:gen_config(S2#state.sys, InclDef).
do_save_config(S, Filename, InclDef, InclDeriv) ->
{ok, Config} = do_get_config(S, InclDef, InclDeriv),
@@ -1072,6 +1140,7 @@ do_load_config(S, SysConfig) ->
{ok, _Warnings2} ->
S3#state{status = Status3, old_status = S#state.status};
{error, _} ->
+ %% Keep old state
S
end,
{S4, Status3};
@@ -1093,29 +1162,36 @@ read_config(OldSys, Filename, Status) when is_list(Filename) ->
{error, Reason} ->
Text = file:format_error(Reason),
{OldSys,
- reltool_utils:return_first_error(Status, "File access: " ++
- Text)}
+ reltool_utils:return_first_error(Status,
+ "Illegal config file " ++
+ Filename ++ ": " ++ Text)}
end;
read_config(OldSys, {sys, KeyVals}, Status) ->
{NewSys, Status2} =
- try
- decode(OldSys#sys{apps = [], rels = []}, KeyVals, Status)
- catch
- throw:{error, Text} ->
- {OldSys, reltool_utils:return_first_error(Status, Text)}
- end,
- Apps = [A#app{mods = lists:sort(A#app.mods)} || A <- NewSys#sys.apps],
- case NewSys#sys.rels of
- [] -> Rels = reltool_utils:default_rels();
- Rels -> ok
- end,
- NewSys2 = NewSys#sys{apps = lists:sort(Apps), rels = lists:sort(Rels)},
- case lists:keysearch(NewSys2#sys.boot_rel, #rel.name, NewSys2#sys.rels) of
- {value, _} ->
- {NewSys2, Status2};
- false ->
- Text2 = "Missing rel: " ++ NewSys2#sys.boot_rel,
- {OldSys, reltool_utils:return_first_error(Status2, Text2)}
+ decode(OldSys#sys{apps = [], rels = []}, KeyVals, Status),
+ case Status2 of
+ {ok, _Warnings} -> % BUGBUG: handle warnings
+ Apps = [A#app{mods = lists:sort(A#app.mods)} ||
+ A <- NewSys#sys.apps],
+ case NewSys#sys.rels of
+ [] -> Rels = reltool_utils:default_rels();
+ Rels -> ok
+ end,
+ NewSys2 = NewSys#sys{apps = lists:sort(Apps),
+ rels = lists:sort(Rels)},
+ case lists:keysearch(NewSys2#sys.boot_rel,
+ #rel.name,
+ NewSys2#sys.rels) of
+ {value, _} ->
+ {NewSys2, Status2};
+ false ->
+ Text2 = lists:concat(["Release " ++ NewSys2#sys.boot_rel,
+ " is mandatory (used as boot_rel)"]),
+ {OldSys, reltool_utils:return_first_error(Status2, Text2)}
+ end;
+ {error, _} ->
+ %% Keep old state
+ {OldSys, Status2}
end;
read_config(OldSys, BadConfig, Status) ->
Text = lists:flatten(io_lib:format("~p", [BadConfig])),
@@ -1160,120 +1236,96 @@ decode(#sys{} = Sys, [{Key, Val} | KeyVals], Status) ->
{Sys#sys{root_dir = Val}, Status};
lib_dirs when is_list(Val) ->
{Sys#sys{lib_dirs = Val}, Status};
- mod_cond when Val =:= all; Val =:= app;
- Val =:= ebin; Val =:= derived;
+ mod_cond when Val =:= all;
+ Val =:= app;
+ Val =:= ebin;
+ Val =:= derived;
Val =:= none ->
{Sys#sys{mod_cond = Val}, Status};
- incl_cond when Val =:= include; Val =:= exclude;
+ incl_cond when Val =:= include;
+ Val =:= exclude;
Val =:= derived ->
{Sys#sys{incl_cond = Val}, Status};
boot_rel when is_list(Val) ->
{Sys#sys{boot_rel = Val}, Status};
emu_name when is_list(Val) ->
{Sys#sys{emu_name = Val}, Status};
- profile when Val =:= development ->
- Val = ?DEFAULT_PROFILE, % assert,
- {Sys#sys{profile = Val,
- incl_sys_filters =
- reltool_utils:decode_regexps(incl_sys_filters,
- ?DEFAULT_INCL_SYS_FILTERS,
- Sys#sys.incl_sys_filters),
- excl_sys_filters =
- reltool_utils:decode_regexps(excl_sys_filters,
- ?DEFAULT_EXCL_SYS_FILTERS,
- Sys#sys.excl_sys_filters),
- incl_app_filters =
- reltool_utils:decode_regexps(incl_app_filters,
- ?DEFAULT_INCL_APP_FILTERS,
- Sys#sys.incl_app_filters),
- excl_app_filters =
- reltool_utils:decode_regexps(excl_app_filters,
- ?DEFAULT_EXCL_APP_FILTERS,
- Sys#sys.excl_app_filters)},
- Status};
- profile when Val =:= embedded ->
- {Sys#sys{profile = Val,
- incl_sys_filters =
- reltool_utils:decode_regexps(incl_sys_filters,
- ?EMBEDDED_INCL_SYS_FILTERS,
- Sys#sys.incl_sys_filters),
- excl_sys_filters =
- reltool_utils:decode_regexps(excl_sys_filters,
- ?EMBEDDED_EXCL_SYS_FILTERS,
- Sys#sys.excl_sys_filters),
- incl_app_filters =
- reltool_utils:decode_regexps(incl_app_filters,
- ?EMBEDDED_INCL_APP_FILTERS,
- Sys#sys.incl_app_filters),
- excl_app_filters =
- reltool_utils:decode_regexps(excl_app_filters,
- ?EMBEDDED_EXCL_APP_FILTERS,
- Sys#sys.excl_app_filters)},
- Status};
- profile when Val =:= standalone ->
- {Sys#sys{profile = Val,
- incl_sys_filters =
- reltool_utils:decode_regexps(incl_sys_filters,
- ?STANDALONE_INCL_SYS_FILTERS,
- Sys#sys.incl_sys_filters),
- excl_sys_filters =
- reltool_utils:decode_regexps(excl_sys_filters,
- ?STANDALONE_EXCL_SYS_FILTERS,
- Sys#sys.excl_sys_filters),
- incl_app_filters =
- reltool_utils:decode_regexps(incl_app_filters,
- ?STANDALONE_INCL_APP_FILTERS,
- Sys#sys.incl_app_filters),
- excl_app_filters =
- reltool_utils:decode_regexps(excl_app_filters,
- ?STANDALONE_EXCL_APP_FILTERS,
- Sys#sys.excl_app_filters)},
+ profile when Val =:= development;
+ Val =:= embedded;
+ Val =:= standalone ->
+ InclSys = reltool_utils:choose_default(incl_sys_filters, Val, false),
+ ExclSys = reltool_utils:choose_default(excl_sys_filters, Val, false),
+ InclApp = reltool_utils:choose_default(incl_app_filters, Val, false),
+ ExclApp = reltool_utils:choose_default(excl_app_filters, Val, false),
+ AppType = reltool_utils:choose_default(embedded_app_type, Val, false),
+ {Sys#sys{profile = Val,
+ incl_sys_filters = dec_re(incl_sys_filters,
+ InclSys,
+ Sys#sys.incl_sys_filters),
+ excl_sys_filters = dec_re(excl_sys_filters,
+ ExclSys,
+ Sys#sys.excl_sys_filters),
+ incl_app_filters = dec_re(incl_app_filters,
+ InclApp,
+ Sys#sys.incl_app_filters),
+ excl_app_filters = dec_re(excl_app_filters,
+ ExclApp,
+ Sys#sys.excl_app_filters),
+ embedded_app_type = AppType},
Status};
incl_sys_filters ->
{Sys#sys{incl_sys_filters =
- reltool_utils:decode_regexps(Key,
- Val,
- Sys#sys.incl_sys_filters)},
+ dec_re(Key,
+ Val,
+ Sys#sys.incl_sys_filters)},
Status};
excl_sys_filters ->
{Sys#sys{excl_sys_filters =
- reltool_utils:decode_regexps(Key,
- Val,
- Sys#sys.excl_sys_filters)},
+ dec_re(Key,
+ Val,
+ Sys#sys.excl_sys_filters)},
Status};
incl_app_filters ->
{Sys#sys{incl_app_filters =
- reltool_utils:decode_regexps(Key,
- Val,
- Sys#sys.incl_app_filters)},
+ dec_re(Key,
+ Val,
+ Sys#sys.incl_app_filters)},
Status};
excl_app_filters ->
{Sys#sys{excl_app_filters =
- reltool_utils:decode_regexps(Key,
- Val,
- Sys#sys.excl_app_filters)},
+ dec_re(Key,
+ Val,
+ Sys#sys.excl_app_filters)},
Status};
incl_archive_filters ->
{Sys#sys{incl_archive_filters =
- reltool_utils:decode_regexps(Key,
- Val,
- Sys#sys.incl_archive_filters)},
+ dec_re(Key,
+ Val,
+ Sys#sys.incl_archive_filters)},
Status};
excl_archive_filters ->
{Sys#sys{excl_archive_filters =
- reltool_utils:decode_regexps(Key,
- Val,
- Sys#sys.excl_archive_filters)},
+ dec_re(Key,
+ Val,
+ Sys#sys.excl_archive_filters)},
Status};
archive_opts when is_list(Val) ->
{Sys#sys{archive_opts = Val}, Status};
relocatable when Val =:= true; Val =:= false ->
{Sys#sys{relocatable = Val}, Status};
- app_type when Val =:= permanent;
- Val =:= transient;
- Val =:= temporary;
- Val =:= load; Val =:= none ->
- {Sys#sys{app_type = Val}, Status};
+ rel_app_type when Val =:= permanent;
+ Val =:= transient;
+ Val =:= temporary;
+ Val =:= load;
+ Val =:= none ->
+ {Sys#sys{rel_app_type = Val}, Status};
+ embedded_app_type when Val =:= permanent;
+ Val =:= transient;
+ Val =:= temporary;
+ Val =:= load;
+ Val =:= none;
+ Val =:= undefined ->
+ {Sys#sys{embedded_app_type = Val}, Status};
app_file when Val =:= keep; Val =:= strip, Val =:= all ->
{Sys#sys{app_file = Val}, Status};
debug_info when Val =:= keep; Val =:= strip ->
@@ -1303,38 +1355,39 @@ decode(#app{} = App, [{Key, Val} | KeyVals], Status) ->
Val =:= strip ->
{App#app{debug_info = Val}, Status};
app_file when Val =:= keep;
- Val =:= strip,
+ Val =:= strip;
Val =:= all ->
{App#app{app_file = Val}, Status};
app_type when Val =:= permanent;
Val =:= transient;
Val =:= temporary;
Val =:= load;
- Val =:= none ->
+ Val =:= none;
+ Val =:= undefined ->
{App#app{app_type = Val}, Status};
incl_app_filters ->
{App#app{incl_app_filters =
- reltool_utils:decode_regexps(Key,
- Val,
- App#app.incl_app_filters)},
+ dec_re(Key,
+ Val,
+ App#app.incl_app_filters)},
Status};
excl_app_filters ->
{App#app{excl_app_filters =
- reltool_utils:decode_regexps(Key,
- Val,
- App#app.excl_app_filters)},
+ dec_re(Key,
+ Val,
+ App#app.excl_app_filters)},
Status};
incl_archive_filters ->
{App#app{incl_archive_filters =
- reltool_utils:decode_regexps(Key,
- Val,
- App#app.incl_archive_filters)},
+ dec_re(Key,
+ Val,
+ App#app.incl_archive_filters)},
Status};
excl_archive_filters ->
{App#app{excl_archive_filters =
- reltool_utils:decode_regexps(Key,
- Val,
- App#app.excl_archive_filters)},
+ dec_re(Key,
+ Val,
+ App#app.excl_archive_filters)},
Status};
archive_opts when is_list(Val) ->
{App#app{archive_opts = Val}, Status};
@@ -1439,54 +1492,53 @@ merge_config(OldSys, NewSys, Force, Status) ->
apps = PatchedApps},
{NewSys2, Status5}.
-verify_config(Sys, Status) ->
- case lists:keymember(Sys#sys.boot_rel, #rel.name, Sys#sys.rels) of
+verify_config(RelApps, #sys{boot_rel = BootRel, rels = Rels, apps = Apps}, Status) ->
+ case lists:keymember(BootRel, #rel.name, Rels) of
true ->
- lists:foreach(fun(Rel)-> check_rel(Rel, Sys, Status) end,
- Sys#sys.rels),
- Status;
+ Status2 = lists:foldl(fun(RA, Acc) ->
+ check_app(RA, Apps, Acc) end,
+ Status,
+ RelApps),
+ lists:foldl(fun(#rel{name = RelName}, Acc)->
+ check_rel(RelName, RelApps, Acc)
+ end,
+ Status2,
+ Rels);
false ->
- Text = lists:concat([Sys#sys.boot_rel, ": release is mandatory"]),
- Status2 = reltool_utils:return_first_error(Status, Text),
- throw({error, Status2})
+ Text = lists:concat(["Release ", BootRel,
+ " is mandatory (used as boot_rel)"]),
+ reltool_utils:return_first_error(Status, Text)
+ end.
+
+check_app({RelName, AppName}, Apps, Status) ->
+ case lists:keysearch(AppName, #app.name, Apps) of
+ {value, App} when App#app.is_pre_included ->
+ Status;
+ {value, App} when App#app.is_included ->
+ Status;
+ _ ->
+ Text = lists:concat(["Release ", RelName,
+ " uses non included application ",
+ AppName]),
+ reltool_utils:return_first_error(Status, Text)
end.
-check_rel(#rel{name = RelName, rel_apps = RelApps},
- #sys{apps = Apps},
- Status) ->
+check_rel(RelName, RelApps, Status) ->
EnsureApp =
- fun(AppName) ->
- case lists:keymember(AppName, #rel_app.name, RelApps) of
+ fun(AppName, Acc) ->
+ case lists:member({RelName, AppName}, RelApps) of
true ->
- ok;
+ Acc;
false ->
- Text = lists:concat([RelName, ": ", AppName,
- " is not included."]),
- Status2 =
- reltool_utils:return_first_error(Status, Text),
- throw({error, Status2})
- end
- end,
- EnsureApp(kernel),
- EnsureApp(stdlib),
- CheckRelApp =
- fun(#rel_app{name = AppName}) ->
- case lists:keysearch(AppName, #app.name, Apps) of
- {value, App} when App#app.is_pre_included ->
- ok;
- {value, App} when App#app.is_included ->
- ok;
- _ ->
- Text =
- lists:concat([RelName, ": uses application ",
- AppName, " that not is included."]),
- Status2 =
- reltool_utils:return_first_error(Status, Text),
- %% throw BUGBUG: add throw
- ({error, Status2})
+ Text = lists:concat(["Mandatory application ",
+ AppName,
+ " is not included in release ",
+ RelName]),
+ reltool_utils:return_first_error(Acc, Text)
end
end,
- lists:foreach(CheckRelApp, RelApps).
+ Mandatory = [kernel, stdlib],
+ lists:foldl(EnsureApp, Status, Mandatory).
patch_erts_version(RootDir, Apps, Status) ->
AppName = erts,
@@ -1507,7 +1559,7 @@ patch_erts_version(RootDir, Apps, Status) ->
{Apps, Status}
end;
false ->
- Text = "erts cannnot be found in the root directory " ++ RootDir,
+ Text = "erts cannot be found in the root directory " ++ RootDir,
Status2 = reltool_utils:return_first_error(Status, Text),
{Apps, Status2}
end.
@@ -1813,7 +1865,8 @@ default_app(Name) ->
status = missing,
uses_mods = undefined,
is_pre_included = undefined,
- is_included = undefined}.
+ is_included = undefined,
+ rels = undefined}.
%% Assume that the application are sorted
refresh_apps([Old | OldApps], [New | NewApps], Acc, Force, Status)
@@ -1842,7 +1895,7 @@ refresh_apps([Old | OldApps], [New | NewApps], Acc, Force, Status)
when New#app.name > Old#app.name ->
%% No new version. Remove the old.
Status2 =
- case Old#app.name =:= ?MISSING_APP of
+ case Old#app.name =:= ?MISSING_APP_NAME of
true ->
Status;
false ->
@@ -1860,7 +1913,7 @@ refresh_apps([], [New | NewApps], Acc, Force, Status) ->
refresh_apps([Old | OldApps], [], Acc, Force, Status) ->
%% No new version. Remove the old.
Status2 =
- case Old#app.name =:= ?MISSING_APP of
+ case Old#app.name =:= ?MISSING_APP_NAME of
true ->
Status;
false ->
diff --git a/lib/reltool/src/reltool_sys_win.erl b/lib/reltool/src/reltool_sys_win.erl
index 2e226d9147..dbb8e32aa2 100644
--- a/lib/reltool/src/reltool_sys_win.erl
+++ b/lib/reltool/src/reltool_sys_win.erl
@@ -1227,7 +1227,7 @@ create_fgraph_window(S, Title, Nodes, Links) ->
Panel = wxPanel:new(Frame, []),
Options = [{size, {lists:max([100, ?WIN_WIDTH - 100]), ?WIN_HEIGHT}}],
{Server, Fgraph} = reltool_fgraph_win:new(Panel, Options),
- Choose = fun(?MISSING_APP) -> alternate;
+ Choose = fun(?MISSING_APP_NAME) -> alternate;
(_) -> default
end,
[reltool_fgraph_win:add_node(Server, N, Choose(N)) || N <- Nodes],
diff --git a/lib/reltool/src/reltool_target.erl b/lib/reltool/src/reltool_target.erl
index e079a02f3c..dd6f75b9fc 100644
--- a/lib/reltool/src/reltool_target.erl
+++ b/lib/reltool/src/reltool_target.erl
@@ -31,7 +31,7 @@
gen_target/2,
install/2
]).
--compile(export_all).
+
-include("reltool.hrl").
-include_lib("kernel/include/file.hrl").
@@ -64,54 +64,60 @@ kernel_processes(KernelApp) ->
%% Generate the contents of a config file
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-gen_config(#sys{root_dir = RootDir,
- lib_dirs = LibDirs,
- mod_cond = ModCond,
- incl_cond = AppCond,
- apps = Apps,
- boot_rel = BootRel,
- rels = Rels,
- emu_name = EmuName,
- profile = Profile,
- incl_sys_filters = InclSysFiles,
- excl_sys_filters = ExclSysFiles,
- incl_app_filters = InclAppFiles,
- excl_app_filters = ExclAppFiles,
- incl_archive_filters = InclArchiveDirs,
- excl_archive_filters = ExclArchiveDirs,
- archive_opts = ArchiveOpts,
- relocatable = Relocatable,
- app_type = AppType,
- app_file = AppFile,
- debug_info = DebugInfo},
- InclDefs) ->
+gen_config(Sys, InclDefs) ->
+ {ok, do_gen_config(Sys, InclDefs)}.
+
+do_gen_config(#sys{root_dir = RootDir,
+ lib_dirs = LibDirs,
+ mod_cond = ModCond,
+ incl_cond = AppCond,
+ apps = Apps,
+ boot_rel = BootRel,
+ rels = Rels,
+ emu_name = EmuName,
+ profile = Profile,
+ incl_sys_filters = InclSysFiles,
+ excl_sys_filters = ExclSysFiles,
+ incl_app_filters = InclAppFiles,
+ excl_app_filters = ExclAppFiles,
+ incl_archive_filters = InclArchiveDirs,
+ excl_archive_filters = ExclArchiveDirs,
+ archive_opts = ArchiveOpts,
+ relocatable = Relocatable,
+ rel_app_type = RelAppType,
+ embedded_app_type = InclAppType,
+ app_file = AppFile,
+ debug_info = DebugInfo},
+ InclDefs) ->
ErtsItems =
case lists:keysearch(erts, #app.name, Apps) of
{value, Erts} ->
- [{erts, gen_config(Erts, InclDefs)}];
+ [{erts, do_gen_config(Erts, InclDefs)}];
false ->
[]
end,
AppsItems =
- [{app, A#app.name, gen_config(A, InclDefs)}
+ [do_gen_config(A, InclDefs)
|| A <- Apps,
- A#app.name =/= ?MISSING_APP,
+ A#app.name =/= ?MISSING_APP_NAME,
A#app.name =/= erts,
- A#app.is_included =:= true,
- A#app.is_escript =/= true],
+ not A#app.is_escript],
EscriptItems = [{escript,
A#app.active_dir,
emit(incl_cond, A#app.incl_cond, undefined, InclDefs)}
- || A <- Apps, A#app.is_escript],
+ || A <- Apps, A#app.is_escript],
DefaultRels = reltool_utils:default_rels(),
RelsItems =
- case {[{rel, R#rel.name, R#rel.vsn, gen_config(R, InclDefs)} ||
- R <- Rels],
- [{rel, R#rel.name, R#rel.vsn, gen_config(R, InclDefs)} ||
- R <- DefaultRels]} of
- {RI, RI} -> [];
- {RI, _} -> RI
- end,
+ [{rel, R#rel.name, R#rel.vsn, do_gen_config(R, InclDefs)} ||
+ R <- Rels],
+ DefaultRelsItems =
+ [{rel, R#rel.name, R#rel.vsn, do_gen_config(R, InclDefs)} ||
+ R <- DefaultRels],
+ RelsItems2 =
+ case InclDefs of
+ true -> RelsItems;
+ false -> RelsItems -- DefaultRelsItems
+ end,
X = fun(List) -> [Re || #regexp{source = Re} <- List] end,
{sys,
emit(root_dir, RootDir, code:root_dir(), InclDefs) ++
@@ -120,78 +126,103 @@ gen_config(#sys{root_dir = RootDir,
emit(mod_cond, ModCond, ?DEFAULT_MOD_COND, InclDefs) ++
emit(incl_cond, AppCond, ?DEFAULT_INCL_COND, InclDefs) ++
ErtsItems ++
- AppsItems ++
+ lists:flatten(AppsItems) ++
emit(boot_rel, BootRel, ?DEFAULT_REL_NAME, InclDefs) ++
- RelsItems ++
+ RelsItems2 ++
emit(emu_name, EmuName, ?DEFAULT_EMU_NAME, InclDefs) ++
emit(relocatable, Relocatable, ?DEFAULT_RELOCATABLE, InclDefs) ++
emit(profile, Profile, ?DEFAULT_PROFILE, InclDefs) ++
- emit(incl_sys_filters, X(InclSysFiles), ?DEFAULT_INCL_SYS_FILTERS, InclDefs) ++
- emit(excl_sys_filters, X(ExclSysFiles), ?DEFAULT_EXCL_SYS_FILTERS, InclDefs) ++
- emit(incl_app_filters, X(InclAppFiles), ?DEFAULT_INCL_APP_FILTERS, InclDefs) ++
- emit(excl_app_filters, X(ExclAppFiles), ?DEFAULT_EXCL_APP_FILTERS, InclDefs) ++
+ emit(incl_sys_filters, X(InclSysFiles), reltool_utils:choose_default(incl_sys_filters, Profile, InclDefs), InclDefs) ++
+ emit(excl_sys_filters, X(ExclSysFiles), reltool_utils:choose_default(excl_sys_filters, Profile, InclDefs), InclDefs) ++
+ emit(incl_app_filters, X(InclAppFiles), reltool_utils:choose_default(incl_app_filters, Profile, InclDefs), InclDefs) ++
+ emit(excl_app_filters, X(ExclAppFiles), reltool_utils:choose_default(excl_app_filters, Profile, InclDefs), InclDefs) ++
emit(incl_archive_filters, X(InclArchiveDirs), ?DEFAULT_INCL_ARCHIVE_FILTERS, InclDefs) ++
emit(excl_archive_filters, X(ExclArchiveDirs), ?DEFAULT_EXCL_ARCHIVE_FILTERS, InclDefs) ++
emit(archive_opts, ArchiveOpts, ?DEFAULT_ARCHIVE_OPTS, InclDefs) ++
- emit(app_type, AppType, ?DEFAULT_APP_TYPE, InclDefs) ++
+ emit(rel_app_type, RelAppType, ?DEFAULT_REL_APP_TYPE, InclDefs) ++
+ emit(embedded_app_type, InclAppType, reltool_utils:choose_default(embedded_app_type, Profile, InclDefs), InclDefs) ++
emit(app_file, AppFile, ?DEFAULT_APP_FILE, InclDefs) ++
emit(debug_info, DebugInfo, ?DEFAULT_DEBUG_INFO, InclDefs)};
-gen_config(#app{name = _Name,
- mod_cond = ModCond,
- incl_cond = AppCond,
- debug_info = DebugInfo,
- app_file = AppFile,
- incl_app_filters = InclAppFiles,
- excl_app_filters = ExclAppFiles,
- incl_archive_filters = InclArchiveDirs,
- excl_archive_filters = ExclArchiveDirs,
- archive_opts = ArchiveOpts,
- use_selected_vsn = UseSelected,
- vsn = Vsn,
- mods = Mods},
- InclDefs) ->
- emit(mod_cond, ModCond, undefined, InclDefs) ++
- emit(incl_cond, AppCond, undefined, InclDefs) ++
- emit(debug_info, DebugInfo, undefined, InclDefs) ++
- emit(app_file, AppFile, undefined, InclDefs) ++
- emit(incl_app_filters, InclAppFiles, undefined, InclDefs) ++
- emit(excl_app_filters, ExclAppFiles, undefined, InclDefs) ++
- emit(incl_archive_filters, InclArchiveDirs, undefined, InclDefs) ++
- emit(excl_archive_filters, ExclArchiveDirs, undefined, InclDefs) ++
- emit(archive_opts, ArchiveOpts, undefined, InclDefs) ++
- emit(vsn, Vsn, undefined, InclDefs orelse UseSelected =/= true) ++
- [{mod, M#mod.name, gen_config(M, InclDefs)} ||
- M <- Mods,
- M#mod.is_included =:= true];
-gen_config(#mod{name = _Name,
- incl_cond = AppCond,
- debug_info = DebugInfo},
- InclDefs) ->
- emit(incl_cond, AppCond, undefined, InclDefs) ++
- emit(debug_info, DebugInfo, undefined, InclDefs);
-gen_config(#rel{name = _Name,
- vsn = _Vsn,
- rel_apps = RelApps},
- InclDefs) ->
- [gen_config(RA, InclDefs) || RA <- RelApps];
-gen_config(#rel_app{name = Name,
- app_type = Type,
- incl_apps = InclApps},
- _InclDefs) ->
+do_gen_config(#app{name = Name,
+ mod_cond = ModCond,
+ incl_cond = AppCond,
+ debug_info = DebugInfo,
+ app_file = AppFile,
+ incl_app_filters = InclAppFiles,
+ excl_app_filters = ExclAppFiles,
+ incl_archive_filters = InclArchiveDirs,
+ excl_archive_filters = ExclArchiveDirs,
+ archive_opts = ArchiveOpts,
+ use_selected_vsn = UseSelected,
+ vsn = Vsn,
+ mods = Mods,
+ is_included = IsIncl},
+ InclDefs) ->
+ AppConfig =
+ [
+ emit(mod_cond, ModCond, undefined, InclDefs),
+ emit(incl_cond, AppCond, undefined, InclDefs),
+ emit(debug_info, DebugInfo, undefined, InclDefs),
+ emit(app_file, AppFile, undefined, InclDefs),
+ emit(incl_app_filters, InclAppFiles, undefined, InclDefs),
+ emit(excl_app_filters, ExclAppFiles, undefined, InclDefs),
+ emit(incl_archive_filters, InclArchiveDirs, undefined, InclDefs),
+ emit(excl_archive_filters, ExclArchiveDirs, undefined, InclDefs),
+ emit(archive_opts, ArchiveOpts, undefined, InclDefs),
+ if
+ IsIncl, InclDefs -> [{vsn, Vsn}];
+ UseSelected -> [{vsn, Vsn}];
+ true -> []
+ end,
+ [do_gen_config(M, InclDefs) || M <- Mods]
+ ],
+ case lists:flatten(AppConfig) of
+ FlatAppConfig when FlatAppConfig =/= []; IsIncl ->
+ [{app, Name, FlatAppConfig}];
+ [] ->
+ []
+ end;
+do_gen_config(#mod{name = Name,
+ incl_cond = AppCond,
+ debug_info = DebugInfo,
+ is_included = IsIncl},
+ InclDefs) ->
+ ModConfig =
+ [
+ emit(incl_cond, AppCond, undefined, InclDefs),
+ emit(debug_info, DebugInfo, undefined, InclDefs)
+ ],
+ case lists:flatten(ModConfig) of
+ FlatModConfig when FlatModConfig =/= []; IsIncl ->
+ [{mod, Name, FlatModConfig}];
+ _ ->
+ []
+ end;
+do_gen_config(#rel{name = _Name,
+ vsn = _Vsn,
+ rel_apps = RelApps},
+ InclDefs) ->
+ [do_gen_config(RA, InclDefs) || RA <- RelApps];
+do_gen_config(#rel_app{name = Name,
+ app_type = Type,
+ incl_apps = InclApps},
+ _InclDefs) ->
case {Type, InclApps} of
{undefined, []} -> Name;
{undefined, _} -> {Name, InclApps};
{_, []} -> {Name, Type};
{_, _} -> {Name, Type, InclApps}
end;
-gen_config({Tag, Val}, InclDefs) ->
+do_gen_config({Tag, Val}, InclDefs) ->
emit(Tag, Val, undefined, InclDefs);
-gen_config([], _InclDefs) ->
+do_gen_config([], _InclDefs) ->
[];
-gen_config([H | T], InclDefs) ->
- lists:flatten([gen_config(H, InclDefs), gen_config(T, InclDefs)]).
+do_gen_config([H | T], InclDefs) ->
+ lists:flatten([do_gen_config(H, InclDefs), do_gen_config(T, InclDefs)]).
emit(Tag, Val, Default, InclDefs) ->
+ %% io:format("~p(~p):\n\t~p\n\t~p\n",
+ %% [Tag, Val =/= Default, Val, Default]),
if
Val == undefined -> [];
InclDefs -> [{Tag, Val}];
@@ -239,24 +270,127 @@ gen_app(#app{name = Name,
%% Generate the contents of a rel file
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-gen_rel(#rel{name = RelName, vsn = RelVsn, rel_apps = RelApps},
- #sys{apps = Apps}) ->
- {value, Erts} = lists:keysearch(erts, #app.name, Apps),
- {release,
- {RelName, RelVsn},
- {erts, Erts#app.vsn},
- [app_to_rel(RA, Apps ) || RA <- RelApps]}.
-
-app_to_rel(#rel_app{name = Name, app_type = Type, incl_apps = InclApps},
- Apps) ->
- {value, #app{vsn = Vsn}} = lists:keysearch(Name, #app.name, Apps),
+gen_rel(Rel, Sys) ->
+ try
+ MergedApps = merge_apps(Rel, Sys),
+ {ok, do_gen_rel(Rel, Sys, MergedApps)}
+ catch
+ throw:{error, Text} ->
+ {error, Text}
+ end.
+
+do_gen_rel(#rel{name = RelName, vsn = RelVsn},
+ #sys{apps = Apps},
+ MergedApps) ->
+ ErtsName = erts,
+ case lists:keysearch(ErtsName, #app.name, Apps) of
+ {value, Erts} ->
+ {release,
+ {RelName, RelVsn},
+ {ErtsName, Erts#app.vsn},
+ [strip_rel_info(App) || App <- MergedApps]};
+ false ->
+ reltool_utils:throw_error("Mandatory application ~p is "
+ "not included",
+ [ErtsName])
+ end.
+
+strip_rel_info(#app{name = Name,
+ vsn = Vsn,
+ app_type = Type,
+ info = #app_info{incl_apps = InclApps}})
+ when Type =/= undefined ->
case {Type, InclApps} of
- {undefined, []} -> {Name, Vsn};
- {undefined, _} -> {Name, Vsn, InclApps};
+ {permanent, []} -> {Name, Vsn};
+ {permanent, _} -> {Name, Vsn, InclApps};
{_, []} -> {Name, Vsn, Type};
{_, _} -> {Name, Vsn, Type, InclApps}
end.
+merge_apps(#rel{name = RelName,
+ rel_apps = RelApps},
+ #sys{apps = Apps,
+ rel_app_type = RelAppType,
+ embedded_app_type = EmbAppType}) ->
+ Mandatory = [kernel, stdlib],
+ MergedApps = do_merge_apps(RelName, Mandatory, Apps, permanent, []),
+ MergedApps2 = do_merge_apps(RelName, RelApps, Apps, RelAppType, MergedApps),
+ Embedded =
+ [A#app.name || A <- Apps,
+ EmbAppType =/= undefined,
+ A#app.is_included,
+ A#app.name =/= erts,
+ A#app.name =/= ?MISSING_APP_NAME,
+ not lists:keymember(A#app.name, #app.name, MergedApps2)],
+ MergedApps3 = do_merge_apps(RelName, Embedded, Apps, EmbAppType, MergedApps2),
+ sort_apps(MergedApps3).
+
+do_merge_apps(RelName, [#rel_app{name = Name} = RA | RelApps], Apps, RelAppType, Acc) ->
+ case is_already_merged(Name, RelApps, Acc) of
+ true ->
+ do_merge_apps(RelName, RelApps, Apps, RelAppType, Acc);
+ false ->
+ {value, App} = lists:keysearch(Name, #app.name, Apps),
+ MergedApp = merge_app(RelName, RA, RelAppType, App),
+ MoreNames = (MergedApp#app.info)#app_info.applications,
+ Acc2 = [MergedApp | Acc],
+ do_merge_apps(RelName, MoreNames ++ RelApps, Apps, RelAppType, Acc2)
+ end;
+do_merge_apps(RelName, [Name | RelApps], Apps, RelAppType, Acc) ->
+ case is_already_merged(Name, RelApps, Acc) of
+ true ->
+ do_merge_apps(RelName, RelApps, Apps, RelAppType, Acc);
+ false ->
+ RelApp = init_rel_app(Name, Apps),
+ do_merge_apps(RelName, [RelApp | RelApps], Apps, RelAppType, Acc)
+ end;
+do_merge_apps(_RelName, [], _Apps, _RelAppType, Acc) ->
+ lists:reverse(Acc).
+
+init_rel_app(Name, Apps) ->
+ {value, App} = lists:keysearch(Name, #app.name, Apps),
+ Info = App#app.info,
+ #rel_app{name = Name,
+ app_type = undefined,
+ incl_apps = Info#app_info.incl_apps}.
+
+merge_app(RelName,
+ #rel_app{name = Name,
+ app_type = Type,
+ incl_apps = InclApps},
+ RelAppType,
+ App) ->
+ Type2 =
+ case {Type, App#app.app_type} of
+ {undefined, undefined} -> RelAppType;
+ {undefined, AppAppType} -> AppAppType;
+ {_, _} -> Type
+ end,
+ Info = App#app.info,
+ case InclApps -- Info#app_info.incl_apps of
+ [] ->
+ App#app{app_type = Type2, info = Info#app_info{incl_apps = InclApps}};
+ BadIncl ->
+ reltool_utils:throw_error("~p: These applications are "
+ "used by release ~s but are "
+ "missing as included_applications "
+ "in the app file: ~p",
+ [Name, RelName, BadIncl])
+ end.
+
+is_already_merged(Name, [Name | _], _MergedApps) ->
+ true;
+is_already_merged(Name, [#rel_app{name = Name} | _], _MergedApps) ->
+ true;
+is_already_merged(Name, [_ | RelApps], MergedApps) ->
+ is_already_merged(Name, RelApps, MergedApps);
+is_already_merged(Name, [], [#app{name = Name} | _MergedApps]) ->
+ true;
+is_already_merged(Name, [] = RelApps, [_ | MergedApps]) ->
+ is_already_merged(Name, RelApps, MergedApps);
+is_already_merged(_Name, [], []) ->
+ false.
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Generate the contents of a boot file
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -270,27 +404,24 @@ gen_boot({script, {_, _}, _} = Script) ->
gen_script(Rel, Sys, PathFlag, Variables) ->
try
- do_gen_script(Rel, Sys, PathFlag, Variables)
+ MergedApps = merge_apps(Rel, Sys),
+ do_gen_script(Rel, Sys, MergedApps, PathFlag, Variables)
catch
throw:{error, Text} ->
{error, Text}
end.
-do_gen_script(#rel{name = RelName, vsn = RelVsn, rel_apps = RelApps},
- #sys{apps = Apps, app_type = DefaultType},
+do_gen_script(#rel{name = RelName, vsn = RelVsn},
+ #sys{apps = Apps},
+ MergedApps,
PathFlag,
Variables) ->
{value, Erts} = lists:keysearch(erts, #app.name, Apps),
Preloaded = [Mod#mod.name || Mod <- Erts#app.mods],
Mandatory = mandatory_modules(),
Early = Mandatory ++ Preloaded,
- MergedApps = [merge_app(RA, Apps, DefaultType) || RA <- RelApps],
- SortedApps = sort_apps(MergedApps),
- {value, KernelApp} = lists:keysearch(kernel, #app.name, SortedApps),
-
- InclApps =
- lists:append([I ||
- #app{info = #app_info{incl_apps = I}} <- SortedApps]),
+ {value, KernelApp} = lists:keysearch(kernel, #app.name, MergedApps),
+ InclApps = [I || #app{info = #app_info{incl_apps = I}} <- MergedApps],
%% Create the script
DeepList =
@@ -300,30 +431,30 @@ do_gen_script(#rel{name = RelName, vsn = RelVsn, rel_apps = RelApps},
{progress, preloaded},
%% Load mandatory modules
- {path, create_mandatory_path(SortedApps, PathFlag, Variables)},
+ {path, create_mandatory_path(MergedApps, PathFlag, Variables)},
{primLoad, lists:sort(Mandatory)},
{kernel_load_completed},
{progress, kernel_load_completed},
%% Load remaining modules
- [load_app_mods(A, Early, PathFlag, Variables) || A <- SortedApps],
+ [load_app_mods(A, Early, PathFlag, Variables) || A <- MergedApps],
{progress, modules_loaded},
%% Start kernel processes
- {path, create_path(SortedApps, PathFlag, Variables)},
+ {path, create_path(MergedApps, PathFlag, Variables)},
kernel_processes(gen_app(KernelApp)),
{progress, init_kernel_started},
%% Load applications
[{apply, {application, load, [gen_app(A)]}} ||
- A = #app{name = Name, app_type = Type} <- SortedApps,
+ A = #app{name = Name, app_type = Type} <- MergedApps,
Name =/= kernel,
Type =/= none],
{progress, applications_loaded},
%% Start applications
[{apply, {application, start_boot, [Name, Type]}} ||
- #app{name = Name, app_type = Type} <- SortedApps,
+ #app{name = Name, app_type = Type} <- MergedApps,
Type =/= none,
Type =/= load,
not lists:member(Name, InclApps)],
@@ -334,28 +465,6 @@ do_gen_script(#rel{name = RelName, vsn = RelVsn, rel_apps = RelApps},
],
{ok, {script, {RelName, RelVsn}, lists:flatten(DeepList)}}.
-merge_app(#rel_app{name = Name, app_type = Type, incl_apps = RelIncl},
- Apps,
- DefaultType) ->
- {value, App} = lists:keysearch(Name, #app.name, Apps),
- Type2 =
- case {Type, App#app.app_type} of
- {undefined, undefined} -> DefaultType;
- {undefined, AppType} -> AppType;
- {_, _} -> Type
- end,
- Info = App#app.info,
- case RelIncl -- Info#app_info.incl_apps of
- [] ->
- App#app{app_type = Type2,
- info = Info#app_info{incl_apps = RelIncl}};
- BadIncl ->
- reltool_utils:throw_error("~p: These applications are "
- "missing as included_applications "
- "in the app file: ~p\n",
- [Name, BadIncl])
- end.
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
load_app_mods(#app{mods = Mods} = App, Mand, PathFlag, Variables) ->
@@ -438,13 +547,13 @@ sort_apps([], [], [], _) ->
[];
sort_apps([], Missing, [], _) ->
%% this has already been checked before, but as we have the info...
- reltool_utils:throw_error("Undefined applications: ~p\n",
+ reltool_utils:throw_error("Undefined applications: ~p",
[make_set(Missing)]);
sort_apps([], [], Circular, _) ->
- reltool_utils:throw_error("Circular dependencies: ~p\n",
+ reltool_utils:throw_error("Circular dependencies: ~p",
[make_set(Circular)]);
sort_apps([], Missing, Circular, _) ->
- reltool_utils:throw_error("Circular dependencies: ~p\n"
+ reltool_utils:throw_error("Circular dependencies: ~p"
"Undefined applications: ~p\n",
[make_set(Circular), make_set(Missing)]).
@@ -603,14 +712,15 @@ gen_rel_files(Sys, TargetDir) ->
spec_rel_files(#sys{rels = Rels} = Sys) ->
lists:append([do_spec_rel_files(R, Sys) || R <- Rels]).
-do_spec_rel_files(#rel{name = Name} = Rel, Sys) ->
- RelFile = Name ++ ".rel",
- ScriptFile = Name ++ ".script",
- BootFile = Name ++ ".boot",
- GenRel = gen_rel(Rel, Sys),
+do_spec_rel_files(#rel{name = RelName} = Rel, Sys) ->
+ RelFile = RelName ++ ".rel",
+ ScriptFile = RelName ++ ".script",
+ BootFile = RelName ++ ".boot",
+ MergedApps = merge_apps(Rel, Sys),
+ GenRel = do_gen_rel(Rel, Sys, MergedApps),
PathFlag = true,
Variables = [],
- {ok, Script} = do_gen_script(Rel, Sys, PathFlag, Variables),
+ {ok, Script} = do_gen_script(Rel, Sys, MergedApps, PathFlag, Variables),
{ok, BootBin} = gen_boot(Script),
Date = date(),
Time = time(),
@@ -665,8 +775,6 @@ do_gen_spec(#sys{root_dir = RootDir,
{create_dir,BootVsn, RelFiles}]},
{create_dir, "bin", BinFiles}
] ++ SysFiles2,
- %% io:format("InclRegexps2: ~p\n", [InclRegexps2]),
- %% io:format("ExclRegexps2: ~p\n", [ExclRegexps2]),
SysFiles4 = filter_spec(SysFiles3, InclRegexps2, ExclRegexps2),
SysFiles5 = SysFiles4 ++ [{create_dir, "lib", LibFiles}],
check_sys(["bin", "erts", "lib"], SysFiles5),
@@ -678,23 +786,25 @@ strip_sys_files(Relocatable, SysFiles, Apps, ExclRegexps) ->
true ->
ExtraExcl = ["^erts.*/bin/.*src\$"],
reltool_utils:decode_regexps(excl_sys_filters,
- {add, ExtraExcl}, ExclRegexps);
+ {add, ExtraExcl},
+ ExclRegexps);
false ->
ExclRegexps
end,
{value, Erts} = lists:keysearch(erts, #app.name, Apps),
FilterErts =
fun(Spec) ->
- File = element(2, Spec),
- case lists:prefix("erts", File) of
- true ->
- if
- File =:= Erts#app.label ->
- replace_dyn_erl(Relocatable, Spec);
- true ->
- false
- end;
- false ->
+ File = element(2, Spec),
+ case File of
+ "erts" ->
+ reltool_utils:throw_error("This system is not installed. "
+ "The directory ~s is missing.",
+ [Erts#app.label]);
+ _ when File =:= Erts#app.label ->
+ replace_dyn_erl(Relocatable, Spec);
+ "erts-" ++ _ ->
+ false;
+ _ ->
true
end
end,
@@ -707,7 +817,8 @@ strip_sys_files(Relocatable, SysFiles, Apps, ExclRegexps) ->
replace_dyn_erl(false, _ErtsSpec) ->
true;
replace_dyn_erl(true, {create_dir, ErtsDir, ErtsFiles}) ->
- [{create_dir, _, BinFiles}] = safe_lookup_spec("bin", ErtsFiles),
+ [{create_dir, _, BinFiles}] =
+ safe_lookup_spec("bin", ErtsFiles),
case lookup_spec("dyn_erl", BinFiles) of
[] ->
case lookup_spec("erl.ini", BinFiles) of
@@ -759,20 +870,31 @@ spec_bin_files(Sys, AllSysFiles, StrippedSysFiles, RelFiles, InclRegexps) ->
GoodNames = [F || {copy_file, F} <- OldBinFiles,
not lists:suffix(".boot", F),
not lists:suffix(".script", F)],
- BinFiles2 = [Map(S) || S <- BinFiles, lists:member(element(2, S), GoodNames)],
+ BinFiles2 = [Map(S) || S <- BinFiles,
+ lists:member(element(2, S), GoodNames)],
BootFiles = [F || F <- RelFiles, lists:suffix(".boot", element(2, F))],
- [{write_file, _, BootRel}] = safe_lookup_spec(Sys#sys.boot_rel ++ ".boot", BootFiles),
- BootFiles2 = lists:keystore("start.boot", 2, BootFiles, {write_file, "start.boot", BootRel}),
- MakeRegexp = fun(File) -> "^bin/" ++ element(2, File) ++ "(|.escript)\$" end,
+ [{write_file, _, BootRel}] =
+ safe_lookup_spec(Sys#sys.boot_rel ++ ".boot", BootFiles),
+ BootFiles2 = lists:keystore("start.boot",
+ 2,
+ BootFiles,
+ {write_file, "start.boot", BootRel}),
+ MakeRegexp =
+ fun(File) -> "^bin/" ++ element(2, File) ++ "(|.escript)\$" end,
ExtraIncl = lists:map(MakeRegexp, Escripts),
- InclRegexps2 = reltool_utils:decode_regexps(incl_sys_filters, {add, ExtraIncl}, InclRegexps),
+ InclRegexps2 = reltool_utils:decode_regexps(incl_sys_filters,
+ {add, ExtraIncl},
+ InclRegexps),
{InclRegexps2, Escripts ++ BinFiles2 ++ BootFiles2}.
spec_escripts(#sys{apps = Apps}, ErtsBin, BinFiles) ->
- Filter = fun(#app{is_escript = IsEscript, is_included = IsIncl,
- is_pre_included = IsPre, name = Name, active_dir = File}) ->
+ Filter = fun(#app{is_escript = IsEscript,
+ is_included = IsIncl,
+ is_pre_included = IsPre,
+ name = Name,
+ active_dir = File}) ->
if
- Name =:= ?MISSING_APP ->
+ Name =:= ?MISSING_APP_NAME ->
false;
not IsEscript ->
false;
@@ -796,7 +918,6 @@ check_sys(Mandatory, SysFiles) ->
lists:foreach(fun(M) -> do_check_sys(M, SysFiles) end, Mandatory).
do_check_sys(Prefix, Specs) ->
- %%io:format("Prefix: ~p\n", [Prefix]),
case lookup_spec(Prefix, Specs) of
[] ->
reltool_utils:throw_error("Mandatory system directory ~s "
@@ -820,6 +941,7 @@ lookup_spec(Prefix, Specs) ->
safe_lookup_spec(Prefix, Specs) ->
case lookup_spec(Prefix, Specs) of
[] ->
+ %% io:format("lookup fail ~s:\n\t~p\n", [Prefix, Specs]),
reltool_utils:throw_error("Mandatory system file ~s is "
"not included", [Prefix]);
Match ->
@@ -834,7 +956,7 @@ spec_lib_files(#sys{apps = Apps} = Sys) ->
Filter = fun(#app{is_escript = IsEscript, is_included = IsIncl,
is_pre_included = IsPre, name = Name}) ->
if
- Name =:= ?MISSING_APP ->
+ Name =:= ?MISSING_APP_NAME ->
false;
IsEscript ->
false;
@@ -863,10 +985,10 @@ check_apps([], _) ->
spec_app(#app{name = Name,
mods = Mods,
active_dir = SourceDir,
- incl_app_filters = AppInclRegexps,
- excl_app_filters = AppExclRegexps} = App,
- #sys{incl_app_filters = SysInclRegexps,
- excl_app_filters = SysExclRegexps,
+ incl_app_filters = AppInclRegexps,
+ excl_app_filters = AppExclRegexps} = App,
+ #sys{incl_app_filters = SysInclRegexps,
+ excl_app_filters = SysExclRegexps,
debug_info = SysDebugInfo} = Sys) ->
%% List files recursively
{create_dir, _, AppFiles} = spec_dir(SourceDir),
@@ -942,13 +1064,13 @@ spec_dir(Dir) ->
Base,
[spec_dir(filename:join([Dir, F])) || F <- Files]};
error ->
- reltool_utils:throw_error("list dir ~s failed\n", [Dir])
+ reltool_utils:throw_error("list dir ~s failed", [Dir])
end;
{ok, #file_info{type = regular}} ->
%% Plain file
{copy_file, Base};
_ ->
- reltool_utils:throw_error("read file info ~s failed\n", [Dir])
+ reltool_utils:throw_error("read file info ~s failed", [Dir])
end.
spec_mod(Mod, DebugInfo) ->
@@ -1082,7 +1204,7 @@ do_eval_spec({archive, Archive, Options, Files},
{ok, _} ->
ok;
{error, Reason} ->
- reltool_utils:throw_error("create archive ~s: ~p\n",
+ reltool_utils:throw_error("create archive ~s failed: ~p",
[ArchiveFile, Reason])
end;
do_eval_spec({copy_file, File}, _OrigSourceDir, SourceDir, TargetDir) ->
@@ -1216,18 +1338,7 @@ opt_join(Path, File) ->
filename:join([Path, File]).
match(String, InclRegexps, ExclRegexps) ->
- %%case
- match(String, InclRegexps) andalso not match(String, ExclRegexps).
-%% of
-%% true ->
-%% true;
-%% false ->
-%% io:format("no match: ~p\n"
-%% " incl: ~p\n"
-%% " excl: ~p\n",
-%% [String, InclRegexps, ExclRegexps]),
-%% false
-%% end.
+ match(String, InclRegexps) andalso not match(String, ExclRegexps).
%% Match at least one regexp
match(_String, []) ->
@@ -1284,7 +1395,7 @@ do_install(RelName, TargetDir) ->
ok = release_handler:create_RELEASES(TargetDir2, RelFile),
ok;
_ ->
- reltool_utils:throw_error("~s: Illegal syntax.\n", [DataFile])
+ reltool_utils:throw_error("~s: Illegal data file syntax", [DataFile])
end.
subst_src_scripts(Scripts, SrcDir, DestDir, Vars, Opts) ->
diff --git a/lib/reltool/src/reltool_utils.erl b/lib/reltool/src/reltool_utils.erl
index 403fa574c5..39d057d994 100644
--- a/lib/reltool/src/reltool_utils.erl
+++ b/lib/reltool/src/reltool_utils.erl
@@ -19,7 +19,30 @@
-module(reltool_utils).
%% Public
--compile([export_all]).
+-export([root_dir/0, erl_libs/0, lib_dirs/1,
+ split_app_name/1, prim_consult/1,
+ default_rels/0, choose_default/3,
+
+ assign_image_list/1, get_latest_resize/1,
+ mod_conds/0, list_to_mod_cond/1, mod_cond_to_index/1,
+ incl_conds/0, list_to_incl_cond/1, incl_cond_to_index/1, elem_to_index/2,
+ app_dir_test/2, split_app_dir/1,
+ get_item/1, get_items/1, get_selected_items/3,
+ select_items/3, select_item/2,
+
+ safe_keysearch/5, print/4, return_first_error/2, add_warning/2,
+
+ create_dir/1, list_dir/1, read_file_info/1,
+ write_file_info/2, read_file/1, write_file/2,
+ recursive_delete/1, delete/2, recursive_copy_file/2, copy_file/2,
+
+ throw_error/2,
+
+ decode_regexps/3,
+ default_val/2,
+ escript_foldl/3,
+
+ call/2, cast/2, reply/3]).
-include_lib("kernel/include/file.hrl").
-include_lib("wx/include/wx.hrl").
@@ -103,18 +126,46 @@ prim_parse(Tokens, Acc) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
default_rels() ->
- Kernel = #rel_app{name = kernel, incl_apps = []},
- Stdlib = #rel_app{name = stdlib, incl_apps = []},
- Sasl = #rel_app{name = sasl, incl_apps = []},
+ %%Kernel = #rel_app{name = kernel, incl_apps = []},
+ %%Stdlib = #rel_app{name = stdlib, incl_apps = []},
+ Sasl = #rel_app{name = sasl, incl_apps = []},
[
#rel{name = ?DEFAULT_REL_NAME,
vsn = "1.0",
- rel_apps = [Kernel, Stdlib]},
+ rel_apps = []},
+ %%rel_apps = [Kernel, Stdlib]},
#rel{name = "start_sasl",
vsn = "1.0",
- rel_apps = [Kernel, Sasl, Stdlib]}
+ rel_apps = [Sasl]}
+ %%rel_apps = [Kernel, Sasl, Stdlib]}
].
+choose_default(Tag, Profile, InclDefs)
+ when Profile =:= ?DEFAULT_PROFILE; InclDefs ->
+ case Tag of
+ incl_sys_filters -> ?DEFAULT_INCL_SYS_FILTERS;
+ excl_sys_filters -> ?DEFAULT_EXCL_SYS_FILTERS;
+ incl_app_filters -> ?DEFAULT_INCL_APP_FILTERS;
+ excl_app_filters -> ?DEFAULT_EXCL_APP_FILTERS;
+ embedded_app_type -> ?DEFAULT_EMBEDDED_APP_TYPE
+ end;
+choose_default(Tag, standalone, _InclDefs) ->
+ case Tag of
+ incl_sys_filters -> ?STANDALONE_INCL_SYS_FILTERS;
+ excl_sys_filters -> ?STANDALONE_EXCL_SYS_FILTERS;
+ incl_app_filters -> ?STANDALONE_INCL_APP_FILTERS;
+ excl_app_filters -> ?STANDALONE_EXCL_APP_FILTERS;
+ embedded_app_type -> ?DEFAULT_EMBEDDED_APP_TYPE
+ end;
+choose_default(Tag, embedded, _InclDefs) ->
+ case Tag of
+ incl_sys_filters -> ?EMBEDDED_INCL_SYS_FILTERS;
+ excl_sys_filters -> ?EMBEDDED_EXCL_SYS_FILTERS;
+ incl_app_filters -> ?EMBEDDED_INCL_APP_FILTERS;
+ excl_app_filters -> ?EMBEDDED_EXCL_APP_FILTERS;
+ embedded_app_type -> ?EMBEDDED_APP_TYPE
+ end.
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
assign_image_list(ListCtrl) ->
@@ -379,7 +430,7 @@ create_dir(Dir) ->
ok;
{error, Reason} ->
Text = file:format_error(Reason),
- throw_error("create dir ~s: ~s\n", [Dir, Text])
+ throw_error("create dir ~s: ~s", [Dir, Text])
end.
list_dir(Dir) ->
@@ -388,7 +439,7 @@ list_dir(Dir) ->
Files;
error ->
Text = file:format_error(enoent),
- throw_error("list dir ~s: ~s\n", [Dir, Text])
+ throw_error("list dir ~s: ~s", [Dir, Text])
end.
read_file_info(File) ->
@@ -397,7 +448,7 @@ read_file_info(File) ->
Info;
{error, Reason} ->
Text = file:format_error(Reason),
- throw_error("read file info ~s: ~s\n", [File, Text])
+ throw_error("read file info ~s: ~s", [File, Text])
end.
write_file_info(File, Info) ->
@@ -406,7 +457,7 @@ write_file_info(File, Info) ->
ok;
{error, Reason} ->
Text = file:format_error(Reason),
- throw_error("write file info ~s: ~s\n", [File, Text])
+ throw_error("write file info ~s: ~s", [File, Text])
end.
read_file(File) ->
@@ -415,7 +466,7 @@ read_file(File) ->
Bin;
{error, Reason} ->
Text = file:format_error(Reason),
- throw_error("read file ~s: ~s\n", [File, Text])
+ throw_error("read file ~s: ~s", [File, Text])
end.
write_file(File, IoList) ->
@@ -424,7 +475,7 @@ write_file(File, IoList) ->
ok;
{error, Reason} ->
Text = file:format_error(Reason),
- throw_error("write file ~s: ~s\n", [File, Text])
+ throw_error("write file ~s: ~s", [File, Text])
end.
recursive_delete(Dir) ->
@@ -560,7 +611,12 @@ escript_foldl(Fun, Acc, File) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
call(Name, Msg) when is_atom(Name) ->
- call(whereis(Name), Msg);
+ case whereis(Name) of
+ undefined ->
+ {error, {noproc, Name}};
+ Pid ->
+ call(Pid, Msg)
+ end;
call(Pid, Msg) when is_pid(Pid) ->
Ref = erlang:monitor(process, Pid),
Pid ! {call, self(), Ref, Msg},
diff --git a/lib/reltool/test/Makefile b/lib/reltool/test/Makefile
index 00d2add3e5..34781ae720 100644
--- a/lib/reltool/test/Makefile
+++ b/lib/reltool/test/Makefile
@@ -1,19 +1,19 @@
#
# %CopyrightBegin%
-#
-# Copyright Ericsson AB 2009. All Rights Reserved.
-#
+#
+# Copyright Ericsson AB 2009-2010. 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/target.mk
@@ -25,6 +25,7 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk
MODULES= \
rtt \
+ reltool_app_SUITE \
reltool_wx_SUITE \
reltool_server_SUITE \
reltool_test_lib
diff --git a/lib/reltool/test/reltool_app_SUITE.erl b/lib/reltool/test/reltool_app_SUITE.erl
new file mode 100644
index 0000000000..f8433f73d0
--- /dev/null
+++ b/lib/reltool/test/reltool_app_SUITE.erl
@@ -0,0 +1,291 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2010. 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%
+%%
+
+%%
+%%----------------------------------------------------------------------
+%% Purpose: Verify the application specifics of the Reltool application
+%%----------------------------------------------------------------------
+-module(reltool_app_SUITE).
+
+-compile(export_all).
+
+-include("reltool_test_lib.hrl").
+
+
+t() -> reltool_test_lib:t(?MODULE).
+t(Case) -> reltool_test_lib:t({?MODULE, Case}).
+
+%% Test server callbacks
+init_per_suite(Config) ->
+ Config2 = reltool_test_lib:init_per_suite(Config),
+ case is_app(reltool) of
+ {ok, AppFile} ->
+ %% io:format("AppFile: ~n~p~n", [AppFile]),
+ [{app_file, AppFile} | Config2];
+ {error, Reason} ->
+ fail(Reason)
+ end.
+
+end_per_suite(Config) ->
+ reltool_test_lib:end_per_suite(Config).
+
+init_per_testcase(Case, Config) ->
+ Config2 =
+ case Case of
+ undef_funcs ->
+ [{tc_timeout, timer:minutes(10)} | Config];
+ _ ->
+ Config
+ end,
+ reltool_test_lib:init_per_testcase(Case, Config2).
+
+end_per_testcase(Func,Config) ->
+ reltool_test_lib:end_per_testcase(Func,Config).
+
+fin_per_testcase(Case, Config) ->
+ reltool_test_lib:end_per_testcase(Case, Config).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+all() ->
+ all(suite).
+
+all(suite) ->
+ [
+ fields,
+ modules,
+ export_all,
+ app_depend,
+ undef_funcs
+ ].
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+is_app(App) ->
+ LibDir = code:lib_dir(App),
+ File = filename:join([LibDir, "ebin", atom_to_list(App) ++ ".app"]),
+ case file:consult(File) of
+ {ok, [{application, App, AppFile}]} ->
+ {ok, AppFile};
+ {error, {LineNo, Mod, Code}} ->
+ IoList = lists:concat([File, ":", LineNo, ": ",
+ Mod:format_error(Code)]),
+ {error, list_to_atom(lists:flatten(IoList))}
+ end.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+fields(suite) ->
+ [];
+fields(doc) ->
+ [];
+fields(Config) when is_list(Config) ->
+ AppFile = key1search(app_file, Config),
+ Fields = [vsn, description, modules, registered, applications],
+ case check_fields(Fields, AppFile, []) of
+ [] ->
+ ok;
+ Missing ->
+ fail({missing_fields, Missing})
+ end.
+
+check_fields([], _AppFile, Missing) ->
+ Missing;
+check_fields([Field|Fields], AppFile, Missing) ->
+ check_fields(Fields, AppFile, check_field(Field, AppFile, Missing)).
+
+check_field(Name, AppFile, Missing) ->
+ io:format("checking field: ~p~n", [Name]),
+ case lists:keymember(Name, 1, AppFile) of
+ true ->
+ Missing;
+ false ->
+ [Name|Missing]
+ end.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+modules(suite) ->
+ [];
+modules(doc) ->
+ [];
+modules(Config) when is_list(Config) ->
+ AppFile = key1search(app_file, Config),
+ Mods = key1search(modules, AppFile),
+ EbinList = get_ebin_mods(reltool),
+ case missing_modules(Mods, EbinList, []) of
+ [] ->
+ ok;
+ Missing ->
+ throw({error, {missing_modules, Missing}})
+ end,
+ case extra_modules(Mods, EbinList, []) of
+ [] ->
+ ok;
+ Extra ->
+ throw({error, {extra_modules, Extra}})
+ end,
+ {ok, Mods}.
+
+get_ebin_mods(App) ->
+ LibDir = code:lib_dir(App),
+ EbinDir = filename:join([LibDir,"ebin"]),
+ {ok, Files0} = file:list_dir(EbinDir),
+ Files1 = [lists:reverse(File) || File <- Files0],
+ [list_to_atom(lists:reverse(Name)) || [$m,$a,$e,$b,$.|Name] <- Files1].
+
+missing_modules([], _Ebins, Missing) ->
+ Missing;
+missing_modules([Mod|Mods], Ebins, Missing) ->
+ case lists:member(Mod, Ebins) of
+ true ->
+ missing_modules(Mods, Ebins, Missing);
+ false ->
+ io:format("missing module: ~p~n", [Mod]),
+ missing_modules(Mods, Ebins, [Mod|Missing])
+ end.
+
+
+extra_modules(_Mods, [], Extra) ->
+ Extra;
+extra_modules(Mods, [Mod|Ebins], Extra) ->
+ case lists:member(Mod, Mods) of
+ true ->
+ extra_modules(Mods, Ebins, Extra);
+ false ->
+ io:format("supefluous module: ~p~n", [Mod]),
+ extra_modules(Mods, Ebins, [Mod|Extra])
+ end.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+export_all(suite) ->
+ [];
+export_all(doc) ->
+ [];
+export_all(Config) when is_list(Config) ->
+ AppFile = key1search(app_file, Config),
+ Mods = key1search(modules, AppFile),
+ check_export_all(Mods).
+
+
+check_export_all([]) ->
+ ok;
+check_export_all([Mod|Mods]) ->
+ case (catch apply(Mod, module_info, [compile])) of
+ {'EXIT', {undef, _}} ->
+ check_export_all(Mods);
+ O ->
+ case lists:keysearch(options, 1, O) of
+ false ->
+ check_export_all(Mods);
+ {value, {options, List}} ->
+ case lists:member(export_all, List) of
+ true ->
+ throw({error, {export_all, Mod}});
+ false ->
+ check_export_all(Mods)
+ end
+ end
+ end.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+app_depend(suite) ->
+ [];
+app_depend(doc) ->
+ [];
+app_depend(Config) when is_list(Config) ->
+ AppFile = key1search(app_file, Config),
+ Apps = key1search(applications, AppFile),
+ check_apps(Apps).
+
+check_apps([]) ->
+ ok;
+check_apps([App|Apps]) ->
+ case is_app(App) of
+ {ok, _} ->
+ check_apps(Apps);
+ Error ->
+ throw({error, {missing_app, {App, Error}}})
+ end.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+undef_funcs(suite) ->
+ [];
+undef_funcs(doc) ->
+ [];
+undef_funcs(Config) when is_list(Config) ->
+ App = reltool,
+ AppFile = key1search(app_file, Config),
+ Mods = key1search(modules, AppFile),
+ Root = code:root_dir(),
+ LibDir = code:lib_dir(App),
+ EbinDir = filename:join([LibDir,"ebin"]),
+ XRefTestName = undef_funcs_make_name(App, xref_test_name),
+ {ok, XRef} = xref:start(XRefTestName),
+ ok = xref:set_default(XRef,
+ [{verbose,false},{warnings,false}]),
+ XRefName = undef_funcs_make_name(App, xref_name),
+ {ok, XRefName} = xref:add_release(XRef, Root, {name,XRefName}),
+ {ok, App} = xref:replace_application(XRef, App, EbinDir),
+ {ok, Undefs} = xref:analyze(XRef, undefined_function_calls),
+ xref:stop(XRef),
+ analyze_undefined_function_calls(Undefs, Mods, []).
+
+analyze_undefined_function_calls([], _, []) ->
+ ok;
+analyze_undefined_function_calls([], _, AppUndefs) ->
+ exit({suite_failed, {undefined_function_calls, AppUndefs}});
+analyze_undefined_function_calls([{{Mod, _F, _A}, _C} = AppUndef|Undefs],
+ AppModules, AppUndefs) ->
+ %% Check that this module is our's
+ case lists:member(Mod,AppModules) of
+ true ->
+ {Calling,Called} = AppUndef,
+ {Mod1,Func1,Ar1} = Calling,
+ {Mod2,Func2,Ar2} = Called,
+ io:format("undefined function call: "
+ "~n ~w:~w/~w calls ~w:~w/~w~n",
+ [Mod1,Func1,Ar1,Mod2,Func2,Ar2]),
+ analyze_undefined_function_calls(Undefs, AppModules,
+ [AppUndef|AppUndefs]);
+ false ->
+ io:format("dropping ~p~n", [Mod]),
+ analyze_undefined_function_calls(Undefs, AppModules, AppUndefs)
+ end.
+
+%% This function is used simply to avoid cut-and-paste errors later...
+undef_funcs_make_name(App, PostFix) ->
+ list_to_atom(atom_to_list(App) ++ "_" ++ atom_to_list(PostFix)).
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+fail(Reason) ->
+ exit({suite_failed, Reason}).
+
+key1search(Key, L) ->
+ case lists:keysearch(Key, 1, L) of
+ false ->
+ fail({not_found, Key, L});
+ {value, {Key, Value}} ->
+ Value
+ end.
diff --git a/lib/reltool/test/reltool_server_SUITE.erl b/lib/reltool/test/reltool_server_SUITE.erl
index cf951191a0..faf1bdbba2 100644
--- a/lib/reltool/test/reltool_server_SUITE.erl
+++ b/lib/reltool/test/reltool_server_SUITE.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2009-2010. 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(reltool_server_SUITE).
@@ -26,11 +26,13 @@
-include("reltool_test_lib.hrl").
-define(NODE_NAME, '__RELTOOL__TEMPORARY_TEST__NODE__').
+-define(WORK_DIR, "reltool_work_dir").
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Initialization functions.
init_per_suite(Config) ->
+ ?ignore(file:make_dir(?WORK_DIR)),
reltool_test_lib:init_per_suite(Config).
end_per_suite(Config) ->
@@ -128,8 +130,7 @@ create_release(_Config) ->
{value, {_, _, StdlibVsn}} = lists:keysearch(stdlib, 1, Apps),
Rel = {release, {RelName, RelVsn},
{erts, ErtsVsn},
- [{kernel, KernelVsn},
- {stdlib, StdlibVsn}]},
+ [{kernel, KernelVsn}, {stdlib, StdlibVsn}]},
?m({ok, Rel}, reltool:get_rel([{config, Config}], RelName)),
ok.
@@ -159,15 +160,17 @@ create_script(_Config) ->
Rel = {release,
{RelName, RelVsn},
{erts, ErtsVsn},
- [{stdlib, StdlibVsn}, {kernel, KernelVsn}]},
+ [{kernel, KernelVsn}, {stdlib, StdlibVsn}]},
?m({ok, Rel}, reltool:get_rel(Pid, RelName)),
- RelFile = RelName ++ ".rel",
- ?m(ok, file:write_file(RelFile, io_lib:format("~p.\n", [Rel]))),
+ ?m(ok, file:write_file(filename:join([?WORK_DIR, RelName ++ ".rel"]),
+ io_lib:format("~p.\n", [Rel]))),
%% Generate script file
+ {ok, Cwd} = file:get_cwd(),
+ ?m(ok, file:set_cwd(?WORK_DIR)),
?m(ok, systools:make_script(RelName, [])),
- ScriptFile = RelName ++ ".script",
- {ok, [OrigScript]} = ?msym({ok, [_]}, file:consult(ScriptFile)),
+ {ok, [OrigScript]} = ?msym({ok, [_]}, file:consult(RelName ++ ".script")),
+ ?m(ok, file:set_cwd(Cwd)),
{ok, Script} = ?msym({ok, _}, reltool:get_script(Pid, RelName)),
%% OrigScript2 = sort_script(OrigScript),
%% Script2 = sort_script(Script),
@@ -201,9 +204,10 @@ create_target(_Config) ->
]},
%% Generate target file
- TargetDir = "reltool_target_dir_development",
+ TargetDir = filename:join([?WORK_DIR, "target_development"]),
?m(ok, reltool_utils:recursive_delete(TargetDir)),
?m(ok, file:make_dir(TargetDir)),
+ ?log("SPEC: ~p\n", [reltool:get_target_spec([{config, Config}])]),
?m(ok, reltool:create_target([{config, Config}], TargetDir)),
Erl = filename:join([TargetDir, "bin", "erl"]),
@@ -234,7 +238,7 @@ create_embedded(_Config) ->
]},
%% Generate target file
- TargetDir = "reltool_target_dir_embedded",
+ TargetDir = filename:join([?WORK_DIR, "target_embedded"]),
?m(ok, reltool_utils:recursive_delete(TargetDir)),
?m(ok, file:make_dir(TargetDir)),
?m(ok, reltool:create_target([{config, Config}], TargetDir)),
@@ -264,7 +268,7 @@ create_standalone(_Config) ->
]},
%% Generate target file
- TargetDir = "reltool_target_dir_standalone",
+ TargetDir = filename:join([?WORK_DIR, "target_standalone"]),
?m(ok, reltool_utils:recursive_delete(TargetDir)),
?m(ok, file:make_dir(TargetDir)),
?m(ok, reltool:create_target([{config, Config}], TargetDir)),
@@ -290,6 +294,8 @@ create_standalone(_Config) ->
create_old_target(TestInfo) when is_atom(TestInfo) ->
reltool_test_lib:tc_info(TestInfo);
create_old_target(_Config) ->
+ ?skip("Old style of target", []),
+
%% Configure the server
RelName1 = "Just testing",
RelName2 = "Just testing with SASL",
@@ -306,7 +312,7 @@ create_old_target(_Config) ->
]},
%% Generate target file
- TargetDir = "reltool_target_dir_old",
+ TargetDir = filename:join([?WORK_DIR, "target_old_style"]),
?m(ok, reltool_utils:recursive_delete(TargetDir)),
?m(ok, file:make_dir(TargetDir)),
?m(ok, reltool:create_target([{config, Config}], TargetDir)),
diff --git a/lib/reltool/test/reltool_test_lib.erl b/lib/reltool/test/reltool_test_lib.erl
index 25978294ee..5390b0a75e 100644
--- a/lib/reltool/test/reltool_test_lib.erl
+++ b/lib/reltool/test/reltool_test_lib.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2009-2010. 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(reltool_test_lib).
@@ -24,9 +24,11 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
init_per_suite(Config) when is_list(Config)->
+ global:register_name(reltool_global_logger, group_leader()),
incr_timetrap(Config, 5).
end_per_suite(Config) when is_list(Config)->
+ global:unregister_name(reltool_global_logger),
ok.
incr_timetrap(Config, Times) ->
@@ -130,11 +132,9 @@ wx_end_per_suite(Config) ->
init_per_testcase(_Func, Config) when is_list(Config) ->
set_kill_timer(Config),
- global:register_name(reltool_global_logger, group_leader()),
Config.
end_per_testcase(_Func, Config) when is_list(Config) ->
- global:unregister_name(reltool_global_logger),
reset_kill_timer(Config),
Config.
diff --git a/lib/reltool/test/reltool_test_lib.hrl b/lib/reltool/test/reltool_test_lib.hrl
index 93134144ea..b592ebb2f0 100644
--- a/lib/reltool/test/reltool_test_lib.hrl
+++ b/lib/reltool/test/reltool_test_lib.hrl
@@ -1,23 +1,24 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2009-2010. 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_lib("wx/include/wx.hrl").
+-define(flat_format(Format,Args), lists:flatten(io_lib:format(Format,Args))).
-define(log(Format,Args), reltool_test_lib:log(Format,Args,?FILE,?LINE)).
-define(warning(Format,Args), ?log("<WARNING>\n " ++ Format,Args)).
-define(error(Format,Args), reltool_test_lib:error(Format,Args,?FILE,?LINE)).
diff --git a/lib/reltool/test/rtt b/lib/reltool/test/rtt
index 2411195338..1f93396196 100755
--- a/lib/reltool/test/rtt
+++ b/lib/reltool/test/rtt
@@ -1,19 +1,19 @@
#! /bin/sh -f
# %CopyrightBegin%
-#
-# Copyright Ericsson AB 2009. All Rights Reserved.
-#
+#
+# Copyright Ericsson AB 2009-2010. 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%
# Usage: rtt [-cerl] <args to erlang startup script>
@@ -23,7 +23,7 @@ while [ $# -gt 0 ]; do
case "$1" in
"-cerl")
shift
- emu=cerl
+ emu="$ERL_TOP/bin/cerl"
;;
*)
break
diff --git a/lib/ssh/Makefile b/lib/ssh/Makefile
index 1ad69a9ca1..b8c7eebcc1 100644
--- a/lib/ssh/Makefile
+++ b/lib/ssh/Makefile
@@ -1,19 +1,19 @@
#
# %CopyrightBegin%
-#
-# Copyright Ericsson AB 2004-2009. All Rights Reserved.
-#
+#
+# Copyright Ericsson AB 2004-2010. 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%
#
diff --git a/lib/ssh/doc/src/book.xml b/lib/ssh/doc/src/book.xml
index 0375c441af..fcec1d6f70 100644
--- a/lib/ssh/doc/src/book.xml
+++ b/lib/ssh/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>2005</year><year>2009</year>
+ <year>2005</year><year>2010</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -13,12 +13,12 @@
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.
-
+
</legalnotice>
<title>SSH</title>
diff --git a/lib/ssh/doc/src/notes.xml b/lib/ssh/doc/src/notes.xml
index 2533ab8085..67a226f726 100644
--- a/lib/ssh/doc/src/notes.xml
+++ b/lib/ssh/doc/src/notes.xml
@@ -29,7 +29,16 @@
<file>notes.xml</file>
</header>
- <section><title>Ssh 1.1.9</title>
+ <section><title>Ssh 2.0</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>The function ssh:connect/4 was not exported.</p>
+ <p>Own Id: OTP-8550 Aux Id:</p>
+ </item>
+ </list>
+ </section>
<section><title>Improvements and New Features</title>
<list>
@@ -37,6 +46,8 @@
<p>The configuration parameter ip_v6_disabled is now available,
which makes it possible for the user to alter the IP version
SSH shall use.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
<p>Own Id: OTP-8535 Aux Id:</p>
</item>
<item>
@@ -48,6 +59,13 @@
message is not handled correctly.</p>
<p>Own Id: OTP-8524 Aux Id:</p>
</item>
+ <item>
+ <p>Removed deprecated modules (ssh_ssh, ssh_sshd and ssh_cm) and
+ functions (ssh_sftp:connect and ssh_sftp:stop).</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>Own Id: OTP-8596 Aux Id:</p>
+ </item>
</list>
</section>
diff --git a/lib/ssh/doc/src/ref_man.xml b/lib/ssh/doc/src/ref_man.xml
index c05c3051b0..9ab56b28ec 100644
--- a/lib/ssh/doc/src/ref_man.xml
+++ b/lib/ssh/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2004</year><year>2009</year>
+ <year>2004</year><year>2010</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -13,12 +13,12 @@
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.
-
+
</legalnotice>
<title>SSH Reference Manual</title>
diff --git a/lib/ssh/doc/src/ssh_sftp.xml b/lib/ssh/doc/src/ssh_sftp.xml
index 208b2b4e72..c1f75461b1 100644
--- a/lib/ssh/doc/src/ssh_sftp.xml
+++ b/lib/ssh/doc/src/ssh_sftp.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2005</year><year>2009</year>
+ <year>2005</year><year>2010</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -13,12 +13,12 @@
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.
-
+
</legalnotice>
<title>ssh_sftp</title>
diff --git a/lib/ssh/doc/src/ssh_sftpd.xml b/lib/ssh/doc/src/ssh_sftpd.xml
index c857983565..b3d64e72b4 100644
--- a/lib/ssh/doc/src/ssh_sftpd.xml
+++ b/lib/ssh/doc/src/ssh_sftpd.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2005</year><year>2009</year>
+ <year>2005</year><year>2010</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -13,12 +13,12 @@
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.
-
+
</legalnotice>
<title>ssh_sftpd</title>
diff --git a/lib/ssh/examples/Makefile b/lib/ssh/examples/Makefile
index cd8b3c797a..5f17542fb8 100644
--- a/lib/ssh/examples/Makefile
+++ b/lib/ssh/examples/Makefile
@@ -1,19 +1,19 @@
#
# %CopyrightBegin%
-#
-# Copyright Ericsson AB 2005-2009. All Rights Reserved.
-#
+#
+# Copyright Ericsson AB 2005-2010. 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%
#
diff --git a/lib/ssh/examples/ssh_sample_cli.erl b/lib/ssh/examples/ssh_sample_cli.erl
index 2505c1b759..6f3092e567 100644
--- a/lib/ssh/examples/ssh_sample_cli.erl
+++ b/lib/ssh/examples/ssh_sample_cli.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2005-2010. 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%
%%
@@ -30,19 +30,15 @@
%% our command functions
-export([cli_prime/1, cli_primes/1, cli_gcd/2, cli_lcm/2,
cli_factors/1, cli_exit/0, cli_rho/1, cli_help/0,
- cli_crash/0, cli_users/0, cli_self/0,
- cli_user/0, cli_host/0]).
-
-%% imports
--import(lists, [reverse/1, reverse/2, seq/2, prefix/2]).
--import(math, [sqrt/1]).
-
+ cli_crash/0, cli_self/0, cli_user/0, cli_host/0]).
listen(Port) ->
listen(Port, []).
listen(Port, Options) ->
- ssh_cli:listen(fun(U, H) -> start_our_shell(U, H) end, Port, Options).
+ crypto:start(),
+ ssh:start(),
+ ssh:daemon(any, Port, [{shell, fun(U, H) -> start_our_shell(U, H) end} | Options]).
%% our_routines
our_routines() ->
@@ -56,7 +52,6 @@ our_routines() ->
{"prime", cli_prime, "<int> check for primality"},
{"primes", cli_primes, "<int> print all primes up to <int>"},
{"rho", cli_rho, "<int> prime factors using rho's alg."},
- {"who", cli_users, " lists users"},
{"user", cli_user, " print name of user"},
{"host", cli_host, " print host addr"},
{"self", cli_self, " print my pid"}
@@ -85,11 +80,11 @@ our_routines() ->
common_prefix([C | R1], [C | R2], Acc) ->
common_prefix(R1, R2, [C | Acc]);
common_prefix(_, _, Acc) ->
- reverse(Acc).
+ lists:reverse(Acc).
%% longest prefix in a list, given a prefix
longest_prefix(List, Prefix) ->
- case [A || {A, _, _} <- List, prefix(Prefix, A)] of
+ case [A || {A, _, _} <- List, lists:prefix(Prefix, A)] of
[] ->
{none, List};
[S | Rest] ->
@@ -112,7 +107,7 @@ longest_prefix(List, Prefix) ->
expand([$ | _]) ->
{no, "", []};
expand(RevBefore) ->
- Before = reverse(RevBefore),
+ Before = lists:reverse(RevBefore),
case longest_prefix(our_routines(), Before) of
{prefix, P, [_]} ->
{yes, P ++ " ", []};
@@ -139,22 +134,27 @@ start_our_shell(User, Peer) ->
%%% an ordinary Read-Eval-Print-loop
our_shell_loop() ->
% Read
- Line = io:get_line({format, "CLI> ", []}),
+ Line = io:get_line("CLI> "),
% Eval
Result = eval_cli(Line),
% Print
io:format("---> ~p\n", [Result]),
case Result of
- done -> exit(normal);
- crash -> 1 / 0;
- _ -> our_shell_loop()
+ done ->
+ exit(normal);
+ crash ->
+ 1 / 0;
+ _ ->
+ our_shell_loop()
end.
%%% translate a command to a function
command_to_function(Command) ->
case lists:keysearch(Command, 1, our_routines()) of
- {value, {_, Proc, _}} -> Proc;
- false -> unknown_cli
+ {value, {_, Proc, _}} ->
+ Proc;
+ false ->
+ unknown_cli
end.
%%% evaluate a command line
@@ -209,14 +209,6 @@ cli_user() ->
cli_host() ->
get(peer_name).
-cli_users() ->
- case ssh_userauth:get_auth_users() of
- {ok, UsersPids} ->
- UsersPids; % [U || {U, _} <- UsersPids];
- E ->
- E
- end.
-
cli_self() ->
self().
@@ -243,7 +235,7 @@ cli_help() ->
%% a quite simple Sieve of Erastothenes (not tail-recursive, though)
primes(Size) ->
- era(sqrt(Size), seq(2,Size)).
+ era(math:sqrt(Size), lists:seq(2,Size)).
era(Max, [H|T]) when H =< Max ->
[H | era(Max, sieve([H|T], H))];
@@ -267,7 +259,7 @@ next_prime(Primes, P) ->
next_prime1(Primes, P) ->
P1 = P + 2,
- case divides(Primes, trunc(sqrt(P1)), P1) of
+ case divides(Primes, trunc(math:sqrt(P1)), P1) of
false -> P1;
true -> next_prime1(Primes, P1)
end.
@@ -282,7 +274,7 @@ divides([_ | R], Nsqrt, N) ->
divides(R, Nsqrt, N).
is_prime(P) ->
- lists:all(fun(A) -> P rem A =/= 0 end, primes(trunc(sqrt(P)))).
+ lists:all(fun(A) -> P rem A =/= 0 end, primes(trunc(math:sqrt(P)))).
%% Normal gcd, Euclid
gcd(R, Q) when abs(Q) < abs(R) -> gcd1(Q,R);
@@ -300,17 +292,17 @@ lcm(R, Q) ->
%%% Prime factors of a number (na�ve implementation)
factors(N) ->
- Nsqrt = trunc(sqrt(N)),
+ Nsqrt = trunc(math:sqrt(N)),
factors([], N, 2, Nsqrt, []).
factors(_Primes, N, Prime, Nsqrt, Factors) when Prime > Nsqrt ->
- reverse(Factors, [N]);
+ lists:reverse(Factors, [N]);
factors(Primes, N, Prime, Nsqrt, Factors) ->
case N rem Prime of
0 ->
%%io:format("factor ------- ~p\n", [Prime]),
N1 = N div Prime,
- factors(Primes, N1, Prime, trunc(sqrt(N1)), [Prime|Factors]);
+ factors(Primes, N1, Prime, trunc(math:sqrt(N1)), [Prime|Factors]);
_ ->
Primes1 = Primes ++ [Prime],
Prime1 = next_prime(Primes1, Prime),
diff --git a/lib/ssh/src/Makefile b/lib/ssh/src/Makefile
index 7abf06e52b..42880fa80b 100644
--- a/lib/ssh/src/Makefile
+++ b/lib/ssh/src/Makefile
@@ -1,19 +1,19 @@
#
# %CopyrightBegin%
-#
-# Copyright Ericsson AB 2004-2009. All Rights Reserved.
-#
+#
+# Copyright Ericsson AB 2004-2010. 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%
#
@@ -56,7 +56,6 @@ MODULES= \
ssh_auth\
ssh_bits \
ssh_cli \
- ssh_cm \
ssh_dsa \
ssh_file \
ssh_io \
@@ -67,8 +66,6 @@ MODULES= \
ssh_sftpd \
ssh_sftpd_file\
ssh_sftpd_file_api \
- ssh_ssh \
- ssh_sshd \
ssh_transport \
ssh_userreg \
ssh_xfer
diff --git a/lib/ssh/src/ssh.app.src b/lib/ssh/src/ssh.app.src
index 9319f39591..8a3e15841f 100644
--- a/lib/ssh/src/ssh.app.src
+++ b/lib/ssh/src/ssh.app.src
@@ -14,7 +14,6 @@
ssh_cli,
ssh_channel,
ssh_channel_sup,
- ssh_cm,
ssh_connection,
ssh_connection_handler,
ssh_connection_manager,
@@ -32,8 +31,6 @@
ssh_sftpd,
ssh_sftpd_file,
ssh_sftpd_file_api,
- ssh_ssh,
- ssh_sshd,
ssh_subsystem_sup,
ssh_sup,
ssh_system_sup,
diff --git a/lib/ssh/src/ssh.appup.src b/lib/ssh/src/ssh.appup.src
index b082d66988..21f7508555 100644
--- a/lib/ssh/src/ssh.appup.src
+++ b/lib/ssh/src/ssh.appup.src
@@ -19,32 +19,8 @@
{"%VSN%",
[
- {"1.1.8", [{load_module, ssh_connection_manager, soft_purge, soft_purge, []},
- {load_module, ssh, soft_purge, soft_purge, []},
- {load_module, ssh_connection, soft_purge, soft_purge, []}]},
- {"1.1.7", [{load_module, ssh_connection_handler, soft_purge, soft_purge, []},
- {load_module, ssh_connection, soft_purge, soft_purge, []},
- {load_module, ssh, soft_purge, soft_purge, []},
- {load_module, ssh_connection_manager, soft_purge, soft_purge, []}]},
- {"1.1.6", [{restart_application, ssh}]},
- {"1.1.5", [{restart_application, ssh}]},
- {"1.1.4", [{restart_application, ssh}]},
- {"1.1.3", [{restart_application, ssh}]},
- {"1.1.2", [{restart_application, ssh}]}
],
[
- {"1.1.8", [{load_module, ssh_connection_manager, soft_purge, soft_purge, []},
- {load_module, ssh, soft_purge, soft_purge, []},
- {load_module, ssh_connection, soft_purge, soft_purge, []}]},
- {"1.1.7", [{load_module, ssh_connection_handler, soft_purge, soft_purge, []},
- {load_module, ssh_connection, soft_purge, soft_purge, []},
- {load_module, ssh, soft_purge, soft_purge, []},
- {load_module, ssh_connection_manager, soft_purge, soft_purge, []}]},
- {"1.1.6", [{restart_application, ssh}]},
- {"1.1.5", [{restart_application, ssh}]},
- {"1.1.4", [{restart_application, ssh}]},
- {"1.1.3", [{restart_application, ssh}]},
- {"1.1.2", [{restart_application, ssh}]}
]
}.
diff --git a/lib/ssh/src/ssh.erl b/lib/ssh/src/ssh.erl
index 0eef3f95c0..994c77436a 100644
--- a/lib/ssh/src/ssh.erl
+++ b/lib/ssh/src/ssh.erl
@@ -24,7 +24,7 @@
-include("ssh.hrl").
-include("ssh_connect.hrl").
--export([start/0, start/1, stop/0, connect/3, close/1, connection_info/2,
+-export([start/0, start/1, stop/0, connect/3, connect/4, close/1, connection_info/2,
channel_info/3,
daemon/1, daemon/2, daemon/3,
stop_listener/1, stop_listener/2, stop_daemon/1, stop_daemon/2,
diff --git a/lib/ssh/src/ssh.hrl b/lib/ssh/src/ssh.hrl
index 0e4285295c..ac249b05e3 100644
--- a/lib/ssh/src/ssh.hrl
+++ b/lib/ssh/src/ssh.hrl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2004-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_acceptor.erl b/lib/ssh/src/ssh_acceptor.erl
index d19fee14e1..57229daa27 100644
--- a/lib/ssh/src/ssh_acceptor.erl
+++ b/lib/ssh/src/ssh_acceptor.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2008-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_acceptor_sup.erl b/lib/ssh/src/ssh_acceptor_sup.erl
index 707e3d3a5e..f37e1fe4ff 100644
--- a/lib/ssh/src/ssh_acceptor_sup.erl
+++ b/lib/ssh/src/ssh_acceptor_sup.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2008-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_app.erl b/lib/ssh/src/ssh_app.erl
index 5793d3a321..38659b1a2d 100644
--- a/lib/ssh/src/ssh_app.erl
+++ b/lib/ssh/src/ssh_app.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2004-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_auth.erl b/lib/ssh/src/ssh_auth.erl
index aa74528544..9dbd95886e 100644
--- a/lib/ssh/src/ssh_auth.erl
+++ b/lib/ssh/src/ssh_auth.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2008-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_auth.hrl b/lib/ssh/src/ssh_auth.hrl
index 80c5a6819b..7d7bad4436 100644
--- a/lib/ssh/src/ssh_auth.hrl
+++ b/lib/ssh/src/ssh_auth.hrl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2008-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_bits.erl b/lib/ssh/src/ssh_bits.erl
index 21ddc5e8fe..399581a0fd 100755
--- a/lib/ssh/src/ssh_bits.erl
+++ b/lib/ssh/src/ssh_bits.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2005-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_channel.erl b/lib/ssh/src/ssh_channel.erl
index 3d67065ee1..8a49a44a6c 100644
--- a/lib/ssh/src/ssh_channel.erl
+++ b/lib/ssh/src/ssh_channel.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2008-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_channel_sup.erl b/lib/ssh/src/ssh_channel_sup.erl
index c184fed627..0093bce9c2 100644
--- a/lib/ssh/src/ssh_channel_sup.erl
+++ b/lib/ssh/src/ssh_channel_sup.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2008-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_cli.erl b/lib/ssh/src/ssh_cli.erl
index 964f35121a..2764ea2e43 100644
--- a/lib/ssh/src/ssh_cli.erl
+++ b/lib/ssh/src/ssh_cli.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2005-2010. 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%
%%
@@ -428,7 +428,7 @@ start_shell(ConnectionManager, State) ->
{ok, User} =
ssh_userreg:lookup_user(ConnectionManager),
{ok, PeerAddr} =
- ssh_cm:get_peer_addr(ConnectionManager),
+ ssh_connection_manager:peer_addr(ConnectionManager),
fun() -> Shell(User, PeerAddr) end;
_ ->
Shell
diff --git a/lib/ssh/src/ssh_cm.erl b/lib/ssh/src/ssh_cm.erl
deleted file mode 100755
index c4d535df9a..0000000000
--- a/lib/ssh/src/ssh_cm.erl
+++ /dev/null
@@ -1,237 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-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%
-%%
-
-%%
-
-%%% Description : Backwards compatibility wrapper
-
--module(ssh_cm).
-
--include("ssh.hrl").
--include("ssh_connect.hrl").
-
-%% -define(DEFAULT_PACKET_SIZE, 32768).
-%% -define(DEFAULT_WINDOW_SIZE, 2*?DEFAULT_PACKET_SIZE).
-%%-define(DEFAULT_TIMEOUT, 5000).
-
--export([connect/1, connect/2, connect/3]).
--export([listen/2, listen/3, listen/4, stop_listener/1]).
--export([stop/1]).
-
--deprecated({connect, 1, next_major_release}).
--deprecated({connect, 2, next_major_release}).
--deprecated({connect, 3, next_major_release}).
--deprecated({listen, 2, next_major_release}).
--deprecated({listen, 3, next_major_release}).
--deprecated({listen, 4, next_major_release}).
--deprecated({stop_listener, 1, next_major_release}).
--deprecated({stop, 1, next_major_release}).
-
--export([adjust_window/3, attach/2, attach/3, detach/2,
- tcpip_forward/3, cancel_tcpip_forward/3, direct_tcpip/6,
- direct_tcpip/8, close/2, shell/2, exec/4,
- send/3, send/4,
- send_ack/3, send_ack/4, send_ack/5, send_eof/2,
- session_open/2, session_open/4, subsystem/4,
- open_pty/3, open_pty/7, open_pty/9,
- set_user_ack/4,
- setenv/5, signal/3, winch/4]).
-
--deprecated({adjust_window, 3, next_major_release}).
--deprecated({attach, 2, next_major_release}).
--deprecated({attach, 3, next_major_release}).
--deprecated({detach, 2, next_major_release}).
--deprecated({tcpip_forward, 3, next_major_release}).
--deprecated({cancel_tcpip_forward, 3, next_major_release}).
--deprecated({direct_tcpip, 6, next_major_release}).
--deprecated({direct_tcpip, 8, next_major_release}).
--deprecated({close, 2, next_major_release}).
--deprecated({shell, 2, next_major_release}).
--deprecated({exec, 4, next_major_release}).
--deprecated({send, 3, next_major_release}).
--deprecated({send, 4, next_major_release}).
--deprecated({send_ack, 3, next_major_release}).
--deprecated({send_ack, 4, next_major_release}).
--deprecated({send_ack, 5, next_major_release}).
--deprecated({send_eof, 2, next_major_release}).
--deprecated({session_open, 2, next_major_release}).
--deprecated({session_open, 4, next_major_release}).
--deprecated({subsystem, 4, next_major_release}).
--deprecated({open_pty, 3, next_major_release}).
--deprecated({open_pty, 7, next_major_release}).
--deprecated({open_pty, 9, next_major_release}).
--deprecated({set_user_ack, 4, next_major_release}).
--deprecated({setenv, 5, next_major_release}).
--deprecated({signal, 3, next_major_release}).
--deprecated({winch, 4, next_major_release}).
-
--export([info/1, info/2, recv_window/3,
- send_window/3, renegotiate/1, renegotiate/2,
- get_peer_addr/1]).
-
-%%====================================================================
-%% API
-%%====================================================================
-connect(Host) ->
- connect(Host, []).
-connect(Host, Opts) ->
- connect(Host, ?SSH_DEFAULT_PORT, Opts).
-connect(Host, Port, Opts) ->
- ssh:connect(Host, Port, Opts).
-
-listen(ChannelSpec, Port) ->
- listen(ChannelSpec, Port, []).
-listen(ChannelSpec, Port, Opts) ->
- listen(ChannelSpec, any, Port, Opts).
-listen(ChannelSpec, "localhost", Port, Opts) ->
- listen(ChannelSpec, any, Port, Opts);
-listen(_ChannelSpec, Host, Port, Opts) ->
- ssh:daemon(Host, Port, Opts).
-
-stop_listener(SysSup) ->
- ssh_system_sup:stop_listener(SysSup).
-stop(Cm) ->
- ssh:close(Cm).
-
-%% CM Client commands
-session_open(Cm, Timeout) ->
- session_open(Cm, ?DEFAULT_WINDOW_SIZE, ?DEFAULT_PACKET_SIZE, Timeout).
-
-session_open(Cm, InitialWindowSize, MaxPacketSize, Timeout) ->
- ssh_connection:session_channel(Cm, InitialWindowSize, MaxPacketSize,
- Timeout).
-
-
-setenv(Cm, Channel, Var, Value, Timeout) ->
- ssh_connection:setenv(Cm, Channel, Var, Value, Timeout).
-
-shell(Cm, Channel) ->
- ssh_connection:shell(Cm, Channel).
-
-exec(Cm, Channel, Command, Timeout) ->
- ssh_connection:exec(Cm, Channel, Command, Timeout).
-
-subsystem(Cm, Channel, SubSystem, Timeout) ->
- ssh_connection:subsystem(Cm, Channel, SubSystem, Timeout).
-
-%% Not needed for backwards compatibility for now
-attach(_Cm, _Timeout) ->
- ok.
-
-attach(_Cm, _ChannelPid, _Timeout) ->
- ok.
-
-detach(_Cm, _Timeout) ->
- ok.
-
-%% Not needed, send_ack is now call! Temp backwardcompability
-set_user_ack(_, _, _, _) ->
- ok.
-
-adjust_window(Cm, Channel, Bytes) ->
- ssh_connection:adjust_window(Cm, Channel, Bytes).
-
-close(Cm, Channel) ->
- ssh_connection:close(Cm, Channel).
-
-send_eof(Cm, Channel) ->
- ssh_connection:send_eof(Cm, Channel).
-
-send(Cm, Channel, Data) ->
- ssh_connection:send(Cm, Channel, 0, Data).
-
-send(Cm, Channel, Type, Data) ->
- ssh_connection:send(Cm, Channel, Type, Data).
-
-%% Send ack is not needed
-send_ack(Cm, Channel, Data) ->
- send_ack(Cm, Channel, 0, Data, infinity).
-
-send_ack(Cm, Channel, Type, Data) ->
- send_ack(Cm, Channel, Type, Data, infinity).
-
-send_ack(Cm, Channel, Type, Data, Timeout) ->
- ssh_connection:send(Cm, Channel, Type, Data, Timeout).
-
-%% ----------------------------------------------------------------------
-%% These functions replacers are not officially supported but proably will be
-%% when we had time to test them.
-%% ----------------------------------------------------------------------
-direct_tcpip(Cm, RemoteHost, RemotePort, OrigIP, OrigPort, Timeout) ->
- direct_tcpip(Cm, RemoteHost, RemotePort, OrigIP, OrigPort,
- ?DEFAULT_WINDOW_SIZE, ?DEFAULT_PACKET_SIZE, Timeout).
-
-direct_tcpip(Cm, RemoteIP, RemotePort, OrigIP, OrigPort,
- InitialWindowSize, MaxPacketSize, Timeout) ->
- ssh_connection:direct_tcpip(Cm, RemoteIP, RemotePort,
- OrigIP, OrigPort,
- InitialWindowSize,
- MaxPacketSize, Timeout).
-
-tcpip_forward(Cm, BindIP, BindPort) ->
- ssh_connection:tcpip_forward(Cm, BindIP, BindPort).
-
-cancel_tcpip_forward(Cm, BindIP, Port) ->
- ssh_connection:cancel_tcpip_forward(Cm, BindIP, Port).
-
-open_pty(Cm, Channel, Timeout) ->
- open_pty(Cm, Channel, os:getenv("TERM"), 80, 24, [], Timeout).
-
-open_pty(Cm, Channel, Term, Width, Height, PtyOpts, Timeout) ->
- open_pty(Cm, Channel, Term, Width, Height, 0, 0, PtyOpts, Timeout).
-
-open_pty(Cm, Channel, Term, Width, Height, PixWidth, PixHeight,
- PtyOpts, Timeout) ->
- ssh_connection:open_pty(Cm, Channel, Term,
- Width, Height, PixWidth,
- PixHeight, PtyOpts, Timeout).
-winch(Cm, Channel, Width, Height) ->
- winch(Cm, Channel, Width, Height, 0, 0).
-winch(Cm, Channel, Width, Height, PixWidth, PixHeight) ->
- ssh_connection:window_change(Cm, Channel, Width,
- Height, PixWidth, PixHeight).
-signal(Cm, Channel, Sig) ->
- ssh_connection:signal(Cm, Channel, Sig).
-
-%% ----------------------------------------------------------------------
-%% These functions replacers are not officially supported and
-%% the format of them will proably change when and
-%% if they get supported.
-%% ----------------------------------------------------------------------
-info(Cm) ->
- info(Cm, all).
-
-info(Cm, ChannelPid) ->
- ssh_connection_manager:info(Cm, ChannelPid).
-
-send_window(Cm, Channel, Timeout) ->
- ssh_connection_manager:send_window(Cm, Channel, Timeout).
-
-recv_window(Cm, Channel, Timeout) ->
- ssh_connection_manager:recv_window(Cm, Channel, Timeout).
-
-renegotiate(Cm) ->
- renegotiate(Cm, []).
-renegotiate(Cm, _Opts) ->
- %%TODO: How should this work, backwards compat?
- ssh_connection_manager:renegotiate(Cm).
-
-get_peer_addr(Cm) ->
- ssh_connection_manager:peer_addr(Cm).
-
diff --git a/lib/ssh/src/ssh_connect.hrl b/lib/ssh/src/ssh_connect.hrl
index a5a4e42cd8..57bb141c60 100755
--- a/lib/ssh/src/ssh_connect.hrl
+++ b/lib/ssh/src/ssh_connect.hrl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2005-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_connection_controler.erl b/lib/ssh/src/ssh_connection_controler.erl
index 7960eb11c6..990541f8d6 100644
--- a/lib/ssh/src/ssh_connection_controler.erl
+++ b/lib/ssh/src/ssh_connection_controler.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2009-2010. 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%
%%
%%--------------------------------------------------------------------
diff --git a/lib/ssh/src/ssh_dsa.erl b/lib/ssh/src/ssh_dsa.erl
index ec24fbcd01..1b9a396f0c 100755
--- a/lib/ssh/src/ssh_dsa.erl
+++ b/lib/ssh/src/ssh_dsa.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2005-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_file.erl b/lib/ssh/src/ssh_file.erl
index 8a3c903e51..5572349fe7 100755
--- a/lib/ssh/src/ssh_file.erl
+++ b/lib/ssh/src/ssh_file.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2005-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_io.erl b/lib/ssh/src/ssh_io.erl
index 0e343c20b4..915fd63e4f 100755
--- a/lib/ssh/src/ssh_io.erl
+++ b/lib/ssh/src/ssh_io.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2005-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_math.erl b/lib/ssh/src/ssh_math.erl
index efe7f56979..510eb16aa6 100755
--- a/lib/ssh/src/ssh_math.erl
+++ b/lib/ssh/src/ssh_math.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2005-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_no_io.erl b/lib/ssh/src/ssh_no_io.erl
index 5f363ae6c2..2c8dd92ee2 100644
--- a/lib/ssh/src/ssh_no_io.erl
+++ b/lib/ssh/src/ssh_no_io.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2005-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_rsa.erl b/lib/ssh/src/ssh_rsa.erl
index 7c2bf9a2bf..e27cdcf7bd 100755
--- a/lib/ssh/src/ssh_rsa.erl
+++ b/lib/ssh/src/ssh_rsa.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2005-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_sftp.erl b/lib/ssh/src/ssh_sftp.erl
index cbfa208f6f..59e09fdd0f 100755
--- a/lib/ssh/src/ssh_sftp.erl
+++ b/lib/ssh/src/ssh_sftp.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2005-2010. 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%
%%
@@ -46,14 +46,6 @@
recv_window/1, list_dir/2, read_file/2, write_file/3,
recv_window/2, list_dir/3, read_file/3, write_file/4]).
-%% Deprecated
--export([connect/1, connect/2, connect/3, stop/1]).
-
--deprecated({connect, 1, next_major_release}).
--deprecated({connect, 2, next_major_release}).
--deprecated({connect, 3, next_major_release}).
--deprecated({stop, 1, next_major_release}).
-
%% ssh_channel callbacks
-export([init/1, handle_call/3, handle_msg/2, handle_ssh_msg/2, terminate/2]).
%% TODO: Should be placed elsewhere ssh_sftpd should not call functions in ssh_sftp!
@@ -1116,33 +1108,3 @@ lseek_pos(_, _, _) ->
{error, einval}.
-%%%%%% Deprecated %%%%
-connect(Cm) when is_pid(Cm) ->
- connect(Cm, []);
-connect(Host) when is_list(Host) ->
- connect(Host, []).
-connect(Cm, Opts) when is_pid(Cm) ->
- Timeout = proplists:get_value(timeout, Opts, infinity),
- case ssh_xfer:attach(Cm, []) of
- {ok, ChannelId, Cm} ->
- ssh_channel:start(Cm, ChannelId, ?MODULE, [Cm, ChannelId,
- Timeout]);
- Error ->
- Error
- end;
-connect(Host, Opts) ->
- connect(Host, 22, Opts).
-connect(Host, Port, Opts) ->
- Timeout = proplists:get_value(timeout, Opts, infinity),
- case ssh_xfer:connect(Host, Port, proplists:delete(timeout, Opts)) of
- {ok, ChannelId, Cm} ->
- ssh_channel:start(Cm, ChannelId, ?MODULE, [Cm,
- ChannelId, Timeout]);
- Error ->
- Error
- end.
-
-
-stop(Pid) ->
- call(Pid, stop, infinity).
-
diff --git a/lib/ssh/src/ssh_sftpd.erl b/lib/ssh/src/ssh_sftpd.erl
index 10b8ede1e4..dc789092dd 100644
--- a/lib/ssh/src/ssh_sftpd.erl
+++ b/lib/ssh/src/ssh_sftpd.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2005-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_sftpd_file.erl b/lib/ssh/src/ssh_sftpd_file.erl
index f0b6bb4de5..91ba228e38 100644
--- a/lib/ssh/src/ssh_sftpd_file.erl
+++ b/lib/ssh/src/ssh_sftpd_file.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2006-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2006-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_sftpd_file_api.erl b/lib/ssh/src/ssh_sftpd_file_api.erl
index 8decfb38d9..176aa98194 100644
--- a/lib/ssh/src/ssh_sftpd_file_api.erl
+++ b/lib/ssh/src/ssh_sftpd_file_api.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2007-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2007-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_shell.erl b/lib/ssh/src/ssh_shell.erl
index f81b949119..6590486a4c 100644
--- a/lib/ssh/src/ssh_shell.erl
+++ b/lib/ssh/src/ssh_shell.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2009-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_ssh.erl b/lib/ssh/src/ssh_ssh.erl
deleted file mode 100644
index 6be8bf7a5a..0000000000
--- a/lib/ssh/src/ssh_ssh.erl
+++ /dev/null
@@ -1,65 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-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%
-%%
-
-%%
-
-%%% Description: THIS MODULE IS DEPRECATD AND SHOULD BE REMOVED IN R14
-
--module(ssh_ssh).
-
--export([connect/1, connect/2, connect/3]).
--deprecated({connect, 1, next_major_release}).
--deprecated({connect, 2, next_major_release}).
--deprecated({connect, 3, next_major_release}).
-
--include("ssh.hrl").
--include("ssh_connect.hrl").
-
--define(default_timeout, 10000).
-
-%%% Backwards compatibility
-connect(A) ->
- connect(A, []).
-
-connect(Host, Opts) when is_list(Host) ->
- connect(Host, 22, Opts);
-connect(CM, Opts) ->
- Timeout = proplists:get_value(connect_timeout, Opts, ?default_timeout),
- session(CM, Timeout).
-
-connect(Host, Port, Opts) ->
- case ssh:connect(Host, Port, Opts) of
- {ok, CM} ->
- session(CM, proplists:get_value(connect_timeout,
- Opts, ?default_timeout));
- Error ->
- Error
- end.
-
-session(CM, Timeout) ->
- case ssh_connection:session_channel(CM, Timeout) of
- {ok, ChannelId} ->
- Args = [{channel_cb, ssh_shell},
- {init_args,[CM, ChannelId]},
- {cm, CM}, {channel_id, ChannelId}],
- {ok, State} = ssh_channel:init([Args]),
- ssh_channel:enter_loop(State);
- Error ->
- Error
- end.
diff --git a/lib/ssh/src/ssh_sshd.erl b/lib/ssh/src/ssh_sshd.erl
deleted file mode 100644
index 4bc0469061..0000000000
--- a/lib/ssh/src/ssh_sshd.erl
+++ /dev/null
@@ -1,48 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-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%
-%%
-
-%%
-%% Description: This module uses the erlang shell and
-%% ssh_cli to make an erlang sshd
-
--module(ssh_sshd).
-
-%% API
--export([listen/0, listen/1, listen/2, listen/3, stop/1]).
-
--deprecated({listen, 0, next_major_release}).
--deprecated({listen, 1, next_major_release}).
--deprecated({listen, 2, next_major_release}).
--deprecated({listen, 3, next_major_release}).
--deprecated({stop, 1, next_major_release}).
-
-listen() ->
- listen(22).
-
-listen(Port) ->
- listen(Port, []).
-
-listen(Port, Opts) ->
- listen(any, Port, Opts).
-
-listen(Addr, Port, Opts) ->
- ssh:daemon(Addr, Port, Opts).
-
-stop(Pid) ->
- ssh:stop_daemon(Pid).
diff --git a/lib/ssh/src/ssh_subsystem_sup.erl b/lib/ssh/src/ssh_subsystem_sup.erl
index 17d47a91d5..d71b6bbc56 100644
--- a/lib/ssh/src/ssh_subsystem_sup.erl
+++ b/lib/ssh/src/ssh_subsystem_sup.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2008-2010. 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%
%%
%%
diff --git a/lib/ssh/src/ssh_sup.erl b/lib/ssh/src/ssh_sup.erl
index 4c46b1586b..f307d1f833 100644
--- a/lib/ssh/src/ssh_sup.erl
+++ b/lib/ssh/src/ssh_sup.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2008-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_system_sup.erl b/lib/ssh/src/ssh_system_sup.erl
index 477f60f993..40db2e4adf 100644
--- a/lib/ssh/src/ssh_system_sup.erl
+++ b/lib/ssh/src/ssh_system_sup.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2008-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_transport.erl b/lib/ssh/src/ssh_transport.erl
index 5617231c60..e79ccdda0c 100644
--- a/lib/ssh/src/ssh_transport.erl
+++ b/lib/ssh/src/ssh_transport.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2004-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_transport.hrl b/lib/ssh/src/ssh_transport.hrl
index 18a23f0533..27d3e32355 100644
--- a/lib/ssh/src/ssh_transport.hrl
+++ b/lib/ssh/src/ssh_transport.hrl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2008-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_userauth.hrl b/lib/ssh/src/ssh_userauth.hrl
index 39cc032ca5..8eb2d46ed1 100755
--- a/lib/ssh/src/ssh_userauth.hrl
+++ b/lib/ssh/src/ssh_userauth.hrl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2005-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_userreg.erl b/lib/ssh/src/ssh_userreg.erl
index 06f4076b51..33c801f490 100644
--- a/lib/ssh/src/ssh_userreg.erl
+++ b/lib/ssh/src/ssh_userreg.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2008-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_xfer.erl b/lib/ssh/src/ssh_xfer.erl
index a347a9c095..c9631a73b1 100644
--- a/lib/ssh/src/ssh_xfer.erl
+++ b/lib/ssh/src/ssh_xfer.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2005-2010. 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%
%%
diff --git a/lib/ssh/src/ssh_xfer.hrl b/lib/ssh/src/ssh_xfer.hrl
index f32ec5f774..4a4f1a4291 100755
--- a/lib/ssh/src/ssh_xfer.hrl
+++ b/lib/ssh/src/ssh_xfer.hrl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2005-2010. 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%
%%
diff --git a/lib/ssh/src/sshc_sup.erl b/lib/ssh/src/sshc_sup.erl
index 265d1a1cd6..7c29c669e4 100644
--- a/lib/ssh/src/sshc_sup.erl
+++ b/lib/ssh/src/sshc_sup.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2008-2010. 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%
%%
diff --git a/lib/ssh/src/sshd_sup.erl b/lib/ssh/src/sshd_sup.erl
index 9c9ba5958c..747906b2cf 100644
--- a/lib/ssh/src/sshd_sup.erl
+++ b/lib/ssh/src/sshd_sup.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2008-2010. 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%
%%
%%
diff --git a/lib/ssh/vsn.mk b/lib/ssh/vsn.mk
index c275cb7acf..38a82ff32d 100644
--- a/lib/ssh/vsn.mk
+++ b/lib/ssh/vsn.mk
@@ -1,11 +1,13 @@
#-*-makefile-*- ; force emacs to enter makefile-mode
-SSH_VSN = 1.1.9
+SSH_VSN = 2.0
APP_VSN = "ssh-$(SSH_VSN)"
TICKETS = OTP-8524 \
OTP-8534 \
- OTP-8535
+ OTP-8535 \
+ OTP-8550 \
+ OTP-8596
TICKETS_1.1.8 = OTP-8356 \
OTP-8401
diff --git a/lib/ssl/doc/src/new_ssl.xml b/lib/ssl/doc/src/new_ssl.xml
index b642280096..ab6e112a35 100644
--- a/lib/ssl/doc/src/new_ssl.xml
+++ b/lib/ssl/doc/src/new_ssl.xml
@@ -84,8 +84,6 @@
<item>New API functions are
ssl:shutdown/2, ssl:cipher_suites/[0,1] and
ssl:versions/0</item>
- <item>Diffie-Hellman keyexchange is
- not supported yet.</item>
<item>CRL and policy certificate
extensions are not supported yet. </item>
<item>Supported SSL/TLS-versions are SSL-3.0 and TLS-1.0 </item>
@@ -118,8 +116,8 @@
{fail_if_no_peer_cert, boolean()}
{depth, integer()} |
{certfile, path()} | {keyfile, path()} | {password, string()} |
- {cacertfile, path()} | {ciphers, ciphers()} | {ssl_imp, ssl_imp()}
- | {reuse_sessions, boolean()} | {reuse_session, fun()}
+ {cacertfile, path()} | {dhfile, path()} | {ciphers, ciphers()} |
+ {ssl_imp, ssl_imp()} | {reuse_sessions, boolean()} | {reuse_session, fun()}
</c></p>
<p><c>transportoption() = {CallbackModule, DataTag, ClosedTag}
@@ -262,6 +260,12 @@ end
CA certificates (trusted certificates used for verifying a peer
certificate). May be omitted if you do not want to verify
the peer.</item>
+
+ <tag>{dhfile, path()}</tag>
+ <item>Path to file containing PEM encoded Diffie Hellman parameters,
+ for the server to use if a cipher suite using Diffie Hellman key exchange
+ is negotiated. If not specified hardcode parameters will be used.
+ </item>
<tag>{ciphers, ciphers()}</tag>
<item>The function <c>ciphers_suites/0</c> can
@@ -491,6 +495,19 @@ end
</func>
<func>
+ <name>renegotiate(Socket) -> ok | {error, Reason}</name>
+ <fsummary> Initiates a new handshake.</fsummary>
+ <type>
+ <v>Socket = sslsocket()</v>
+ </type>
+ <desc><p>Initiates a new handshake. A notable return value is
+ <c>{error, renegotiation_rejected}</c> indicating that the peer
+ refused to go through with the renegotiation but the connection
+ is still active using the previously negotiated session.</p>
+ </desc>
+ </func>
+
+ <func>
<name>send(Socket, Data) -> ok | {error, Reason}</name>
<fsummary>Write data to a socket.</fsummary>
<type>
@@ -564,6 +581,10 @@ end
<p> Upgrades a gen_tcp, or
equivalent, socket to a ssl socket e.i performs the
ssl server-side handshake.</p>
+ <p><note>Note that the listen socket should be in {active, false} mode
+ before telling the client that the server is ready to upgrade
+ and calling this function, otherwise the upgrade may
+ or may not succeed depending on timing.</note></p>
</desc>
</func>
diff --git a/lib/ssl/doc/src/notes.xml b/lib/ssl/doc/src/notes.xml
index 2dd11bc88e..9d13427677 100644
--- a/lib/ssl/doc/src/notes.xml
+++ b/lib/ssl/doc/src/notes.xml
@@ -30,6 +30,67 @@
</header>
<p>This document describes the changes made to the SSL application.
</p>
+<section><title>SSL 3.11</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fixes handling of the option fail_if_no_peer_cert and
+ some undocumented options. Thanks to Rory Byrne.</p>
+ <p>
+ Own Id: OTP-8557</p>
+ </item>
+ </list>
+ </section>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Support for Diffie-Hellman. ssl-3.11 requires
+ public_key-0.6.</p>
+ <p>
+ Own Id: OTP-7046</p>
+ </item>
+ <item>
+ <p>
+ New ssl now properly handles ssl renegotiation, and
+ initiates a renegotiation if ssl/ltls-sequence numbers
+ comes close to the max value. However RFC-5746 is not yet
+ supported, but will be in an upcoming release.</p>
+ <p>
+ Own Id: OTP-8517</p>
+ </item>
+ <item>
+ <p>
+ When gen_tcp is configured with the {packet,http} option,
+ it automatically switches to expect HTTP Headers after a
+ HTTP Request/Response line has been received. This update
+ fixes ssl to behave in the same way. Thanks to Rory
+ Byrne.</p>
+ <p>
+ Own Id: OTP-8545</p>
+ </item>
+ <item>
+ <p>
+ Ssl now correctly verifies the extended_key_usage
+ extension and also allows the user to verify application
+ specific extensions by supplying an appropriate fun.</p>
+ <p>
+ Own Id: OTP-8554 Aux Id: OTP-8553 </p>
+ </item>
+ <item>
+ <p>
+ Fixed ssl:transport_accept/2 to return properly when
+ socket is closed. Thanks to Rory Byrne.</p>
+ <p>
+ Own Id: OTP-8560</p>
+ </item>
+ </list>
+ </section>
+
+</section>
<section><title>SSL 3.10.9</title>
diff --git a/lib/ssl/src/ssl.appup.src b/lib/ssl/src/ssl.appup.src
index fdda65021d..e8ae6846aa 100644
--- a/lib/ssl/src/ssl.appup.src
+++ b/lib/ssl/src/ssl.appup.src
@@ -9,7 +9,8 @@
{"3.10.5", [{restart_application, ssl}]},
{"3.10.6", [{restart_application, ssl}]},
{"3.10.7", [{restart_application, ssl}]},
- {"3.10.8", [{restart_application, ssl}]}
+ {"3.10.8", [{restart_application, ssl}]},
+ {"3.10.9", [{restart_application, ssl}]}
],
[
{"3.10", [{restart_application, ssl}]},
@@ -19,6 +20,7 @@
{"3.10.4", [{restart_application, ssl}]},
{"3.10.5", [{restart_application, ssl}]},
{"3.10.6", [{restart_application, ssl}]},
- {"3.10.8", [{restart_application, ssl}]}
+ {"3.10.8", [{restart_application, ssl}]},
+ {"3.10.9", [{restart_application, ssl}]}
]}.
diff --git a/lib/ssl/src/ssl.erl b/lib/ssl/src/ssl.erl
index de74c91505..0ae3abfa37 100644
--- a/lib/ssl/src/ssl.erl
+++ b/lib/ssl/src/ssl.erl
@@ -29,13 +29,15 @@
connect/3, connect/2, connect/4, connection_info/1,
controlling_process/2, listen/2, pid/1, peername/1, recv/2, recv/3,
send/2, getopts/2, setopts/2, seed/1, sockname/1, peercert/1,
- peercert/2, version/0, versions/0, session_info/1, format_error/1]).
+ peercert/2, version/0, versions/0, session_info/1, format_error/1,
+ renegotiate/1]).
%% Should be deprecated as soon as old ssl is removed
%%-deprecated({pid, 1, next_major_release}).
-include("ssl_int.hrl").
-include("ssl_internal.hrl").
+-include("ssl_record.hrl").
-record(config, {ssl, %% SSL parameters
inet_user, %% User set inet options
@@ -145,24 +147,28 @@ transport_accept(ListenSocket) ->
transport_accept(ListenSocket, infinity).
transport_accept(#sslsocket{pid = {ListenSocket, #config{cb=CbInfo, ssl=SslOpts}},
- fd = new_ssl} = SslSocket, Timeout) ->
+ fd = new_ssl}, Timeout) ->
%% The setopt could have been invoked on the listen socket
%% and options should be inherited.
EmOptions = emulated_options(),
{ok, InetValues} = inet:getopts(ListenSocket, EmOptions),
- {CbModule,_,_} = CbInfo,
- {ok, Socket} = CbModule:accept(ListenSocket, Timeout),
- inet:setopts(Socket, internal_inet_values()),
- {ok, Port} = inet:port(Socket),
- case ssl_connection_sup:start_child([server, "localhost", Port, Socket,
- {SslOpts, socket_options(InetValues)}, self(),
- CbInfo]) of
- {ok, Pid} ->
- CbModule:controlling_process(Socket, Pid),
- {ok, SslSocket#sslsocket{pid = Pid}};
- {error, Reason} ->
- {error, Reason}
+ ok = inet:setopts(ListenSocket, internal_inet_values()),
+ {CbModule,_,_} = CbInfo,
+ case CbModule:accept(ListenSocket, Timeout) of
+ {ok, Socket} ->
+ ok = inet:setopts(ListenSocket, InetValues),
+ {ok, Port} = inet:port(Socket),
+ ConnArgs = [server, "localhost", Port, Socket,
+ {SslOpts, socket_options(InetValues)}, self(), CbInfo],
+ case ssl_connection_sup:start_child(ConnArgs) of
+ {ok, Pid} ->
+ ssl_connection:socket_control(Socket, Pid, CbModule);
+ {error, Reason} ->
+ {error, Reason}
+ end;
+ {error, Reason} ->
+ {error, Reason}
end;
transport_accept(#sslsocket{} = ListenSocket, Timeout) ->
@@ -180,22 +186,9 @@ transport_accept(#sslsocket{} = ListenSocket, Timeout) ->
ssl_accept(ListenSocket) ->
ssl_accept(ListenSocket, infinity).
-ssl_accept(#sslsocket{pid = Pid, fd = new_ssl}, Timeout) ->
- gen_fsm:send_event(Pid, socket_control),
- try gen_fsm:sync_send_all_state_event(Pid, started, Timeout) of
- connected ->
- ok;
- {error, _} = Error ->
- Error
- catch
- exit:{noproc, _} ->
- {error, closed};
- exit:{timeout, _} ->
- {error, timeout};
- exit:{normal, _} ->
- {error, closed}
- end;
-
+ssl_accept(#sslsocket{fd = new_ssl} = Socket, Timeout) ->
+ ssl_connection:handshake(Socket, Timeout);
+
ssl_accept(ListenSocket, SslOptions) when is_port(ListenSocket) ->
ssl_accept(ListenSocket, SslOptions, infinity);
@@ -211,7 +204,7 @@ ssl_accept(Socket, SslOptions, Timeout) when is_port(Socket) ->
try handle_options(SslOptions ++ InetValues, server) of
{ok, #config{cb=CbInfo,ssl=SslOpts, emulated=EmOpts}} ->
{ok, Port} = inet:port(Socket),
- ssl_connection:accept(Port, Socket,
+ ssl_connection:ssl_accept(Port, Socket,
{SslOpts, EmOpts},
self(), CbInfo, Timeout)
catch
@@ -232,7 +225,7 @@ close(Socket = #sslsocket{}) ->
ssl_broker:close(Socket).
%%--------------------------------------------------------------------
-%% Function: send(Socket, Data) -> ok
+%% Function: send(Socket, Data) -> ok | {error, Reason}
%%
%% Description: Sends data over the ssl connection
%%--------------------------------------------------------------------
@@ -436,6 +429,10 @@ versions() ->
AvailableVsns = ?DEFAULT_SUPPORTED_VERSIONS,
[{ssl_app, ?VSN}, {supported, SupportedVsns}, {available, AvailableVsns}].
+
+renegotiate(#sslsocket{pid = Pid, fd = new_ssl}) ->
+ ssl_connection:renegotiation(Pid).
+
%%%--------------------------------------------------------------
%%% Internal functions
%%%--------------------------------------------------------------------
@@ -509,6 +506,9 @@ handle_options(Opts0, Role) ->
end
end,
+ UserFailIfNoPeerCert = validate_option(fail_if_no_peer_cert,
+ proplists:get_value(fail_if_no_peer_cert, Opts, false)),
+
{Verify, FailIfNoPeerCert, CaCertDefault} =
%% Handle 0, 1, 2 for backwards compatibility
case proplists:get_value(verify, Opts, verify_none) of
@@ -521,9 +521,7 @@ handle_options(Opts0, Role) ->
verify_none ->
{verify_none, false, ca_cert_default(verify_none, Role)};
verify_peer ->
- {verify_peer, proplists:get_value(fail_if_no_peer_cert,
- Opts, false),
- ca_cert_default(verify_peer, Role)};
+ {verify_peer, UserFailIfNoPeerCert, ca_cert_default(verify_peer, Role)};
Value ->
throw({error, {eoptions, {verify, Value}}})
end,
@@ -534,28 +532,31 @@ handle_options(Opts0, Role) ->
versions = handle_option(versions, Opts, []),
verify = validate_option(verify, Verify),
verify_fun = handle_option(verify_fun, Opts, VerifyFun),
- fail_if_no_peer_cert = validate_option(fail_if_no_peer_cert,
- FailIfNoPeerCert),
+ fail_if_no_peer_cert = FailIfNoPeerCert,
verify_client_once = handle_option(verify_client_once, Opts, false),
+ validate_extensions_fun = handle_option(validate_extensions_fun, Opts, undefined),
depth = handle_option(depth, Opts, 1),
certfile = CertFile,
keyfile = handle_option(keyfile, Opts, CertFile),
key = handle_option(key, Opts, undefined),
password = handle_option(password, Opts, ""),
cacertfile = handle_option(cacertfile, Opts, CaCertDefault),
+ dhfile = handle_option(dhfile, Opts, undefined),
ciphers = handle_option(ciphers, Opts, []),
%% Server side option
reuse_session = handle_option(reuse_session, Opts, ReuseSessionFun),
reuse_sessions = handle_option(reuse_sessions, Opts, true),
+ renegotiate_at = handle_option(renegotiate_at, Opts, ?DEFAULT_RENEGOTIATE_AT),
debug = handle_option(debug, Opts, [])
},
CbInfo = proplists:get_value(cb_info, Opts, {gen_tcp, tcp, tcp_closed}),
- SslOptions = [versions, verify, verify_fun,
+ SslOptions = [versions, verify, verify_fun, validate_extensions_fun,
+ fail_if_no_peer_cert, verify_client_once,
depth, certfile, keyfile,
- key, password, cacertfile, ciphers,
+ key, password, cacertfile, dhfile, ciphers,
debug, reuse_session, reuse_sessions, ssl_imp,
- cd_info],
+ cb_info, renegotiate_at],
SockOpts = lists:foldl(fun(Key, PropList) ->
proplists:delete(Key, PropList)
@@ -585,6 +586,9 @@ validate_option(fail_if_no_peer_cert, Value)
validate_option(verify_client_once, Value)
when Value == true; Value == false ->
Value;
+
+validate_option(validate_extensions_fun, Value) when Value == undefined; is_function(Value) ->
+ Value;
validate_option(depth, Value) when is_integer(Value),
Value >= 0, Value =< 255->
Value;
@@ -605,11 +609,17 @@ validate_option(cacertfile, undefined) ->
"";
validate_option(cacertfile, Value) when is_list(Value), Value =/= "" ->
Value;
+validate_option(dhfile, undefined = Value) ->
+ Value;
+validate_option(dhfile, Value) when is_list(Value), Value =/= "" ->
+ Value;
validate_option(ciphers, Value) when is_list(Value) ->
Version = ssl_record:highest_protocol_version([]),
try cipher_suites(Version, Value)
catch
exit:_ ->
+ throw({error, {eoptions, {ciphers, Value}}});
+ error:_->
throw({error, {eoptions, {ciphers, Value}}})
end;
validate_option(reuse_session, Value) when is_function(Value) ->
@@ -617,6 +627,9 @@ validate_option(reuse_session, Value) when is_function(Value) ->
validate_option(reuse_sessions, Value) when Value == true;
Value == false ->
Value;
+validate_option(renegotiate_at, Value) when is_integer(Value) ->
+ min(Value, ?DEFAULT_RENEGOTIATE_AT);
+
validate_option(debug, Value) when is_list(Value); Value == true ->
Value;
validate_option(Opt, Value) ->
@@ -628,7 +641,7 @@ validate_versions([Version | Rest], Versions) when Version == 'tlsv1.1';
Version == tlsv1;
Version == sslv3 ->
validate_versions(Rest, Versions);
-validate_versions(Ver, Versions) ->
+validate_versions([Ver| _], Versions) ->
throw({error, {eoptions, {Ver, {versions, Versions}}}}).
validate_inet_option(mode, Value)
@@ -832,6 +845,11 @@ version() ->
Vsns
end,
{ok, {SSLVsn, CompVsn, LibVsn}}.
+
+min(N,M) when N < M ->
+ N;
+min(_, M) ->
+ M.
%% Only used to remove exit messages from old ssl
%% First is a nonsense clause to provide some
diff --git a/lib/ssl/src/ssl_certificate.erl b/lib/ssl/src/ssl_certificate.erl
index d97b61a5ce..686e90a70c 100644
--- a/lib/ssl/src/ssl_certificate.erl
+++ b/lib/ssl/src/ssl_certificate.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2007-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2007-2010. 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%
%%
@@ -29,10 +29,12 @@
-include("ssl_alert.hrl").
-include("ssl_internal.hrl").
-include("ssl_debug.hrl").
+-include_lib("public_key/include/public_key.hrl").
-export([trusted_cert_and_path/3,
certificate_chain/2,
- file_to_certificats/1]).
+ file_to_certificats/1,
+ validate_extensions/6]).
%%====================================================================
%% Internal application API
@@ -87,6 +89,30 @@ file_to_certificats(File) ->
{ok, List} = ssl_manager:cache_pem_file(File),
[Bin || {cert, Bin, not_encrypted} <- List].
+
+%% Validates ssl/tls specific extensions
+validate_extensions([], ValidationState, UnknownExtensions, _, AccErr, _) ->
+ {UnknownExtensions, ValidationState, AccErr};
+
+validate_extensions([#'Extension'{extnID = ?'id-ce-extKeyUsage',
+ extnValue = KeyUse,
+ critical = true} | Rest],
+ ValidationState, UnknownExtensions, Verify, AccErr0, Role) ->
+ case is_valid_extkey_usage(KeyUse, Role) of
+ true ->
+ validate_extensions(Rest, ValidationState, UnknownExtensions,
+ Verify, AccErr0, Role);
+ false ->
+ AccErr =
+ not_valid_extension({bad_cert, invalid_ext_key_usage}, Verify, AccErr0),
+ validate_extensions(Rest, ValidationState, UnknownExtensions, Verify, AccErr, Role)
+ end;
+
+validate_extensions([Extension | Rest], ValidationState, UnknownExtensions,
+ Verify, AccErr, Role) ->
+ validate_extensions(Rest, ValidationState, [Extension | UnknownExtensions],
+ Verify, AccErr, Role).
+
%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
@@ -154,3 +180,18 @@ not_valid(Alert, true, _) ->
throw(Alert);
not_valid(_, false, {ErlCert, Path}) ->
{ErlCert, Path, [{bad_cert, unknown_ca}]}.
+
+is_valid_extkey_usage(KeyUse, client) ->
+ %% Client wants to verify server
+ is_valid_key_usage(KeyUse,?'id-kp-serverAuth');
+is_valid_extkey_usage(KeyUse, server) ->
+ %% Server wants to verify client
+ is_valid_key_usage(KeyUse, ?'id-kp-clientAuth').
+
+is_valid_key_usage(KeyUse, Use) ->
+ lists:member(Use, KeyUse).
+
+not_valid_extension(Error, true, _) ->
+ throw(Error);
+not_valid_extension(Error, false, AccErrors) ->
+ [Error | AccErrors].
diff --git a/lib/ssl/src/ssl_connection.erl b/lib/ssl/src/ssl_connection.erl
index 4847fd278d..a406e86bbf 100644
--- a/lib/ssl/src/ssl_connection.erl
+++ b/lib/ssl/src/ssl_connection.erl
@@ -39,17 +39,17 @@
-include_lib("public_key/include/public_key.hrl").
%% Internal application API
--export([send/2, send/3, recv/3, connect/7, accept/6, close/1, shutdown/2,
+-export([send/2, send/3, recv/3, connect/7, ssl_accept/6, handshake/2,
+ socket_control/3, close/1, shutdown/2,
new_user/2, get_opts/2, set_opts/2, info/1, session_info/1,
- peer_certificate/1,
- sockname/1, peername/1]).
+ peer_certificate/1, sockname/1, peername/1, renegotiation/1]).
%% Called by ssl_connection_sup
-export([start_link/7]).
%% gen_fsm callbacks
--export([init/1, hello/2, certify/2, cipher/2, connection/2, connection/3, abbreviated/2,
- handle_event/3,
+-export([init/1, hello/2, certify/2, cipher/2, connection/2,
+ abbreviated/2, handle_event/3,
handle_sync_event/4, handle_info/3, terminate/3, code_change/4]).
-record(state, {
@@ -78,57 +78,94 @@
client_certificate_requested = false,
key_algorithm, % atom as defined by cipher_suite
public_key_info, % PKIX: {Algorithm, PublicKey, PublicKeyParams}
- private_key, % PKIX: 'RSAPrivateKey'
- diffie_hellman_params, %
+ private_key, % PKIX: #'RSAPrivateKey'{}
+ diffie_hellman_params, % PKIX: #'DHParameter'{} relevant for server side
+ diffie_hellman_keys, % {PublicKey, PrivateKey}
premaster_secret, %
cert_db_ref, % ets_table()
from, % term(), where to reply
bytes_to_read, % integer(), # bytes to read in passive mode
user_data_buffer, % binary()
%% tls_buffer, % Keeps a lookahead one packet if available
- log_alert % boolan()
+ log_alert, % boolean()
+ renegotiation, % {boolean(), From | internal | peer}
+ recv_during_renegotiation, %boolean()
+ send_queue % queue()
}).
+-define(DEFAULT_DIFFIE_HELLMAN_PARAMS,
+ #'DHParameter'{prime = ?DEFAULT_DIFFIE_HELLMAN_PRIME,
+ base = ?DEFAULT_DIFFIE_HELLMAN_GENERATOR}).
+
%%====================================================================
%% Internal application API
%%====================================================================
%%--------------------------------------------------------------------
-%% Function:
+%% Function: send(Pid, Data) -> ok | {error, Reason}
%%
-%% Description:
+%% Description: Sends data over the ssl connection
%%--------------------------------------------------------------------
send(Pid, Data) ->
- sync_send_event(Pid, {application_data, erlang:iolist_to_binary(Data)}, infinity).
+ sync_send_all_state_event(Pid, {application_data, erlang:iolist_to_binary(Data)}, infinity).
send(Pid, Data, Timeout) ->
- sync_send_event(Pid, {application_data, erlang:iolist_to_binary(Data)}, Timeout).
+ sync_send_all_state_event(Pid, {application_data, erlang:iolist_to_binary(Data)}, Timeout).
%%--------------------------------------------------------------------
-%% Function:
+%% Function: recv(Socket, Length Timeout) -> {ok, Data} | {error, reason}
%%
-%% Description:
+%% Description: Receives data when active = false
%%--------------------------------------------------------------------
-recv(Pid, Length, Timeout) -> % TODO: Prio with renegotiate?
+recv(Pid, Length, Timeout) ->
sync_send_all_state_event(Pid, {recv, Length}, Timeout).
%%--------------------------------------------------------------------
-%% Function:
+%% Function: : connect(Host, Port, Socket, Options,
+%% User, CbInfo, Timeout) -> {ok, Socket}
%%
-%% Description:
+%% Description: Connect to a ssl server.
%%--------------------------------------------------------------------
connect(Host, Port, Socket, Options, User, CbInfo, Timeout) ->
start_fsm(client, Host, Port, Socket, Options, User, CbInfo,
Timeout).
%%--------------------------------------------------------------------
-%% Function:
+%% Function: accept(Port, Socket, Opts, User,
+%% CbInfo, Timeout) -> {ok, Socket} | {error, Reason}
%%
-%% Description:
+%% Description: Performs accept on a ssl listen socket. e.i. performs
+%% ssl handshake.
%%--------------------------------------------------------------------
-accept(Port, Socket, Opts, User, CbInfo, Timeout) ->
+ssl_accept(Port, Socket, Opts, User, CbInfo, Timeout) ->
start_fsm(server, "localhost", Port, Socket, Opts, User,
CbInfo, Timeout).
+
%%--------------------------------------------------------------------
-%% Function:
+%% Function: handshake(SslSocket, Timeout) -> ok | {error, Reason}
%%
-%% Description:
+%% Description: Starts ssl handshake.
+%%--------------------------------------------------------------------
+handshake(#sslsocket{pid = Pid}, Timeout) ->
+ case sync_send_all_state_event(Pid, start, Timeout) of
+ connected ->
+ ok;
+ Error ->
+ Error
+ end.
+%--------------------------------------------------------------------
+%% Function: socket_control(Pid) -> {ok, SslSocket} | {error, Reason}
+%%
+%% Description: Set the ssl process to own the accept socket
+%%--------------------------------------------------------------------
+socket_control(Socket, Pid, CbModule) ->
+ case CbModule:controlling_process(Socket, Pid) of
+ ok ->
+ {ok, sslsocket(Pid)};
+ {error, Reason} ->
+ {error, Reason}
+ end.
+
+%%--------------------------------------------------------------------
+%% Function: close() -> ok
+%%
+%% Description: Close a ssl connection
%%--------------------------------------------------------------------
close(ConnectionPid) ->
case sync_send_all_state_event(ConnectionPid, close) of
@@ -139,76 +176,85 @@ close(ConnectionPid) ->
end.
%%--------------------------------------------------------------------
-%% Function:
+%% Function: shutdown(Socket, How) -> ok | {error, Reason}
%%
-%% Description:
+%% Description: Same as gen_tcp:shutdown/2
%%--------------------------------------------------------------------
shutdown(ConnectionPid, How) ->
sync_send_all_state_event(ConnectionPid, {shutdown, How}).
-
%%--------------------------------------------------------------------
-%% Function:
+%% Function: new_user(ConnectionPid, User) -> ok | {error, Reason}
%%
-%% Description:
+%% Description: Changes process that receives the messages when active = true
+%% or once.
%%--------------------------------------------------------------------
new_user(ConnectionPid, User) ->
sync_send_all_state_event(ConnectionPid, {new_user, User}).
%%--------------------------------------------------------------------
-%% Function:
+%% Function: sockname(ConnectionPid) -> {ok, {Address, Port}} | {error, Reason}
%%
-%% Description:
+%% Description: Same as inet:sockname/1
%%--------------------------------------------------------------------
sockname(ConnectionPid) ->
sync_send_all_state_event(ConnectionPid, sockname).
%%--------------------------------------------------------------------
-%% Function:
+%% Function: peername(ConnectionPid) -> {ok, {Address, Port}} | {error, Reason}
%%
-%% Description:
+%% Description: Same as inet:peername/1
%%--------------------------------------------------------------------
peername(ConnectionPid) ->
sync_send_all_state_event(ConnectionPid, peername).
%%--------------------------------------------------------------------
-%% Function:
+%% Function: get_opts(ConnectionPid, OptTags) -> {ok, Options} | {error, Reason}
%%
-%% Description:
+%% Description: Same as inet:getopts/2
%%--------------------------------------------------------------------
get_opts({ListenSocket, {_SslOpts, SockOpts}, _}, OptTags) ->
get_socket_opts(ListenSocket, OptTags, SockOpts, []);
get_opts(ConnectionPid, OptTags) ->
sync_send_all_state_event(ConnectionPid, {get_opts, OptTags}).
%%--------------------------------------------------------------------
-%% Function:
+%% Function: setopts(Socket, Options) -> ok | {error, Reason}
%%
-%% Description:
+%% Description: Same as inet:setopts/2
%%--------------------------------------------------------------------
set_opts(ConnectionPid, Options) ->
sync_send_all_state_event(ConnectionPid, {set_opts, Options}).
%%--------------------------------------------------------------------
-%% Function:
+%% Function: info(ConnectionPid) -> {ok, {Protocol, CipherSuite}} |
+%% {error, Reason}
%%
-%% Description:
+%% Description: Returns ssl protocol and cipher used for the connection
%%--------------------------------------------------------------------
info(ConnectionPid) ->
sync_send_all_state_event(ConnectionPid, info).
%%--------------------------------------------------------------------
-%% Function:
+%% Function: session_info(ConnectionPid) -> {ok, PropList} | {error, Reason}
%%
-%% Description:
+%% Description: Returns info about the ssl session
%%--------------------------------------------------------------------
session_info(ConnectionPid) ->
sync_send_all_state_event(ConnectionPid, session_info).
%%--------------------------------------------------------------------
-%% Function:
+%% Function: peercert(ConnectionPid) -> {ok, Cert} | {error, Reason}
%%
-%% Description:
+%% Description: Returns the peer cert
%%--------------------------------------------------------------------
peer_certificate(ConnectionPid) ->
sync_send_all_state_event(ConnectionPid, peer_certificate).
+%%--------------------------------------------------------------------
+%% Function: renegotiation(ConnectionPid) -> ok | {error, Reason}
+%%
+%% Description: Starts a renegotiation of the ssl session.
+%%--------------------------------------------------------------------
+renegotiation(ConnectionPid) ->
+ sync_send_all_state_event(ConnectionPid, renegotiate).
+
%%====================================================================
%% ssl_connection_sup API
%%====================================================================
@@ -224,7 +270,6 @@ start_link(Role, Host, Port, Socket, Options, User, CbInfo) ->
gen_fsm:start_link(?MODULE, [Role, Host, Port, Socket, Options,
User, CbInfo], []).
-
%%====================================================================
%% gen_fsm callbacks
%%====================================================================
@@ -243,54 +288,61 @@ init([Role, Host, Port, Socket, {SSLOpts, _} = Options,
Hashes0 = ssl_handshake:init_hashes(),
try ssl_init(SSLOpts, Role) of
- {ok, Ref, CacheRef, OwnCert, Key} ->
+ {ok, Ref, CacheRef, OwnCert, Key, DHParams} ->
State = State0#state{tls_handshake_hashes = Hashes0,
own_cert = OwnCert,
cert_db_ref = Ref,
session_cache = CacheRef,
- private_key = Key},
+ private_key = Key,
+ diffie_hellman_params = DHParams},
{ok, hello, State}
catch
throw:Error ->
{stop, Error}
end.
-
+
%%--------------------------------------------------------------------
%% Function:
%% state_name(Event, State) -> {next_state, NextStateName, NextState}|
%% {next_state, NextStateName,
%% NextState, Timeout} |
%% {stop, Reason, NewState}
-%% Description:There should be one instance of this function for each possible
-%% state name. Whenever a gen_fsm receives an event sent using
-%% gen_fsm:send_event/2, the instance of this function with the same name as
-%% the current state name StateName is called to handle the event. It is also
-%% called if a timeout occurs.
+%%
+%% Description:There should be one instance of this function for each
+%% possible state name. Whenever a gen_fsm receives an event sent
+%% using gen_fsm:send_event/2, the instance of this function with the
+%% same name as the current state name StateName is called to handle
+%% the event. It is also called if a timeout occurs.
+%%
%%--------------------------------------------------------------------
-hello(socket_control, #state{host = Host, port = Port, role = client,
+hello(start, #state{host = Host, port = Port, role = client,
ssl_options = SslOpts,
transport_cb = Transport, socket = Socket,
connection_states = ConnectionStates}
= State0) ->
- Hello = ssl_handshake:client_hello(Host, Port, ConnectionStates, SslOpts),
+ Hello = ssl_handshake:client_hello(Host, Port,
+ ConnectionStates, SslOpts),
Version = Hello#client_hello.client_version,
Hashes0 = ssl_handshake:init_hashes(),
{BinMsg, CS2, Hashes1} =
encode_handshake(Hello, Version, ConnectionStates, Hashes0),
Transport:send(Socket, BinMsg),
- State = State0#state{connection_states = CS2,
+ State1 = State0#state{connection_states = CS2,
negotiated_version = Version, %% Requested version
session =
#session{session_id = Hello#client_hello.session_id,
is_resumable = false},
tls_handshake_hashes = Hashes1},
- {next_state, hello, next_record(State)};
+ {Record, State} = next_record(State1),
+ next_state(hello, Record, State);
-hello(socket_control, #state{role = server} = State) ->
- {next_state, hello, next_record(State)};
+hello(start, #state{role = server} = State0) ->
+ {Record, State} = next_record(State0),
+ next_state(hello, Record, State);
-hello(hello, #state{role = client} = State) ->
- {next_state, hello, State};
+hello(#hello_request{}, #state{role = client} = State0) ->
+ {Record, State} = next_record(State0),
+ next_state(hello, Record, State);
hello(#server_hello{cipher_suite = CipherSuite,
compression_method = Compression} = Hello,
@@ -301,15 +353,16 @@ hello(#server_hello{cipher_suite = CipherSuite,
host = Host, port = Port,
session_cache = Cache,
session_cache_cb = CacheCb} = State0) ->
+
{Version, NewId, ConnectionStates1} =
ssl_handshake:hello(Hello, ConnectionStates0),
{KeyAlgorithm, _, _, _} =
ssl_cipher:suite_definition(CipherSuite),
- PremasterSecret = make_premaster_secret(ReqVersion),
+ PremasterSecret = make_premaster_secret(ReqVersion, KeyAlgorithm),
- State = State0#state{key_algorithm = KeyAlgorithm,
+ State1 = State0#state{key_algorithm = KeyAlgorithm,
negotiated_version = Version,
connection_states = ConnectionStates1,
premaster_secret = PremasterSecret},
@@ -319,20 +372,21 @@ hello(#server_hello{cipher_suite = CipherSuite,
Session = Session0#session{session_id = NewId,
cipher_suite = CipherSuite,
compression_method = Compression},
- {next_state, certify,
- next_record(State#state{session = Session})};
+ {Record, State} = next_record(State1#state{session = Session}),
+ next_state(certify, Record, State);
false ->
Session = CacheCb:lookup(Cache, {{Host, Port}, NewId}),
case ssl_handshake:master_secret(Version, Session,
ConnectionStates1, client) of
{_, ConnectionStates2} ->
- {next_state, abbreviated,
- next_record(State#state{
- connection_states = ConnectionStates2,
- session = Session})};
+ {Record, State} =
+ next_record(State1#state{
+ connection_states = ConnectionStates2,
+ session = Session}),
+ next_state(abbreviated, Record, State);
#alert{} = Alert ->
- handle_own_alert(Alert, Version, hello, State),
- {stop, normal, State}
+ handle_own_alert(Alert, Version, hello, State1),
+ {stop, normal, State1}
end
end;
@@ -354,25 +408,26 @@ hello(Hello = #client_hello{client_version = ClientVersion},
#alert{} = Alert ->
handle_own_alert(Alert, ClientVersion, hello, State),
{stop, normal, State}
- end.
+ end;
+
+hello(Msg, State) ->
+ handle_unexpected_message(Msg, hello, State).
-abbreviated(socket_control, #state{role = server} = State) ->
- {next_state, abbreviated, State};
-abbreviated(hello, State) ->
- {next_state, certify, State};
+abbreviated(#hello_request{}, State0) ->
+ {Record, State} = next_record(State0),
+ next_state(hello, Record, State);
abbreviated(Finished = #finished{},
#state{role = server,
negotiated_version = Version,
tls_handshake_hashes = Hashes,
- session = #session{master_secret = MasterSecret},
- from = From} = State) ->
+ session = #session{master_secret = MasterSecret}} =
+ State) ->
case ssl_handshake:verify_connection(Version, Finished, client,
MasterSecret, Hashes) of
- verified ->
- gen_fsm:reply(From, connected),
- {next_state, connection, next_record_if_active(State)};
- #alert{} = Alert ->
+ verified ->
+ next_state_connection(abbreviated, ack_connection(State));
+ #alert{} = Alert ->
handle_own_alert(Alert, Version, abbreviated, State),
{stop, normal, State}
end;
@@ -380,26 +435,26 @@ abbreviated(Finished = #finished{},
abbreviated(Finished = #finished{},
#state{role = client, tls_handshake_hashes = Hashes0,
session = #session{master_secret = MasterSecret},
- from = From,
negotiated_version = Version} = State) ->
case ssl_handshake:verify_connection(Version, Finished, server,
MasterSecret, Hashes0) of
verified ->
{ConnectionStates, Hashes} = finalize_client_handshake(State),
- gen_fsm:reply(From, connected),
- {next_state, connection,
- next_record_if_active(State#state{tls_handshake_hashes = Hashes,
- connection_states =
- ConnectionStates})};
+ next_state_connection(abbreviated,
+ ack_connection(State#state{tls_handshake_hashes = Hashes,
+ connection_states =
+ ConnectionStates}));
#alert{} = Alert ->
handle_own_alert(Alert, Version, abbreviated, State),
{stop, normal, State}
- end.
+ end;
+
+abbreviated(Msg, State) ->
+ handle_unexpected_message(Msg, abbreviated, State).
-certify(socket_control, #state{role = server} = State) ->
- {next_state, certify, State};
-certify(hello, State) ->
- {next_state, certify, State};
+certify(#hello_request{}, State0) ->
+ {Record, State} = next_record(State0),
+ next_state(hello, Record, State);
certify(#certificate{asn1_certificates = []},
#state{role = server, negotiated_version = Version,
@@ -414,53 +469,72 @@ certify(#certificate{asn1_certificates = []},
#state{role = server,
ssl_options = #ssl_options{verify = verify_peer,
fail_if_no_peer_cert = false}} =
- State) ->
- {next_state, certify, next_record(State#state{client_certificate_requested = false})};
+ State0) ->
+ {Record, State} = next_record(State0#state{client_certificate_requested = false}),
+ next_state(certify, Record, State);
certify(#certificate{} = Cert,
- #state{session = Session,
- negotiated_version = Version,
+ #state{negotiated_version = Version,
+ role = Role,
cert_db_ref = CertDbRef,
- ssl_options = Opts} = State0) ->
+ ssl_options = Opts} = State) ->
case ssl_handshake:certify(Cert, CertDbRef, Opts#ssl_options.depth,
Opts#ssl_options.verify,
- Opts#ssl_options.verify_fun) of
+ Opts#ssl_options.verify_fun,
+ Opts#ssl_options.validate_extensions_fun, Role) of
{PeerCert, PublicKeyInfo} ->
- State = State0#state{session =
- Session#session{peer_certificate = PeerCert},
- public_key_info = PublicKeyInfo,
- client_certificate_requested = false
- },
- {next_state, certify, next_record(State)};
+ handle_peer_cert(PeerCert, PublicKeyInfo,
+ State#state{client_certificate_requested = false});
#alert{} = Alert ->
- handle_own_alert(Alert, Version, certify_certificate, State0),
- {stop, normal, State0}
+ handle_own_alert(Alert, Version, certify_certificate, State),
+ {stop, normal, State}
end;
certify(#server_key_exchange{} = KeyExchangeMsg,
- #state{role = client,
- key_algorithm = Alg} = State)
- when Alg == dhe_dss; Alg == dhe_rsa; Alg == dh_anon; Alg == krb5 ->
- NewState = handle_server_key(KeyExchangeMsg, State),
- {next_state, certify, NewState};
+ #state{role = client, negotiated_version = Version,
+ key_algorithm = Alg} = State0)
+ when Alg == dhe_dss; Alg == dhe_rsa ->%%Not imp:Alg == dh_anon;Alg == krb5 ->
+ case handle_server_key(KeyExchangeMsg, State0) of
+ #state{} = State1 ->
+ {Record, State} = next_record(State1),
+ next_state(certify, Record, State);
+ #alert{} = Alert ->
+ handle_own_alert(Alert, Version, certify_server_keyexchange,
+ State0),
+ {stop, normal, State0}
+ end;
certify(#server_key_exchange{},
State = #state{role = client, negotiated_version = Version,
key_algorithm = Alg})
- when Alg == rsa; Alg == dh_dss; Alg == dh_rsa ->
+ when Alg == rsa; Alg == dh_dss; Alg == dh_rsa ->
Alert = ?ALERT_REC(?FATAL, ?UNEXPECTED_MESSAGE),
handle_own_alert(Alert, Version, certify_server_key_exchange, State),
{stop, normal, State};
-certify(KeyExchangeMsg = #server_key_exchange{}, State =
- #state{role = server}) ->
- NewState = handle_clinet_key(KeyExchangeMsg, State),
- {next_state, cipher, NewState};
+certify(#certificate_request{}, State0) ->
+ {Record, State} = next_record(State0#state{client_certificate_requested = true}),
+ next_state(certify, Record, State);
-certify(#certificate_request{}, State) ->
- NewState = State#state{client_certificate_requested = true},
- {next_state, certify, next_record(NewState)};
+%% Master secret was determined with help of server-key exchange msg
+certify(#server_hello_done{},
+ #state{session = #session{master_secret = MasterSecret} = Session,
+ connection_states = ConnectionStates0,
+ negotiated_version = Version,
+ premaster_secret = undefined,
+ role = client} = State0) ->
+ case ssl_handshake:master_secret(Version, Session,
+ ConnectionStates0, client) of
+ {MasterSecret, ConnectionStates1} ->
+ State = State0#state{connection_states = ConnectionStates1},
+ client_certify_and_key_exchange(State);
+ #alert{} = Alert ->
+ handle_own_alert(Alert, Version,
+ certify_server_hello_done, State0),
+ {stop, normal, State0}
+ end;
+%% Master secret is calculated from premaster_secret
certify(#server_hello_done{},
#state{session = Session0,
connection_states = ConnectionStates0,
@@ -487,7 +561,8 @@ certify(#client_key_exchange{},
negotiated_version = Version}) ->
%% We expect a certificate here
Alert = ?ALERT_REC(?FATAL, ?UNEXPECTED_MESSAGE),
- handle_own_alert(Alert, Version, certify_server_waiting_certificate, State),
+ handle_own_alert(Alert, Version,
+ certify_server_waiting_certificate, State),
{stop, normal, State};
@@ -504,9 +579,10 @@ certify(#client_key_exchange{exchange_keys
ConnectionStates0, server) of
{MasterSecret, ConnectionStates} ->
Session = Session0#session{master_secret = MasterSecret},
- State = State0#state{connection_states = ConnectionStates,
+ State1 = State0#state{connection_states = ConnectionStates,
session = Session},
- {next_state, cipher, next_record(State)};
+ {Record, State} = next_record(State1),
+ next_state(cipher, Record, State);
#alert{} = Alert ->
handle_own_alert(Alert, Version,
certify_client_key_exchange, State0),
@@ -517,12 +593,46 @@ certify(#client_key_exchange{exchange_keys
handle_own_alert(Alert, Version, certify_client_key_exchange,
State0),
{stop, normal, State0}
- end.
+ end;
+
+certify(#client_key_exchange{exchange_keys = #client_diffie_hellman_public{
+ dh_public = ClientPublicDhKey}},
+ #state{negotiated_version = Version,
+ diffie_hellman_params = #'DHParameter'{prime = P,
+ base = G},
+ diffie_hellman_keys = {_, ServerDhPrivateKey},
+ role = Role,
+ session = Session,
+ connection_states = ConnectionStates0} = State0) ->
+
+ PMpint = crypto:mpint(P),
+ GMpint = crypto:mpint(G),
+ PremasterSecret = crypto:dh_compute_key(mpint_binary(ClientPublicDhKey),
+ ServerDhPrivateKey,
+ [PMpint, GMpint]),
+
+ case ssl_handshake:master_secret(Version, PremasterSecret,
+ ConnectionStates0, Role) of
+ {MasterSecret, ConnectionStates} ->
+ State1 = State0#state{session =
+ Session#session{master_secret
+ = MasterSecret},
+ connection_states = ConnectionStates},
+
+ {Record, State} = next_record(State1),
+ next_state(cipher, Record, State);
+ #alert{} = Alert ->
+ handle_own_alert(Alert, Version,
+ certify_client_key_exchange, State0),
+ {stop, normal, State0}
+ end;
-cipher(socket_control, #state{role = server} = State) ->
- {next_state, cipher, State};
-cipher(hello, State) ->
- {next_state, cipher, State};
+certify(Msg, State) ->
+ handle_unexpected_message(Msg, certify, State).
+
+cipher(#hello_request{}, State0) ->
+ {Record, State} = next_record(State0),
+ next_state(hello, Record, State);
cipher(#certificate_verify{signature = Signature},
#state{role = server,
@@ -531,104 +641,76 @@ cipher(#certificate_verify{signature = Signature},
session = #session{master_secret = MasterSecret},
key_algorithm = Algorithm,
tls_handshake_hashes = Hashes
- } = State) ->
+ } = State0) ->
case ssl_handshake:certificate_verify(Signature, PublicKeyInfo,
Version, MasterSecret,
Algorithm, Hashes) of
valid ->
- {next_state, cipher, next_record(State)};
+ {Record, State} = next_record(State0),
+ next_state(cipher, Record, State);
#alert{} = Alert ->
- handle_own_alert(Alert, Version, cipher, State),
- {stop, normal, State}
+ handle_own_alert(Alert, Version, cipher, State0),
+ {stop, normal, State0}
end;
cipher(#finished{} = Finished,
- State = #state{from = From,
- negotiated_version = Version,
- host = Host,
- port = Port,
- role = Role,
- session = #session{master_secret = MasterSecret}
- = Session0,
- tls_handshake_hashes = Hashes}) ->
-
+ #state{negotiated_version = Version,
+ host = Host,
+ port = Port,
+ role = Role,
+ session = #session{master_secret = MasterSecret}
+ = Session0,
+ tls_handshake_hashes = Hashes} = State) ->
+
case ssl_handshake:verify_connection(Version, Finished,
opposite_role(Role),
MasterSecret, Hashes) of
verified ->
- gen_fsm:reply(From, connected),
Session = register_session(Role, Host, Port, Session0),
case Role of
client ->
- {next_state, connection,
- next_record_if_active(State#state{session = Session})};
+ next_state_connection(cipher, ack_connection(State#state{session = Session}));
server ->
{NewConnectionStates, NewHashes} =
finalize_server_handshake(State#state{
session = Session}),
- NewState =
- State#state{connection_states = NewConnectionStates,
- session = Session,
- tls_handshake_hashes = NewHashes},
- {next_state, connection, next_record_if_active(NewState)}
+ next_state_connection(cipher, ack_connection(State#state{connection_states =
+ NewConnectionStates,
+ session = Session,
+ tls_handshake_hashes =
+ NewHashes}))
end;
#alert{} = Alert ->
handle_own_alert(Alert, Version, cipher, State),
{stop, normal, State}
- end.
+ end;
-connection(socket_control, #state{role = server} = State) ->
- {next_state, connection, State};
-connection(hello, State = #state{host = Host, port = Port,
- socket = Socket,
- ssl_options = SslOpts,
- negotiated_version = Version,
- transport_cb = Transport,
- connection_states = ConnectionStates0,
- tls_handshake_hashes = Hashes0}) ->
+cipher(Msg, State) ->
+ handle_unexpected_message(Msg, cipher, State).
+
+connection(#hello_request{}, #state{host = Host, port = Port,
+ socket = Socket,
+ ssl_options = SslOpts,
+ negotiated_version = Version,
+ transport_cb = Transport,
+ connection_states = ConnectionStates0,
+ tls_handshake_hashes = Hashes0} = State0) ->
+
Hello = ssl_handshake:client_hello(Host, Port,
ConnectionStates0, SslOpts),
{BinMsg, ConnectionStates1, Hashes1} =
encode_handshake(Hello, Version, ConnectionStates0, Hashes0),
Transport:send(Socket, BinMsg),
- {next_state, hello, State#state{connection_states = ConnectionStates1,
- tls_handshake_hashes = Hashes1}}.
-
-%%--------------------------------------------------------------------
-%% Function:
-%% state_name(Event, From, State) -> {next_state, NextStateName, NextState} |
-%% {next_state, NextStateName,
-%% NextState, Timeout} |
-%% {reply, Reply, NextStateName, NextState}|
-%% {reply, Reply, NextStateName,
-%% NextState, Timeout} |
-%% {stop, Reason, NewState}|
-%% {stop, Reason, Reply, NewState}
-%% Description: There should be one instance of this function for each
-%% possible state name. Whenever a gen_fsm receives an event sent using
-%% gen_fsm:sync_send_event/2,3, the instance of this function with the same
-%% name as the current state name StateName is called to handle the event.
-%%--------------------------------------------------------------------
-connection({application_data, Data0}, _From,
- State = #state{socket = Socket,
- negotiated_version = Version,
- transport_cb = Transport,
- connection_states = ConnectionStates0}) ->
- %% We should look into having a worker process to do this to
- %% parallize send and receive decoding and not block the receiver
- %% if sending is overloading the socket.
- try
- Data = encode_packet(Data0, State#state.socket_options),
- {Msgs, ConnectionStates1} = encode_data(Data, Version, ConnectionStates0),
- Result = Transport:send(Socket, Msgs),
- {reply, Result,
- connection, State#state{connection_states = ConnectionStates1}}
-
- catch throw:Error ->
- {reply, Error, connection, State}
- end.
-
+ {Record, State} = next_record(State0#state{connection_states =
+ ConnectionStates1,
+ tls_handshake_hashes = Hashes1}),
+ next_state(hello, Record, State);
+connection(#client_hello{} = Hello, #state{role = server} = State) ->
+ hello(Hello, State);
+
+connection(Msg, State) ->
+ handle_unexpected_message(Msg, connection, State).
%%--------------------------------------------------------------------
%% Function:
%% handle_event(Event, StateName, State) -> {next_state, NextStateName,
@@ -640,84 +722,8 @@ connection({application_data, Data0}, _From,
%% gen_fsm:send_all_state_event/2, this function is called to handle
%% the event.
%%--------------------------------------------------------------------
-handle_event(#ssl_tls{type = ?HANDSHAKE, fragment = Data},
- StateName,
- State = #state{key_algorithm = KeyAlg,
- tls_handshake_buffer = Buf0,
- negotiated_version = Version}) ->
- Handle =
- fun({Packet, Raw}, {next_state, SName, AS=#state{tls_handshake_hashes=Hs0}}) ->
- Hs1 = ssl_handshake:update_hashes(Hs0, Raw),
- ?MODULE:SName(Packet, AS#state{tls_handshake_hashes=Hs1});
- (_, StopState) -> StopState
- end,
- try
- {Packets, Buf} = ssl_handshake:get_tls_handshake(Data,Buf0, KeyAlg,Version),
- Start = {next_state, StateName, State#state{tls_handshake_buffer = Buf}},
- lists:foldl(Handle, Start, Packets)
- catch throw:#alert{} = Alert ->
- handle_own_alert(Alert, Version, StateName, State),
- {stop, normal, State}
- end;
-
-handle_event(#ssl_tls{type = ?APPLICATION_DATA, fragment = Data},
- StateName, State0) ->
- case application_data(Data, State0) of
- Stop = {stop,_,_} ->
- Stop;
- State ->
- {next_state, StateName, State}
- end;
-
-handle_event(#ssl_tls{type = ?CHANGE_CIPHER_SPEC, fragment = <<1>>} =
- _ChangeCipher,
- StateName,
- State = #state{connection_states = ConnectionStates0}) ->
- ?DBG_TERM(_ChangeCipher),
- ConnectionStates1 =
- ssl_record:activate_pending_connection_state(ConnectionStates0, read),
- {next_state, StateName,
- next_record(State#state{connection_states = ConnectionStates1})};
-
-handle_event(#ssl_tls{type = ?ALERT, fragment = Data}, StateName, State) ->
- Alerts = decode_alerts(Data),
- ?DBG_TERM(Alerts),
- [alert_event(A) || A <- Alerts],
- {next_state, StateName, State};
-
-handle_event(#alert{level = ?FATAL} = Alert, connection,
- #state{from = From, user_application = {_Mon, Pid}, log_alert = Log,
- host = Host, port = Port, session = Session,
- role = Role, socket_options = Opts} = State) ->
- invalidate_session(Role, Host, Port, Session),
- log_alert(Log, connection, Alert),
- alert_user(Opts#socket_options.active, Pid, From, Alert, Role),
- {stop, normal, State};
-handle_event(#alert{level = ?WARNING, description = ?CLOSE_NOTIFY} = Alert,
- connection, #state{from = From,
- role = Role,
- user_application = {_Mon, Pid},
- socket_options = Opts} = State) ->
- alert_user(Opts#socket_options.active, Pid, From, Alert, Role),
- {stop, normal, State};
-
-handle_event(#alert{level = ?FATAL} = Alert, StateName,
- #state{from = From, host = Host, port = Port, session = Session,
- log_alert = Log, role = Role} = State) ->
- invalidate_session(Role, Host, Port, Session),
- log_alert(Log, StateName, Alert),
- alert_user(From, Alert, Role),
- {stop, normal, State};
-handle_event(#alert{level = ?WARNING, description = ?CLOSE_NOTIFY} = Alert,
- _, #state{from = From, role = Role} = State) ->
- alert_user(From, Alert, Role),
- {stop, normal, State};
-handle_event(#alert{level = ?WARNING} = Alert, StateName,
- #state{log_alert = Log} = State) ->
- log_alert(Log, StateName, Alert),
-%%TODO: Could be user_canceled or no_negotiation should the latter be
- %% treated as fatal?!
- {next_state, StateName, next_record(State)}.
+handle_event(_Event, StateName, State) ->
+ {next_state, StateName, State}.
%%--------------------------------------------------------------------
%% Function:
@@ -734,39 +740,81 @@ handle_event(#alert{level = ?WARNING} = Alert, StateName,
%% gen_fsm:sync_send_all_state_event/2,3, this function is called to handle
%% the event.
%%--------------------------------------------------------------------
-handle_sync_event(started, From, StateName, State) ->
+handle_sync_event({application_data, Data0}, From, connection,
+ #state{socket = Socket,
+ negotiated_version = Version,
+ transport_cb = Transport,
+ connection_states = ConnectionStates0,
+ send_queue = SendQueue,
+ socket_options = SockOpts,
+ ssl_options = #ssl_options{renegotiate_at = RenegotiateAt}}
+ = State) ->
+ %% We should look into having a worker process to do this to
+ %% parallize send and receive decoding and not block the receiver
+ %% if sending is overloading the socket.
+ try
+ Data = encode_packet(Data0, SockOpts),
+ case encode_data(Data, Version, ConnectionStates0, RenegotiateAt) of
+ {Msgs, [], ConnectionStates} ->
+ Result = Transport:send(Socket, Msgs),
+ {reply, Result,
+ connection, State#state{connection_states = ConnectionStates}};
+ {Msgs, RestData, ConnectionStates} ->
+ if
+ Msgs =/= [] ->
+ Transport:send(Socket, Msgs);
+ true ->
+ ok
+ end,
+ renegotiate(State#state{connection_states = ConnectionStates,
+ send_queue = queue:in_r({From, RestData}, SendQueue),
+ renegotiation = {true, internal}})
+ end
+ catch throw:Error ->
+ {reply, Error, connection, State}
+ end;
+handle_sync_event({application_data, Data}, From, StateName,
+ #state{send_queue = Queue} = State) ->
+ %% In renegotiation priorities handshake, send data when handshake is finished
+ {next_state, StateName, State#state{send_queue = queue:in({From, Data}, Queue)}};
+
+handle_sync_event(start, From, hello, State) ->
+ hello(start, State#state{from = From});
+
+%% The two clauses below could happen if a server upgrades a socket in
+%% active mode. Note that in this case we are lucky that
+%% controlling_process has been evalueated before receiving handshake
+%% messages from client. The server should put the socket in passive
+%% mode before telling the client that it is willing to upgrade
+%% and before calling ssl:ssl_accept/2. These clauses are
+%% here to make sure it is the users problem and not owers if
+%% they upgrade a active socket.
+handle_sync_event(start, _, connection, State) ->
+ {reply, connected, connection, State};
+handle_sync_event(start, From, StateName, State) ->
{next_state, StateName, State#state{from = From}};
-handle_sync_event(close, From, _StateName, State) ->
- {stop, normal, ok, State#state{from = From}};
+handle_sync_event(close, _, _StateName, State) ->
+ {stop, normal, ok, State};
-handle_sync_event({shutdown, How}, From, StateName,
+handle_sync_event({shutdown, How}, _, StateName,
#state{transport_cb = CbModule,
socket = Socket} = State) ->
case CbModule:shutdown(Socket, How) of
ok ->
{reply, ok, StateName, State};
Error ->
- {stop, normal, Error, State#state{from = From}}
+ {stop, normal, Error, State}
end;
-%% TODO: men vad g�r next_record om det �r t.ex. renegotiate? kanske
-%% inte bra... t�l att t�nkas p�!
-handle_sync_event({recv, N}, From, StateName,
- State0 = #state{user_data_buffer = Buffer}) ->
- State1 = State0#state{bytes_to_read = N, from = From},
- case Buffer of
- <<>> ->
- State = next_record(State1),
- {next_state, StateName, State};
- _ ->
- case application_data(<<>>, State1) of
- Stop = {stop, _, _} ->
- Stop;
- State ->
- {next_state, StateName, State}
- end
- end;
+handle_sync_event({recv, N}, From, connection = StateName, State0) ->
+ passive_receive(State0#state{bytes_to_read = N, from = From}, StateName);
+
+%% Doing renegotiate wait with handling request until renegotiate is
+%% finished. Will be handled by next_state_connection/2.
+handle_sync_event({recv, N}, From, StateName, State) ->
+ {next_state, StateName, State#state{bytes_to_read = N, from = From,
+ recv_during_renegotiation = true}};
handle_sync_event({new_user, User}, _From, StateName,
State =#state{user_application = {OldMon, _}}) ->
@@ -801,7 +849,13 @@ handle_sync_event({set_opts, Opts0}, _From, StateName,
{reply, ok, StateName, State1};
Buffer =:= <<>>, Opts1#socket_options.active =:= false ->
%% Need data, set active once
- {reply, ok, StateName, next_record_if_active(State1)};
+ {Record, State2} = next_record_if_active(State1),
+ case next_state(StateName, Record, State2) of
+ {next_state, StateName, State} ->
+ {reply, ok, StateName, State};
+ {stop, Reason, State} ->
+ {stop, Reason, State}
+ end;
Buffer =:= <<>> ->
%% Active once already set
{reply, ok, StateName, State1};
@@ -809,10 +863,21 @@ handle_sync_event({set_opts, Opts0}, _From, StateName,
case application_data(<<>>, State1) of
Stop = {stop,_,_} ->
Stop;
- State ->
- {reply, ok, StateName, State}
+ {Record, State2} ->
+ case next_state(StateName, Record, State2) of
+ {next_state, StateName, State} ->
+ {reply, ok, StateName, State};
+ {stop, Reason, State} ->
+ {stop, Reason, State}
+ end
end
- end;
+ end;
+
+handle_sync_event(renegotiate, From, connection, State) ->
+ renegotiate(State#state{renegotiation = {true, From}});
+
+handle_sync_event(renegotiate, _, StateName, State) ->
+ {reply, {error, already_renegotiating}, StateName, State};
handle_sync_event(info, _, StateName,
#state{negotiated_version = Version,
@@ -834,7 +899,6 @@ handle_sync_event(peer_certificate, _, StateName,
= State) ->
{reply, {ok, Cert}, StateName, State}.
-
%%--------------------------------------------------------------------
%% Function:
%% handle_info(Info,StateName,State)-> {next_state, NextStateName, NextState}|
@@ -847,50 +911,22 @@ handle_sync_event(peer_certificate, _, StateName,
%%--------------------------------------------------------------------
%% raw data from TCP, unpack records
-handle_info({Protocol, _, Data}, StateName, State =
+handle_info({Protocol, _, Data}, StateName,
#state{data_tag = Protocol,
negotiated_version = Version,
tls_record_buffer = Buf0,
- tls_cipher_texts = CT0}) ->
+ tls_cipher_texts = CT0} = State0) ->
case ssl_record:get_tls_records(Data, Buf0) of
{Records, Buf1} ->
CT1 = CT0 ++ Records,
- {next_state, StateName,
- next_record(State#state{tls_record_buffer = Buf1,
- tls_cipher_texts = CT1})};
+ {Record, State} = next_record(State0#state{tls_record_buffer = Buf1,
+ tls_cipher_texts = CT1}),
+ next_state(StateName, Record, State);
#alert{} = Alert ->
- handle_own_alert(Alert, Version, StateName, State),
- {stop, normal, State}
+ handle_own_alert(Alert, Version, StateName, State0),
+ {stop, normal, State0}
end;
-%% %% This is the code for {packet,ssl} removed because it was slower
-%% %% than handling it in erlang.
-%% handle_info(Data = #ssl_tls{}, StateName,
-%% State = #state{tls_buffer = Buffer,
-%% socket = Socket,
-%% connection_states = ConnectionStates0}) ->
-%% case Buffer of
-%% buffer ->
-%% {next_state, StateName, State#state{tls_buffer = [Data]}};
-%% continue ->
-%% inet:setopts(Socket, [{active,once}]),
-%% {Plain, ConnectionStates} =
-%% ssl_record:decode_cipher_text(Data, ConnectionStates0),
-%% gen_fsm:send_all_state_event(self(), Plain),
-%% {next_state, StateName,
-%% State#state{tls_buffer = buffer,
-%% connection_states = ConnectionStates}};
-%% List when is_list(List) ->
-%% {next_state, StateName,
-%% State#state{tls_buffer = Buffer ++ [Data]}}
-%% end;
-
-%% handle_info(CloseMsg = {_, Socket}, StateName0,
-%% #state{socket = Socket,tls_buffer = [Msg]} = State0) ->
-%% %% Hmm we have a ssl_tls msg buffered, handle that first
-%% %% and it proberbly is a close alert
-%% {next_state, StateName0, State0#state{tls_buffer=[Msg,{ssl_close,CloseMsg}]}};
-
handle_info({CloseTag, Socket}, _StateName,
#state{socket = Socket, close_tag = CloseTag,
negotiated_version = Version, host = Host,
@@ -908,7 +944,7 @@ handle_info({CloseTag, Socket}, _StateName,
alert_user(Opts#socket_options.active, Pid, From,
?ALERT_REC(?WARNING, ?CLOSE_NOTIFY), Role),
{stop, normal, State};
-
+
handle_info({'DOWN', MonitorRef, _, _, _}, _,
State = #state{user_application={MonitorRef,_Pid}}) ->
{stop, normal, State};
@@ -924,17 +960,25 @@ handle_info(A, StateName, State) ->
%% necessary cleaning up. When it returns, the gen_fsm terminates with
%% Reason. The return value is ignored.
%%--------------------------------------------------------------------
-terminate(_Reason, connection, _S=#state{negotiated_version = Version,
+terminate(_Reason, connection, #state{negotiated_version = Version,
connection_states = ConnectionStates,
transport_cb = Transport,
- socket = Socket}) ->
+ socket = Socket, send_queue = SendQueue,
+ renegotiation = Renegotiate}) ->
+ notify_senders(SendQueue),
+ notify_renegotiater(Renegotiate),
{BinAlert, _} = encode_alert(?ALERT_REC(?WARNING,?CLOSE_NOTIFY),
Version, ConnectionStates),
Transport:send(Socket, BinAlert),
+ Transport:shutdown(Socket, read_write),
Transport:close(Socket);
-terminate(_Reason, _StateName, _S=#state{transport_cb = Transport, socket = Socket}) ->
- Transport:close(Socket),
- ok.
+terminate(_Reason, _StateName, #state{transport_cb = Transport,
+ socket = Socket, send_queue = SendQueue,
+ renegotiation = Renegotiate}) ->
+ notify_senders(SendQueue),
+ notify_renegotiater(Renegotiate),
+ Transport:shutdown(Socket, read_write),
+ Transport:close(Socket).
%%--------------------------------------------------------------------
%% Function:
@@ -952,13 +996,16 @@ start_fsm(Role, Host, Port, Socket, Opts, User, {CbModule, _,_} = CbInfo,
case ssl_connection_sup:start_child([Role, Host, Port, Socket,
Opts, User, CbInfo]) of
{ok, Pid} ->
- CbModule:controlling_process(Socket, Pid),
- send_event(Pid, socket_control),
- case sync_send_all_state_event(Pid, started, Timeout) of
- connected ->
- {ok, sslsocket(Pid)};
- {error, Reason} ->
- {error, Reason}
+ case socket_control(Socket, Pid, CbModule) of
+ {ok, SslSocket} ->
+ case handshake(SslSocket, Timeout) of
+ ok ->
+ {ok, SslSocket};
+ {error, Reason} ->
+ {error, Reason}
+ end;
+ {error, Reason} ->
+ {error, Reason}
end;
{error, Reason} ->
{error, Reason}
@@ -969,8 +1016,8 @@ ssl_init(SslOpts, Role) ->
PrivateKey =
init_private_key(SslOpts#ssl_options.key, SslOpts#ssl_options.keyfile,
SslOpts#ssl_options.password, Role),
- ?DBG_TERM(PrivateKey),
- {ok, CertDbRef, CacheRef, OwnCert, PrivateKey}.
+ DHParams = init_diffie_hellman(SslOpts#ssl_options.dhfile, Role),
+ {ok, CertDbRef, CacheRef, OwnCert, PrivateKey, DHParams}.
init_certificates(#ssl_options{cacertfile = CACertFile,
certfile = CertFile}, Role) ->
@@ -1005,12 +1052,14 @@ init_certificates(CertDbRef, CacheRef, CertFile, server) ->
catch
_E:{badmatch, _R={error,_}} ->
Report = io_lib:format("SSL: ~p: ~p:~p ~s~n ~p~n",
- [?LINE, _E,_R, CertFile, erlang:get_stacktrace()]),
+ [?LINE, _E,_R, CertFile,
+ erlang:get_stacktrace()]),
error_logger:error_report(Report),
throw(ecertfile);
_E:_R ->
Report = io_lib:format("SSL: ~p: ~p:~p ~s~n ~p~n",
- [?LINE, _E,_R, CertFile, erlang:get_stacktrace()]),
+ [?LINE, _E,_R, CertFile,
+ erlang:get_stacktrace()]),
error_logger:error_report(Report),
throw(ecertfile)
end.
@@ -1021,45 +1070,41 @@ init_private_key(undefined, KeyFile, Password, _) ->
try
{ok, List} = ssl_manager:cache_pem_file(KeyFile),
[Der] = [Der || Der = {PKey, _ , _} <- List,
- PKey =:= rsa_private_key orelse PKey =:= dsa_private_key],
+ PKey =:= rsa_private_key orelse
+ PKey =:= dsa_private_key],
{ok, Decoded} = public_key:decode_private_key(Der,Password),
Decoded
catch
_E:{badmatch, _R={error,_}} ->
Report = io_lib:format("SSL: ~p: ~p:~p ~s~n ~p~n",
- [?LINE, _E,_R, KeyFile, erlang:get_stacktrace()]),
+ [?LINE, _E,_R, KeyFile,
+ erlang:get_stacktrace()]),
error_logger:error_report(Report),
throw(ekeyfile);
_E:_R ->
Report = io_lib:format("SSL: ~p: ~p:~p ~s~n ~p~n",
- [?LINE, _E,_R, KeyFile, erlang:get_stacktrace()]),
+ [?LINE, _E,_R, KeyFile,
+ erlang:get_stacktrace()]),
error_logger:error_report(Report),
throw(ekeyfile)
end;
init_private_key(PrivateKey, _, _,_) ->
PrivateKey.
-send_event(FsmPid, Event) ->
- gen_fsm:send_event(FsmPid, Event).
-
-sync_send_event(FsmPid, Event, Timeout) ->
- try gen_fsm:sync_send_event(FsmPid, Event, Timeout) of
- Reply ->
- Reply
- catch
- exit:{noproc, _} ->
- {error, closed};
- exit:{timeout, _} ->
- {error, timeout};
- exit:{normal, _} ->
- {error, closed}
+init_diffie_hellman(_, client) ->
+ undefined;
+init_diffie_hellman(undefined, _) ->
+ ?DEFAULT_DIFFIE_HELLMAN_PARAMS;
+init_diffie_hellman(DHParamFile, server) ->
+ {ok, List} = ssl_manager:cache_pem_file(DHParamFile),
+ case [Der || Der = {dh_params, _ , _} <- List] of
+ [Der] ->
+ {ok, Decoded} = public_key:decode_dhparams(Der),
+ Decoded;
+ [] ->
+ ?DEFAULT_DIFFIE_HELLMAN_PARAMS
end.
-
-
-send_all_state_event(FsmPid, Event) ->
- gen_fsm:send_all_state_event(FsmPid, Event).
-
sync_send_all_state_event(FsmPid, Event) ->
sync_send_all_state_event(FsmPid, Event, ?DEFAULT_TIMEOUT).
@@ -1074,9 +1119,16 @@ sync_send_all_state_event(FsmPid, Event, Timeout) ->
{error, closed}
end.
-%% Events: #alert{}
-alert_event(Alert) ->
- send_all_state_event(self(), Alert).
+%% We do currently not support cipher suites that use fixed DH.
+%% If we want to implement that we should add a code
+%% here to extract DH parameters form cert.
+handle_peer_cert(PeerCert, PublicKeyInfo,
+ #state{session = Session} = State0) ->
+ State1 = State0#state{session =
+ Session#session{peer_certificate = PeerCert},
+ public_key_info = PublicKeyInfo},
+ {Record, State} = next_record(State1),
+ next_state(certify, Record, State).
certify_client(#state{client_certificate_requested = true, role = client,
connection_states = ConnectionStates0,
@@ -1111,9 +1163,8 @@ verify_client_cert(#state{client_certificate_requested = true, role = client,
ignore -> %% No key or cert or fixed_diffie_hellman
State;
Verified ->
- SigAlg = ssl_handshake:sig_alg(KeyAlg),
{BinVerified, ConnectionStates1, Hashes1} =
- encode_handshake(Verified, SigAlg, Version,
+ encode_handshake(Verified, KeyAlg, Version,
ConnectionStates0, Hashes0),
Transport:send(Socket, BinVerified),
State#state{connection_states = ConnectionStates1,
@@ -1140,10 +1191,13 @@ do_server_hello(Type, #state{negotiated_version = Version,
{_, ConnectionStates1} ->
State1 = State#state{connection_states=ConnectionStates1,
session = Session},
- {ConnectionStates, Hashes} = finalize_server_handshake(State1),
- Resumed = State1#state{connection_states = ConnectionStates,
+ {ConnectionStates, Hashes} =
+ finalize_server_handshake(State1),
+ Resumed0 = State1#state{connection_states =
+ ConnectionStates,
tls_handshake_hashes = Hashes},
- {next_state, abbreviated, next_record(Resumed)};
+ {Record, Resumed} = next_record(Resumed0),
+ next_state(abbreviated, Record, Resumed);
#alert{} = Alert ->
handle_own_alert(Alert, Version, hello, State),
{stop, normal, State}
@@ -1157,12 +1211,13 @@ do_server_hello(#server_hello{cipher_suite = CipherSuite,
negotiated_version = Version} = State0) ->
try server_certify_and_key_exchange(State0) of
#state{} = State1 ->
- State = server_hello_done(State1),
+ State2 = server_hello_done(State1),
Session =
Session0#session{session_id = SessionId,
cipher_suite = CipherSuite,
compression_method = Compression},
- {next_state, certify, State#state{session = Session}}
+ {Record, State} = next_record(State2#state{session = Session}),
+ next_state(certify, Record, State)
catch
#alert{} = Alert ->
handle_own_alert(Alert, Version, hello, State0),
@@ -1174,15 +1229,15 @@ client_certify_and_key_exchange(#state{negotiated_version = Version} =
try do_client_certify_and_key_exchange(State0) of
State1 = #state{} ->
{ConnectionStates, Hashes} = finalize_client_handshake(State1),
- State = State1#state{connection_states = ConnectionStates,
+ State2 = State1#state{connection_states = ConnectionStates,
%% Reinitialize
client_certificate_requested = false,
tls_handshake_hashes = Hashes},
- {next_state, cipher, next_record(State)}
-
+ {Record, State} = next_record(State2),
+ next_state(cipher, Record, State)
catch
#alert{} = Alert ->
- handle_own_alert(Alert, Version, certify_foo, State0),
+ handle_own_alert(Alert, Version, client_certify_and_key_exchange, State0),
{stop, normal, State0}
end.
@@ -1215,17 +1270,16 @@ server_hello_done(#state{transport_cb = Transport,
socket = Socket,
negotiated_version = Version,
connection_states = ConnectionStates,
- tls_handshake_hashes = Hashes} = State0) ->
+ tls_handshake_hashes = Hashes} = State) ->
HelloDone = ssl_handshake:server_hello_done(),
-
+
{BinHelloDone, NewConnectionStates, NewHashes} =
encode_handshake(HelloDone, Version, ConnectionStates, Hashes),
Transport:send(Socket, BinHelloDone),
- State = State0#state{connection_states = NewConnectionStates,
- tls_handshake_hashes = NewHashes},
- next_record(State).
-
+ State#state{connection_states = NewConnectionStates,
+ tls_handshake_hashes = NewHashes}.
+
certify_server(#state{transport_cb = Transport,
socket = Socket,
negotiated_version = Version,
@@ -1252,14 +1306,15 @@ key_exchange(#state{role = server, key_algorithm = Algo} = State)
Algo == dh_rsa ->
State;
-key_exchange(#state{role = server, key_algorithm = rsa_export} = State) ->
+%key_exchange(#state{role = server, key_algorithm = rsa_export} = State) ->
%% TODO when the public key in the server certificate is
%% less than or equal to 512 bits in length dont send key_exchange
%% but do it otherwise
- State;
+% State;
key_exchange(#state{role = server, key_algorithm = Algo,
diffie_hellman_params = Params,
+ private_key = PrivateKey,
connection_states = ConnectionStates0,
negotiated_version = Version,
tls_handshake_hashes = Hashes0,
@@ -1270,26 +1325,28 @@ key_exchange(#state{role = server, key_algorithm = Algo,
Algo == dhe_dss_export;
Algo == dhe_rsa;
Algo == dhe_rsa_export ->
- Msg = ssl_handshake:key_exchange(server, Params),
- {BinMsg, ConnectionStates1, Hashes1} =
- encode_handshake(Msg, Version, ConnectionStates0, Hashes0),
- Transport:send(Socket, BinMsg),
- State#state{connection_states = ConnectionStates1,
- tls_handshake_hashes = Hashes1};
-key_exchange(#state{role = server, key_algorithm = dh_anon,
- connection_states = ConnectionStates0,
- negotiated_version = Version,
- tls_handshake_hashes = Hashes0,
- socket = Socket,
- transport_cb = Transport
- } = State) ->
- Msg = ssl_handshake:key_exchange(server, anonymous),
- {BinMsg, ConnectionStates1, Hashes1} =
+ Keys = public_key:gen_key(Params),
+ ConnectionState =
+ ssl_record:pending_connection_state(ConnectionStates0, read),
+ SecParams = ConnectionState#connection_state.security_parameters,
+ #security_parameters{client_random = ClientRandom,
+ server_random = ServerRandom} = SecParams,
+ Msg = ssl_handshake:key_exchange(server, {dh, Keys, Params,
+ Algo, ClientRandom,
+ ServerRandom,
+ PrivateKey}),
+ {BinMsg, ConnectionStates, Hashes1} =
encode_handshake(Msg, Version, ConnectionStates0, Hashes0),
Transport:send(Socket, BinMsg),
- State#state{connection_states = ConnectionStates1,
+ State#state{connection_states = ConnectionStates,
+ diffie_hellman_keys = Keys,
tls_handshake_hashes = Hashes1};
+
+
+%% key_algorithm = dh_anon is not supported. Should be by default disabled
+%% if support is implemented and then we need a key_exchange clause for it
+%% here.
key_exchange(#state{role = client,
connection_states = ConnectionStates0,
@@ -1309,17 +1366,33 @@ key_exchange(#state{role = client,
key_exchange(#state{role = client,
connection_states = ConnectionStates0,
key_algorithm = Algorithm,
- public_key_info = PublicKeyInfo,
negotiated_version = Version,
- diffie_hellman_params = Params,
- own_cert = Cert,
+ diffie_hellman_keys = {DhPubKey, _},
socket = Socket, transport_cb = Transport,
tls_handshake_hashes = Hashes0} = State)
when Algorithm == dhe_dss;
Algorithm == dhe_dss_export;
Algorithm == dhe_rsa;
Algorithm == dhe_rsa_export ->
- Msg = dh_key_exchange(Cert, Params, PublicKeyInfo),
+ Msg = ssl_handshake:key_exchange(client, {dh, DhPubKey}),
+ {BinMsg, ConnectionStates1, Hashes1} =
+ encode_handshake(Msg, Version, ConnectionStates0, Hashes0),
+ Transport:send(Socket, BinMsg),
+ State#state{connection_states = ConnectionStates1,
+ tls_handshake_hashes = Hashes1};
+
+key_exchange(#state{role = client,
+ connection_states = ConnectionStates0,
+ key_algorithm = Algorithm,
+ negotiated_version = Version,
+ client_certificate_requested = ClientCertReq,
+ own_cert = OwnCert,
+ diffie_hellman_keys = DhKeys,
+ socket = Socket, transport_cb = Transport,
+ tls_handshake_hashes = Hashes0} = State)
+ when Algorithm == dh_dss;
+ Algorithm == dh_rsa ->
+ Msg = dh_key_exchange(OwnCert, DhKeys, ClientCertReq),
{BinMsg, ConnectionStates1, Hashes1} =
encode_handshake(Msg, Version, ConnectionStates0, Hashes0),
Transport:send(Socket, BinMsg),
@@ -1334,17 +1407,19 @@ rsa_key_exchange(PremasterSecret, PublicKeyInfo = {Algorithm, _, _})
ssl_handshake:key_exchange(client,
{premaster_secret, PremasterSecret,
PublicKeyInfo});
-
rsa_key_exchange(_, _) ->
throw (?ALERT_REC(?FATAL,?HANDSHAKE_FAILURE)).
-dh_key_exchange(OwnCert, Params, PublicKeyInfo) ->
+dh_key_exchange(OwnCert, DhKeys, true) ->
case public_key:pkix_is_fixed_dh_cert(OwnCert) of
true ->
ssl_handshake:key_exchange(client, fixed_diffie_hellman);
false ->
- ssl_handshake:key_exchange(client, {dh, Params, PublicKeyInfo})
- end.
+ {DhPubKey, _} = DhKeys,
+ ssl_handshake:key_exchange(client, {dh, DhPubKey})
+ end;
+dh_key_exchange(_, {DhPubKey, _}, false) ->
+ ssl_handshake:key_exchange(client, {dh, DhPubKey}).
request_client_cert(#state{ssl_options = #ssl_options{verify = verify_peer},
connection_states = ConnectionStates0,
@@ -1378,7 +1453,8 @@ finalize_client_handshake(#state{connection_states = ConnectionStates0}
finalize_server_handshake(State) ->
ConnectionStates0 = cipher_protocol(State),
ConnectionStates =
- ssl_record:activate_pending_connection_state(ConnectionStates0, write),
+ ssl_record:activate_pending_connection_state(ConnectionStates0,
+ write),
finished(State#state{connection_states = ConnectionStates}).
cipher_protocol(#state{connection_states = ConnectionStates,
@@ -1386,7 +1462,8 @@ cipher_protocol(#state{connection_states = ConnectionStates,
negotiated_version = Version,
transport_cb = Transport}) ->
{BinChangeCipher, NewConnectionStates} =
- encode_change_cipher(#change_cipher_spec{}, Version, ConnectionStates),
+ encode_change_cipher(#change_cipher_spec{},
+ Version, ConnectionStates),
Transport:send(Socket, BinChangeCipher),
NewConnectionStates.
@@ -1402,10 +1479,66 @@ finished(#state{role = Role, socket = Socket, negotiated_version = Version,
Transport:send(Socket, BinFinished),
{NewConnectionStates, NewHashes}.
-handle_server_key(_KeyExchangeMsg, State) ->
- State.
-handle_clinet_key(_KeyExchangeMsg, State) ->
- State.
+handle_server_key(
+ #server_key_exchange{params =
+ #server_dh_params{dh_p = P,
+ dh_g = G,
+ dh_y = ServerPublicDhKey},
+ signed_params = Signed},
+ #state{session = Session, negotiated_version = Version, role = Role,
+ public_key_info = PubKeyInfo,
+ key_algorithm = KeyAlgo,
+ connection_states = ConnectionStates0} = State) ->
+
+ PLen = size(P),
+ GLen = size(G),
+ YLen = size(ServerPublicDhKey),
+
+ ConnectionState =
+ ssl_record:pending_connection_state(ConnectionStates0, read),
+ SecParams = ConnectionState#connection_state.security_parameters,
+ #security_parameters{client_random = ClientRandom,
+ server_random = ServerRandom} = SecParams,
+ Hash = ssl_handshake:server_key_exchange_hash(KeyAlgo,
+ <<ClientRandom/binary,
+ ServerRandom/binary,
+ ?UINT16(PLen), P/binary,
+ ?UINT16(GLen), G/binary,
+ ?UINT16(YLen),
+ ServerPublicDhKey/binary>>),
+
+ case verify_dh_params(Signed, Hash, PubKeyInfo) of
+ true ->
+ PMpint = mpint_binary(P),
+ GMpint = mpint_binary(G),
+ Keys = {_, ClientDhPrivateKey} =
+ crypto:dh_generate_key([PMpint,GMpint]),
+ PremasterSecret =
+ crypto:dh_compute_key(mpint_binary(ServerPublicDhKey),
+ ClientDhPrivateKey, [PMpint, GMpint]),
+ case ssl_handshake:master_secret(Version, PremasterSecret,
+ ConnectionStates0, Role) of
+ {MasterSecret, ConnectionStates} ->
+ State#state{diffie_hellman_keys = Keys,
+ session =
+ Session#session{master_secret
+ = MasterSecret},
+ connection_states = ConnectionStates};
+ #alert{} = Alert ->
+ Alert
+ end;
+ false ->
+ ?ALERT_REC(?FATAL,?HANDSHAKE_FAILURE)
+ end.
+
+verify_dh_params(Signed, Hash, {?rsaEncryption, PubKey, _PubKeyparams}) ->
+ case public_key:decrypt_public(Signed, PubKey,
+ [{rsa_pad, rsa_pkcs1_padding}]) of
+ Hash ->
+ true;
+ _ ->
+ false
+ end.
encode_alert(#alert{} = Alert, Version, ConnectionStates) ->
?DBG_TERM(Alert),
@@ -1442,8 +1575,8 @@ encode_size_packet(Bin, Size, Max) ->
false -> <<Len:Size, Bin/binary>>
end.
-encode_data(Data, Version, ConnectionStates) ->
- ssl_record:encode_data(Data, Version, ConnectionStates).
+encode_data(Data, Version, ConnectionStates, RenegotiateAt) ->
+ ssl_record:encode_data(Data, Version, ConnectionStates, RenegotiateAt).
decode_alerts(Bin) ->
decode_alerts(Bin, []).
@@ -1454,6 +1587,20 @@ decode_alerts(<<?BYTE(Level), ?BYTE(Description), Rest/binary>>, Acc) ->
decode_alerts(<<>>, Acc) ->
lists:reverse(Acc, []).
+passive_receive(State0 = #state{user_data_buffer = Buffer}, StateName) ->
+ case Buffer of
+ <<>> ->
+ {Record, State} = next_record(State0),
+ next_state(StateName, Record, State);
+ _ ->
+ case application_data(<<>>, State0) of
+ Stop = {stop, _, _} ->
+ Stop;
+ {Record, State} ->
+ next_state(StateName, Record, State)
+ end
+ end.
+
application_data(Data, #state{user_application = {_Mon, Pid},
socket_options = SOpts,
bytes_to_read = BytesToRead,
@@ -1475,12 +1622,12 @@ application_data(Data, #state{user_application = {_Mon, Pid},
socket_options = SocketOpt
},
if
- SocketOpt#socket_options.active =:= false ->
- State; %% Passive mode, wait for active once or recv
- Buffer =:= <<>> -> %% Active and empty, get more data
- next_record(State);
- true -> %% We have more data
- application_data(<<>>, State)
+ SocketOpt#socket_options.active =:= false; Buffer =:= <<>> ->
+ %% Passive mode, wait for active once or recv
+ %% Active and empty, get more data
+ next_record_if_active(State);
+ true -> %% We have more data
+ application_data(<<>>, State)
end;
{error,_Reason} -> %% Invalid packet in packet mode
deliver_packet_error(SOpts, Buffer1, Pid, From),
@@ -1504,39 +1651,89 @@ get_data(#socket_options{active=Active, packet=Raw}, BytesToRead, Buffer)
end;
get_data(#socket_options{packet=Type, packet_size=Size}, _, Buffer) ->
PacketOpts = [{packet_size, Size}],
- case erlang:decode_packet(Type, Buffer, PacketOpts) of
+ case decode_packet(Type, Buffer, PacketOpts) of
{more, _} ->
{ok, <<>>, Buffer};
Decoded ->
Decoded
end.
-deliver_app_data(SO = #socket_options{active=once}, Data, Pid, From) ->
- send_or_reply(once, Pid, From, format_reply(SO, Data)),
- SO#socket_options{active=false};
-deliver_app_data(SO= #socket_options{active=Active}, Data, Pid, From) ->
- send_or_reply(Active, Pid, From, format_reply(SO, Data)),
- SO.
+decode_packet({http, headers}, Buffer, PacketOpts) ->
+ decode_packet(httph, Buffer, PacketOpts);
+decode_packet({http_bin, headers}, Buffer, PacketOpts) ->
+ decode_packet(httph_bin, Buffer, PacketOpts);
+decode_packet(Type, Buffer, PacketOpts) ->
+ erlang:decode_packet(Type, Buffer, PacketOpts).
+
+%% Just like with gen_tcp sockets, an ssl socket that has been configured with
+%% {packet, http} (or {packet, http_bin}) will automatically switch to expect
+%% HTTP headers after it sees a HTTP Request or HTTP Response line. We
+%% represent the current state as follows:
+%% #socket_options.packet =:= http: Expect a HTTP Request/Response line
+%% #socket_options.packet =:= {http, headers}: Expect HTTP Headers
+%% Note that if the user has explicitly configured the socket to expect
+%% HTTP headers using the {packet, httph} option, we don't do any automatic
+%% switching of states.
+deliver_app_data(SOpts = #socket_options{active=Active, packet=Type},
+ Data, Pid, From) ->
+ send_or_reply(Active, Pid, From, format_reply(SOpts, Data)),
+ SO = case Data of
+ {P, _, _, _} when ((P =:= http_request) or (P =:= http_response)),
+ ((Type =:= http) or (Type =:= http_bin)) ->
+ SOpts#socket_options{packet={Type, headers}};
+ http_eoh when tuple_size(Type) =:= 2 ->
+ % End of headers - expect another Request/Response line
+ {Type1, headers} = Type,
+ SOpts#socket_options{packet=Type1};
+ _ ->
+ SOpts
+ end,
+ case Active of
+ once ->
+ SO#socket_options{active=false};
+ _ ->
+ SO
+ end.
-format_reply(#socket_options{active=false, mode=Mode, header=Header}, Data) ->
- {ok, format_reply(Mode, Header, Data)};
-format_reply(#socket_options{active=_, mode=Mode, header=Header}, Data) ->
- {ssl, sslsocket(), format_reply(Mode, Header, Data)}.
+format_reply(#socket_options{active = false, mode = Mode, packet = Packet,
+ header = Header}, Data) ->
+ {ok, format_reply(Mode, Packet, Header, Data)};
+format_reply(#socket_options{active = _, mode = Mode, packet = Packet,
+ header = Header}, Data) ->
+ {ssl, sslsocket(), format_reply(Mode, Packet, Header, Data)}.
-deliver_packet_error(SO= #socket_options{active=Active}, Data, Pid, From) ->
+deliver_packet_error(SO= #socket_options{active = Active}, Data, Pid, From) ->
send_or_reply(Active, Pid, From, format_packet_error(SO, Data)).
-format_packet_error(#socket_options{active=false, mode=Mode}, Data) ->
- {error, {invalid_packet, format_reply(Mode, raw, Data)}};
-format_packet_error(#socket_options{active=_, mode=Mode}, Data) ->
- {ssl_error, sslsocket(), {invalid_packet, format_reply(Mode, raw, Data)}}.
-
-format_reply(list, _, Data) -> binary_to_list(Data);
-format_reply(binary, 0, Data) -> Data;
-format_reply(binary, raw, Data) -> Data;
-format_reply(binary, N, Data) -> % Header mode
- <<Header:N/binary, Rest/binary>> = Data,
- [binary_to_list(Header), Rest].
+format_packet_error(#socket_options{active = false, mode = Mode}, Data) ->
+ {error, {invalid_packet, format_reply(Mode, raw, 0, Data)}};
+format_packet_error(#socket_options{active = _, mode = Mode}, Data) ->
+ {ssl_error, sslsocket(), {invalid_packet, format_reply(Mode, raw, 0, Data)}}.
+
+format_reply(_, http, _,Data) -> Data;
+format_reply(_, http_bin, _, Data) -> Data;
+format_reply(_, {http, headers}, _,Data) -> Data;
+format_reply(_, {http_bin, headers}, _, Data) -> Data;
+format_reply(_, asn1, _,Data) -> Data;
+format_reply(_, cdr, _, Data) -> Data;
+format_reply(_, sunrm, _,Data) -> Data;
+format_reply(_, fcgi, _, Data) -> Data;
+format_reply(_, tpkt, _, Data) -> Data;
+format_reply(_, line, _, Data) -> Data;
+format_reply(binary, _, N, Data) when N > 0 -> % Header mode
+ header(N, Data);
+format_reply(binary, _, _, Data) -> Data;
+format_reply(list, _, _, Data) -> binary_to_list(Data).
+
+header(0, <<>>) ->
+ <<>>;
+header(_, <<>>) ->
+ [];
+header(0, Binary) ->
+ Binary;
+header(N, Binary) ->
+ <<?BYTE(ByteN), NewBinary/binary>> = Binary,
+ [ByteN | header(N-1, NewBinary)].
%% tcp_closed
send_or_reply(false, _Pid, undefined, _Data) ->
@@ -1557,50 +1754,127 @@ opposite_role(server) ->
send_user(Pid, Msg) ->
Pid ! Msg.
-%% %% This is the code for {packet,ssl} removed because it was slower
-%% %% than handling it in erlang.
-%% next_record(#state{socket = Socket,
-%% tls_buffer = [Msg|Rest],
-%% connection_states = ConnectionStates0} = State) ->
-%% Buffer =
-%% case Rest of
-%% [] ->
-%% inet:setopts(Socket, [{active,once}]),
-%% buffer;
-%% _ -> Rest
-%% end,
-%% case Msg of
-%% #ssl_tls{} ->
-%% {Plain, ConnectionStates} =
-%% ssl_record:decode_cipher_text(Msg, ConnectionStates0),
-%% gen_fsm:send_all_state_event(self(), Plain),
-%% State#state{tls_buffer=Buffer, connection_states = ConnectionStates};
-%% {ssl_close, Msg} ->
-%% self() ! Msg,
-%% State#state{tls_buffer=Buffer}
-%% end;
-%% next_record(#state{socket = Socket, tls_buffer = undefined} = State) ->
-%% inet:setopts(Socket, [{active,once}]),
-%% State#state{tls_buffer=continue};
-%% next_record(State) ->
-%% State#state{tls_buffer=continue}.
+next_state(Next, no_record, State) ->
+ {next_state, Next, State};
+
+next_state(Next, #ssl_tls{type = ?ALERT, fragment = EncAlerts}, State) ->
+ Alerts = decode_alerts(EncAlerts),
+ handle_alerts(Alerts, {next_state, Next, State});
+
+next_state(StateName, #ssl_tls{type = ?HANDSHAKE, fragment = Data},
+ State0 = #state{key_algorithm = KeyAlg,
+ tls_handshake_buffer = Buf0,
+ negotiated_version = Version}) ->
+ Handle =
+ fun({#hello_request{} = Packet, _}, {next_state, connection = SName, State}) ->
+ %% This message should not be included in handshake
+ %% message hashes. Starts new handshake (renegotiation)
+ Hs0 = ssl_handshake:init_hashes(),
+ ?MODULE:SName(Packet, State#state{tls_handshake_hashes=Hs0,
+ renegotiation = {true, peer}});
+ ({#hello_request{} = Packet, _}, {next_state, SName, State}) ->
+ %% This message should not be included in handshake
+ %% message hashes. Already in negotiation so it will be ignored!
+ ?MODULE:SName(Packet, State);
+ ({#client_hello{} = Packet, Raw}, {next_state, connection = SName, State}) ->
+ Hs0 = ssl_handshake:init_hashes(),
+ Hs1 = ssl_handshake:update_hashes(Hs0, Raw),
+ ?MODULE:SName(Packet, State#state{tls_handshake_hashes=Hs1,
+ renegotiation = {true, peer}});
+ ({Packet, Raw}, {next_state, SName, State = #state{tls_handshake_hashes=Hs0}}) ->
+ Hs1 = ssl_handshake:update_hashes(Hs0, Raw),
+ ?MODULE:SName(Packet, State#state{tls_handshake_hashes=Hs1});
+ (_, StopState) -> StopState
+ end,
+ try
+ {Packets, Buf} = ssl_handshake:get_tls_handshake(Data,Buf0, KeyAlg,Version),
+ Start = {next_state, StateName, State0#state{tls_handshake_buffer = Buf}},
+ lists:foldl(Handle, Start, Packets)
+ catch throw:#alert{} = Alert ->
+ handle_own_alert(Alert, Version, StateName, State0),
+ {stop, normal, State0}
+ end;
+
+next_state(StateName, #ssl_tls{type = ?APPLICATION_DATA, fragment = Data}, State0) ->
+ case application_data(Data, State0) of
+ Stop = {stop,_,_} ->
+ Stop;
+ {Record, State} ->
+ next_state(StateName, Record, State)
+ end;
+
+next_state(StateName, #ssl_tls{type = ?CHANGE_CIPHER_SPEC, fragment = <<1>>} =
+ _ChangeCipher,
+ #state{connection_states = ConnectionStates0} = State0) ->
+ ?DBG_TERM(_ChangeCipher),
+ ConnectionStates1 =
+ ssl_record:activate_pending_connection_state(ConnectionStates0, read),
+ {Record, State} = next_record(State0#state{connection_states = ConnectionStates1}),
+ next_state(StateName, Record, State);
+next_state(StateName, #ssl_tls{type = _Unknown}, State0) ->
+ %% Ignore unknown type
+ {Record, State} = next_record(State0),
+ next_state(StateName, Record, State).
next_record(#state{tls_cipher_texts = [], socket = Socket} = State) ->
inet:setopts(Socket, [{active,once}]),
- State;
+ {no_record, State};
next_record(#state{tls_cipher_texts = [CT | Rest],
connection_states = ConnStates0} = State) ->
{Plain, ConnStates} = ssl_record:decode_cipher_text(CT, ConnStates0),
- gen_fsm:send_all_state_event(self(), Plain),
- State#state{tls_cipher_texts = Rest, connection_states = ConnStates}.
+ {Plain, State#state{tls_cipher_texts = Rest, connection_states = ConnStates}}.
next_record_if_active(State =
#state{socket_options =
#socket_options{active = false}}) ->
- State;
+ {no_record ,State};
+
next_record_if_active(State) ->
next_record(State).
+next_state_connection(StateName, #state{send_queue = Queue0,
+ negotiated_version = Version,
+ socket = Socket,
+ transport_cb = Transport,
+ connection_states = ConnectionStates0,
+ ssl_options = #ssl_options{renegotiate_at = RenegotiateAt}
+ } = State) ->
+ %% Send queued up data
+ case queue:out(Queue0) of
+ {{value, {From, Data}}, Queue} ->
+ case encode_data(Data, Version, ConnectionStates0, RenegotiateAt) of
+ {Msgs, [], ConnectionStates} ->
+ Result = Transport:send(Socket, Msgs),
+ gen_fsm:reply(From, Result),
+ next_state_connection(StateName,
+ State#state{connection_states = ConnectionStates,
+ send_queue = Queue});
+ %% This is unlikely to happen. User configuration of the
+ %% undocumented test option renegotiation_at can make it more likely.
+ {Msgs, RestData, ConnectionStates} ->
+ if
+ Msgs =/= [] ->
+ Transport:send(Socket, Msgs);
+ true ->
+ ok
+ end,
+ renegotiate(State#state{connection_states = ConnectionStates,
+ send_queue = queue:in_r({From, RestData}, Queue),
+ renegotiation = {true, internal}})
+ end;
+ {empty, Queue0} ->
+ next_state_is_connection(State)
+ end.
+
+next_state_is_connection(State =
+ #state{recv_during_renegotiation = true, socket_options =
+ #socket_options{active = false}}) ->
+ passive_receive(State#state{recv_during_renegotiation = false}, connection);
+
+next_state_is_connection(State0) ->
+ {Record, State} = next_record_if_active(State0),
+ next_state(connection, Record, State).
+
register_session(_, _, _, #session{is_resumable = true} = Session) ->
Session; %% Already registered
register_session(client, Host, Port, Session0) ->
@@ -1650,7 +1924,10 @@ initial_state(Role, Host, Port, Socket, {SSLOptions, SocketOptions}, User,
bytes_to_read = 0,
user_data_buffer = <<>>,
log_alert = true,
- session_cache_cb = SessionCacheCb
+ session_cache_cb = SessionCacheCb,
+ renegotiation = {false, first},
+ recv_during_renegotiation = false,
+ send_queue = queue:new()
}.
sslsocket(Pid) ->
@@ -1665,8 +1942,12 @@ get_socket_opts(Socket, [mode | Tags], SockOpts, Acc) ->
get_socket_opts(Socket, Tags, SockOpts,
[{mode, SockOpts#socket_options.mode} | Acc]);
get_socket_opts(Socket, [packet | Tags], SockOpts, Acc) ->
- get_socket_opts(Socket, Tags, SockOpts,
- [{packet, SockOpts#socket_options.packet} | Acc]);
+ case SockOpts#socket_options.packet of
+ {Type, headers} ->
+ get_socket_opts(Socket, Tags, SockOpts, [{packet, Type} | Acc]);
+ Type ->
+ get_socket_opts(Socket, Tags, SockOpts, [{packet, Type} | Acc])
+ end;
get_socket_opts(Socket, [header | Tags], SockOpts, Acc) ->
get_socket_opts(Socket, Tags, SockOpts,
[{header, SockOpts#socket_options.header} | Acc]);
@@ -1688,7 +1969,8 @@ set_socket_opts(Socket, [], SockOpts, Other) ->
inet:setopts(Socket, Other),
SockOpts;
set_socket_opts(Socket, [{mode, Mode}| Opts], SockOpts, Other) ->
- set_socket_opts(Socket, Opts, SockOpts#socket_options{mode = Mode}, Other);
+ set_socket_opts(Socket, Opts,
+ SockOpts#socket_options{mode = Mode}, Other);
set_socket_opts(Socket, [{packet, Packet}| Opts], SockOpts, Other) ->
set_socket_opts(Socket, Opts,
SockOpts#socket_options{packet = Packet}, Other);
@@ -1701,10 +1983,71 @@ set_socket_opts(Socket, [{active, Active}| Opts], SockOpts, Other) ->
set_socket_opts(Socket, [Opt | Opts], SockOpts, Other) ->
set_socket_opts(Socket, Opts, SockOpts, [Opt | Other]).
+handle_alerts([], Result) ->
+ Result;
+handle_alerts(_, {stop, _, _} = Stop) ->
+ %% If it is a fatal alert immediately close
+ Stop;
+handle_alerts([Alert | Alerts], {next_state, StateName, State}) ->
+ handle_alerts(Alerts, handle_alert(Alert, StateName, State)).
+
+handle_alert(#alert{level = ?FATAL} = Alert, connection,
+ #state{from = From, user_application = {_Mon, Pid},
+ log_alert = Log,
+ host = Host, port = Port, session = Session,
+ role = Role, socket_options = Opts} = State) ->
+ invalidate_session(Role, Host, Port, Session),
+ log_alert(Log, connection, Alert),
+ alert_user(Opts#socket_options.active, Pid, From, Alert, Role),
+ {stop, normal, State};
+
+handle_alert(#alert{level = ?WARNING, description = ?CLOSE_NOTIFY} = Alert,
+ connection, #state{from = From,
+ role = Role,
+ user_application = {_Mon, Pid},
+ socket_options = Opts} = State) ->
+ alert_user(Opts#socket_options.active, Pid, From, Alert, Role),
+ {stop, normal, State};
+
+handle_alert(#alert{level = ?FATAL} = Alert, StateName,
+ #state{from = From, host = Host, port = Port, session = Session,
+ log_alert = Log, role = Role} = State) ->
+ invalidate_session(Role, Host, Port, Session),
+ log_alert(Log, StateName, Alert),
+ alert_user(From, Alert, Role),
+ {stop, normal, State};
+handle_alert(#alert{level = ?WARNING, description = ?CLOSE_NOTIFY} = Alert,
+ _, #state{from = From, role = Role} = State) ->
+ alert_user(From, Alert, Role),
+ {stop, normal, State};
+
+handle_alert(#alert{level = ?WARNING, description = ?NO_RENEGOTIATION} = Alert, StateName,
+ #state{log_alert = Log, renegotiation = {true, internal}, from = From,
+ role = Role} = State) ->
+ log_alert(Log, StateName, Alert),
+ alert_user(From, Alert, Role),
+ {stop, normal, State};
+
+handle_alert(#alert{level = ?WARNING, description = ?NO_RENEGOTIATION} = Alert, StateName,
+ #state{log_alert = Log, renegotiation = {true, From}} = State0) ->
+ log_alert(Log, StateName, Alert),
+ gen_fsm:reply(From, {error, renegotiation_rejected}),
+ {Record, State} = next_record(State0),
+ next_state(connection, Record, State);
+
+handle_alert(#alert{level = ?WARNING, description = ?USER_CANCELED} = Alert, StateName,
+ #state{log_alert = Log} = State0) ->
+ log_alert(Log, StateName, Alert),
+ {Record, State} = next_record(State0),
+ next_state(StateName, Record, State).
+
alert_user(From, Alert, Role) ->
alert_user(false, no_pid, From, Alert, Role).
alert_user(false = Active, Pid, From, Alert, Role) ->
+ %% If there is an outstanding ssl_accept | recv
+ %% From will be defined and send_or_reply will
+ %% send the appropriate error message.
ReasonCode = ssl_alert:reason_code(Alert, Role),
send_or_reply(Active, Pid, From, {error, ReasonCode});
alert_user(Active, Pid, From, Alert, Role) ->
@@ -1732,7 +2075,13 @@ handle_own_alert(Alert, Version, StateName,
log_alert = Log}) ->
try %% Try to tell the other side
{BinMsg, _} =
- encode_alert(Alert, Version, ConnectionStates),
+ encode_alert(Alert, Version, ConnectionStates),
+ %% Try to make sure alert will be sent before socket is closed
+ %% when process ends. This will help on some
+ %% linux platforms and knowingly not break anything on other
+ %% platforms. Other platforms will benefit from shutdown that is now
+ %% done before close.
+ inet:setopts(Socket, [{nodelay, true}]),
Transport:send(Socket, BinMsg)
catch _:_ -> %% Can crash if we are in a uninitialized state
ignore
@@ -1744,6 +2093,65 @@ handle_own_alert(Alert, Version, StateName,
ok
end.
-make_premaster_secret({MajVer, MinVer}) ->
+handle_unexpected_message(_Msg, StateName, #state{negotiated_version = Version} = State) ->
+ Alert = ?ALERT_REC(?FATAL,?UNEXPECTED_MESSAGE),
+ handle_own_alert(Alert, Version, StateName, State),
+ {stop, normal, State}.
+
+make_premaster_secret({MajVer, MinVer}, Alg) when Alg == rsa;
+ Alg == dh_dss;
+ Alg == dh_rsa ->
Rand = crypto:rand_bytes(?NUM_OF_PREMASTERSECRET_BYTES-2),
- <<?BYTE(MajVer), ?BYTE(MinVer), Rand/binary>>.
+ <<?BYTE(MajVer), ?BYTE(MinVer), Rand/binary>>;
+make_premaster_secret(_, _) ->
+ undefined.
+
+mpint_binary(Binary) ->
+ Size = byte_size(Binary),
+ <<?UINT32(Size), Binary/binary>>.
+
+
+ack_connection(#state{renegotiation = {true, Initiater}} = State)
+ when Initiater == internal;
+ Initiater == peer ->
+ State#state{renegotiation = undefined};
+ack_connection(#state{renegotiation = {true, From}} = State) ->
+ gen_fsm:reply(From, ok),
+ State#state{renegotiation = undefined};
+ack_connection(#state{renegotiation = {false, first},
+ from = From} = State) when From =/= undefined ->
+ gen_fsm:reply(From, connected),
+ State#state{renegotiation = undefined};
+ack_connection(State) ->
+ State.
+
+renegotiate(#state{role = client} = State) ->
+ %% Handle same way as if server requested
+ %% the renegotiation
+ Hs0 = ssl_handshake:init_hashes(),
+ connection(#hello_request{}, State#state{tls_handshake_hashes = Hs0});
+renegotiate(#state{role = server,
+ socket = Socket,
+ transport_cb = Transport,
+ negotiated_version = Version,
+ connection_states = ConnectionStates0} = State0) ->
+ HelloRequest = ssl_handshake:hello_request(),
+ Frag = ssl_handshake:encode_handshake(HelloRequest, Version, undefined),
+ Hs0 = ssl_handshake:init_hashes(),
+ {BinMsg, ConnectionStates} =
+ ssl_record:encode_handshake(Frag, Version, ConnectionStates0),
+ Transport:send(Socket, BinMsg),
+ {Record, State} = next_record(State0#state{connection_states =
+ ConnectionStates,
+ tls_handshake_hashes = Hs0}),
+ next_state(hello, Record, State).
+
+notify_senders(SendQueue) ->
+ lists:foreach(fun({From, _}) ->
+ gen_fsm:reply(From, {error, closed})
+ end, queue:to_list(SendQueue)).
+
+notify_renegotiater({true, From}) when not is_atom(From) ->
+ gen_fsm:reply(From, {error, closed});
+notify_renegotiater(_) ->
+ ok.
diff --git a/lib/ssl/src/ssl_handshake.erl b/lib/ssl/src/ssl_handshake.erl
index 8c598135ca..9f5ac7106a 100644
--- a/lib/ssl/src/ssl_handshake.erl
+++ b/lib/ssl/src/ssl_handshake.erl
@@ -31,11 +31,11 @@
-include("ssl_debug.hrl").
-include_lib("public_key/include/public_key.hrl").
--export([master_secret/4, client_hello/4, server_hello/3, hello/2,
- certify/5, certificate/3,
+-export([master_secret/4, client_hello/4, server_hello/3, hello/2,
+ hello_request/0, certify/7, certificate/3,
client_certificate_verify/6,
certificate_verify/6, certificate_request/2,
- key_exchange/2, finished/4,
+ key_exchange/2, server_key_exchange_hash/2, finished/4,
verify_connection/5,
get_tls_handshake/4,
server_hello_done/0, sig_alg/1,
@@ -97,6 +97,15 @@ server_hello(SessionId, Version, ConnectionStates) ->
}.
%%--------------------------------------------------------------------
+%% Function: hello_request() -> #hello_request{}
+%%
+%% Description: Creates a hello request message sent by server to
+%% trigger renegotiation.
+%%--------------------------------------------------------------------
+hello_request() ->
+ #hello_request{}.
+
+%%--------------------------------------------------------------------
%% Function: hello(Hello, Info) ->
%% {Version, Id, NewConnectionStates} |
%% #alert{}
@@ -152,10 +161,25 @@ hello(#client_hello{client_version = ClientVersion, random = Random} = Hello,
%% Description: Handles a certificate handshake message
%%--------------------------------------------------------------------
certify(#certificate{asn1_certificates = ASN1Certs}, CertDbRef,
- MaxPathLen, Verify, VerifyFun) ->
+ MaxPathLen, Verify, VerifyFun, ValidateFun, Role) ->
[PeerCert | _] = ASN1Certs,
VerifyBool = verify_bool(Verify),
-
+
+ ValidateExtensionFun =
+ case ValidateFun of
+ undefined ->
+ fun(Extensions, ValidationState, Verify0, AccError) ->
+ ssl_certificate:validate_extensions(Extensions, ValidationState,
+ [], Verify0, AccError, Role)
+ end;
+ Fun ->
+ fun(Extensions, ValidationState, Verify0, AccError) ->
+ {NewExtensions, NewValidationState, NewAccError}
+ = ssl_certificate:validate_extensions(Extensions, ValidationState,
+ [], Verify0, AccError, Role),
+ Fun(NewExtensions, NewValidationState, Verify0, NewAccError)
+ end
+ end,
try
%% Allow missing root_cert and check that with VerifyFun
ssl_certificate:trusted_cert_and_path(ASN1Certs, CertDbRef, false) of
@@ -165,6 +189,8 @@ certify(#certificate{asn1_certificates = ASN1Certs}, CertDbRef,
[{max_path_length,
MaxPathLen},
{verify, VerifyBool},
+ {validate_extensions_fun,
+ ValidateExtensionFun},
{acc_errors,
VerifyErrors}]),
case Result of
@@ -248,8 +274,10 @@ client_certificate_verify(OwnCert, MasterSecret, Version, Algorithm,
%% Description: Checks that the certificate_verify message is valid.
%%--------------------------------------------------------------------
certificate_verify(Signature, {_, PublicKey, _}, Version,
- MasterSecret, Algorithm, {_, Hashes0})
- when Algorithm =:= rsa; Algorithm =:= dh_rsa; Algorithm =:= dhe_rsa ->
+ MasterSecret, Algorithm, {_, Hashes0})
+ when Algorithm == rsa;
+ Algorithm == dh_rsa;
+ Algorithm == dhe_rsa ->
Hashes = calc_certificate_verify(Version, MasterSecret,
Algorithm, Hashes0),
case public_key:decrypt_public(Signature, PublicKey,
@@ -296,30 +324,32 @@ key_exchange(client, fixed_diffie_hellman) ->
#client_diffie_hellman_public{
dh_public = <<>>
}};
-key_exchange(client, {dh, PublicKey}) ->
- Len = byte_size(PublicKey),
+key_exchange(client, {dh, <<?UINT32(Len), PublicKey:Len/binary>>}) ->
#client_key_exchange{
- exchange_keys = #client_diffie_hellman_public{
- dh_public = <<?UINT16(Len), PublicKey/binary>>}
+ exchange_keys = #client_diffie_hellman_public{
+ dh_public = PublicKey}
};
-%% key_exchange(server, {{?'dhpublicnumber', _PublicKey,
-%% #'DomainParameters'{p = P, g = G, y = Y},
-%% SignAlgorithm, ClientRandom, ServerRandom}}) ->
-%% ServerDHParams = #server_dh_params{dh_p = P, dh_g = G, dh_y = Y},
-%% PLen = byte_size(P),
-%% GLen = byte_size(G),
-%% YLen = byte_size(Y),
-%% Hash = server_key_exchange_hash(SignAlgorithm, <<ClientRandom/binary,
-%% ServerRandom/binary,
-%% ?UINT16(PLen), P/binary,
-%% ?UINT16(GLen), G/binary,
-%% ?UINT16(YLen), Y/binary>>),
-%% Signed = digitally_signed(Hash, PrivateKey),
-%% #server_key_exchange{
-%% params = ServerDHParams,
-%% signed_params = Signed
-%% };
+key_exchange(server, {dh, {<<?UINT32(_), PublicKey/binary>>, _},
+ #'DHParameter'{prime = P, base = G},
+ KeyAlgo, ClientRandom, ServerRandom, PrivateKey}) ->
+ <<?UINT32(_), PBin/binary>> = crypto:mpint(P),
+ <<?UINT32(_), GBin/binary>> = crypto:mpint(G),
+ PLen = byte_size(PBin),
+ GLen = byte_size(GBin),
+ YLen = byte_size(PublicKey),
+ ServerDHParams = #server_dh_params{dh_p = PBin,
+ dh_g = GBin, dh_y = PublicKey},
+
+ Hash =
+ server_key_exchange_hash(KeyAlgo, <<ClientRandom/binary,
+ ServerRandom/binary,
+ ?UINT16(PLen), PBin/binary,
+ ?UINT16(GLen), GBin/binary,
+ ?UINT16(YLen), PublicKey/binary>>),
+ Signed = digitally_signed(Hash, PrivateKey),
+ #server_key_exchange{params = ServerDHParams,
+ signed_params = Signed};
key_exchange(_, _) ->
%%TODO : Real imp
#server_key_exchange{}.
@@ -417,7 +447,8 @@ server_hello_done() ->
%%
%% encode a handshake packet to binary
%%--------------------------------------------------------------------
-encode_handshake(Package, Version, SigAlg) ->
+encode_handshake(Package, Version, KeyAlg) ->
+ SigAlg = sig_alg(KeyAlg),
{MsgType, Bin} = enc_hs(Package, Version, SigAlg),
Len = byte_size(Bin),
[MsgType, ?uint24(Len), Bin].
@@ -437,32 +468,16 @@ get_tls_handshake(Data, Buffer, KeyAlg, Version) ->
get_tls_handshake_aux(list_to_binary([Buffer, Data]),
KeyAlg, Version, []).
-get_tls_handshake_aux(<<?BYTE(Type), ?UINT24(Length), Body:Length/binary,Rest/binary>>,
- KeyAlg, Version, Acc) ->
+get_tls_handshake_aux(<<?BYTE(Type), ?UINT24(Length),
+ Body:Length/binary,Rest/binary>>, KeyAlg,
+ Version, Acc) ->
Raw = <<?BYTE(Type), ?UINT24(Length), Body/binary>>,
- H = dec_hs(Type, Body, KeyAlg, Version),
+ H = dec_hs(Type, Body, key_exchange_alg(KeyAlg), Version),
get_tls_handshake_aux(Rest, KeyAlg, Version, [{H,Raw} | Acc]);
get_tls_handshake_aux(Data, _KeyAlg, _Version, Acc) ->
{lists:reverse(Acc), Data}.
%%--------------------------------------------------------------------
-%% Function: sig_alg(atom()) -> integer()
-%%
-%% Description: Convert from key exchange as atom to signature
-%% algorithm as a ?SIGNATURE_... constant
-%%--------------------------------------------------------------------
-
-sig_alg(dh_anon) ->
- ?SIGNATURE_ANONYMOUS;
-sig_alg(Alg) when Alg == dhe_rsa; Alg == rsa; Alg == dh_rsa ->
- ?SIGNATURE_RSA;
-sig_alg(Alg) when Alg == dh_dss; Alg == dhe_dss ->
- ?SIGNATURE_DSA;
-sig_alg(_) ->
- ?NULL.
-
-
-%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
verify_bool(verify_peer) ->
@@ -649,8 +664,8 @@ dec_hs(?SERVER_HELLO, <<?BYTE(Major), ?BYTE(Minor), Random:32/binary,
dec_hs(?CERTIFICATE, <<?UINT24(ACLen), ASN1Certs:ACLen/binary>>, _, _) ->
#certificate{asn1_certificates = certs_to_list(ASN1Certs)};
dec_hs(?SERVER_KEY_EXCHANGE, <<?UINT16(ModLen), Mod:ModLen/binary,
- ?UINT16(ExpLen), Exp:ExpLen/binary,
- Sig/binary>>,
+ ?UINT16(ExpLen), Exp:ExpLen/binary,
+ ?UINT16(_), Sig/binary>>,
?KEY_EXCHANGE_RSA, _) ->
#server_key_exchange{params = #server_rsa_params{rsa_modulus = Mod,
rsa_exponent = Exp},
@@ -658,9 +673,10 @@ dec_hs(?SERVER_KEY_EXCHANGE, <<?UINT16(ModLen), Mod:ModLen/binary,
dec_hs(?SERVER_KEY_EXCHANGE, <<?UINT16(PLen), P:PLen/binary,
?UINT16(GLen), G:GLen/binary,
?UINT16(YLen), Y:YLen/binary,
- Sig/binary>>,
+ ?UINT16(_), Sig/binary>>,
?KEY_EXCHANGE_DIFFIE_HELLMAN, _) ->
- #server_key_exchange{params = #server_dh_params{dh_p = P,dh_g = G, dh_y = Y},
+ #server_key_exchange{params = #server_dh_params{dh_p = P,dh_g = G,
+ dh_y = Y},
signed_params = Sig};
dec_hs(?CERTIFICATE_REQUEST,
<<?BYTE(CertTypesLen), CertTypes:CertTypesLen/binary,
@@ -672,18 +688,20 @@ dec_hs(?SERVER_HELLO_DONE, <<>>, _, _) ->
#server_hello_done{};
dec_hs(?CERTIFICATE_VERIFY,<<?UINT16(_), Signature/binary>>, _, _)->
#certificate_verify{signature = Signature};
-dec_hs(?CLIENT_KEY_EXCHANGE, PKEPMS, rsa, {3, 0}) ->
+dec_hs(?CLIENT_KEY_EXCHANGE, PKEPMS, ?KEY_EXCHANGE_RSA, {3, 0}) ->
PreSecret = #encrypted_premaster_secret{premaster_secret = PKEPMS},
#client_key_exchange{exchange_keys = PreSecret};
-dec_hs(?CLIENT_KEY_EXCHANGE, <<?UINT16(_), PKEPMS/binary>>, rsa, _) ->
+dec_hs(?CLIENT_KEY_EXCHANGE, <<?UINT16(_), PKEPMS/binary>>,
+ ?KEY_EXCHANGE_RSA, _) ->
PreSecret = #encrypted_premaster_secret{premaster_secret = PKEPMS},
#client_key_exchange{exchange_keys = PreSecret};
dec_hs(?CLIENT_KEY_EXCHANGE, <<>>, ?KEY_EXCHANGE_DIFFIE_HELLMAN, _) ->
%% TODO: Should check whether the cert already contains a suitable DH-key (7.4.7.2)
throw(?ALERT_REC(?FATAL, implicit_public_value_encoding));
-dec_hs(?CLIENT_KEY_EXCHANGE, <<?UINT16(DH_YCLen), DH_YC:DH_YCLen/binary>>,
+dec_hs(?CLIENT_KEY_EXCHANGE, <<?UINT16(DH_YLen), DH_Y:DH_YLen/binary>>,
?KEY_EXCHANGE_DIFFIE_HELLMAN, _) ->
- #client_diffie_hellman_public{dh_public = DH_YC};
+ #client_key_exchange{exchange_keys =
+ #client_diffie_hellman_public{dh_public = DH_Y}};
dec_hs(?FINISHED, VerifyData, _, _) ->
#finished{verify_data = VerifyData};
dec_hs(_, _, _, _) ->
@@ -756,12 +774,13 @@ enc_hs(#certificate{asn1_certificates = ASN1CertList}, _Version, _) ->
{?CERTIFICATE, <<?UINT24(ACLen), ASN1Certs:ACLen/binary>>};
enc_hs(#server_key_exchange{params = #server_rsa_params{rsa_modulus = Mod,
rsa_exponent = Exp},
- signed_params = SignedParams}, _Version, _) ->
+ signed_params = SignedParams}, _Version, _) ->
ModLen = byte_size(Mod),
ExpLen = byte_size(Exp),
- {?SERVER_KEY_EXCHANGE, <<?UINT16(ModLen), Mod/binary,
+ SignedLen = byte_size(SignedParams),
+ {?SERVER_KEY_EXCHANGE, <<?UINT16(ModLen),Mod/binary,
?UINT16(ExpLen), Exp/binary,
- SignedParams/binary>>
+ ?UINT16(SignedLen), SignedParams/binary>>
};
enc_hs(#server_key_exchange{params = #server_dh_params{
dh_p = P, dh_g = G, dh_y = Y},
@@ -769,10 +788,11 @@ enc_hs(#server_key_exchange{params = #server_dh_params{
PLen = byte_size(P),
GLen = byte_size(G),
YLen = byte_size(Y),
- {?SERVER_KEY_EXCHANGE, <<?UINT16(PLen), P:PLen/binary,
- ?UINT16(GLen), G:GLen/binary,
- ?UINT16(YLen), Y:YLen/binary,
- SignedParams/binary>>
+ SignedLen = byte_size(SignedParams),
+ {?SERVER_KEY_EXCHANGE, <<?UINT16(PLen), P/binary,
+ ?UINT16(GLen), G/binary,
+ ?UINT16(YLen), Y/binary,
+ ?UINT16(SignedLen), SignedParams/binary>>
};
enc_hs(#certificate_request{certificate_types = CertTypes,
certificate_authorities = CertAuths},
@@ -927,13 +947,40 @@ calc_certificate_verify({3, N}, _, Algorithm, Hashes)
when N == 1; N == 2 ->
ssl_tls1:certificate_verify(Algorithm, Hashes).
-%% server_key_exchange_hash(Algorithm, Value) when Algorithm == rsa;
-%% Algorithm == dh_rsa;
-%% Algorithm == dhe_rsa ->
-%% MD5 = crypto:md5_final(Value),
-%% SHA = crypto:sha_final(Value),
-%% <<MD5/binary, SHA/binary>>;
+server_key_exchange_hash(Algorithm, Value) when Algorithm == rsa;
+ Algorithm == dh_rsa;
+ Algorithm == dhe_rsa ->
+ MD5Context = crypto:md5_init(),
+ NewMD5Context = crypto:md5_update(MD5Context, Value),
+ MD5 = crypto:md5_final(NewMD5Context),
+
+ SHAContext = crypto:sha_init(),
+ NewSHAContext = crypto:sha_update(SHAContext, Value),
+ SHA = crypto:sha_final(NewSHAContext),
+
+ <<MD5/binary, SHA/binary>>;
+
+server_key_exchange_hash(Algorithm, Value) when Algorithm == dh_dss;
+ Algorithm == dhe_dss ->
+
+ SHAContext = crypto:sha_init(),
+ NewSHAContext = crypto:sha_update(SHAContext, Value),
+ crypto:sha_final(NewSHAContext).
-%% server_key_exchange_hash(Algorithm, Value) when Algorithm == dh_dss;
-%% Algorithm == dhe_dss ->
-%% crypto:sha_final(Value).
+
+sig_alg(dh_anon) ->
+ ?SIGNATURE_ANONYMOUS;
+sig_alg(Alg) when Alg == dhe_rsa; Alg == rsa; Alg == dh_rsa ->
+ ?SIGNATURE_RSA;
+sig_alg(Alg) when Alg == dh_dss; Alg == dhe_dss ->
+ ?SIGNATURE_DSA;
+sig_alg(_) ->
+ ?NULL.
+
+key_exchange_alg(rsa) ->
+ ?KEY_EXCHANGE_RSA;
+key_exchange_alg(Alg) when Alg == dhe_rsa; Alg == dhe_dss;
+ Alg == dh_dss; Alg == dh_rsa; Alg == dh_anon ->
+ ?KEY_EXCHANGE_DIFFIE_HELLMAN;
+key_exchange_alg(_) ->
+ ?NULL.
diff --git a/lib/ssl/src/ssl_handshake.hrl b/lib/ssl/src/ssl_handshake.hrl
index b2bdfa0934..889d39f2af 100644
--- a/lib/ssl/src/ssl_handshake.hrl
+++ b/lib/ssl/src/ssl_handshake.hrl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2007-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2007-2010. 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%
%%
@@ -38,7 +38,8 @@
-define(NUM_OF_SESSION_ID_BYTES, 32). % TSL 1.1 & SSL 3
-define(NUM_OF_PREMASTERSECRET_BYTES, 48).
-
+-define(DEFAULT_DIFFIE_HELLMAN_GENERATOR, 2).
+-define(DEFAULT_DIFFIE_HELLMAN_PRIME, 16#FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Handsake protocol - RFC 4346 section 7.4
diff --git a/lib/ssl/src/ssl_internal.hrl b/lib/ssl/src/ssl_internal.hrl
index 23a5c93452..8d19abfe1e 100644
--- a/lib/ssl/src/ssl_internal.hrl
+++ b/lib/ssl/src/ssl_internal.hrl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2007-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2007-2010. 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%
%%
@@ -57,12 +57,15 @@
verify_fun, % fun(CertVerifyErrors) -> boolean()
fail_if_no_peer_cert, % boolean()
verify_client_once, % boolean()
+ %% fun(Extensions, State, Verify, AccError) -> {Extensions, State, AccError}
+ validate_extensions_fun,
depth, % integer()
certfile, % file()
keyfile, % file()
key, %
password, %
cacertfile, % file()
+ dhfile, % file()
ciphers, %
%% Local policy for the server if it want's to reuse the session
%% or not. Defaluts to allways returning true.
@@ -71,6 +74,7 @@
%% If false sessions will never be reused, if true they
%% will be reused if possible.
reuse_sessions, % boolean()
+ renegotiate_at,
debug %
}).
diff --git a/lib/ssl/src/ssl_record.erl b/lib/ssl/src/ssl_record.erl
index 37a3d1b639..da48f049f6 100644
--- a/lib/ssl/src/ssl_record.erl
+++ b/lib/ssl/src/ssl_record.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2007-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2007-2010. 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%
%%
@@ -45,7 +45,7 @@
%% Encoding records
-export([encode_handshake/3, encode_alert_record/3,
- encode_change_cipher_spec/2, encode_data/3]).
+ encode_change_cipher_spec/2, encode_data/4]).
%% Decoding
-export([decode_cipher_text/2]).
@@ -474,19 +474,31 @@ split_bin(Bin, ChunkSize, Acc) ->
lists:reverse(Acc, [Bin])
end.
-encode_data(Frag, Version, ConnectionStates)
+encode_data(Frag, Version, ConnectionStates, RenegotiateAt)
when byte_size(Frag) < (?MAX_PLAIN_TEXT_LENGTH - 2048) ->
- encode_plain_text(?APPLICATION_DATA,Version,Frag,ConnectionStates);
-encode_data(Frag, Version, ConnectionStates) ->
+ case encode_plain_text(?APPLICATION_DATA,Version,Frag,ConnectionStates, RenegotiateAt) of
+ {renegotiate, Data} ->
+ {[], Data, ConnectionStates};
+ {Msg, CS} ->
+ {Msg, [], CS}
+ end;
+
+encode_data(Frag, Version, ConnectionStates, RenegotiateAt) when is_binary(Frag) ->
Data = split_bin(Frag, ?MAX_PLAIN_TEXT_LENGTH - 2048),
- {CS1, Acc} =
- lists:foldl(fun(B, {CS0, Acc}) ->
- {ET, CS1} =
- encode_plain_text(?APPLICATION_DATA,
- Version, B, CS0),
- {CS1, [ET | Acc]}
- end, {ConnectionStates, []}, Data),
- {lists:reverse(Acc), CS1}.
+ encode_data(Data, Version, ConnectionStates, RenegotiateAt);
+
+encode_data(Data, Version, ConnectionStates0, RenegotiateAt) when is_list(Data) ->
+ {ConnectionStates, EncodedMsg, NotEncdedData} =
+ lists:foldl(fun(B, {CS0, Encoded, Rest}) ->
+ case encode_plain_text(?APPLICATION_DATA,
+ Version, B, CS0, RenegotiateAt) of
+ {renegotiate, NotEnc} ->
+ {CS0, Encoded, [NotEnc | Rest]};
+ {Enc, CS1} ->
+ {CS1, [Enc | Encoded], Rest}
+ end
+ end, {ConnectionStates0, [], []}, Data),
+ {lists:reverse(EncodedMsg), lists:reverse(NotEncdedData), ConnectionStates}.
encode_handshake(Frag, Version, ConnectionStates) ->
encode_plain_text(?HANDSHAKE, Version, Frag, ConnectionStates).
@@ -499,6 +511,16 @@ encode_alert_record(#alert{level = Level, description = Description},
encode_change_cipher_spec(Version, ConnectionStates) ->
encode_plain_text(?CHANGE_CIPHER_SPEC, Version, <<1:8>>, ConnectionStates).
+encode_plain_text(Type, Version, Data, ConnectionStates, RenegotiateAt) ->
+ #connection_states{current_write =
+ #connection_state{sequence_number = Num}} = ConnectionStates,
+ case renegotiate(Num, RenegotiateAt) of
+ false ->
+ encode_plain_text(Type, Version, Data, ConnectionStates);
+ true ->
+ {renegotiate, Data}
+ end.
+
encode_plain_text(Type, Version, Data, ConnectionStates) ->
#connection_states{current_write=#connection_state{
compression_state=CompS0,
@@ -511,6 +533,11 @@ encode_plain_text(Type, Version, Data, ConnectionStates) ->
CTBin = encode_tls_cipher_text(Type, Version, CipherText),
{CTBin, ConnectionStates#connection_states{current_write = CS2}}.
+renegotiate(N, M) when N < M->
+ false;
+renegotiate(_,_) ->
+ true.
+
encode_tls_cipher_text(Type, {MajVer, MinVer}, Fragment) ->
Length = erlang:iolist_size(Fragment),
[<<?BYTE(Type), ?BYTE(MajVer), ?BYTE(MinVer), ?UINT16(Length)>>, Fragment].
@@ -529,9 +556,6 @@ cipher(Type, Version, Fragment, CS0) ->
CS2 = CS1#connection_state{cipher_state=CipherS1},
{Ciphered, CS2}.
-decipher(TLS=#ssl_tls{type = ?CHANGE_CIPHER_SPEC}, CS) ->
- %% These are never encrypted
- {TLS, CS};
decipher(TLS=#ssl_tls{type=Type, version=Version, fragment=Fragment}, CS0) ->
SP = CS0#connection_state.security_parameters,
BCA = SP#security_parameters.bulk_cipher_algorithm, % eller Cipher?
diff --git a/lib/ssl/src/ssl_record.hrl b/lib/ssl/src/ssl_record.hrl
index 7370e0f0b3..362b7039d4 100644
--- a/lib/ssl/src/ssl_record.hrl
+++ b/lib/ssl/src/ssl_record.hrl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2007-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2007-2010. 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%
%%
@@ -63,6 +63,13 @@
sequence_number
}).
+-define(MAX_SEQENCE_NUMBER, 18446744073709552000). %% math:pow(2, 64) - 1 = 1.8446744073709552e19
+%% Sequence numbers can not wrap so when max is about to be reached we should renegotiate.
+%% We will renegotiate a little before so that there will be sequence numbers left
+%% for the rehandshake and a little data.
+-define(MARGIN, 100).
+-define(DEFAULT_RENEGOTIATE_AT, ?MAX_SEQENCE_NUMBER - ?MARGIN).
+
%% ConnectionEnd
-define(SERVER, 0).
-define(CLIENT, 1).
diff --git a/lib/ssl/src/ssl_ssl3.erl b/lib/ssl/src/ssl_ssl3.erl
index ab29ac64df..df809ce275 100644
--- a/lib/ssl/src/ssl_ssl3.erl
+++ b/lib/ssl/src/ssl_ssl3.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2007-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2007-2010. 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%
%%
@@ -182,13 +182,13 @@ setup_keys(export, MasterSecret, ServerRandom, ClientRandom,
suites() ->
[
%% TODO: uncomment when supported
- %% ?TLS_DHE_RSA_WITH_AES_256_CBC_SHA,
+ ?TLS_DHE_RSA_WITH_AES_256_CBC_SHA,
%% ?TLS_DHE_DSS_WITH_AES_256_CBC_SHA,
- %% TODO: Funkar inte, borde: ?TLS_RSA_WITH_AES_256_CBC_SHA,
- %% ?TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA,
+ ?TLS_RSA_WITH_AES_256_CBC_SHA,
+ ?TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA,
%% ?TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA,
?TLS_RSA_WITH_3DES_EDE_CBC_SHA,
- %% ?TLS_DHE_RSA_WITH_AES_128_CBC_SHA,
+ ?TLS_DHE_RSA_WITH_AES_128_CBC_SHA,
%% ?TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
?TLS_RSA_WITH_AES_128_CBC_SHA,
%%?TLS_DHE_DSS_WITH_RC4_128_SHA, TODO: Support this?
diff --git a/lib/ssl/src/ssl_tls1.erl b/lib/ssl/src/ssl_tls1.erl
index e0013c48ac..ce9a135168 100644
--- a/lib/ssl/src/ssl_tls1.erl
+++ b/lib/ssl/src/ssl_tls1.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2007-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2007-2010. 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%
%%
@@ -136,13 +136,13 @@ mac_hash(Method, Mac_write_secret, Seq_num, Type, {Major, Minor},
suites() ->
[
%% TODO: uncomment when supported
- %% ?TLS_DHE_RSA_WITH_AES_256_CBC_SHA,
- %% ?TLS_DHE_DSS_WITH_AES_256_CBC_SHA,
- %% TODO: Funkar inte, borde: ?TLS_RSA_WITH_AES_256_CBC_SHA,
- %% ?TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA,
+ ?TLS_DHE_RSA_WITH_AES_256_CBC_SHA,
+ %%?TLS_DHE_DSS_WITH_AES_256_CBC_SHA,
+ ?TLS_RSA_WITH_AES_256_CBC_SHA,
+ ?TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA,
%% ?TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA,
?TLS_RSA_WITH_3DES_EDE_CBC_SHA,
- %% ?TLS_DHE_RSA_WITH_AES_128_CBC_SHA,
+ ?TLS_DHE_RSA_WITH_AES_128_CBC_SHA,
%% ?TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
?TLS_RSA_WITH_AES_128_CBC_SHA,
%%?TLS_DHE_DSS_WITH_RC4_128_SHA, TODO: Support this?
diff --git a/lib/ssl/test/ssl_basic_SUITE.erl b/lib/ssl/test/ssl_basic_SUITE.erl
index 3d9cec43dd..3ee82d990b 100644
--- a/lib/ssl/test/ssl_basic_SUITE.erl
+++ b/lib/ssl/test/ssl_basic_SUITE.erl
@@ -26,10 +26,13 @@
-include("test_server.hrl").
-include("test_server_line.hrl").
+-include_lib("public_key/include/public_key.hrl").
-define('24H_in_sec', 86400).
-define(TIMEOUT, 60000).
-define(EXPIRE, 10).
+-define(SLEEP, 500).
+
-behaviour(ssl_session_cache_api).
@@ -149,20 +152,28 @@ all(doc) ->
all(suite) ->
[app, connection_info, controlling_process, controller_dies,
+ client_closes_socket,
peercert, connect_dist,
- peername, sockname, socket_options, versions, cipher_suites,
+ peername, sockname, socket_options, misc_ssl_options, versions, cipher_suites,
upgrade, upgrade_with_timeout, tcp_connect,
ipv6, ekeyfile, ecertfile, ecacertfile, eoptions, shutdown,
shutdown_write, shutdown_both, shutdown_error, ciphers,
- send_close,
+ send_close, close_transport_accept, dh_params,
server_verify_peer_passive,
server_verify_peer_active, server_verify_peer_active_once,
server_verify_none_passive, server_verify_none_active,
- server_verify_none_active_once,
- server_verify_no_cacerts, client_verify_none_passive,
+ server_verify_none_active_once, server_verify_no_cacerts,
+ server_require_peer_cert_ok, server_require_peer_cert_fail,
+ server_verify_client_once_passive,
+ server_verify_client_once_active,
+ server_verify_client_once_active_once,
+ client_verify_none_passive,
client_verify_none_active, client_verify_none_active_once
%%, session_cache_process_list, session_cache_process_mnesia
- ,reuse_session, reuse_session_expired, server_does_not_want_to_reuse_session
+ ,reuse_session, reuse_session_expired, server_does_not_want_to_reuse_session,
+ client_renegotiate, server_renegotiate,
+ client_no_wrap_sequence_number, server_no_wrap_sequence_number,
+ extended_key_usage, validate_extensions_fun
].
%% Test cases starts here.
@@ -236,7 +247,7 @@ controlling_process(Config) when is_list(Config) ->
Port = ssl_test_lib:inet_port(Server),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
- {from, self()},
+ {from, self()},
{mfa, {?MODULE,
controlling_process_result, [self(),
ClientMsg]}},
@@ -267,7 +278,7 @@ controlling_process_result(Socket, Pid, Msg) ->
ok = ssl:controlling_process(Socket, Pid),
%% Make sure other side has evaluated controlling_process
%% before message is sent
- test_server:sleep(100),
+ test_server:sleep(?SLEEP),
ssl:send(Socket, Msg),
no_result_msg.
@@ -298,7 +309,7 @@ controller_dies(Config) when is_list(Config) ->
{options, ClientOpts}]),
test_server:format("Testcase ~p, Client ~p Server ~p ~n", [self(), Client, Server]),
- timer:sleep(200), %% so that they are connected
+ test_server:sleep(?SLEEP), %% so that they are connected
process_flag(trap_exit, true),
@@ -307,11 +318,15 @@ controller_dies(Config) when is_list(Config) ->
get_close(Client, ?LINE),
%% Test that clients die when process disappear
- Server ! listen, timer:sleep(200),
+ Server ! listen,
Tester = self(),
Connect = fun(Pid) ->
{ok, Socket} = ssl:connect(Hostname, Port,
[{reuseaddr,true},{ssl_imp,new}]),
+ %% Make sure server finishes and verification
+ %% and is in coonection state before
+ %% killing client
+ test_server:sleep(?SLEEP),
Pid ! {self(), connected, Socket},
receive die_nice -> normal end
end,
@@ -321,7 +336,7 @@ controller_dies(Config) when is_list(Config) ->
get_close(Client2, ?LINE),
%% Test that clients die when the controlling process have changed
- Server ! listen, timer:sleep(200),
+ Server ! listen,
Client3 = spawn_link(fun() -> Connect(Tester) end),
Controller = spawn_link(fun() -> receive die_nice -> normal end end),
@@ -345,7 +360,7 @@ controller_dies(Config) when is_list(Config) ->
get_close(Controller, ?LINE),
%% Test that servers die
- Server ! listen, timer:sleep(200),
+ Server ! listen,
LastClient = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
{from, self()},
@@ -353,7 +368,7 @@ controller_dies(Config) when is_list(Config) ->
controller_dies_result, [self(),
ClientMsg]}},
{options, [{reuseaddr,true}|ClientOpts]}]),
- timer:sleep(200), %% so that they are connected
+ test_server:sleep(?SLEEP), %% so that they are connected
exit(Server, killed),
get_close(Server, ?LINE),
@@ -383,6 +398,36 @@ get_close(Pid, Where) ->
end.
%%--------------------------------------------------------------------
+client_closes_socket(doc) ->
+ ["Test what happens when client closes socket before handshake is compleated"];
+client_closes_socket(suite) -> [];
+client_closes_socket(Config) when is_list(Config) ->
+ ServerOpts = ?config(server_opts, Config),
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+ TcpOpts = [binary, {reuseaddr, true}],
+
+ Server = ssl_test_lib:start_upgrade_server_error([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {tcp_options, TcpOpts},
+ {ssl_options, ServerOpts}]),
+ Port = ssl_test_lib:inet_port(Server),
+
+ Connect = fun() ->
+ {ok, _Socket} = rpc:call(ClientNode, gen_tcp, connect,
+ [Hostname, Port, TcpOpts]),
+ %% Make sure that ssl_accept is called before
+ %% client process ends and closes socket.
+ test_server:sleep(?SLEEP)
+ end,
+
+ _Client = spawn_link(Connect),
+
+ ssl_test_lib:check_result(Server, {error,closed}),
+
+ ssl_test_lib:close(Server).
+
+%%--------------------------------------------------------------------
+
peercert(doc) ->
[""];
@@ -484,9 +529,9 @@ peername(Config) when is_list(Config) ->
Port = ssl_test_lib:inet_port(Server),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
- {from, self()},
- {mfa, {?MODULE, peername_result, []}},
- {options, [{port, 0} | ClientOpts]}]),
+ {from, self()},
+ {mfa, {?MODULE, peername_result, []}},
+ {options, [{port, 0} | ClientOpts]}]),
ClientPort = ssl_test_lib:inet_port(Client),
ServerIp = ssl_test_lib:node_to_hostip(ServerNode),
@@ -526,6 +571,7 @@ sockname(Config) when is_list(Config) ->
{from, self()},
{mfa, {?MODULE, sockname_result, []}},
{options, [{port, 0} | ClientOpts]}]),
+
ClientPort = ssl_test_lib:inet_port(Client),
ServerIp = ssl_test_lib:node_to_hostip(ServerNode),
ClientIp = ssl_test_lib:node_to_hostip(ClientNode),
@@ -602,6 +648,46 @@ socket_options_result(Socket, Options, DefaultValues, NewOptions, NewValues) ->
ok.
%%--------------------------------------------------------------------
+misc_ssl_options(doc) ->
+ ["Test what happens when we give valid options"];
+
+misc_ssl_options(suite) ->
+ [];
+
+misc_ssl_options(Config) when is_list(Config) ->
+ ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ?config(server_opts, Config),
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ %% Chek that ssl options not tested elsewhere are filtered away e.i. not passed to inet.
+ TestOpts = [{depth, 1},
+ {key, undefined},
+ {password, []},
+ {reuse_session, fun(_,_,_,_) -> true end},
+ {debug, []},
+ {cb_info, {gen_tcp, tcp, tcp_closed}}],
+
+ Server =
+ ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {mfa, {?MODULE, send_recv_result_active, []}},
+ {options, TestOpts ++ ServerOpts}]),
+ Port = ssl_test_lib:inet_port(Server),
+ Client =
+ ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, send_recv_result_active, []}},
+ {options, TestOpts ++ ClientOpts}]),
+
+ test_server:format("Testcase ~p, Client ~p Server ~p ~n",
+ [self(), Client, Server]),
+
+ ssl_test_lib:check_result(Server, ok, Client, ok),
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client).
+
+%%--------------------------------------------------------------------
versions(doc) ->
["Test API function versions/0"];
@@ -667,13 +753,71 @@ send_close(Config) when is_list(Config) ->
test_server:format("Testcase ~p, Client ~p Server ~p ~n",
[self(), self(), Server]),
- ok = ssl:send(SslS, "HejHopp"),
- {ok,<<"Hejhopp">>} = ssl:recv(SslS, 7),
+ ok = ssl:send(SslS, "Hello world"),
+ {ok,<<"Hello world">>} = ssl:recv(SslS, 11),
gen_tcp:close(TcpS),
- {error, _} = ssl:send(SslS, "HejHopp"),
+ {error, _} = ssl:send(SslS, "Hello world"),
ssl_test_lib:close(Server).
%%--------------------------------------------------------------------
+close_transport_accept(doc) ->
+ ["Tests closing ssl socket when waiting on ssl:transport_accept/1"];
+
+close_transport_accept(suite) ->
+ [];
+
+close_transport_accept(Config) when is_list(Config) ->
+ ServerOpts = ?config(server_opts, Config),
+ {_ClientNode, ServerNode, _Hostname} = ssl_test_lib:run_where(Config),
+
+ Port = 0,
+ Opts = [{active, false} | ServerOpts],
+ {ok, ListenSocket} = rpc:call(ServerNode, ssl, listen, [Port, Opts]),
+ spawn_link(fun() ->
+ test_server:sleep(?SLEEP),
+ rpc:call(ServerNode, ssl, close, [ListenSocket])
+ end),
+ case rpc:call(ServerNode, ssl, transport_accept, [ListenSocket]) of
+ {error, closed} ->
+ ok;
+ Other ->
+ exit({?LINE, Other})
+ end.
+
+%%--------------------------------------------------------------------
+dh_params(doc) ->
+ ["Test to specify DH-params file in server."];
+
+dh_params(suite) ->
+ [];
+
+dh_params(Config) when is_list(Config) ->
+ ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ?config(server_opts, Config),
+ DataDir = ?config(data_dir, Config),
+ DHParamFile = filename:join(DataDir, "dHParam.pem"),
+
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {mfa, {?MODULE, send_recv_result_active, []}},
+ {options, [{dhfile, DHParamFile} | ServerOpts]}]),
+ Port = ssl_test_lib:inet_port(Server),
+ Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, send_recv_result_active, []}},
+ {options,
+ [{ciphers,[{dhe_rsa,aes_256_cbc,sha,ignore}]} |
+ ClientOpts]}]),
+
+ ssl_test_lib:check_result(Server, ok, Client, ok),
+
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client).
+
+%%--------------------------------------------------------------------
upgrade(doc) ->
["Test that you can upgrade an tcp connection to an ssl connection"];
@@ -687,11 +831,12 @@ upgrade(Config) when is_list(Config) ->
TcpOpts = [binary, {reuseaddr, true}],
Server = ssl_test_lib:start_upgrade_server([{node, ServerNode}, {port, 0},
- {from, self()},
- {mfa, {?MODULE,
- upgrade_result, []}},
- {tcp_options, TcpOpts},
- {ssl_options, ServerOpts}]),
+ {from, self()},
+ {mfa, {?MODULE,
+ upgrade_result, []}},
+ {tcp_options,
+ [{active, false} | TcpOpts]},
+ {ssl_options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
Client = ssl_test_lib:start_upgrade_client([{node, ClientNode},
{port, Port},
@@ -710,11 +855,12 @@ upgrade(Config) when is_list(Config) ->
ssl_test_lib:close(Client).
upgrade_result(Socket) ->
- ok = ssl:send(Socket, "Hejhopp"),
+ ssl:setopts(Socket, [{active, true}]),
+ ok = ssl:send(Socket, "Hello world"),
%% Make sure binary is inherited from tcp socket and that we do
%% not get the list default!
receive
- {ssl, _, <<"Hejhopp">>} ->
+ {ssl, _, <<"Hello world">>} ->
ok
end.
@@ -736,7 +882,8 @@ upgrade_with_timeout(Config) when is_list(Config) ->
{timeout, 5000},
{mfa, {?MODULE,
upgrade_result, []}},
- {tcp_options, TcpOpts},
+ {tcp_options,
+ [{active, false} | TcpOpts]},
{ssl_options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
Client = ssl_test_lib:start_upgrade_client([{node, ClientNode},
@@ -763,15 +910,14 @@ tcp_connect(suite) ->
[];
tcp_connect(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
ServerOpts = ?config(server_opts, Config),
- {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+ {_, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
TcpOpts = [binary, {reuseaddr, true}],
Server = ssl_test_lib:start_upgrade_server([{node, ServerNode}, {port, 0},
{from, self()},
{timeout, 5000},
- {mfa, {?MODULE, should_close, []}},
+ {mfa, {?MODULE, dummy, []}},
{tcp_options, TcpOpts},
{ssl_options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
@@ -780,18 +926,20 @@ tcp_connect(Config) when is_list(Config) ->
test_server:format("Testcase ~p connected to Server ~p ~n", [self(), Server]),
gen_tcp:send(Socket, "<SOME GARBLED NON SSL MESSAGE>"),
- ssl_test_lib:check_result(Server, {error,esslerrssl}, tcp_closed, Socket),
-
+ receive
+ {tcp_closed, Socket} ->
+ receive
+ {Server, {error, Error}} ->
+ test_server:format("Error ~p", [Error])
+ end
+ end,
ssl_test_lib:close(Server).
-should_close(Socket) ->
- receive
- {ssl, Socket, closed} ->
- server_closed;
- Other ->
- exit({?LINE, Other})
- end.
+dummy(_Socket) ->
+ %% Should not happen as the ssl connection will not be established
+ %% due to fatal handshake failiure
+ exit(kill).
%%--------------------------------------------------------------------
ipv6(doc) ->
@@ -843,12 +991,14 @@ ekeyfile(Config) when is_list(Config) ->
ClientOpts = ?config(client_opts, Config),
BadOpts = ?config(server_bad_key, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
- Port = ssl_test_lib:inet_port(ServerNode),
-
+
Server =
- ssl_test_lib:start_server_error([{node, ServerNode}, {port, Port},
+ ssl_test_lib:start_server_error([{node, ServerNode}, {port, 0},
{from, self()},
{options, BadOpts}]),
+
+ Port = ssl_test_lib:inet_port(Server),
+
Client =
ssl_test_lib:start_client_error([{node, ClientNode},
{port, Port}, {host, Hostname},
@@ -869,19 +1019,21 @@ ecertfile(Config) when is_list(Config) ->
ClientOpts = ?config(client_opts, Config),
ServerBadOpts = ?config(server_bad_cert, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
- Port = ssl_test_lib:inet_port(ServerNode),
- Server0 =
- ssl_test_lib:start_server_error([{node, ServerNode}, {port, Port},
+ Server =
+ ssl_test_lib:start_server_error([{node, ServerNode}, {port, 0},
{from, self()},
{options, ServerBadOpts}]),
- Client0 =
+
+ Port = ssl_test_lib:inet_port(Server),
+
+ Client =
ssl_test_lib:start_client_error([{node, ClientNode},
{port, Port}, {host, Hostname},
{from, self()},
{options, ClientOpts}]),
- ssl_test_lib:check_result(Server0, {error, ecertfile}, Client0,
+ ssl_test_lib:check_result(Server, {error, ecertfile}, Client,
{error, closed}).
@@ -896,15 +1048,18 @@ ecacertfile(Config) when is_list(Config) ->
ClientOpts = [{reuseaddr, true}|?config(client_opts, Config)],
ServerBadOpts = [{reuseaddr, true}|?config(server_bad_ca, Config)],
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
- Port = ssl_test_lib:inet_port(ServerNode),
Server0 =
ssl_test_lib:start_server_error([{node, ServerNode},
- {port, Port}, {from, self()},
+ {port, 0}, {from, self()},
{options, ServerBadOpts}]),
+
+ Port0 = ssl_test_lib:inet_port(Server0),
+
+
Client0 =
ssl_test_lib:start_client_error([{node, ClientNode},
- {port, Port}, {host, Hostname},
+ {port, Port0}, {host, Hostname},
{from, self()},
{options, ClientOpts}]),
@@ -917,11 +1072,14 @@ ecacertfile(Config) when is_list(Config) ->
Server1 =
ssl_test_lib:start_server_error([{node, ServerNode},
- {port, Port}, {from, self()},
+ {port, 0}, {from, self()},
{options, ServerBadOpts1}]),
+
+ Port1 = ssl_test_lib:inet_port(Server1),
+
Client1 =
ssl_test_lib:start_client_error([{node, ClientNode},
- {port, Port}, {host, Hostname},
+ {port, Port1}, {host, Hostname},
{from, self()},
{options, ClientOpts}]),
@@ -942,198 +1100,58 @@ eoptions(Config) when is_list(Config) ->
ClientOpts = ?config(client_opts, Config),
ServerOpts = ?config(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
- Port = ssl_test_lib:inet_port(ServerNode),
-
- %% Emulated opts
- Server0 =
- ssl_test_lib:start_server_error([{node, ServerNode}, {port, Port},
- {from, self()},
- {options, [{active, trice} | ServerOpts]}]),
- Client0 =
- ssl_test_lib:start_client_error([{node, ClientNode},
- {port, Port}, {host, Hostname},
- {from, self()},
- {options, [{active, trice} | ClientOpts]}]),
- ssl_test_lib:check_result(Server0, {error, {eoptions, {active,trice}}},
- Client0, {error, {eoptions, {active,trice}}}),
-
- test_server:sleep(500),
- Server1 =
- ssl_test_lib:start_server_error([{node, ServerNode}, {port, Port},
- {from, self()},
- {options, [{header, a} | ServerOpts]}]),
- Client1 =
- ssl_test_lib:start_client_error([{node, ClientNode}, {port, Port},
- {host, Hostname},
- {from, self()},
- {options, [{header, a} | ClientOpts]}]),
- ssl_test_lib:check_result(Server1, {error, {eoptions, {header, a}}},
- Client1, {error, {eoptions, {header, a}}}),
-
- test_server:sleep(500),
-
-
- Server2 =
- ssl_test_lib:start_server_error([{node, ServerNode}, {port, Port},
- {from, self()},
- {options, [{mode, a} | ServerOpts]}]),
-
- Client2 =
- ssl_test_lib:start_client_error([{node, ClientNode},
- {port, Port}, {host, Hostname},
- {from, self()},
- {options, [{mode, a} | ClientOpts]}]),
- ssl_test_lib:check_result(Server2, {error, {eoptions, {mode, a}}},
- Client2, {error, {eoptions, {mode, a}}}),
-
-
- test_server:sleep(500),
-
- Server3 =
- ssl_test_lib:start_server_error([{node, ServerNode}, {port, Port},
- {from, self()},
- {options, [{packet, 8.0} | ServerOpts]}]),
- Client3 =
- ssl_test_lib:start_client_error([{node, ClientNode},
- {port, Port}, {host, Hostname},
- {from, self()},
- {options, [{packet, 8.0} | ClientOpts]}]),
- ssl_test_lib:check_result(Server3, {error, {eoptions, {packet, 8.0}}},
- Client3, {error, {eoptions, {packet, 8.0}}}),
-
- test_server:sleep(500),
-
- %% ssl
- Server4 =
- ssl_test_lib:start_server_error([{node, ServerNode}, {port, Port},
- {from, self()},
- {options, [{verify, 4} | ServerOpts]}]),
- Client4 =
- ssl_test_lib:start_client_error([{node, ClientNode}, {port, Port},
- {host, Hostname},
- {from, self()},
- {options, [{verify, 4} | ClientOpts]}]),
- ssl_test_lib:check_result(Server4, {error, {eoptions, {verify, 4}}},
- Client4, {error, {eoptions, {verify, 4}}}),
-
- test_server:sleep(500),
-
- Server5 =
- ssl_test_lib:start_server_error([{node, ServerNode}, {port, Port},
- {from, self()},
- {options, [{depth, four} | ServerOpts]}]),
- Client5 =
- ssl_test_lib:start_client_error([{node, ClientNode}, {port, Port},
- {host, Hostname},
- {from, self()},
- {options, [{depth, four} | ClientOpts]}]),
- ssl_test_lib:check_result(Server5, {error, {eoptions, {depth, four}}},
- Client5, {error, {eoptions, {depth, four}}}),
-
- test_server:sleep(500),
-
- Server6 =
- ssl_test_lib:start_server_error([{node, ServerNode}, {port, Port},
- {from, self()},
- {options, [{cacertfile, ""} | ServerOpts]}]),
- Client6 =
- ssl_test_lib:start_client_error([{node, ClientNode}, {port, Port},
- {host, Hostname},
- {from, self()},
- {options, [{cacertfile, ""} | ClientOpts]}]),
- ssl_test_lib:check_result(Server6, {error, {eoptions, {cacertfile, ""}}},
- Client6, {error, {eoptions, {cacertfile, ""}}}),
-
-
- test_server:sleep(500),
-
- Server7 =
- ssl_test_lib:start_server_error([{node, ServerNode}, {port, Port},
- {from, self()},
- {options, [{certfile, 'cert.pem'} | ServerOpts]}]),
- Client7 =
- ssl_test_lib:start_client_error([{node, ClientNode}, {port, Port},
- {host, Hostname},
- {from, self()},
- {options, [{certfile, 'cert.pem'} | ClientOpts]}]),
- ssl_test_lib:check_result(Server7,
- {error, {eoptions, {certfile, 'cert.pem'}}},
- Client7, {error, {eoptions, {certfile, 'cert.pem'}}}),
-
- test_server:sleep(500),
-
- Server8 =
- ssl_test_lib:start_server_error([{node, ServerNode}, {port, Port},
- {from, self()},
- {options, [{keyfile,'key.pem' } | ServerOpts]}]),
- Client8 =
- ssl_test_lib:start_client_error([{node, ClientNode}, {port, Port},
- {host, Hostname},
- {from, self()}, {options, [{keyfile, 'key.pem'}
- | ClientOpts]}]),
- ssl_test_lib:check_result(Server8,
- {error, {eoptions, {keyfile, 'key.pem'}}},
- Client8, {error, {eoptions, {keyfile, 'key.pem'}}}),
-
- test_server:sleep(500),
-
- Server9 =
- ssl_test_lib:start_server_error([{node, ServerNode}, {port, Port},
- {from, self()},
- {options, [{key, 'key.pem' } | ServerOpts]}]),
- Client9 =
- ssl_test_lib:start_client_error([{node, ClientNode}, {port, Port},
- {host, Hostname},
- {from, self()}, {options, [{key, 'key.pem'}
- | ClientOpts]}]),
- ssl_test_lib:check_result(Server9, {error, {eoptions, {key, 'key.pem'}}},
- Client9, {error, {eoptions, {key, 'key.pem'}}}),
-
-
- test_server:sleep(500),
-
- Server10 =
- ssl_test_lib:start_server_error([{node, ServerNode}, {port, Port},
- {from, self()},
- {options, [{password, foo} | ServerOpts]}]),
- Client10 =
- ssl_test_lib:start_client_error([{node, ClientNode}, {port, Port},
- {host, Hostname},
- {from, self()},
- {options, [{password, foo} | ClientOpts]}]),
- ssl_test_lib:check_result(Server10, {error, {eoptions, {password, foo}}},
- Client10, {error, {eoptions, {password, foo}}}),
-
- test_server:sleep(500),
-
- %% Misc
- Server11 =
- ssl_test_lib:start_server_error([{node, ServerNode}, {port, Port},
- {from, self()},
- {options, [{ssl_imp, cool} | ServerOpts]}]),
- Client11 =
- ssl_test_lib:start_client_error([{node, ClientNode}, {port, Port},
- {host, Hostname},
- {from, self()},
- {options, [{ssl_imp, cool} | ClientOpts]}]),
- ssl_test_lib:check_result(Server11, {error, {eoptions, {ssl_imp, cool}}},
- Client11, {error, {eoptions, {ssl_imp, cool}}}),
-
+ Check = fun(Client, Server, {versions, [sslv2, sslv3]} = Option) ->
+ ssl_test_lib:check_result(Server,
+ {error, {eoptions, {sslv2, Option}}},
+ Client,
+ {error, {eoptions, {sslv2, Option}}});
+ (Client, Server, Option) ->
+ ssl_test_lib:check_result(Server,
+ {error, {eoptions, Option}},
+ Client,
+ {error, {eoptions, Option}})
+ end,
- test_server:sleep(500),
-
- Server12 =
- ssl_test_lib:start_server_error([{node, ServerNode}, {port, Port},
- {from, self()},
- {options, [{debug, cool} | ServerOpts]}]),
- Client12 =
- ssl_test_lib:start_client_error([{node, ClientNode}, {port, Port},
- {host, Hostname},
- {from, self()},
- {options, [{debug, cool} | ClientOpts]}]),
- ssl_test_lib:check_result(Server12, {error, {eoptions, {debug, cool}}},
- Client12, {error, {eoptions, {debug, cool}}}).
+ TestOpts = [{versions, [sslv2, sslv3]},
+ {ssl_imp, cool},
+ {verify, 4},
+ {verify_fun, function},
+ {fail_if_no_peer_cert, 0},
+ {verify_client_once, 1},
+ {validate_extensions_fun, function},
+ {depth, four},
+ {certfile, 'cert.pem'},
+ {keyfile,'key.pem' },
+ {password, foo},
+ {cacertfile, ""},
+ {dhfile,'dh.pem' },
+ {ciphers, [{foo, bar, sha, ignore}]},
+ {reuse_session, foo},
+ {reuse_sessions, 0},
+ {renegotiate_at, "10"},
+ {debug, 1},
+ {mode, depech},
+ {packet, 8.0},
+ {packet_size, "2"},
+ {header, a},
+ {active, trice},
+ {key, 'key.pem' }],
+
+ [begin
+ Server =
+ ssl_test_lib:start_server_error([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {options, [TestOpt | ServerOpts]}]),
+ %% Will never reach a point where port is used.
+ Client =
+ ssl_test_lib:start_client_error([{node, ClientNode}, {port, 0},
+ {host, Hostname}, {from, self()},
+ {options, [TestOpt | ClientOpts]}]),
+ Check(Client, Server, TestOpt),
+ ok
+ end || TestOpt <- TestOpts],
+ ok.
%%--------------------------------------------------------------------
shutdown(doc) ->
@@ -1203,7 +1221,7 @@ shutdown_write(Config) when is_list(Config) ->
ssl_test_lib:check_result(Server, ok, Client, {error, closed}).
shutdown_write_result(Socket, server) ->
- test_server:sleep(500),
+ test_server:sleep(?SLEEP),
ssl:shutdown(Socket, write);
shutdown_write_result(Socket, client) ->
ssl:recv(Socket, 0).
@@ -1233,7 +1251,7 @@ shutdown_both(Config) when is_list(Config) ->
ssl_test_lib:check_result(Server, ok, Client, {error, closed}).
shutdown_both_result(Socket, server) ->
- test_server:sleep(500),
+ test_server:sleep(?SLEEP),
ssl:shutdown(Socket, read_write);
shutdown_both_result(Socket, client) ->
ssl:recv(Socket, 0).
@@ -1339,7 +1357,7 @@ reuse_session(Config) when is_list(Config) ->
Client0 =
ssl_test_lib:start_client([{node, ClientNode},
{port, Port}, {host, Hostname},
- {mfa, {?MODULE, no_result, []}},
+ {mfa, {ssl_test_lib, no_result, []}},
{from, self()}, {options, ClientOpts}]),
SessionInfo =
receive
@@ -1350,7 +1368,7 @@ reuse_session(Config) when is_list(Config) ->
Server ! listen,
%% Make sure session is registered
- test_server:sleep(500),
+ test_server:sleep(?SLEEP),
Client1 =
ssl_test_lib:start_client([{node, ClientNode},
@@ -1410,7 +1428,7 @@ reuse_session(Config) when is_list(Config) ->
Server1 ! listen,
%% Make sure session is registered
- test_server:sleep(500),
+ test_server:sleep(?SLEEP),
Client4 =
ssl_test_lib:start_client([{node, ClientNode},
@@ -1457,7 +1475,7 @@ reuse_session_expired(Config) when is_list(Config) ->
Client0 =
ssl_test_lib:start_client([{node, ClientNode},
{port, Port}, {host, Hostname},
- {mfa, {?MODULE, no_result, []}},
+ {mfa, {ssl_test_lib, no_result, []}},
{from, self()}, {options, ClientOpts}]),
SessionInfo =
receive
@@ -1468,7 +1486,7 @@ reuse_session_expired(Config) when is_list(Config) ->
Server ! listen,
%% Make sure session is registered
- test_server:sleep(500),
+ test_server:sleep(?SLEEP),
Client1 =
ssl_test_lib:start_client([{node, ClientNode},
@@ -1530,7 +1548,7 @@ server_does_not_want_to_reuse_session(Config) when is_list(Config) ->
Client0 =
ssl_test_lib:start_client([{node, ClientNode},
{port, Port}, {host, Hostname},
- {mfa, {?MODULE, no_result, []}},
+ {mfa, {ssl_test_lib, no_result, []}},
{from, self()}, {options, ClientOpts}]),
SessionInfo =
receive
@@ -1541,7 +1559,7 @@ server_does_not_want_to_reuse_session(Config) when is_list(Config) ->
Server ! listen,
%% Make sure session is registered
- test_server:sleep(500),
+ test_server:sleep(?SLEEP),
Client1 =
ssl_test_lib:start_client([{node, ClientNode},
@@ -1725,10 +1743,124 @@ server_verify_none_active_once(Config) when is_list(Config) ->
ssl_test_lib:check_result(Server, ok, Client, ok),
ssl_test_lib:close(Server),
ssl_test_lib:close(Client).
+%%--------------------------------------------------------------------
+
+server_verify_client_once_passive(doc) ->
+ ["Test server option verify_client_once"];
+server_verify_client_once_passive(suite) ->
+ [];
+
+server_verify_client_once_passive(Config) when is_list(Config) ->
+ ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ?config(server_verification_opts, Config),
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+ Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {mfa, {?MODULE, send_recv_result, []}},
+ {options, [{active, false}, {verify, verify_peer},
+ {verify_client_once, true}
+ | ServerOpts]}]),
+ Port = ssl_test_lib:inet_port(Server),
+ Client0 = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, send_recv_result, []}},
+ {options, [{active, false} | ClientOpts]}]),
+
+ ssl_test_lib:check_result(Server, ok, Client0, ok),
+ ssl_test_lib:close(Client0),
+ Server ! listen,
+ Client1 = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, result_ok, []}},
+ {options, [{active, false} | ClientOpts]}]),
+
+ ssl_test_lib:check_result(Client1, ok),
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client1).
+
+%%--------------------------------------------------------------------
+
+server_verify_client_once_active(doc) ->
+ ["Test server option verify_client_once"];
+
+server_verify_client_once_active(suite) ->
+ [];
+
+server_verify_client_once_active(Config) when is_list(Config) ->
+ ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ?config(server_verification_opts, Config),
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+ Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {mfa, {?MODULE, send_recv_result_active, []}},
+ {options, [{active, once}, {verify, verify_peer},
+ {verify_client_once, true}
+ | ServerOpts]}]),
+ Port = ssl_test_lib:inet_port(Server),
+ Client0 = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, send_recv_result_active, []}},
+ {options, [{active, true} | ClientOpts]}]),
+
+ ssl_test_lib:check_result(Server, ok, Client0, ok),
+ ssl_test_lib:close(Client0),
+ Server ! listen,
+ Client1 = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, result_ok, []}},
+ {options, [{active, true} | ClientOpts]}]),
+
+ ssl_test_lib:check_result(Client1, ok),
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client1).
+
%%--------------------------------------------------------------------
+server_verify_client_once_active_once(doc) ->
+ ["Test server option verify_client_once"];
+
+server_verify_client_once_active_once(suite) ->
+ [];
+
+server_verify_client_once_active_once(Config) when is_list(Config) ->
+ ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ?config(server_verification_opts, Config),
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+ Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {mfa, {?MODULE, send_recv_result_active_once, []}},
+ {options, [{active, once}, {verify, verify_peer},
+ {verify_client_once, true}
+ | ServerOpts]}]),
+ Port = ssl_test_lib:inet_port(Server),
+ Client0 = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, send_recv_result_active_once, []}},
+ {options, [{active, once} | ClientOpts]}]),
+
+ ssl_test_lib:check_result(Server, ok, Client0, ok),
+ ssl_test_lib:close(Client0),
+ Server ! listen,
+
+ Client1 = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, result_ok, []}},
+ {options, [{active, once} | ClientOpts]}]),
+
+ ssl_test_lib:check_result(Client1, ok),
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client1).
+
+%%--------------------------------------------------------------------
+
server_verify_no_cacerts(doc) ->
["Test server must have cacerts if it wants to verify client"];
@@ -1744,7 +1876,66 @@ server_verify_no_cacerts(Config) when is_list(Config) ->
| ServerOpts]}]),
ssl_test_lib:check_result(Server, {error, {eoptions, {cacertfile, ""}}}).
+
+%%--------------------------------------------------------------------
+
+server_require_peer_cert_ok(doc) ->
+ ["Test server option fail_if_no_peer_cert when peer sends cert"];
+
+server_require_peer_cert_ok(suite) ->
+ [];
+
+server_require_peer_cert_ok(Config) when is_list(Config) ->
+ ServerOpts = [{verify, verify_peer}, {fail_if_no_peer_cert, true}
+ | ?config(server_verification_opts, Config)],
+ ClientOpts = ?config(client_verification_opts, Config),
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {mfa, {?MODULE, send_recv_result, []}},
+ {options, [{active, false} | ServerOpts]}]),
+ Port = ssl_test_lib:inet_port(Server),
+ Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, send_recv_result, []}},
+ {options, [{active, false} | ClientOpts]}]),
+
+ ssl_test_lib:check_result(Server, ok, Client, ok),
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client).
+
+%%--------------------------------------------------------------------
+
+server_require_peer_cert_fail(doc) ->
+ ["Test server option fail_if_no_peer_cert when peer doesn't send cert"];
+
+server_require_peer_cert_fail(suite) ->
+ [];
+
+server_require_peer_cert_fail(Config) when is_list(Config) ->
+ ServerOpts = [{verify, verify_peer}, {fail_if_no_peer_cert, true}
+ | ?config(server_verification_opts, Config)],
+ BadClientOpts = ?config(client_opts, Config),
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ Server = ssl_test_lib:start_server_error([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {options, [{active, false} | ServerOpts]}]),
+
+ Port = ssl_test_lib:inet_port(Server),
+
+ Client = ssl_test_lib:start_client_error([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {options, [{active, false} | BadClientOpts]}]),
+ ssl_test_lib:check_result(Server, {error, esslaccept},
+ Client, {error, esslconnect}),
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client).
+
%%--------------------------------------------------------------------
client_verify_none_passive(doc) ->
@@ -1849,31 +2040,289 @@ client_verify_none_active_once(Config) when is_list(Config) ->
ssl_test_lib:close(Client).
+
+%%--------------------------------------------------------------------
+client_renegotiate(doc) ->
+ ["Test ssl:renegotiate/1 on client."];
+
+client_renegotiate(suite) ->
+ [];
+
+client_renegotiate(Config) when is_list(Config) ->
+ process_flag(trap_exit, true),
+ ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ?config(client_opts, Config),
+
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ Data = "From erlang to erlang",
+
+ Server =
+ ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {mfa, {?MODULE, erlang_ssl_receive, [Data]}},
+ {options, ServerOpts}]),
+ Port = ssl_test_lib:inet_port(Server),
+
+ Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE,
+ renegotiate, [Data]}},
+ {options, [{reuse_sessions, false} | ClientOpts]}]),
+
+ ssl_test_lib:check_result(Client, ok, Server, ok),
+
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client),
+ process_flag(trap_exit, false),
+ ok.
+%%--------------------------------------------------------------------
+server_renegotiate(doc) ->
+ ["Test ssl:renegotiate/1 on server."];
+
+server_renegotiate(suite) ->
+ [];
+
+server_renegotiate(Config) when is_list(Config) ->
+ process_flag(trap_exit, true),
+ ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ?config(client_opts, Config),
+
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ Data = "From erlang to erlang",
+
+ Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {mfa, {?MODULE,
+ renegotiate, [Data]}},
+ {options, ServerOpts}]),
+ Port = ssl_test_lib:inet_port(Server),
+
+ Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, erlang_ssl_receive, [Data]}},
+ {options, [{reuse_sessions, false} | ClientOpts]}]),
+
+ ssl_test_lib:check_result(Server, ok, Client, ok),
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client),
+ ok.
+
+%%--------------------------------------------------------------------
+client_no_wrap_sequence_number(doc) ->
+ ["Test that erlang client will renegotiate session when",
+ "max sequence number celing is about to be reached. Although"
+ "in the testcase we use the test option renegotiate_at"
+ " to lower treashold substantially."];
+
+client_no_wrap_sequence_number(suite) ->
+ [];
+
+client_no_wrap_sequence_number(Config) when is_list(Config) ->
+ process_flag(trap_exit, true),
+ ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ?config(client_opts, Config),
+
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ ErlData = "From erlang to erlang",
+ N = 10,
+
+ Server =
+ ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {mfa, {ssl_test_lib, no_result, []}},
+ {options, ServerOpts}]),
+ Port = ssl_test_lib:inet_port(Server),
+
+ Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {ssl_test_lib,
+ trigger_renegotiate, [[ErlData, N+2]]}},
+ {options, [{reuse_sessions, false},
+ {renegotiate_at, N} | ClientOpts]}]),
+
+ ssl_test_lib:check_result(Client, ok),
+
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client),
+ process_flag(trap_exit, false),
+ ok.
+%%--------------------------------------------------------------------
+server_no_wrap_sequence_number(doc) ->
+ ["Test that erlang server will renegotiate session when",
+ "max sequence number celing is about to be reached. Although"
+ "in the testcase we use the test option renegotiate_at"
+ " to lower treashold substantially."];
+
+server_no_wrap_sequence_number(suite) ->
+ [];
+
+server_no_wrap_sequence_number(Config) when is_list(Config) ->
+ process_flag(trap_exit, true),
+ ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ?config(client_opts, Config),
+
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ Data = "From erlang to erlang",
+ N = 10,
+
+ Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {mfa, {ssl_test_lib,
+ trigger_renegotiate, [[Data, N+2]]}},
+ {options, [{renegotiate_at, N} | ServerOpts]}]),
+ Port = ssl_test_lib:inet_port(Server),
+
+ Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {ssl_test_lib, no_result, []}},
+ {options, [{reuse_sessions, false} | ClientOpts]}]),
+
+ ssl_test_lib:check_result(Server, ok),
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client),
+ ok.
+
+%%--------------------------------------------------------------------
+extended_key_usage(doc) ->
+ ["Test cert that has a critical extended_key_usage extension"];
+
+extended_key_usage(suite) ->
+ [];
+
+extended_key_usage(Config) when is_list(Config) ->
+ ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ?config(server_opts, Config),
+ PrivDir = ?config(priv_dir, Config),
+
+ CertFile = proplists:get_value(certfile, ServerOpts),
+ KeyFile = proplists:get_value(keyfile, ServerOpts),
+ NewCertFile = filename:join(PrivDir, "cert.pem"),
+
+ {ok, [{cert, DerCert, _}]} = public_key:pem_to_der(CertFile),
+
+ {ok, [KeyInfo]} = public_key:pem_to_der(KeyFile),
+
+ {ok, Key} = public_key:decode_private_key(KeyInfo),
+
+ {ok, OTPCert} = public_key:pkix_decode_cert(DerCert, otp),
+
+ ExtKeyUsageExt = {'Extension', ?'id-ce-extKeyUsage', true, [?'id-kp-serverAuth']},
+
+ OTPTbsCert = OTPCert#'OTPCertificate'.tbsCertificate,
+
+ Extensions = OTPTbsCert#'OTPTBSCertificate'.extensions,
+
+ NewOTPTbsCert = OTPTbsCert#'OTPTBSCertificate'{extensions = [ExtKeyUsageExt |Extensions]},
+
+ NewDerCert = public_key:sign(NewOTPTbsCert, Key),
+
+ public_key:der_to_pem(NewCertFile, [{cert, NewDerCert}]),
+
+ NewServerOpts = [{certfile, NewCertFile} | proplists:delete(certfile, ServerOpts)],
+
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {mfa, {?MODULE, send_recv_result_active, []}},
+ {options, NewServerOpts}]),
+ Port = ssl_test_lib:inet_port(Server),
+ Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, send_recv_result_active, []}},
+ {options, ClientOpts}]),
+
+ ssl_test_lib:check_result(Server, ok, Client, ok),
+
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client).
+
+%%--------------------------------------------------------------------
+validate_extensions_fun(doc) ->
+ ["Test that it is possible to specify a validate_extensions_fun"];
+
+validate_extensions_fun(suite) ->
+ [];
+
+validate_extensions_fun(Config) when is_list(Config) ->
+ ClientOpts = ?config(client_verification_opts, Config),
+ ServerOpts = ?config(server_verification_opts, Config),
+
+ Fun = fun(Extensions, State, _, AccError) ->
+ {Extensions, State, AccError}
+ end,
+
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {mfa, {?MODULE, send_recv_result_active, []}},
+ {options, [{validate_extensions_fun, Fun},
+ {verify, verify_peer} | ServerOpts]}]),
+ Port = ssl_test_lib:inet_port(Server),
+
+ Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, send_recv_result_active, []}},
+ {options,[{validate_extensions_fun, Fun} | ClientOpts]}]),
+
+ ssl_test_lib:check_result(Server, ok, Client, ok),
+
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client).
+
%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
send_recv_result(Socket) ->
- ssl:send(Socket, "Hejhopp"),
- test_server:sleep(100),
- {ok,"Hejhopp"} = ssl:recv(Socket, 7),
+ ssl:send(Socket, "Hello world"),
+ {ok,"Hello world"} = ssl:recv(Socket, 11),
ok.
send_recv_result_active(Socket) ->
- ssl:send(Socket, "Hejhopp"),
- test_server:sleep(100),
+ ssl:send(Socket, "Hello world"),
receive
- {ssl, Socket, "Hejhopp"} ->
+ {ssl, Socket, "Hello world"} ->
ok
end.
send_recv_result_active_once(Socket) ->
- ssl:send(Socket, "Hejhopp"),
- test_server:sleep(100),
+ ssl:send(Socket, "Hello world"),
receive
- {ssl, Socket, "Hejhopp"} ->
+ {ssl, Socket, "Hello world"} ->
ok
end.
+result_ok(_Socket) ->
+ ok.
+
+renegotiate(Socket, Data) ->
+ test_server:format("Renegotiating ~n", []),
+ Result = ssl:renegotiate(Socket),
+ test_server:format("Result ~p~n", [Result]),
+ ssl:send(Socket, Data),
+ case Result of
+ ok ->
+ ok;
+ %% It is not an error in erlang ssl
+ %% if peer rejects renegotiation.
+ %% Connection will stay up
+ {error, renegotiation_rejected} ->
+ ok;
+ Other ->
+ Other
+ end.
+
session_cache_process_list(doc) ->
["Test reuse of sessions (short handshake)"];
@@ -1909,7 +2358,7 @@ session_cache_process(Type,Config) when is_list(Config) ->
Client0 =
ssl_test_lib:start_client([{node, ClientNode},
{port, Port}, {host, Hostname},
- {mfa, {?MODULE, no_result, []}},
+ {mfa, {ssl_test_lib, no_result, []}},
{from, self()}, {options, ClientOpts}]),
SessionInfo =
receive
@@ -1920,7 +2369,7 @@ session_cache_process(Type,Config) when is_list(Config) ->
Server ! listen,
%% Make sure session is registered
- test_server:sleep(500),
+ test_server:sleep(?SLEEP),
Client1 =
ssl_test_lib:start_client([{node, ClientNode},
@@ -1963,7 +2412,7 @@ session_cache_process(Type,Config) when is_list(Config) ->
Server1 ! listen,
%% Make sure session is registered
- test_server:sleep(500),
+ test_server:sleep(?SLEEP),
Client4 =
ssl_test_lib:start_client([{node, ClientNode},
@@ -2112,3 +2561,14 @@ session_loop(Sess) ->
session_loop(Sess)
end.
+erlang_ssl_receive(Socket, Data) ->
+ receive
+ {ssl, Socket, Data} ->
+ io:format("Received ~p~n",[Data]),
+ ok;
+ Other ->
+ test_server:fail({unexpected_message, Other})
+ after ?SLEEP * 3 ->
+ test_server:fail({did_not_get, Data})
+ end.
+
diff --git a/lib/ssl/test/ssl_basic_SUITE_data/dHParam.pem b/lib/ssl/test/ssl_basic_SUITE_data/dHParam.pem
new file mode 100644
index 0000000000..feb581da30
--- /dev/null
+++ b/lib/ssl/test/ssl_basic_SUITE_data/dHParam.pem
@@ -0,0 +1,5 @@
+-----BEGIN DH PARAMETERS-----
+MIGHAoGBAMY5VmCZ22ZEy/KO8kjt94PH7ZtSG0Z0zitlMlvd4VsNkDzXsVeu+wkH
+FGDC3h3vgv6iwXGCbmrSOVk/FPZbzLhwZ8aLnkUFOBbOvVvb1JptQwOt8mf+eScG
+M2gGBktheQV5Nf1IrzOctG7VGt+neiqb/Y86uYCcDdL+M8++0qnLAgEC
+-----END DH PARAMETERS-----
diff --git a/lib/ssl/test/ssl_packet_SUITE.erl b/lib/ssl/test/ssl_packet_SUITE.erl
index f031552457..a019e660e9 100644
--- a/lib/ssl/test/ssl_packet_SUITE.erl
+++ b/lib/ssl/test/ssl_packet_SUITE.erl
@@ -42,7 +42,6 @@
-define(MANY, 1000).
-define(SOME, 50).
-
%% Test server callback functions
%%--------------------------------------------------------------------
%% Function: init_per_suite(Config) -> Config
@@ -144,7 +143,20 @@ all(suite) ->
packet_wait_passive, packet_wait_active,
packet_baddata_passive, packet_baddata_active,
packet_size_passive, packet_size_active,
- packet_erl_decode
+ packet_cdr_decode,
+ packet_http_decode,
+ packet_http_decode_list,
+ packet_http_bin_decode_multi,
+ packet_line_decode,
+ packet_asn1_decode,
+ packet_tpkt_decode,
+ %packet_fcgi_decode,
+ packet_sunrm_decode,
+ header_decode_one_byte,
+ header_decode_two_bytes,
+ header_decode_two_bytes_one_sent,
+ header_decode_two_bytes_two_sent
+
].
%% Test cases starts here.
@@ -501,7 +513,8 @@ packet_raw_active_once_many_small(Config) when is_list(Config) ->
Client = ssl_test_lib:start_client([{node, ServerNode}, {port, Port},
{host, Hostname},
{from, self()},
- {mfa, {?MODULE, active_once_raw, [Data, ?MANY]}},
+ {mfa, {?MODULE, active_once_raw,
+ [Data, ?MANY]}},
{options, [{active, once},
{packet, raw} |
ClientOpts]}]),
@@ -533,7 +546,8 @@ packet_raw_active_once_some_big(Config) when is_list(Config) ->
Client = ssl_test_lib:start_client([{node, ServerNode}, {port, Port},
{host, Hostname},
{from, self()},
- {mfa, {?MODULE, active_once_raw, [Data, ?SOME]}},
+ {mfa, {?MODULE, active_once_raw,
+ [Data, ?SOME]}},
{options, [{active, once},
{packet, raw} |
ClientOpts]}]),
@@ -1189,7 +1203,8 @@ packet_send_to_large(Config) when is_list(Config) ->
{mfa, {?MODULE, active_packet, [Data, 1]}},
{options, [{active, true} | ClientOpts]}]),
- ssl_test_lib:check_result(Server, {error, {badarg, {packet_to_large, 300, 255}}}),
+ ssl_test_lib:check_result(Server, {error, {badarg,
+ {packet_to_large, 300, 255}}}),
ssl_test_lib:close(Server),
ssl_test_lib:close(Client).
@@ -1214,7 +1229,8 @@ packet_wait_active(Config) when is_list(Config) ->
Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
{from, self()},
- {mfa, {?MODULE, send_incomplete ,[Data, ?SOME]}},
+ {mfa, {?MODULE, send_incomplete,
+ [Data, ?SOME]}},
{options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
Client = ssl_test_lib:start_client([{node, ServerNode}, {port, Port},
@@ -1249,7 +1265,8 @@ packet_wait_passive(Config) when is_list(Config) ->
Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
{from, self()},
- {mfa, {?MODULE, send_incomplete ,[Data, ?SOME]}},
+ {mfa, {?MODULE, send_incomplete,
+ [Data, ?SOME]}},
{options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
Client = ssl_test_lib:start_client([{node, ServerNode}, {port, Port},
@@ -1291,7 +1308,8 @@ packet_baddata_active(Config) when is_list(Config) ->
{packet, cdr} |
ClientOpts]}]),
receive
- {Client, {other, {ssl_error, _Socket, {invalid_packet, _}},{error,closed},1}} -> ok;
+ {Client, {other, {ssl_error, _Socket,
+ {invalid_packet, _}},{error,closed},1}} -> ok;
Unexpected ->
test_server:fail({unexpected, Unexpected})
end,
@@ -1336,8 +1354,11 @@ packet_baddata_passive(Config) when is_list(Config) ->
ssl_test_lib:close(Server),
ssl_test_lib:close(Client).
%%--------------------------------------------------------------------
+
packet_size_active(doc) ->
- ["Test that if a packet of size larger than packet_size arrives error msg is sent and socket is closed"];
+ ["Test that if a packet of size larger than
+ packet_size arrives error msg is sent and socket is closed"];
+
packet_size_active(suite) ->
[];
@@ -1361,7 +1382,8 @@ packet_size_active(Config) when is_list(Config) ->
{packet, 4}, {packet_size, 10} |
ClientOpts]}]),
receive
- {Client, {other, {ssl_error, _Socket, {invalid_packet, _}},{error,closed},1}} -> ok;
+ {Client, {other, {ssl_error, _Socket,
+ {invalid_packet, _}},{error,closed},1}} -> ok;
Unexpected ->
test_server:fail({unexpected, Unexpected})
end,
@@ -1369,10 +1391,11 @@ packet_size_active(Config) when is_list(Config) ->
ssl_test_lib:close(Server),
ssl_test_lib:close(Client).
%%--------------------------------------------------------------------
+
packet_size_passive(doc) ->
- ["Test that if a packet of size larger than packet_size arrives error msg is sent and socket is closed"];
-packet_size_passive(suite) ->
- [];
+ ["Test that if a packet of size larger
+ than packet_size arrives error msg is sent and socket is closed"];
+packet_size_passive(suite) -> [];
packet_size_passive(Config) when is_list(Config) ->
ClientOpts = ?config(client_opts, Config),
@@ -1389,7 +1412,8 @@ packet_size_passive(Config) when is_list(Config) ->
Client = ssl_test_lib:start_client([{node, ServerNode}, {port, Port},
{host, Hostname},
{from, self()},
- {mfa, {?MODULE, passive_recv_packet, [Data, 1]}},
+ {mfa, {?MODULE, passive_recv_packet,
+ [Data, 1]}},
{options, [{active, false},
{packet, 4}, {packet_size, 30} |
ClientOpts]}]),
@@ -1403,14 +1427,11 @@ packet_size_passive(Config) when is_list(Config) ->
ssl_test_lib:close(Client).
%%--------------------------------------------------------------------
-packet_erl_decode(doc) ->
- ["Test that packets of sent to erlang:decode_packet works, i.e. currently"
- "asn1 | cdr | sunrm | fcgi | tpkt | line | http | http_bin"
- ];
-packet_erl_decode(suite) ->
+packet_cdr_decode(doc) ->
+ ["Test setting the packet option {packet, cdr}"];
+packet_cdr_decode(suite) ->
[];
-
-packet_erl_decode(Config) when is_list(Config) ->
+packet_cdr_decode(Config) when is_list(Config) ->
ClientOpts = ?config(client_opts, Config),
ServerOpts = ?config(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -1421,51 +1442,596 @@ packet_erl_decode(Config) when is_list(Config) ->
Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
{from, self()},
- {mfa, {?MODULE, server_packet_decode ,[Data]}},
- {options, [{active, true}, binary, {packet, cdr}|ServerOpts]}]),
+ {mfa, {?MODULE, server_packet_decode,
+ [Data]}},
+ {options, [{active, true}, binary,
+ {packet, cdr}|ServerOpts]}]),
Port = ssl_test_lib:inet_port(Server),
Client = ssl_test_lib:start_client([{node, ServerNode}, {port, Port},
{host, Hostname},
{from, self()},
- {mfa, {?MODULE, client_packet_decode, [Data]}},
- {options, [{active, true}, binary | ClientOpts]}]),
+ {mfa, {?MODULE, client_packet_decode,
+ [Data]}},
+ {options, [{active, true}, {packet, cdr},
+ binary | ClientOpts]}]),
ssl_test_lib:check_result(Server, ok, Client, ok),
ssl_test_lib:close(Server),
ssl_test_lib:close(Client).
+%%--------------------------------------------------------------------
+packet_http_decode(doc) ->
+ ["Test setting the packet option {packet, http} {mode, binary}"];
+packet_http_decode(suite) ->
+ [];
+
+packet_http_decode(Config) when is_list(Config) ->
+ ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ?config(server_opts, Config),
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
-server_packet_decode(Socket, CDR) ->
+ Request = "GET / HTTP/1.1\r\n"
+ "host: www.example.com\r\n"
+ "user-agent: HttpTester\r\n"
+ "\r\n",
+ Response = "HTTP/1.1 200 OK\r\n"
+ "\r\n"
+ "Hello!",
+
+ Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
+ {from, self()},
+ {mfa, {?MODULE, server_http_decode,
+ [Response]}},
+ {options, [{active, true}, binary,
+ {packet, http} | ServerOpts]}]),
+
+ Port = ssl_test_lib:inet_port(Server),
+ Client = ssl_test_lib:start_client([{node, ServerNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, client_http_decode,
+ [Request]}},
+ {options, [{active, true}, binary,
+ {packet, http} |
+ ClientOpts]}]),
+
+ ssl_test_lib:check_result(Server, ok, Client, ok),
+
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client).
+
+
+server_http_decode(Socket, HttpResponse) ->
+ assert_packet_opt(Socket, http),
receive
- {ssl, Socket, CDR} -> ok;
+ {ssl, Socket, {http_request, 'GET', _, {1,1}}} -> ok;
Other1 -> exit({?LINE, Other1})
end,
- ok = ssl:send(Socket, CDR),
+ assert_packet_opt(Socket, http),
receive
- {ssl, Socket, CDR} -> ok;
+ {ssl, Socket, {http_header, _, 'Host', _, "www.example.com"}} -> ok;
Other2 -> exit({?LINE, Other2})
end,
- ok = ssl:send(Socket, CDR),
+ assert_packet_opt(Socket, http),
+ receive
+ {ssl, Socket, {http_header, _, 'User-Agent', _, "HttpTester"}} -> ok;
+ Other3 -> exit({?LINE, Other3})
+ end,
+ assert_packet_opt(Socket, http),
+ receive
+ {ssl, Socket, http_eoh} -> ok;
+ Other4 -> exit({?LINE, Other4})
+ end,
+ assert_packet_opt(Socket, http),
+ ok = ssl:send(Socket, HttpResponse),
ok.
-client_packet_decode(Socket, CDR) ->
- <<P1:10/binary, P2/binary>> = CDR,
- ok = ssl:send(Socket, P1),
- ok = ssl:send(Socket, P2),
+client_http_decode(Socket, HttpRequest) ->
+ ok = ssl:send(Socket, HttpRequest),
receive
- {ssl, Socket, CDR} -> ok;
+ {ssl, Socket, {http_response, {1,1}, 200, "OK"}} -> ok;
Other1 -> exit({?LINE, Other1})
end,
- ssl:setopts(Socket, [{packet, cdr}]),
- ok = ssl:send(Socket, CDR),
receive
- {ssl, Socket, CDR} -> ok;
+ {ssl, Socket, http_eoh} -> ok;
Other2 -> exit({?LINE, Other2})
end,
+ ok = ssl:setopts(Socket, [{packet, 0}]),
+ receive
+ {ssl, Socket, <<"Hello!">>} -> ok;
+ Other3 -> exit({?LINE, Other3})
+ end,
ok.
+%%--------------------------------------------------------------------
+packet_http_decode_list(doc) ->
+ ["Test setting the packet option {packet, http}, {mode, list}"];
+packet_http_decode_list(suite) ->
+ [];
+packet_http_decode_list(Config) when is_list(Config) ->
+ ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ?config(server_opts, Config),
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ Request = "GET / HTTP/1.1\r\n"
+ "host: www.example.com\r\n"
+ "user-agent: HttpTester\r\n"
+ "\r\n",
+ Response = "HTTP/1.1 200 OK\r\n"
+ "\r\n"
+ "Hello!",
+
+ Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
+ {from, self()},
+ {mfa, {?MODULE, server_http_decode,
+ [Response]}},
+ {options, [{active, true}, binary,
+ {packet, http} |
+ ServerOpts]}]),
+
+ Port = ssl_test_lib:inet_port(Server),
+ Client = ssl_test_lib:start_client([{node, ServerNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, client_http_decode_list,
+ [Request]}},
+ {options, [{active, true}, list,
+ {packet, http} |
+ ClientOpts]}]),
+
+ ssl_test_lib:check_result(Server, ok, Client, ok),
+
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client).
+
+
+client_http_decode_list(Socket, HttpRequest) ->
+ ok = ssl:send(Socket, HttpRequest),
+ receive
+ {ssl, Socket, {http_response, {1,1}, 200, "OK"}} -> ok;
+ Other1 -> exit({?LINE, Other1})
+ end,
+ receive
+ {ssl, Socket, http_eoh} -> ok;
+ Other2 -> exit({?LINE, Other2})
+ end,
+ ok = ssl:setopts(Socket, [{packet, 0}]),
+ receive
+ {ssl, Socket, "Hello!"} -> ok;
+ Other3 -> exit({?LINE, Other3})
+ end,
+ ok.
+
+%%--------------------------------------------------------------------
+packet_http_bin_decode_multi(doc) ->
+ ["Test setting the packet option {packet, http_bin} with multiple requests"];
+packet_http_bin_decode_multi(suite) ->
+ [];
+
+packet_http_bin_decode_multi(Config) when is_list(Config) ->
+ ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ?config(server_opts, Config),
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ Request = <<"GET / HTTP/1.1\r\n"
+ "host: www.example.com\r\n"
+ "user-agent: HttpTester\r\n"
+ "\r\n">>,
+ Response = <<"HTTP/1.1 200 OK\r\n"
+ "\r\n"
+ "Hello!">>,
+ NumMsgs = 3,
+
+ Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
+ {from, self()},
+ {mfa, {?MODULE, server_http_bin_decode,
+ [Response, NumMsgs]}},
+ {options, [{active, true}, binary,
+ {packet, http_bin} |
+ ServerOpts]}]),
+
+ Port = ssl_test_lib:inet_port(Server),
+ Client = ssl_test_lib:start_client([{node, ServerNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, client_http_bin_decode,
+ [Request, NumMsgs]}},
+ {options, [{active, true}, binary,
+ {packet, http_bin} |
+ ClientOpts]}]),
+
+ ssl_test_lib:check_result(Server, ok, Client, ok),
+
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client).
+
+
+server_http_bin_decode(Socket, HttpResponse, Count) when Count > 0 ->
+ assert_packet_opt(Socket, http_bin),
+ receive
+ {ssl, Socket, {http_request, 'GET', _, {1,1}}} -> ok;
+ Other1 -> exit({?LINE, Other1})
+ end,
+ assert_packet_opt(Socket, http_bin),
+ receive
+ {ssl, Socket, {http_header, _, 'Host', _, <<"www.example.com">>}} -> ok;
+ Other2 -> exit({?LINE, Other2})
+ end,
+ assert_packet_opt(Socket, http_bin),
+ receive
+ {ssl, Socket, {http_header, _, 'User-Agent', _, <<"HttpTester">>}} -> ok;
+ Other3 -> exit({?LINE, Other3})
+ end,
+ assert_packet_opt(Socket, http_bin),
+ receive
+ {ssl, Socket, http_eoh} -> ok;
+ Other4 -> exit({?LINE, Other4})
+ end,
+ assert_packet_opt(Socket, http_bin),
+ ok = ssl:send(Socket, HttpResponse),
+ server_http_bin_decode(Socket, HttpResponse, Count - 1);
+server_http_bin_decode(_, _, _) ->
+ ok.
+
+client_http_bin_decode(Socket, HttpRequest, Count) when Count > 0 ->
+ ok = ssl:send(Socket, HttpRequest),
+ receive
+ {ssl, Socket, {http_response, {1,1}, 200, <<"OK">>}} -> ok;
+ Other1 -> exit({?LINE, Other1})
+ end,
+ receive
+ {ssl, Socket, http_eoh} -> ok;
+ Other2 -> exit({?LINE, Other2})
+ end,
+ ok = ssl:setopts(Socket, [{packet, 0}]),
+ receive
+ {ssl, Socket, <<"Hello!">>} -> ok;
+ Other3 -> exit({?LINE, Other3})
+ end,
+ ok = ssl:setopts(Socket, [{packet, http_bin}]),
+ client_http_bin_decode(Socket, HttpRequest, Count - 1);
+client_http_bin_decode(_, _, _) ->
+ ok.
+%%--------------------------------------------------------------------
+packet_line_decode(doc) ->
+ ["Test setting the packet option {packet, line}"];
+packet_line_decode(suite) ->
+ [];
+packet_line_decode(Config) when is_list(Config) ->
+ ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ?config(server_opts, Config),
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ Data = list_to_binary(lists:flatten(io_lib:format("Line ends here.~n"
+ "Now it is a new line.~n",
+ []))),
+
+ Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
+ {from, self()},
+ {mfa, {?MODULE, server_line_packet_decode,
+ [Data]}},
+ {options, [{active, true}, binary,
+ {packet, line}|ServerOpts]}]),
+
+ Port = ssl_test_lib:inet_port(Server),
+ Client = ssl_test_lib:start_client([{node, ServerNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, client_line_packet_decode,
+ [Data]}},
+ {options, [{active, true},
+ {packet, line},
+ binary | ClientOpts]}]),
+
+ ssl_test_lib:check_result(Server, ok, Client, ok),
+
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client).
+
+
+server_line_packet_decode(Socket, Lines) ->
+ receive
+ {ssl, Socket, <<"Line ends here.\n">>} -> ok;
+ Other1 -> exit({?LINE, Other1})
+ end,
+ receive
+ {ssl, Socket, <<"Now it is a new line.\n">>} -> ok;
+ Other2 -> exit({?LINE, Other2})
+ end,
+ ok = ssl:send(Socket, Lines).
+
+client_line_packet_decode(Socket, Lines) ->
+ <<P1:10/binary, P2/binary>> = Lines,
+ ok = ssl:send(Socket, P1),
+ ok = ssl:send(Socket, P2),
+ receive
+ {ssl, Socket, <<"Line ends here.\n">>} -> ok;
+ Other1 -> exit({?LINE, Other1})
+ end,
+ receive
+ {ssl, Socket, <<"Now it is a new line.\n">>} -> ok;
+ Other2 -> exit({?LINE, Other2})
+ end.
+
+%%--------------------------------------------------------------------
+
+packet_asn1_decode(doc) ->
+ ["Test setting the packet option {packet, asn1}"];
+packet_asn1_decode(suite) ->
+ [];
+packet_asn1_decode(Config) when is_list(Config) ->
+ ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ?config(server_opts, Config),
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ File = proplists:get_value(certfile, ServerOpts),
+
+ %% A valid asn1 BER packet (DER is stricter BER)
+ {ok,[{cert, Data, _}]} = public_key:pem_to_der(File),
+
+ Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
+ {from, self()},
+ {mfa, {?MODULE, server_packet_decode,
+ [Data]}},
+ {options, [{active, true}, binary,
+ {packet, asn1}|ServerOpts]}]),
+
+ Port = ssl_test_lib:inet_port(Server),
+ Client = ssl_test_lib:start_client([{node, ServerNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, client_packet_decode,
+ [Data]}},
+ {options, [{active, true}, {packet, asn1},
+ binary | ClientOpts]}]),
+
+ ssl_test_lib:check_result(Server, ok, Client, ok),
+
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client).
+
+%%--------------------------------------------------------------------
+packet_tpkt_decode(doc) ->
+ ["Test setting the packet option {packet, tpkt}"];
+packet_tpkt_decode(suite) ->
+ [];
+packet_tpkt_decode(Config) when is_list(Config) ->
+ ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ?config(server_opts, Config),
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ Data = list_to_binary(add_tpkt_header("TPKT data")),
+
+
+ Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
+ {from, self()},
+ {mfa, {?MODULE, server_packet_decode,
+ [Data]}},
+ {options, [{active, true}, binary,
+ {packet, tpkt}|ServerOpts]}]),
+
+ Port = ssl_test_lib:inet_port(Server),
+ Client = ssl_test_lib:start_client([{node, ServerNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, client_packet_decode,
+ [Data]}},
+ {options, [{active, true}, {packet, tpkt},
+ binary | ClientOpts]}]),
+
+ ssl_test_lib:check_result(Server, ok, Client, ok),
+
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client).
+
+%%--------------------------------------------------------------------
+
+%% packet_fcgi_decode(doc) ->
+%% ["Test setting the packet option {packet, fcgi}"];
+%% packet_fcgi_decode(suite) ->
+%% [];
+%% packet_fcgi_decode(Config) when is_list(Config) ->
+%% ClientOpts = ?config(client_opts, Config),
+%% ServerOpts = ?config(server_opts, Config),
+%% {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+%% Data = ...
+
+%% Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
+%% {from, self()},
+%% {mfa, {?MODULE, server_packet_decode,
+%% [Data0, Data1]}},
+%% {options, [{active, true}, binary,
+%% {packet, fcgi}|ServerOpts]}]),
+
+%% Port = ssl_test_lib:inet_port(Server),
+%% Client = ssl_test_lib:start_client([{node, ServerNode}, {port, Port},
+%% {host, Hostname},
+%% {from, self()},
+%% {mfa, {?MODULE, client_packet_decode,
+%% [Data0, Data1]}},
+%% {options, [{active, true}, {packet, fcgi},
+%% binary | ClientOpts]}]),
+
+%% ssl_test_lib:check_result(Server, ok, Client, ok),
+
+%% ssl_test_lib:close(Server),
+%% ssl_test_lib:close(Client).
+
+
+%%--------------------------------------------------------------------
+
+packet_sunrm_decode(doc) ->
+ ["Test setting the packet option {packet, sunrm}"];
+packet_sunrm_decode(suite) ->
+ [];
+packet_sunrm_decode(Config) when is_list(Config) ->
+ ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ?config(server_opts, Config),
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ Data = <<11:32, "Hello world">>,
+
+ Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
+ {from, self()},
+ {mfa, {?MODULE, server_packet_decode,
+ [Data]}},
+ {options, [{active, true}, binary,
+ {packet, sunrm}|ServerOpts]}]),
+
+ Port = ssl_test_lib:inet_port(Server),
+ Client = ssl_test_lib:start_client([{node, ServerNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, client_packet_decode,
+ [Data]}},
+ {options, [{active, true}, {packet, sunrm},
+ binary | ClientOpts]}]),
+
+ ssl_test_lib:check_result(Server, ok, Client, ok),
+
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client).
+%%--------------------------------------------------------------------
+
+header_decode_one_byte(doc) ->
+ ["Test setting the packet option {header, 1}"];
+header_decode_one_byte(suite) ->
+ [];
+header_decode_one_byte(Config) when is_list(Config) ->
+ ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ?config(server_opts, Config),
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ Data = <<11:8, "Hello world">>,
+
+ Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
+ {from, self()},
+ {mfa, {?MODULE, server_header_decode,
+ [Data, [11 | <<"Hello world">>]]}},
+ {options, [{active, true}, binary,
+ {header,1}|ServerOpts]}]),
+
+ Port = ssl_test_lib:inet_port(Server),
+ Client = ssl_test_lib:start_client([{node, ServerNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, client_header_decode,
+ [Data, [11 | <<"Hello world">> ]]}},
+ {options, [{active, true}, {header, 1},
+ binary | ClientOpts]}]),
+
+ ssl_test_lib:check_result(Server, ok, Client, ok),
+
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client).
+
+%%--------------------------------------------------------------------
+
+header_decode_two_bytes(doc) ->
+ ["Test setting the packet option {header, 2}"];
+header_decode_two_bytes(suite) ->
+ [];
+header_decode_two_bytes(Config) when is_list(Config) ->
+ ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ?config(server_opts, Config),
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ Data = <<11:8, "Hello world">>,
+
+ Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
+ {from, self()},
+ {mfa, {?MODULE, server_header_decode,
+ [Data, [11, $H | <<"ello world">> ]]}},
+ {options, [{active, true}, binary,
+ {header,2}|ServerOpts]}]),
+
+ Port = ssl_test_lib:inet_port(Server),
+ Client = ssl_test_lib:start_client([{node, ServerNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, client_header_decode,
+ [Data, [11, $H | <<"ello world">> ]]}},
+ {options, [{active, true}, {header, 2},
+ binary | ClientOpts]}]),
+
+ ssl_test_lib:check_result(Server, ok, Client, ok),
+
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client).
+
+
+%%--------------------------------------------------------------------
+
+header_decode_two_bytes_two_sent(doc) ->
+ ["Test setting the packet option {header, 2} and sending on byte"];
+header_decode_two_bytes_two_sent(suite) ->
+ [];
+header_decode_two_bytes_two_sent(Config) when is_list(Config) ->
+ ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ?config(server_opts, Config),
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ Data = <<"He">>,
+
+ Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
+ {from, self()},
+ {mfa, {?MODULE, server_header_decode,
+ [Data, [$H, $e | <<>> ]]}},
+ {options, [{active, true}, binary,
+ {header,2}|ServerOpts]}]),
+
+ Port = ssl_test_lib:inet_port(Server),
+ Client = ssl_test_lib:start_client([{node, ServerNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, client_header_decode,
+ [Data, [$H, $e | <<>> ]]}},
+ {options, [{active, true}, {header, 2},
+ binary | ClientOpts]}]),
+
+ ssl_test_lib:check_result(Server, ok, Client, ok),
+
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client).
+
+
+%%--------------------------------------------------------------------
+
+header_decode_two_bytes_one_sent(doc) ->
+ ["Test setting the packet option {header, 2} and sending on byte"];
+header_decode_two_bytes_one_sent(suite) ->
+ [];
+header_decode_two_bytes_one_sent(Config) when is_list(Config) ->
+ ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ?config(server_opts, Config),
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ Data = <<"H">>,
+
+ Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
+ {from, self()},
+ {mfa, {?MODULE, server_header_decode,
+ [Data, "H"]}},
+ {options, [{active, true}, binary,
+ {header,2}|ServerOpts]}]),
+
+ Port = ssl_test_lib:inet_port(Server),
+ Client = ssl_test_lib:start_client([{node, ServerNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, client_header_decode,
+ [Data, "H"]}},
+ {options, [{active, true}, {header, 2},
+ binary | ClientOpts]}]),
+
+ ssl_test_lib:check_result(Server, ok, Client, ok),
+
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client).
+
%%--------------------------------------------------------------------
%% Internal functions
@@ -1572,3 +2138,64 @@ active_packet(Socket, Data, N) ->
Other ->
{other, Other, ssl:session_info(Socket),N}
end.
+
+assert_packet_opt(Socket, Type) ->
+ {ok, [{packet, Type}]} = ssl:getopts(Socket, [packet]).
+
+server_packet_decode(Socket, Packet) ->
+ receive
+ {ssl, Socket, Packet} -> ok;
+ Other1 -> exit({?LINE, Other1})
+ end,
+ ok = ssl:send(Socket, Packet),
+ receive
+ {ssl, Socket, Packet} -> ok;
+ Other2 -> exit({?LINE, Other2})
+ end,
+ ok = ssl:send(Socket, Packet).
+
+client_packet_decode(Socket, Packet) ->
+ <<P1:10/binary, P2/binary>> = Packet,
+ ok = ssl:send(Socket, P1),
+ ok = ssl:send(Socket, P2),
+ receive
+ {ssl, Socket, Packet} -> ok;
+ Other1 -> exit({?LINE, Other1})
+ end,
+ ok = ssl:send(Socket, Packet),
+ receive
+ {ssl, Socket, Packet} -> ok;
+ Other2 -> exit({?LINE, Other2})
+ end.
+
+server_header_decode(Socket, Packet, Result) ->
+ receive
+ {ssl, Socket, Result} -> ok;
+ Other1 -> exit({?LINE, Other1})
+ end,
+ ok = ssl:send(Socket, Packet),
+ receive
+ {ssl, Socket, Result} -> ok;
+ Other2 -> exit({?LINE, Other2})
+ end,
+ ok = ssl:send(Socket, Packet).
+
+client_header_decode(Socket, Packet, Result) ->
+ ok = ssl:send(Socket, Packet),
+ receive
+ {ssl, Socket, Result} -> ok;
+ Other1 -> exit({?LINE, Other1})
+ end,
+ ok = ssl:send(Socket, Packet),
+ receive
+ {ssl, Socket, Result} -> ok;
+ Other2 -> exit({?LINE, Other2})
+ end.
+
+add_tpkt_header(Data) when is_binary(Data) ->
+ L = size(Data) + 4,
+ [3, 0, ((L) bsr 8) band 16#ff, (L) band 16#ff ,Data];
+add_tpkt_header(IOList) when is_list(IOList) ->
+ Binary = list_to_binary(IOList),
+ L = size(Binary) + 4,
+ [3, 0, ((L) bsr 8) band 16#ff, (L) band 16#ff , Binary].
diff --git a/lib/ssl/test/ssl_test_lib.erl b/lib/ssl/test/ssl_test_lib.erl
index 2df2e70679..46b6eb401d 100644
--- a/lib/ssl/test/ssl_test_lib.erl
+++ b/lib/ssl/test/ssl_test_lib.erl
@@ -26,6 +26,7 @@
%% Note: This directive should only be used in test suites.
-compile(export_all).
+-record(sslsocket, { fd = nil, pid = nil}).
timetrap(Time) ->
Mul = try
@@ -52,7 +53,11 @@ node_to_hostip(Node) ->
Address.
start_server(Args) ->
- spawn_link(?MODULE, run_server, [Args]).
+ Result = spawn_link(?MODULE, run_server, [Args]),
+ receive
+ {listen, up} ->
+ Result
+ end.
run_server(Opts) ->
Node = proplists:get_value(node, Opts),
@@ -61,23 +66,14 @@ run_server(Opts) ->
Pid = proplists:get_value(from, Opts),
test_server:format("ssl:listen(~p, ~p)~n", [Port, Options]),
{ok, ListenSocket} = rpc:call(Node, ssl, listen, [Port, Options]),
- case Port of
- 0 ->
- {ok, {_, NewPort}} = ssl:sockname(ListenSocket),
- Pid ! {self(), {port, NewPort}};
- _ ->
- ok
- end,
+ Pid ! {listen, up},
+ send_selected_port(Pid, Port, ListenSocket),
run_server(ListenSocket, Opts).
run_server(ListenSocket, Opts) ->
+ AcceptSocket = connect(ListenSocket, Opts),
Node = proplists:get_value(node, Opts),
Pid = proplists:get_value(from, Opts),
- test_server:format("ssl:transport_accept(~p)~n", [ListenSocket]),
- {ok, AcceptSocket} = rpc:call(Node, ssl, transport_accept,
- [ListenSocket]),
- test_server:format("ssl:ssl_accept(~p)~n", [AcceptSocket]),
- ok = rpc:call(Node, ssl, ssl_accept, [AcceptSocket]),
{Module, Function, Args} = proplists:get_value(mfa, Opts),
test_server:format("Server: apply(~p,~p,~p)~n",
[Module, Function, [AcceptSocket | Args]]),
@@ -85,6 +81,7 @@ run_server(ListenSocket, Opts) ->
no_result_msg ->
ok;
Msg ->
+ test_server:format("Msg: ~p ~n", [Msg]),
Pid ! {self(), Msg}
end,
receive
@@ -94,8 +91,44 @@ run_server(ListenSocket, Opts) ->
ok = rpc:call(Node, ssl, close, [AcceptSocket])
end.
+%%% To enable to test with s_client -reconnect
+connect(ListenSocket, Opts) ->
+ Node = proplists:get_value(node, Opts),
+ ReconnectTimes = proplists:get_value(reconnect_times, Opts, 0),
+ AcceptSocket = connect(ListenSocket, Node, 1 + ReconnectTimes, dummy),
+ case ReconnectTimes of
+ 0 ->
+ AcceptSocket;
+ _ ->
+ remove_close_msg(ReconnectTimes),
+ AcceptSocket
+ end.
+
+connect(_, _, 0, AcceptSocket) ->
+ AcceptSocket;
+connect(ListenSocket, Node, N, _) ->
+ test_server:format("ssl:transport_accept(~p)~n", [ListenSocket]),
+ {ok, AcceptSocket} = rpc:call(Node, ssl, transport_accept,
+ [ListenSocket]),
+ test_server:format("ssl:ssl_accept(~p)~n", [AcceptSocket]),
+ ok = rpc:call(Node, ssl, ssl_accept, [AcceptSocket]),
+ connect(ListenSocket, Node, N-1, AcceptSocket).
+
+remove_close_msg(0) ->
+ ok;
+remove_close_msg(ReconnectTimes) ->
+ receive
+ {ssl_closed, _} ->
+ remove_close_msg(ReconnectTimes -1)
+ end.
+
+
start_client(Args) ->
- spawn_link(?MODULE, run_client, [Args]).
+ Result = spawn_link(?MODULE, run_client, [Args]),
+ receive
+ connected ->
+ Result
+ end.
run_client(Opts) ->
Node = proplists:get_value(node, Opts),
@@ -106,14 +139,11 @@ run_client(Opts) ->
test_server:format("ssl:connect(~p, ~p, ~p)~n", [Host, Port, Options]),
case rpc:call(Node, ssl, connect, [Host, Port, Options]) of
{ok, Socket} ->
+ Pid ! connected,
test_server:format("Client: connected~n", []),
- case proplists:get_value(port, Options) of
- 0 ->
- {ok, {_, NewPort}} = ssl:sockname(Socket),
- Pid ! {self(), {port, NewPort}};
- _ ->
- ok
- end,
+ %% In specail cases we want to know the client port, it will
+ %% be indicated by sending {port, 0} in options list!
+ send_selected_port(Pid, proplists:get_value(port, Options), Socket),
{Module, Function, Args} = proplists:get_value(mfa, Opts),
test_server:format("Client: apply(~p,~p,~p)~n",
[Module, Function, [Socket | Args]]),
@@ -178,6 +208,26 @@ check_result(Pid, Msg) ->
test_server:fail(Reason)
end.
+check_result_ignore_renegotiation_reject(Pid, Msg) ->
+ receive
+ {Pid, fail_session_fatal_alert_during_renegotiation} ->
+ test_server:comment("Server rejected old renegotiation"),
+ ok;
+ {ssl_error, _, esslconnect} ->
+ test_server:comment("Server rejected old renegotiation"),
+ ok;
+ {Pid, Msg} ->
+ ok;
+ {Port, {data,Debug}} when is_port(Port) ->
+ io:format("openssl ~s~n",[Debug]),
+ check_result(Pid,Msg);
+ Unexpected ->
+ Reason = {{expected, {Pid, Msg}},
+ {got, Unexpected}},
+ test_server:fail(Reason)
+ end.
+
+
wait_for_result(Server, ServerMsg, Client, ClientMsg) ->
receive
{Server, ServerMsg} ->
@@ -237,7 +287,7 @@ cert_options(Config) ->
"badcert.pem"]),
BadKeyFile = filename:join([?config(priv_dir, Config),
"badkey.pem"]),
- [{client_opts, [{ssl_imp, new}]},
+ [{client_opts, [{ssl_imp, new},{reuseaddr, true}]},
{client_verification_opts, [{cacertfile, ClientCaCertFile},
{certfile, ClientCertFile},
{keyfile, ClientKeyFile},
@@ -269,7 +319,11 @@ cert_options(Config) ->
start_upgrade_server(Args) ->
- spawn_link(?MODULE, run_upgrade_server, [Args]).
+ Result = spawn_link(?MODULE, run_upgrade_server, [Args]),
+ receive
+ {listen, up} ->
+ Result
+ end.
run_upgrade_server(Opts) ->
Node = proplists:get_value(node, Opts),
@@ -281,15 +335,8 @@ run_upgrade_server(Opts) ->
test_server:format("gen_tcp:listen(~p, ~p)~n", [Port, TcpOptions]),
{ok, ListenSocket} = rpc:call(Node, gen_tcp, listen, [Port, TcpOptions]),
-
- case Port of
- 0 ->
- {ok, {_, NewPort}} = inet:sockname(ListenSocket),
- Pid ! {self(), {port, NewPort}};
- _ ->
- ok
- end,
-
+ Pid ! {listen, up},
+ send_selected_port(Pid, Port, ListenSocket),
test_server:format("gen_tcp:accept(~p)~n", [ListenSocket]),
{ok, AcceptSocket} = rpc:call(Node, gen_tcp, accept, [ListenSocket]),
@@ -331,14 +378,8 @@ run_upgrade_client(Opts) ->
test_server:format("gen_tcp:connect(~p, ~p, ~p)~n",
[Host, Port, TcpOptions]),
{ok, Socket} = rpc:call(Node, gen_tcp, connect, [Host, Port, TcpOptions]),
-
- case proplists:get_value(port, Opts) of
- 0 ->
- {ok, {_, NewPort}} = inet:sockname(Socket),
- Pid ! {self(), {port, NewPort}};
- _ ->
- ok
- end,
+
+ send_selected_port(Pid, Port, Socket),
test_server:format("ssl:connect(~p, ~p)~n", [Socket, SslOptions]),
{ok, SslSocket} = rpc:call(Node, ssl, connect, [Socket, SslOptions]),
@@ -353,8 +394,47 @@ run_upgrade_client(Opts) ->
ok = rpc:call(Node, ssl, close, [SslSocket])
end.
+start_upgrade_server_error(Args) ->
+ Result = spawn_link(?MODULE, run_upgrade_server_error, [Args]),
+ receive
+ {listen, up} ->
+ Result
+ end.
+
+run_upgrade_server_error(Opts) ->
+ Node = proplists:get_value(node, Opts),
+ Port = proplists:get_value(port, Opts),
+ TimeOut = proplists:get_value(timeout, Opts, infinity),
+ TcpOptions = proplists:get_value(tcp_options, Opts),
+ SslOptions = proplists:get_value(ssl_options, Opts),
+ Pid = proplists:get_value(from, Opts),
+
+ test_server:format("gen_tcp:listen(~p, ~p)~n", [Port, TcpOptions]),
+ {ok, ListenSocket} = rpc:call(Node, gen_tcp, listen, [Port, TcpOptions]),
+ Pid ! {listen, up},
+ send_selected_port(Pid, Port, ListenSocket),
+ test_server:format("gen_tcp:accept(~p)~n", [ListenSocket]),
+ {ok, AcceptSocket} = rpc:call(Node, gen_tcp, accept, [ListenSocket]),
+ Error = case TimeOut of
+ infinity ->
+ test_server:format("ssl:ssl_accept(~p, ~p)~n",
+ [AcceptSocket, SslOptions]),
+ rpc:call(Node, ssl, ssl_accept,
+ [AcceptSocket, SslOptions]);
+ _ ->
+ test_server:format("ssl:ssl_accept(~p, ~p, ~p)~n",
+ [AcceptSocket, SslOptions, TimeOut]),
+ rpc:call(Node, ssl, ssl_accept,
+ [AcceptSocket, SslOptions, TimeOut])
+ end,
+ Pid ! {self(), Error}.
+
start_server_error(Args) ->
- spawn_link(?MODULE, run_server_error, [Args]).
+ Result = spawn_link(?MODULE, run_server_error, [Args]),
+ receive
+ {listen, up} ->
+ Result
+ end.
run_server_error(Opts) ->
Node = proplists:get_value(node, Opts),
@@ -364,8 +444,10 @@ run_server_error(Opts) ->
test_server:format("ssl:listen(~p, ~p)~n", [Port, Options]),
case rpc:call(Node, ssl, listen, [Port, Options]) of
{ok, ListenSocket} ->
- test_server:sleep(2000), %% To make sure error_client will
+ %% To make sure error_client will
%% get {error, closed} and not {error, connection_refused}
+ Pid ! {listen, up},
+ send_selected_port(Pid, Port, ListenSocket),
test_server:format("ssl:transport_accept(~p)~n", [ListenSocket]),
case rpc:call(Node, ssl, transport_accept, [ListenSocket]) of
{error, _} = Error ->
@@ -376,6 +458,9 @@ run_server_error(Opts) ->
Pid ! {self(), Error}
end;
Error ->
+ %% Not really true but as this is an error test
+ %% this is what we want.
+ Pid ! {listen, up},
Pid ! {self(), Error}
end.
@@ -400,8 +485,8 @@ inet_port(Pid) when is_pid(Pid)->
inet_port(Node) ->
{Port, Socket} = do_inet_port(Node),
- rpc:call(Node, gen_tcp, close, [Socket]),
- Port.
+ rpc:call(Node, gen_tcp, close, [Socket]),
+ Port.
do_inet_port(Node) ->
{ok, Socket} = rpc:call(Node, gen_tcp, listen, [0, [{reuseaddr, true}]]),
@@ -410,3 +495,37 @@ do_inet_port(Node) ->
no_result(_) ->
no_result_msg.
+
+trigger_renegotiate(Socket, [ErlData, N]) ->
+ [{session_id, Id} | _ ] = ssl:session_info(Socket),
+ trigger_renegotiate(Socket, ErlData, N, Id).
+
+trigger_renegotiate(Socket, _, 0, Id) ->
+ test_server:sleep(1000),
+ case ssl:session_info(Socket) of
+ [{session_id, Id} | _ ] ->
+ fail_session_not_renegotiated;
+ %% Tests that uses this function will not reuse
+ %% sessions so if we get a new session id the
+ %% renegotiation has succeeded.
+ [{session_id, _} | _ ] ->
+ ok;
+ {error, closed} ->
+ fail_session_fatal_alert_during_renegotiation;
+ {error, timeout} ->
+ fail_timeout
+ end;
+
+trigger_renegotiate(Socket, ErlData, N, Id) ->
+ ssl:send(Socket, ErlData),
+ trigger_renegotiate(Socket, ErlData, N-1, Id).
+
+
+send_selected_port(Pid, 0, #sslsocket{} = Socket) ->
+ {ok, {_, NewPort}} = ssl:sockname(Socket),
+ Pid ! {self(), {port, NewPort}};
+send_selected_port(Pid, 0, Socket) ->
+ {ok, {_, NewPort}} = inet:sockname(Socket),
+ Pid ! {self(), {port, NewPort}};
+send_selected_port(_,_,_) ->
+ ok.
diff --git a/lib/ssl/test/ssl_to_openssl_SUITE.erl b/lib/ssl/test/ssl_to_openssl_SUITE.erl
index c079e12b83..186bf52ff6 100644
--- a/lib/ssl/test/ssl_to_openssl_SUITE.erl
+++ b/lib/ssl/test/ssl_to_openssl_SUITE.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2008-2010. 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%
%%
@@ -30,6 +30,9 @@
-define(TIMEOUT, 120000).
-define(SLEEP, 1000).
+-define(OPENSSL_RENEGOTIATE, "r\n").
+-define(OPENSSL_QUIT, "Q\n").
+-define(OPENSSL_GARBAGE, "P\n").
%% Test server callback functions
%%--------------------------------------------------------------------
@@ -114,6 +117,11 @@ all(doc) ->
all(suite) ->
[erlang_client_openssl_server,
erlang_server_openssl_client,
+ erlang_server_openssl_client_reuse_session,
+ erlang_client_openssl_server_renegotiate,
+ erlang_client_openssl_server_no_wrap_sequence_number,
+ erlang_server_openssl_client_no_wrap_sequence_number,
+ erlang_client_openssl_server_no_server_ca_cert,
ssl3_erlang_client_openssl_server,
ssl3_erlang_server_openssl_client,
ssl3_erlang_client_openssl_server_client_cert,
@@ -124,7 +132,8 @@ all(suite) ->
tls1_erlang_client_openssl_server_client_cert,
tls1_erlang_server_openssl_client_client_cert,
tls1_erlang_server_erlang_client_client_cert,
- ciphers
+ ciphers,
+ erlang_client_bad_openssl_server
].
%% Test cases starts here.
@@ -148,13 +157,13 @@ erlang_client_openssl_server(Config) when is_list(Config) ->
KeyFile = proplists:get_value(keyfile, ServerOpts),
Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++
- " -cert " ++ CertFile ++ " -key " ++ KeyFile,
+ " -cert " ++ CertFile ++ " -key " ++ KeyFile,
test_server:format("openssl cmd: ~p~n", [Cmd]),
OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
- test_server:sleep(?SLEEP),
+ wait_for_openssl_server(),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
@@ -193,14 +202,199 @@ erlang_server_openssl_client(Config) when is_list(Config) ->
{options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
+ Cmd = "openssl s_client -port " ++ integer_to_list(Port) ++
+ " -host localhost",
+
+ test_server:format("openssl cmd: ~p~n", [Cmd]),
+
+ OpenSslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
+ port_command(OpenSslPort, Data),
+
+ ssl_test_lib:check_result(Server, ok),
+
+ ssl_test_lib:close(Server),
+
+ close_port(OpenSslPort),
+ process_flag(trap_exit, false),
+ ok.
+
+%%--------------------------------------------------------------------
+
+erlang_server_openssl_client_reuse_session(doc) ->
+ ["Test erlang server with openssl client that reconnects with the"
+ "same session id, to test reusing of sessions."];
+erlang_server_openssl_client_reuse_session(suite) ->
+ [];
+erlang_server_openssl_client_reuse_session(Config) when is_list(Config) ->
+ process_flag(trap_exit, true),
+ ServerOpts = ?config(server_opts, Config),
+
+ {_, ServerNode, _} = ssl_test_lib:run_where(Config),
+
+ Data = "From openssl to erlang",
+
+ Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {mfa, {?MODULE, erlang_ssl_receive, [Data]}},
+ {reconnect_times, 5},
+ {options, ServerOpts}]),
+ Port = ssl_test_lib:inet_port(Server),
+
+ Cmd = "openssl s_client -port " ++ integer_to_list(Port) ++
+ " -host localhost -reconnect",
+
+ test_server:format("openssl cmd: ~p~n", [Cmd]),
+
+ OpenSslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
+
+ port_command(OpenSslPort, Data),
+
+ ssl_test_lib:check_result(Server, ok),
+
+ ssl_test_lib:close(Server),
+
+ close_port(OpenSslPort),
+ process_flag(trap_exit, false),
+ ok.
+
+%%--------------------------------------------------------------------
+
+erlang_client_openssl_server_renegotiate(doc) ->
+ ["Test erlang client when openssl server issuses a renegotiate"];
+erlang_client_openssl_server_renegotiate(suite) ->
+ [];
+erlang_client_openssl_server_renegotiate(Config) when is_list(Config) ->
+ process_flag(trap_exit, true),
+ ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ?config(client_opts, Config),
+
+ {ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
+
+ ErlData = "From erlang to openssl",
+ OpenSslData = "From openssl to erlang",
+
+ Port = ssl_test_lib:inet_port(node()),
+ CertFile = proplists:get_value(certfile, ServerOpts),
+ KeyFile = proplists:get_value(keyfile, ServerOpts),
+
+ Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++
+ " -cert " ++ CertFile ++ " -key " ++ KeyFile ++ " -msg",
+
+ test_server:format("openssl cmd: ~p~n", [Cmd]),
+
+ OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
+
+ wait_for_openssl_server(),
+
+ Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE,
+ delayed_send, [[ErlData, OpenSslData]]}},
+ {options, ClientOpts}]),
+
+ port_command(OpensslPort, ?OPENSSL_RENEGOTIATE),
test_server:sleep(?SLEEP),
+ port_command(OpensslPort, OpenSslData),
+
+ %%ssl_test_lib:check_result(Client, ok),
+ %% Currently allow test case to not fail
+ %% if server requires secure renegotiation from RFC-5746
+ %% This should be removed as soon as we have implemented it.
+ ssl_test_lib:check_result_ignore_renegotiation_reject(Client, ok),
+
+ %% Clean close down! Server needs to be closed first !!
+ close_port(OpensslPort),
+
+ ssl_test_lib:close(Client),
+ process_flag(trap_exit, false),
+ ok.
+
+%%--------------------------------------------------------------------
+
+erlang_client_openssl_server_no_wrap_sequence_number(doc) ->
+ ["Test that erlang client will renegotiate session when",
+ "max sequence number celing is about to be reached. Although"
+ "in the testcase we use the test option renegotiate_at"
+ " to lower treashold substantially."];
+erlang_client_openssl_server_no_wrap_sequence_number(suite) ->
+ [];
+erlang_client_openssl_server_no_wrap_sequence_number(Config) when is_list(Config) ->
+ process_flag(trap_exit, true),
+ ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ?config(client_opts, Config),
+
+ {ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
+
+ ErlData = "From erlang to openssl\n",
+ N = 10,
+
+ Port = ssl_test_lib:inet_port(node()),
+ CertFile = proplists:get_value(certfile, ServerOpts),
+ KeyFile = proplists:get_value(keyfile, ServerOpts),
+ Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++
+ " -cert " ++ CertFile ++ " -key " ++ KeyFile ++ " -msg",
+
+ test_server:format("openssl cmd: ~p~n", [Cmd]),
+
+ OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
+
+ wait_for_openssl_server(),
+
+ Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {ssl_test_lib,
+ trigger_renegotiate, [[ErlData, N+2]]}},
+ {options, [{reuse_sessions, false},
+ {renegotiate_at, N} | ClientOpts]}]),
+
+ %%ssl_test_lib:check_result(Client, ok),
+ %% Currently allow test case to not fail
+ %% if server requires secure renegotiation from RFC-5746
+ %% This should be removed as soon as we have implemented it.
+ ssl_test_lib:check_result_ignore_renegotiation_reject(Client, ok),
+
+ %% Clean close down! Server needs to be closed first !!
+ close_port(OpensslPort),
+
+ ssl_test_lib:close(Client),
+ process_flag(trap_exit, false),
+ ok.
+%%--------------------------------------------------------------------
+erlang_server_openssl_client_no_wrap_sequence_number(doc) ->
+ ["Test that erlang client will renegotiate session when",
+ "max sequence number celing is about to be reached. Although"
+ "in the testcase we use the test option renegotiate_at"
+ " to lower treashold substantially."];
+
+erlang_server_openssl_client_no_wrap_sequence_number(suite) ->
+ [];
+erlang_server_openssl_client_no_wrap_sequence_number(Config) when is_list(Config) ->
+ process_flag(trap_exit, true),
+ ServerOpts = ?config(server_opts, Config),
+
+ {_, ServerNode, _} = ssl_test_lib:run_where(Config),
+
+ Data = "From openssl to erlang",
+
+ N = 10,
+
+ Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {mfa, {ssl_test_lib,
+ trigger_renegotiate, [[Data, N+2]]}},
+ {options, [{renegotiate_at, N} | ServerOpts]}]),
+ Port = ssl_test_lib:inet_port(Server),
+
Cmd = "openssl s_client -port " ++ integer_to_list(Port) ++
- " -host localhost",
+ " -host localhost -msg",
test_server:format("openssl cmd: ~p~n", [Cmd]),
OpenSslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
+
port_command(OpenSslPort, Data),
ssl_test_lib:check_result(Server, ok),
@@ -210,6 +404,53 @@ erlang_server_openssl_client(Config) when is_list(Config) ->
close_port(OpenSslPort),
process_flag(trap_exit, false),
ok.
+%%--------------------------------------------------------------------
+
+erlang_client_openssl_server_no_server_ca_cert(doc) ->
+ ["Test erlang client when openssl server sends a cert chain not"
+ "including the ca cert. Explicitly test this even if it is"
+ "implicitly tested eleswhere."];
+erlang_client_openssl_server_no_server_ca_cert(suite) ->
+ [];
+erlang_client_openssl_server_no_server_ca_cert(Config) when is_list(Config) ->
+ process_flag(trap_exit, true),
+ ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ?config(client_opts, Config),
+
+ {ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
+
+ Data = "From openssl to erlang",
+
+ Port = ssl_test_lib:inet_port(node()),
+ CertFile = proplists:get_value(certfile, ServerOpts),
+ KeyFile = proplists:get_value(keyfile, ServerOpts),
+
+ Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++
+ " -cert " ++ CertFile ++ " -key " ++ KeyFile ++ " -msg",
+
+ test_server:format("openssl cmd: ~p~n", [Cmd]),
+
+ OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
+
+ wait_for_openssl_server(),
+
+ Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE,
+ erlang_ssl_receive, [Data]}},
+ {options, ClientOpts}]),
+
+ port_command(OpensslPort, Data),
+
+ ssl_test_lib:check_result(Client, ok),
+
+ %% Clean close down! Server needs to be closed first !!
+ close_port(OpensslPort),
+
+ ssl_test_lib:close(Client),
+ process_flag(trap_exit, false),
+ ok.
%%--------------------------------------------------------------------
ssl3_erlang_client_openssl_server(doc) ->
@@ -233,7 +474,7 @@ ssl3_erlang_client_openssl_server(Config) when is_list(Config) ->
OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
- test_server:sleep(?SLEEP),
+ wait_for_openssl_server(),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
@@ -268,8 +509,6 @@ ssl3_erlang_server_openssl_client(Config) when is_list(Config) ->
{options,
[{versions, [sslv3]} | ServerOpts]}]),
Port = ssl_test_lib:inet_port(Server),
-
- test_server:sleep(?SLEEP),
Cmd = "openssl s_client -port " ++ integer_to_list(Port) ++
" -host localhost -ssl3",
@@ -300,8 +539,8 @@ ssl3_erlang_client_openssl_server_client_cert(Config) when is_list(Config) ->
Data = "From openssl to erlang",
Port = ssl_test_lib:inet_port(node()),
- CaCertFile = proplists:get_value(cacertfile, ServerOpts),
CertFile = proplists:get_value(certfile, ServerOpts),
+ CaCertFile = proplists:get_value(cacertfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++
@@ -312,7 +551,7 @@ ssl3_erlang_client_openssl_server_client_cert(Config) when is_list(Config) ->
OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
- test_server:sleep(?SLEEP),
+ wait_for_openssl_server(),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
@@ -354,8 +593,6 @@ ssl3_erlang_server_openssl_client_client_cert(Config) when is_list(Config) ->
| ServerOpts]}]),
Port = ssl_test_lib:inet_port(Server),
- test_server:sleep(?SLEEP),
-
CaCertFile = proplists:get_value(cacertfile, ClientOpts),
CertFile = proplists:get_value(certfile, ClientOpts),
KeyFile = proplists:get_value(keyfile, ClientOpts),
@@ -402,8 +639,6 @@ ssl3_erlang_server_erlang_client_client_cert(Config) when is_list(Config) ->
| ServerOpts]}]),
Port = ssl_test_lib:inet_port(Server),
- test_server:sleep(?SLEEP),
-
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
{from, self()},
@@ -439,14 +674,13 @@ tls1_erlang_client_openssl_server(Config) when is_list(Config) ->
KeyFile = proplists:get_value(keyfile, ServerOpts),
Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++
- " -cert " ++ CertFile
- ++ " -key " ++ KeyFile ++ " -tls1",
+ " -cert " ++ CertFile ++ " -key " ++ KeyFile ++ " -tls1",
test_server:format("openssl cmd: ~p~n", [Cmd]),
OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
- test_server:sleep(?SLEEP),
+ wait_for_openssl_server(),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
@@ -484,8 +718,6 @@ tls1_erlang_server_openssl_client(Config) when is_list(Config) ->
[{versions, [tlsv1]} | ServerOpts]}]),
Port = ssl_test_lib:inet_port(Server),
- test_server:sleep(?SLEEP),
-
Cmd = "openssl s_client -port " ++ integer_to_list(Port) ++
" -host localhost -tls1",
@@ -529,7 +761,7 @@ tls1_erlang_client_openssl_server_client_cert(Config) when is_list(Config) ->
OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
- test_server:sleep(?SLEEP),
+ wait_for_openssl_server(),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
@@ -571,8 +803,6 @@ tls1_erlang_server_openssl_client_client_cert(Config) when is_list(Config) ->
| ServerOpts]}]),
Port = ssl_test_lib:inet_port(Server),
- test_server:sleep(?SLEEP),
-
CaCertFile = proplists:get_value(cacertfile, ClientOpts),
CertFile = proplists:get_value(certfile, ClientOpts),
KeyFile = proplists:get_value(keyfile, ClientOpts),
@@ -617,8 +847,6 @@ tls1_erlang_server_erlang_client_client_cert(Config) when is_list(Config) ->
| ServerOpts]}]),
Port = ssl_test_lib:inet_port(Server),
- test_server:sleep(?SLEEP),
-
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
{from, self()},
@@ -668,14 +896,13 @@ cipher(CipherSuite, Version, Config) ->
KeyFile = proplists:get_value(keyfile, ServerOpts),
Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++
- " -cert " ++ CertFile
- ++ " -key " ++ KeyFile ++ "",
+ " -cert " ++ CertFile ++ " -key " ++ KeyFile ++ "",
test_server:format("openssl cmd: ~p~n", [Cmd]),
OpenSslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
- test_server:sleep(?SLEEP),
+ wait_for_openssl_server(),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
@@ -707,6 +934,63 @@ cipher(CipherSuite, Version, Config) ->
Return.
%%--------------------------------------------------------------------
+erlang_client_bad_openssl_server(doc) ->
+ [""];
+erlang_client_bad_openssl_server(suite) ->
+ [];
+erlang_client_bad_openssl_server(Config) when is_list(Config) ->
+ process_flag(trap_exit, true),
+ ServerOpts = ?config(server_verification_opts, Config),
+ ClientOpts = ?config(client_verification_opts, Config),
+
+ {ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
+
+ Port = ssl_test_lib:inet_port(node()),
+ CertFile = proplists:get_value(certfile, ServerOpts),
+ KeyFile = proplists:get_value(keyfile, ServerOpts),
+
+ Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++
+ " -cert " ++ CertFile ++ " -key " ++ KeyFile ++ "",
+
+ test_server:format("openssl cmd: ~p~n", [Cmd]),
+
+ OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]),
+
+ wait_for_openssl_server(),
+
+ Client0 = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, server_sent_garbage, []}},
+ {options,
+ [{versions, [tlsv1]} | ClientOpts]}]),
+
+ %% Send garbage
+ port_command(OpensslPort, ?OPENSSL_GARBAGE),
+
+ test_server:sleep(?SLEEP),
+
+ Client0 ! server_sent_garbage,
+
+ ssl_test_lib:check_result(Client0, true),
+
+ ssl_test_lib:close(Client0),
+
+ %% Make sure openssl does not hang and leave zombie process
+ Client1 = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {ssl_test_lib, no_result_msg, []}},
+ {options,
+ [{versions, [tlsv1]} | ClientOpts]}]),
+
+ ssl_test_lib:close(Client1),
+
+ %% Clean close down!
+ close_port(OpensslPort),
+ process_flag(trap_exit, false),
+ ok.
+%%--------------------------------------------------------------------
erlang_ssl_receive(Socket, Data) ->
test_server:format("Connection info: ~p~n",
@@ -738,8 +1022,14 @@ connection_info(Socket, Version) ->
connection_info_result(Socket) ->
ssl:connection_info(Socket).
+
+delayed_send(Socket, [ErlData, OpenSslData]) ->
+ test_server:sleep(?SLEEP),
+ ssl:send(Socket, ErlData),
+ erlang_ssl_receive(Socket, OpenSslData).
+
close_port(Port) ->
- port_command(Port, "Q\n"),
+ port_command(Port, ?OPENSSL_QUIT),
%%catch port_command(Port, "quit\n"),
close_loop(Port, 500, false).
@@ -770,3 +1060,23 @@ close_loop(Port, Time, SentClose) ->
io:format("Timeout~n",[])
end
end.
+
+
+server_sent_garbage(Socket) ->
+ receive
+ server_sent_garbage ->
+ {error, closed} == ssl:send(Socket, "data")
+
+ end.
+
+wait_for_openssl_server() ->
+ receive
+ {Port, {data, Debug}} when is_port(Port) ->
+ io:format("openssl ~s~n",[Debug]),
+ %% openssl has started make sure
+ %% it will be in accept. Parsing
+ %% output is too error prone. (Even
+ %% more so than sleep!)
+ test_server:sleep(?SLEEP)
+ end.
+
diff --git a/lib/ssl/vsn.mk b/lib/ssl/vsn.mk
index bf67fcd257..6db1a4b5c2 100644
--- a/lib/ssl/vsn.mk
+++ b/lib/ssl/vsn.mk
@@ -17,8 +17,18 @@
# %CopyrightEnd%
#
-SSL_VSN = 3.10.9
-TICKETS = OTP-8510
+SSL_VSN = 3.11.1
+
+TICKETS = OTP-8588
+
+#TICKETS_3.11 = OTP-8517 \
+# OTP-7046 \
+# OTP-8557 \
+# OTP-8560 \
+# OTP-8545 \
+# OTP-8554
+
+#TICKETS_3.10.9 = OTP-8510
#TICKETS_3.10.8 = OTP-8372 OTP-8441 OTP-8459
#TICKETS_3.10.7 = OTP-8260 OTP-8218 OTP-8250
diff --git a/lib/stdlib/doc/src/erl_scan.xml b/lib/stdlib/doc/src/erl_scan.xml
index 4175146c3c..1199c34f0f 100644
--- a/lib/stdlib/doc/src/erl_scan.xml
+++ b/lib/stdlib/doc/src/erl_scan.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2009</year>
+ <year>1996</year><year>2010</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -13,12 +13,12 @@
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.
-
+
</legalnotice>
<title>erl_scan</title>
@@ -103,7 +103,7 @@ attributes() = line() | list() | tuple()</code>
Info, atom()}</c>,
<c>{char, Info, integer()}</c>, <c>{comment, Info,
string()}</c>, <c>{float, Info, float()}</c>, <c>{integer,
- Info, integer()}</c>, <c>{var, Info, atom()}</c>,
+ Info, integer()}</c>, <c>{var, Info, atom()}</c>,
and <c>{white_space, Info, string()}</c>.</p>
<p>The valid options are:</p>
<taglist>
@@ -149,7 +149,8 @@ attributes() = line() | list() | tuple()</code>
<v>StartLocation = EndLocation = location()</v>
<v>Options = Option | [Option]</v>
<v>Option = {reserved_word_fun,reserved_word_fun()}
- | return_comments | return_white_spaces | return</v>
+ | return_comments | return_white_spaces | return
+ | text</v>
</type>
<desc>
<p>This is the re-entrant scanner which scans characters until
@@ -173,7 +174,7 @@ attributes() = line() | list() | tuple()</code>
<tag><c>{error, ErrorInfo, EndLocation}</c></tag>
<item>
<p>An error occurred. <c>LeftOverChars</c> is the remaining
- characters of the input data,
+ characters of the input data,
starting from <c>EndLocation</c>.</p>
</item>
</taglist>
@@ -278,7 +279,7 @@ attributes() = line() | list() | tuple()</code>
<item><p>The token's symbol.</p>
</item>
<tag><c>{text, string()}</c></tag>
- <item><p>The token's text..</p>
+ <item><p>The token's text.</p>
</item>
</taglist>
</desc>
@@ -315,7 +316,7 @@ attributes() = line() | list() | tuple()</code>
<type>
<v>Attributes = attributes()</v>
<v>AttributeItemSpec = AttributeItem | [AttributeItem]</v>
- <v>AttributesInfo = AttributeInfoTuple | undefined
+ <v>AttributesInfo = AttributeInfoTuple | undefined
| [AttributeInfoTuple]</v>
<v>AttributeInfoTuple = {AttributeItem, Info}</v>
<v>AttributeItem = atom()</v>
@@ -352,7 +353,7 @@ attributes() = line() | list() | tuple()</code>
just the line if the column unknown.</p>
</item>
<tag><c>{text, string()}</c></tag>
- <item><p>The token's text..</p>
+ <item><p>The token's text.</p>
</item>
</taglist>
</desc>
diff --git a/lib/stdlib/doc/src/ets.xml b/lib/stdlib/doc/src/ets.xml
index 7b9f0e7772..ee1befc882 100644
--- a/lib/stdlib/doc/src/ets.xml
+++ b/lib/stdlib/doc/src/ets.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2009</year>
+ <year>1996</year><year>2010</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -13,12 +13,12 @@
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.
-
+
</legalnotice>
<title>ets</title>
@@ -1686,7 +1686,7 @@ true</pre>
</desc>
</func>
<func>
- <name>to_dets(Tab, DetsTab) -> Tab</name>
+ <name>to_dets(Tab, DetsTab) -> DetsTab</name>
<fsummary>Fill a Dets table with objects from an ETS table.</fsummary>
<type>
<v>Tab = tid() | atom()</v>
diff --git a/lib/stdlib/doc/src/notes.xml b/lib/stdlib/doc/src/notes.xml
index c55eafc8b8..28a3719d38 100644
--- a/lib/stdlib/doc/src/notes.xml
+++ b/lib/stdlib/doc/src/notes.xml
@@ -50,7 +50,7 @@
<item>
<p>A number of bugs concerning re and unicode are
corrected:</p>
- <p>re:compile no longer looses unicode option, which also
+ <p>re:compile no longer loses unicode option, which also
fixes bug in re:split.</p>
<p>re:replace now handles unicode charlist replacement
argument</p>
diff --git a/lib/stdlib/src/c.erl b/lib/stdlib/src/c.erl
index 433833e233..e05a1c787f 100644
--- a/lib/stdlib/src/c.erl
+++ b/lib/stdlib/src/c.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1996-2010. 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(c).
@@ -31,10 +31,14 @@
-export([display_info/1]).
-export([appcall/4]).
--import(lists, [reverse/1,flatten/1,sublist/3,sort/1,keysearch/3,keysort/2,
+-import(lists, [reverse/1,flatten/1,sublist/3,sort/1,keysort/2,
concat/1,max/1,min/1,foreach/2,foldl/3,flatmap/2]).
-import(io, [format/1, format/2]).
+%%-----------------------------------------------------------------------
+
+-spec help() -> 'ok'.
+
help() ->
format("bt(Pid) -- stack backtrace for a process\n"
"c(File) -- compile and load code in <File>\n"
@@ -65,8 +69,12 @@ help() ->
%% c(FileName)
%% Compile a file/module.
+-spec c(file:name()) -> {'ok', module()} | 'error'.
+
c(File) -> c(File, []).
+-spec c(file:name(), [compile:option()]) -> {'ok', module()} | 'error'.
+
c(File, Opts0) when is_list(Opts0) ->
Opts = [report_errors,report_warnings|Opts0],
case compile:file(File, Opts) of
@@ -82,6 +90,8 @@ c(File, Opt) ->
%%% Obtain the 'outdir' option from the argument. Return "." if no
%%% such option was given.
+-spec outdir([compile:option()]) -> file:filename().
+
outdir([]) ->
".";
outdir([Opt|Rest]) ->
@@ -118,8 +128,8 @@ machine_load(Mod, File, Opts) ->
%%% loaded from some other place than current directory.
%%% Now, loading from other than current directory is supposed to work.
%%% so this function does nothing special.
-check_load({error, R}, _) -> {error, R};
-check_load(_, X) -> {ok, X}.
+check_load({error, _R} = Error, _) -> Error;
+check_load(_, Mod) -> {ok, Mod}.
%% Compile a list of modules
%% enables the nice unix shell cmd
@@ -128,6 +138,8 @@ check_load(_, X) -> {ok, X}.
%% with constant c2 defined, c1=v1 (v1 must be a term!), include dir
%% IDir, outdir ODir.
+-spec lc([erl_compile:cmd_line_arg()]) -> 'ok' | 'error'.
+
lc(Args) ->
case catch split(Args, [], []) of
error -> error;
@@ -145,7 +157,7 @@ lc_batch() ->
io:format("Error: no files to compile~n"),
halt(1).
--spec lc_batch([_]) -> no_return().
+-spec lc_batch([erl_compile:cmd_line_arg()]) -> no_return().
lc_batch(Args) ->
try split(Args, [], []) of
@@ -191,8 +203,13 @@ make_term(Str) ->
throw(error)
end.
+-spec nc(file:name()) -> {'ok', module()} | 'error'.
+
nc(File) -> nc(File, []).
+-spec nc(file:name(), [compile:option()] | compile:option()) ->
+ {'ok', module} | 'error'.
+
nc(File, Opts0) when is_list(Opts0) ->
Opts = Opts0 ++ [report_errors, report_warnings],
case compile:file(File, Opts) of
@@ -215,26 +232,37 @@ nc(File, Opt) when is_atom(Opt) ->
%% l(Mod)
%% Reload module Mod from file of same name
+-spec l(module()) -> code:load_ret().
l(Mod) ->
code:purge(Mod),
code:load_file(Mod).
%% Network version of l/1
+%%-spec nl(module()) ->
nl(Mod) ->
case code:get_object_code(Mod) of
{_Module, Bin, Fname} ->
- rpc:eval_everywhere(code,load_binary,[Mod,Fname,Bin]);
+ rpc:eval_everywhere(code, load_binary, [Mod, Fname, Bin]);
Other ->
Other
end.
+-spec i() -> 'ok'.
+
i() -> i(processes()).
+
+-spec ni() -> 'ok'.
+
ni() -> i(all_procs()).
+-spec i([pid()]) -> 'ok'.
+
i(Ps) ->
i(Ps, length(Ps)).
+-spec i([pid()], non_neg_integer()) -> 'ok'.
+
i(Ps, N) when N =< 100 ->
iformat("Pid", "Initial Call", "Heap", "Reds",
"Msgs"),
@@ -275,7 +303,6 @@ paged_i(Ps, Acc, N, Page) ->
paged_i([], NewAcc, 0, Page)
end.
-
choice(F) ->
case get_line('(c)ontinue (q)uit -->', "c\n") of
"c\n" ->
@@ -285,7 +312,6 @@ choice(F) ->
_ ->
choice(F)
end.
-
get_line(P, Default) ->
case io:get_line(P) of
@@ -305,7 +331,6 @@ mfa_string({M,F,A}) ->
mfa_string(X) ->
w(X).
-
display_info(Pid) ->
case pinfo(Pid) of
undefined -> {0,0,0,0};
@@ -317,7 +342,7 @@ display_info(Pid) ->
Other ->
Other
end,
- Reds = fetch(reductions, Info),
+ Reds = fetch(reductions, Info),
LM = length(fetch(messages, Info)),
HS = fetch(heap_size, Info),
SS = fetch(stack_size, Info),
@@ -364,21 +389,30 @@ pinfo(Pid) ->
end.
fetch(Key, Info) ->
- case keysearch(Key, 1, Info) of
- {value, {_, Val}} -> Val;
+ case lists:keyfind(Key, 1, Info) of
+ {_, Val} -> Val;
false -> 0
end.
-pid(X,Y,Z) ->
+-spec pid(non_neg_integer(), non_neg_integer(), non_neg_integer()) -> pid().
+
+pid(X, Y, Z) ->
list_to_pid("<" ++ integer_to_list(X) ++ "." ++
integer_to_list(Y) ++ "." ++
integer_to_list(Z) ++ ">").
-i(X,Y,Z) -> pinfo(pid(X,Y,Z)).
+-spec i(non_neg_integer(), non_neg_integer(), non_neg_integer()) ->
+ [{atom(), term()}].
+
+i(X, Y, Z) -> pinfo(pid(X, Y, Z)).
+
+-spec q() -> no_return().
q() ->
init:stop().
+-spec bt(pid()) -> 'ok' | 'undefined'.
+
bt(Pid) ->
case catch erlang:process_display(Pid, backtrace) of
{'EXIT', _} ->
@@ -387,6 +421,8 @@ bt(Pid) ->
ok
end.
+-spec m() -> 'ok'.
+
m() ->
mformat("Module", "File"),
foreach(fun ({Mod,File}) -> mformat(Mod, File) end, sort(code:all_loaded())).
@@ -414,8 +450,8 @@ error(Fmt, Args) ->
f_p_e(P, F) ->
case file:path_eval(P, F) of
- {error, enoent} ->
- {error, enoent};
+ {error, enoent} = Enoent ->
+ Enoent;
{error, E={Line, _Mod, _Term}} ->
error("file:path_eval(~p,~p): error on line ~p: ~s~n",
[P, F, Line, file:format_error(E)]),
@@ -438,10 +474,11 @@ bi(I) ->
%%
%% Short and nice form of module info
%%
+-spec m(module()) -> 'ok'.
m(M) ->
L = M:module_info(),
- {value,{exports,E}} = keysearch(exports, 1, L),
+ {exports,E} = lists:keyfind(exports, 1, L),
Time = get_compile_time(L),
COpts = get_compile_options(L),
format("Module ~w compiled: ",[M]), print_time(Time),
@@ -470,10 +507,10 @@ get_compile_options(L) ->
end.
get_compile_info(L, Tag) ->
- case keysearch(compile, 1, L) of
- {value, {compile, I}} ->
- case keysearch(Tag, 1, I) of
- {value, {Tag, Val}} -> {ok,Val};
+ case lists:keyfind(compile, 1, L) of
+ {compile, I} ->
+ case lists:keyfind(Tag, 1, I) of
+ {Tag, Val} -> {ok,Val};
false -> error
end;
false -> error
@@ -523,6 +560,8 @@ month(11) -> "November";
month(12) -> "December".
%% Just because we can't eval receive statements...
+-spec flush() -> 'ok'.
+
flush() ->
receive
X ->
@@ -533,9 +572,13 @@ flush() ->
end.
%% Print formatted info about all registered names in the system
+-spec nregs() -> 'ok'.
+
nregs() ->
foreach(fun (N) -> print_node_regs(N) end, all_regs()).
+-spec regs() -> 'ok'.
+
regs() ->
print_node_regs({node(),registered()}).
@@ -609,6 +652,8 @@ portformat(Name, Id, Cmd) ->
%% cd(Directory)
%% These are just wrappers around the file:get/set_cwd functions.
+-spec pwd() -> 'ok'.
+
pwd() ->
case file:get_cwd() of
{ok, Str} ->
@@ -617,6 +662,8 @@ pwd() ->
ok = io:format("Cannot determine current directory\n")
end.
+-spec cd(file:name()) -> 'ok'.
+
cd(Dir) ->
file:set_cwd(Dir),
pwd().
@@ -625,9 +672,13 @@ cd(Dir) ->
%% ls(Directory)
%% The strategy is to print in fixed width files.
+-spec ls() -> 'ok'.
+
ls() ->
ls(".").
+-spec ls(file:name()) -> 'ok'.
+
ls(Dir) ->
case file:list_dir(Dir) of
{ok, Entries} ->
@@ -660,24 +711,31 @@ w(X) ->
%% memory/[0,1]
%%
-memory() -> erlang:memory().
+-spec memory() -> [{atom(), non_neg_integer()}].
+
+memory() -> erlang:memory().
+
+-spec memory(atom()) -> non_neg_integer()
+ ; ([atom()]) -> [{atom(), non_neg_integer()}].
+
memory(TypeSpec) -> erlang:memory(TypeSpec).
%%
%% Cross Reference Check
%%
-
+%%-spec xm(module() | file:filename()) -> xref:m/1 return
xm(M) ->
appcall(tools, xref, m, [M]).
%%
%% Call yecc
%%
-
+%%-spec y(file:name()) -> yecc:file/2 return
y(File) -> y(File, []).
+%%-spec y(file:name(), [yecc:option()]) -> yecc:file/2 return
y(File, Opts) ->
- appcall(parsetools, yecc, file, [File,Opts]).
+ appcall(parsetools, yecc, file, [File, Opts]).
%%
@@ -699,4 +757,3 @@ appcall(App, M, F, Args) ->
erlang:raise(error, undef, Stk)
end
end.
-
diff --git a/lib/stdlib/src/dets_sup.erl b/lib/stdlib/src/dets_sup.erl
index 5c6caa787d..8ea2ba9b3f 100644
--- a/lib/stdlib/src/dets_sup.erl
+++ b/lib/stdlib/src/dets_sup.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2002-2010. 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(dets_sup).
@@ -22,9 +22,16 @@
-export([start_link/0, init/1]).
+-spec start_link() -> {'ok', pid()} | 'ignore' | {'error', term()}.
+
start_link() ->
supervisor:start_link({local, dets_sup}, dets_sup, []).
+-spec init([]) ->
+ {'ok', {{'simple_one_for_one', 4, 3600},
+ [{'dets', {'dets', 'istart_link', []},
+ 'temporary', 30000, 'worker', ['dets']}]}}.
+
init([]) ->
SupFlags = {simple_one_for_one, 4, 3600},
Child = {dets, {dets, istart_link, []}, temporary, 30000, worker, [dets]},
diff --git a/lib/stdlib/src/epp.erl b/lib/stdlib/src/epp.erl
index e1b569d389..f144cbb938 100644
--- a/lib/stdlib/src/epp.erl
+++ b/lib/stdlib/src/epp.erl
@@ -109,6 +109,8 @@ format_error(cannot_parse) ->
io_lib:format("cannot parse file, giving up", []);
format_error({bad,W}) ->
io_lib:format("badly formed '~s'", [W]);
+format_error(missing_parenthesis) ->
+ io_lib:format("badly formed define: missing closing right parenthesis",[]);
format_error({call,What}) ->
io_lib:format("illegal macro call '~s'",[What]);
format_error({undefined,M,none}) ->
@@ -415,7 +417,7 @@ scan_toks(From, St) ->
leave_file(From, St#epp{location=Cl});
{error,_E} ->
epp_reply(From, {error,{St#epp.location,epp,cannot_parse}}),
- leave_file(From, St) %This serious, just exit!
+ leave_file(wait_request(St), St) %This serious, just exit!
end.
scan_toks([{'-',_Lh},{atom,_Ld,define}=Define|Toks], From, St) ->
@@ -491,26 +493,32 @@ scan_extends(_Ts, _As, Ms) -> Ms.
scan_define([{'(',_Lp},{Type,_Lm,M}=Mac,{',',_Lc}|Toks], _Def, From, St)
when Type =:= atom; Type =:= var ->
- case dict:find({atom,M}, St#epp.macs) of
- {ok, Defs} when is_list(Defs) ->
- %% User defined macros: can be overloaded
- case proplists:is_defined(none, Defs) of
- true ->
- epp_reply(From, {error,{loc(Mac),epp,{redefine,M}}}),
+ case catch macro_expansion(Toks) of
+ Expansion when is_list(Expansion) ->
+ case dict:find({atom,M}, St#epp.macs) of
+ {ok, Defs} when is_list(Defs) ->
+ %% User defined macros: can be overloaded
+ case proplists:is_defined(none, Defs) of
+ true ->
+ epp_reply(From, {error,{loc(Mac),epp,{redefine,M}}}),
+ wait_req_scan(St);
+ false ->
+ scan_define_cont(From, St,
+ {atom, M},
+ {none, {none,Expansion}})
+ end;
+ {ok, _PreDef} ->
+ %% Predefined macros: cannot be overloaded
+ epp_reply(From, {error,{loc(Mac),epp,{redefine_predef,M}}}),
wait_req_scan(St);
- false ->
+ error ->
scan_define_cont(From, St,
{atom, M},
- {none, {none,macro_expansion(Toks)}})
+ {none, {none,Expansion}})
end;
- {ok, _PreDef} ->
- %% Predefined macros: cannot be overloaded
- epp_reply(From, {error,{loc(Mac),epp,{redefine_predef,M}}}),
- wait_req_scan(St);
- error ->
- scan_define_cont(From, St,
- {atom, M},
- {none, {none,macro_expansion(Toks)}})
+ {error,ErrL,What} ->
+ epp_reply(From, {error,{ErrL,epp,What}}),
+ wait_req_scan(St)
end;
scan_define([{'(',_Lp},{Type,_Lm,M}=Mac,{'(',_Lc}|Toks], Def, From, St)
when Type =:= atom; Type =:= var ->
@@ -536,6 +544,9 @@ scan_define([{'(',_Lp},{Type,_Lm,M}=Mac,{'(',_Lc}|Toks], Def, From, St)
error ->
scan_define_cont(From, St, {atom, M}, {Len, {As, Me}})
end;
+ {error,ErrL,What} ->
+ epp_reply(From, {error,{ErrL,epp,What}}),
+ wait_req_scan(St);
_ ->
epp_reply(From, {error,{loc(Def),epp,{bad,define}}}),
wait_req_scan(St)
@@ -789,7 +800,7 @@ skip_toks(From, St, [I|Sis]) ->
leave_file(From, St#epp{location=Cl,istk=[I|Sis]});
{error,_E} ->
epp_reply(From, {error,{St#epp.location,epp,cannot_parse}}),
- leave_file(From, St) %This serious, just exit!
+ leave_file(wait_request(St), St) %This serious, just exit!
end;
skip_toks(From, St, []) ->
scan_toks(From, St).
@@ -816,7 +827,7 @@ macro_pars([{var,_L,Name}, {',',_}|Ts], Args) ->
macro_pars(Ts, [Name|Args]).
macro_expansion([{')',_Lp},{dot,_Ld}]) -> [];
-macro_expansion([{dot,_Ld}]) -> []; %Be nice, allow no right paren!
+macro_expansion([{dot,Ld}]) -> throw({error,Ld,missing_parenthesis});
macro_expansion([T|Ts]) ->
[T|macro_expansion(Ts)].
diff --git a/lib/stdlib/src/erl_parse.yrl b/lib/stdlib/src/erl_parse.yrl
index ea91ec5927..69807aad83 100644
--- a/lib/stdlib/src/erl_parse.yrl
+++ b/lib/stdlib/src/erl_parse.yrl
@@ -30,14 +30,12 @@ expr_600 expr_700 expr_800 expr_900
expr_max
list tail
list_comprehension lc_expr lc_exprs
-binary_comprehension
+binary_comprehension
tuple
-atom1
%struct
record_expr record_tuple record_field record_fields
if_expr if_clause if_clauses case_expr cr_clause cr_clauses receive_expr
fun_expr fun_clause fun_clauses
-%% cond_expr cond_clause cond_clauses
try_expr try_catch try_clause try_clauses query_expr
function_call argument_list
exprs guard
@@ -56,7 +54,7 @@ char integer float atom string var
'(' ')' ',' '->' ':-' '{' '}' '[' ']' '|' '||' '<-' ';' ':' '#' '.'
'after' 'begin' 'case' 'try' 'catch' 'end' 'fun' 'if' 'of' 'receive' 'when'
-'andalso' 'orelse' 'query' 'spec'
+'andalso' 'orelse' 'query'
'bnot' 'not'
'*' '/' 'div' 'rem' 'band' 'and'
'+' '-' 'bor' 'bxor' 'bsl' 'bsr' 'or' 'xor'
@@ -64,6 +62,7 @@ char integer float atom string var
'==' '/=' '=<' '<' '>=' '>' '=:=' '=/=' '<='
'<<' '>>'
'!' '=' '::'
+'spec' % helper
dot.
Expect 2.
@@ -78,19 +77,16 @@ attribute -> '-' atom attr_val : build_attribute('$2', '$3').
attribute -> '-' atom typed_attr_val : build_typed_attribute('$2','$3').
attribute -> '-' atom '(' typed_attr_val ')' : build_typed_attribute('$2','$4').
attribute -> '-' 'spec' type_spec : build_type_spec('$2', '$3').
-
-atom1 -> 'spec' : {atom, ?line('$1'), 'spec'}.
-atom1 -> atom : '$1'.
type_spec -> spec_fun type_sigs : {'$1', '$2'}.
type_spec -> '(' spec_fun type_sigs ')' : {'$2', '$3'}.
-spec_fun -> atom1 : '$1'.
-spec_fun -> atom1 ':' atom1 : {'$1', '$3'}.
+spec_fun -> atom : '$1'.
+spec_fun -> atom ':' atom : {'$1', '$3'}.
%% The following two are retained only for backwards compatibility;
%% they are not part of the EEP syntax and should be removed.
-spec_fun -> atom1 '/' integer '::' : {'$1', '$3'}.
-spec_fun -> atom1 ':' atom1 '/' integer '::' : {'$1', '$3', '$5'}.
+spec_fun -> atom '/' integer '::' : {'$1', '$3'}.
+spec_fun -> atom ':' atom '/' integer '::' : {'$1', '$3', '$5'}.
typed_attr_val -> expr ',' typed_record_fields : {typed_record, '$1', '$3'}.
typed_attr_val -> expr '::' top_type : {type_def, '$1', '$3'}.
@@ -108,13 +104,13 @@ type_sigs -> type_sig : ['$1'].
type_sigs -> type_sig ';' type_sigs : ['$1'|'$3'].
type_sig -> fun_type : '$1'.
-type_sig -> fun_type 'when' type_guards : {type, ?line('$1'), bounded_fun,
+type_sig -> fun_type 'when' type_guards : {type, ?line('$1'), bounded_fun,
['$1','$3']}.
type_guards -> type_guard : ['$1'].
type_guards -> type_guard ',' type_guards : ['$1'|'$3'].
-type_guard -> atom1 '(' top_types ')' : {type, ?line('$1'), constraint,
+type_guard -> atom '(' top_types ')' : {type, ?line('$1'), constraint,
['$1', '$3']}.
top_types -> top_type : ['$1'].
@@ -128,53 +124,53 @@ top_type_100 -> type '|' top_type_100 : lift_unions('$1','$3').
type -> '(' top_type ')' : {paren_type, ?line('$2'), ['$2']}.
type -> var : '$1'.
-type -> atom1 : '$1'.
-type -> atom1 '(' ')' : build_gen_type('$1').
-type -> atom1 '(' top_types ')' : {type, ?line('$1'),
+type -> atom : '$1'.
+type -> atom '(' ')' : build_gen_type('$1').
+type -> atom '(' top_types ')' : {type, ?line('$1'),
normalise('$1'), '$3'}.
-type -> atom1 ':' atom1 '(' ')' : {remote_type, ?line('$1'),
+type -> atom ':' atom '(' ')' : {remote_type, ?line('$1'),
['$1', '$3', []]}.
-type -> atom1 ':' atom1 '(' top_types ')' : {remote_type, ?line('$1'),
+type -> atom ':' atom '(' top_types ')' : {remote_type, ?line('$1'),
['$1', '$3', '$5']}.
type -> '[' ']' : {type, ?line('$1'), nil, []}.
type -> '[' top_type ']' : {type, ?line('$1'), list, ['$2']}.
-type -> '[' top_type ',' '.' '.' '.' ']' : {type, ?line('$1'),
+type -> '[' top_type ',' '.' '.' '.' ']' : {type, ?line('$1'),
nonempty_list, ['$2']}.
type -> '{' '}' : {type, ?line('$1'), tuple, []}.
type -> '{' top_types '}' : {type, ?line('$1'), tuple, '$2'}.
-type -> '#' atom1 '{' '}' : {type, ?line('$1'), record, ['$2']}.
-type -> '#' atom1 '{' field_types '}' : {type, ?line('$1'),
+type -> '#' atom '{' '}' : {type, ?line('$1'), record, ['$2']}.
+type -> '#' atom '{' field_types '}' : {type, ?line('$1'),
record, ['$2'|'$4']}.
type -> binary_type : '$1'.
type -> int_type : '$1'.
-type -> int_type '.' '.' int_type : {type, ?line('$1'), range,
+type -> int_type '.' '.' int_type : {type, ?line('$1'), range,
['$1', '$4']}.
type -> 'fun' '(' ')' : {type, ?line('$1'), 'fun', []}.
type -> 'fun' '(' fun_type_100 ')' : '$3'.
int_type -> integer : '$1'.
-int_type -> '-' integer : abstract(-normalise('$2'),
+int_type -> '-' integer : abstract(-normalise('$2'),
?line('$2')).
-fun_type_100 -> '(' '.' '.' '.' ')' '->' top_type
+fun_type_100 -> '(' '.' '.' '.' ')' '->' top_type
: {type, ?line('$1'), 'fun',
[{type, ?line('$1'), any}, '$7']}.
fun_type_100 -> fun_type : '$1'.
fun_type -> '(' ')' '->' top_type : {type, ?line('$1'), 'fun',
[{type, ?line('$1'), product, []}, '$4']}.
-fun_type -> '(' top_types ')' '->' top_type
+fun_type -> '(' top_types ')' '->' top_type
: {type, ?line('$1'), 'fun',
[{type, ?line('$1'), product, '$2'},'$5']}.
field_types -> field_type : ['$1'].
field_types -> field_type ',' field_types : ['$1'|'$3'].
-field_type -> atom1 '::' top_type : {type, ?line('$1'), field_type,
+field_type -> atom '::' top_type : {type, ?line('$1'), field_type,
['$1', '$3']}.
-binary_type -> '<<' '>>' : {type, ?line('$1'),binary,
- [abstract(0, ?line('$1')),
+binary_type -> '<<' '>>' : {type, ?line('$1'),binary,
+ [abstract(0, ?line('$1')),
abstract(0, ?line('$1'))]}.
binary_type -> '<<' bin_base_type '>>' : {type, ?line('$1'),binary,
['$2', abstract(0, ?line('$1'))]}.
@@ -196,7 +192,7 @@ function -> function_clauses : build_function('$1').
function_clauses -> function_clause : ['$1'].
function_clauses -> function_clause ';' function_clauses : ['$1'|'$3'].
-function_clause -> atom1 clause_args clause_guard clause_body :
+function_clause -> atom clause_args clause_guard clause_body :
{clause,?line('$1'),element(3, '$1'),'$2','$3','$4'}.
@@ -249,9 +245,9 @@ expr_800 -> expr_900 ':' expr_max :
{remote,?line('$2'),'$1','$3'}.
expr_800 -> expr_900 : '$1'.
-expr_900 -> '.' atom1 :
+expr_900 -> '.' atom :
{record_field,?line('$1'),{atom,?line('$1'),''},'$2'}.
-expr_900 -> expr_900 '.' atom1 :
+expr_900 -> expr_900 '.' atom :
{record_field,?line('$2'),'$1','$3'}.
expr_900 -> expr_max : '$1'.
@@ -269,7 +265,6 @@ expr_max -> if_expr : '$1'.
expr_max -> case_expr : '$1'.
expr_max -> receive_expr : '$1'.
expr_max -> fun_expr : '$1'.
-%%expr_max -> cond_expr : '$1'.
expr_max -> try_expr : '$1'.
expr_max -> query_expr : '$1'.
@@ -303,8 +298,8 @@ opt_bit_type_list -> '$empty' : default.
bit_type_list -> bit_type '-' bit_type_list : ['$1' | '$3'].
bit_type_list -> bit_type : ['$1'].
-bit_type -> atom1 : element(3,'$1').
-bit_type -> atom1 ':' integer : { element(3,'$1'), element(3,'$3') }.
+bit_type -> atom : element(3,'$1').
+bit_type -> atom ':' integer : { element(3,'$1'), element(3,'$3') }.
bit_size_expr -> expr_max : '$1'.
@@ -324,7 +319,7 @@ tuple -> '{' '}' : {tuple,?line('$1'),[]}.
tuple -> '{' exprs '}' : {tuple,?line('$1'),'$2'}.
-%%struct -> atom1 tuple :
+%%struct -> atom tuple :
%% {struct,?line('$1'),element(3, '$1'),element(3, '$2')}.
@@ -332,13 +327,17 @@ tuple -> '{' exprs '}' : {tuple,?line('$1'),'$2'}.
%% N.B. Field names are returned as the complete object, even if they are
%% always atoms for the moment, this might change in the future.
-record_expr -> '#' atom1 '.' atom1 :
+record_expr -> '#' atom '.' atom :
{record_index,?line('$1'),element(3, '$2'),'$4'}.
-record_expr -> '#' atom1 record_tuple :
+record_expr -> '#' atom record_tuple :
{record,?line('$1'),element(3, '$2'),'$3'}.
-record_expr -> expr_max '#' atom1 '.' atom1 :
+record_expr -> expr_max '#' atom '.' atom :
{record_field,?line('$2'),'$1',element(3, '$3'),'$5'}.
-record_expr -> expr_max '#' atom1 record_tuple :
+record_expr -> expr_max '#' atom record_tuple :
+ {record,?line('$2'),'$1',element(3, '$3'),'$4'}.
+record_expr -> record_expr '#' atom '.' atom :
+ {record_field,?line('$2'),'$1',element(3, '$3'),'$5'}.
+record_expr -> record_expr '#' atom record_tuple :
{record,?line('$2'),'$1',element(3, '$3'),'$4'}.
record_tuple -> '{' '}' : [].
@@ -348,7 +347,7 @@ record_fields -> record_field : ['$1'].
record_fields -> record_field ',' record_fields : ['$1' | '$3'].
record_field -> var '=' expr : {record_field,?line('$1'),'$1','$3'}.
-record_field -> atom1 '=' expr : {record_field,?line('$1'),'$1','$3'}.
+record_field -> atom '=' expr : {record_field,?line('$1'),'$1','$3'}.
%% N.B. This is called from expr_700.
@@ -382,9 +381,9 @@ receive_expr -> 'receive' cr_clauses 'after' expr clause_body 'end' :
{'receive',?line('$1'),'$2','$4','$5'}.
-fun_expr -> 'fun' atom1 '/' integer :
+fun_expr -> 'fun' atom '/' integer :
{'fun',?line('$1'),{function,element(3, '$2'),element(3, '$4')}}.
-fun_expr -> 'fun' atom1 ':' atom1 '/' integer :
+fun_expr -> 'fun' atom ':' atom '/' integer :
{'fun',?line('$1'),{function,element(3, '$2'),element(3, '$4'),element(3,'$6')}}.
fun_expr -> 'fun' fun_clauses 'end' :
build_fun(?line('$1'), '$2').
@@ -414,7 +413,7 @@ try_clauses -> try_clause ';' try_clauses : ['$1' | '$3'].
try_clause -> expr clause_guard clause_body :
L = ?line('$1'),
{clause,L,[{tuple,L,[{atom,L,throw},'$1',{var,L,'_'}]}],'$2','$3'}.
-try_clause -> atom1 ':' expr clause_guard clause_body :
+try_clause -> atom ':' expr clause_guard clause_body :
L = ?line('$1'),
{clause,L,[{tuple,L,['$1','$3',{var,L,'_'}]}],'$4','$5'}.
try_clause -> var ':' expr clause_guard clause_body :
@@ -438,7 +437,7 @@ guard -> exprs ';' guard : ['$1'|'$3'].
atomic -> char : '$1'.
atomic -> integer : '$1'.
atomic -> float : '$1'.
-atomic -> atom1 : '$1'.
+atomic -> atom : '$1'.
atomic -> strings : '$1'.
strings -> string : '$1'.
@@ -483,7 +482,7 @@ rule -> rule_clauses : build_rule('$1').
rule_clauses -> rule_clause : ['$1'].
rule_clauses -> rule_clause ';' rule_clauses : ['$1'|'$3'].
-rule_clause -> atom1 clause_args clause_guard rule_body :
+rule_clause -> atom clause_args clause_guard rule_body :
{clause,?line('$1'),element(3, '$1'),'$2','$3','$4'}.
rule_body -> ':-' lc_exprs: '$2'.
@@ -505,8 +504,8 @@ Erlang code.
%% mkop(Op, Arg) -> {op,Line,Op,Arg}.
%% mkop(Left, Op, Right) -> {op,Line,Op,Left,Right}.
--define(mkop2(L, OpPos, R),
- begin
+-define(mkop2(L, OpPos, R),
+ begin
{Op,Pos} = OpPos,
{op,Pos,Op,L,R}
end).
@@ -524,6 +523,8 @@ Erlang code.
%% These really suck and are only here until Calle gets multiple
%% entry points working.
+parse_form([{'-',L1},{atom,L2,spec}|Tokens]) ->
+ parse([{'-',L1},{'spec',L2}|Tokens]);
parse_form(Tokens) ->
parse(Tokens).
@@ -550,7 +551,7 @@ parse_term(Tokens) ->
-type attributes() :: 'export' | 'file' | 'import' | 'module'
| 'opaque' | 'record' | 'type'.
-build_typed_attribute({atom,La,record},
+build_typed_attribute({atom,La,record},
{typed_record, {atom,_Ln,RecordName}, RecTuple}) ->
{attribute,La,record,{RecordName,record_tuple(RecTuple)}};
build_typed_attribute({atom,La,Attr},
@@ -573,7 +574,7 @@ build_typed_attribute({atom,La,Attr},_) ->
build_type_spec({spec,La}, {SpecFun, TypeSpecs}) ->
NewSpecFun =
case SpecFun of
- {atom, _, Fun} ->
+ {atom, _, Fun} ->
{Fun, find_arity_from_specs(TypeSpecs)};
{{atom,_, Mod}, {atom,_, Fun}} ->
{Mod,Fun,find_arity_from_specs(TypeSpecs)};
@@ -707,7 +708,7 @@ attribute_farity(Other) -> Other.
attribute_farity_list(Args) ->
[attribute_farity(A) || A <- Args].
-
+
-spec error_bad_decl(integer(), attributes()) -> no_return().
error_bad_decl(L, S) ->
@@ -730,17 +731,17 @@ record_fields([{match,_Lm,{atom,La,A},Expr}|Fields]) ->
[{record_field,La,{atom,La,A},Expr}|record_fields(Fields)];
record_fields([{typed,Expr,TypeInfo}|Fields]) ->
[Field] = record_fields([Expr]),
- TypeInfo1 =
+ TypeInfo1 =
case Expr of
{match, _, _, _} -> TypeInfo; %% If we have an initializer.
- {atom, La, _} ->
+ {atom, La, _} ->
case has_undefined(TypeInfo) of
false ->
lift_unions(abstract(undefined, La), TypeInfo);
true ->
TypeInfo
end
- end,
+ end,
[{typed_record_field,Field,TypeInfo1}|record_fields(Fields)];
record_fields([Other|_Fields]) ->
ret_err(?line(Other), "bad record field");
@@ -996,7 +997,7 @@ inop_prec('#') -> {800,700,800};
inop_prec(':') -> {900,800,900};
inop_prec('.') -> {900,900,1000}.
--type pre_op() :: 'catch' | '+' | '-' | 'bnot' | '#'.
+-type pre_op() :: 'catch' | '+' | '-' | 'bnot' | 'not' | '#'.
-spec preop_prec(pre_op()) -> {0 | 600 | 700, 100 | 700 | 800}.
diff --git a/lib/stdlib/src/erl_scan.erl b/lib/stdlib/src/erl_scan.erl
index 52ec81a78b..1013d54bdc 100644
--- a/lib/stdlib/src/erl_scan.erl
+++ b/lib/stdlib/src/erl_scan.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1996-2010. 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%
%%
@@ -48,7 +48,7 @@
-module(erl_scan).
-%%% External exports
+%%% External exports
-export([string/1,string/2,string/3,tokens/3,tokens/4,
format_error/1,reserved_word/1,
@@ -98,41 +98,41 @@
-spec format_error(Error :: term()) -> string().
format_error({string,Quote,Head}) ->
lists:flatten(["unterminated " ++ string_thing(Quote) ++
- " starting with " ++
+ " starting with " ++
io_lib:write_unicode_string(Head, Quote)]);
-format_error({illegal,Type}) ->
+format_error({illegal,Type}) ->
lists:flatten(io_lib:fwrite("illegal ~w", [Type]));
format_error(char) -> "unterminated character";
-format_error({base,Base}) ->
+format_error({base,Base}) ->
lists:flatten(io_lib:fwrite("illegal base '~w'", [Base]));
-format_error(Other) ->
+format_error(Other) ->
lists:flatten(io_lib:write(Other)).
--type string_return() :: {'ok', tokens(), location()}
+-type string_return() :: {'ok', tokens(), location()}
| {'error', error_info(), location()}.
-spec string(String :: string()) -> string_return().
string(String) ->
string(String, 1, []).
--spec string(String :: string(), StartLocation :: location()) ->
+-spec string(String :: string(), StartLocation :: location()) ->
string_return().
string(String, StartLocation) ->
string(String, StartLocation, []).
--spec string(String :: string(), StartLocation :: location(),
+-spec string(String :: string(), StartLocation :: location(),
Options :: options()) -> string_return().
string(String, Line, Options) when ?STRING(String), ?ALINE(Line) ->
string1(String, options(Options), Line, no_col, []);
string(String, {Line,Column}, Options) when ?STRING(String),
- ?ALINE(Line),
+ ?ALINE(Line),
?COLUMN(Column) ->
string1(String, options(Options), Line, Column, []).
-type char_spec() :: string() | 'eof'.
-type cont_fun() :: fun((char_spec(), #erl_scan{}, line(), column(),
tokens(), any()) -> any()).
--opaque return_cont() :: {string(), column(), tokens(), line(),
+-opaque return_cont() :: {string(), column(), tokens(), line(),
#erl_scan{}, cont_fun(), any()}.
-type cont() :: return_cont() | [].
-type tokens_result() :: {'ok', tokens(), location()}
@@ -141,13 +141,13 @@ string(String, {Line,Column}, Options) when ?STRING(String),
-type tokens_return() :: {'done', tokens_result(), char_spec()}
| {'more', return_cont()}.
--spec tokens(Cont :: cont(), CharSpec :: char_spec(),
+-spec tokens(Cont :: cont(), CharSpec :: char_spec(),
StartLocation :: location()) -> tokens_return().
tokens(Cont, CharSpec, StartLocation) ->
tokens(Cont, CharSpec, StartLocation, []).
--spec tokens(Cont :: cont(), CharSpec :: char_spec(),
- StartLocation :: location(), Options :: options()) ->
+-spec tokens(Cont :: cont(), CharSpec :: char_spec(),
+ StartLocation :: location(), Options :: options()) ->
tokens_return().
tokens([], CharSpec, Line, Options) when ?ALINE(Line) ->
tokens1(CharSpec, options(Options), Line, no_col, [], fun scan/6, []);
@@ -157,15 +157,15 @@ tokens([], CharSpec, {Line,Column}, Options) when ?ALINE(Line),
tokens({Cs,Col,Toks,Line,St,Any,Fun}, CharSpec, _Loc, _Opts) ->
tokens1(Cs++CharSpec, St, Line, Col, Toks, Fun, Any).
--type attribute_item() :: 'column' | 'length' | 'line'
+-type attribute_item() :: 'column' | 'length' | 'line'
| 'location' | 'text'.
-type info_location() :: location() | term().
--type attribute_info() :: {'column', column()}| {'length', pos_integer()}
- | {'line', info_line()}
+-type attribute_info() :: {'column', column()}| {'length', pos_integer()}
+ | {'line', info_line()}
| {'location', info_location()}
| {'text', string()}.
-type token_item() :: 'category' | 'symbol' | attribute_item().
--type token_info() :: {'category', category()} | {'symbol', symbol()}
+-type token_info() :: {'category', category()} | {'symbol', symbol()}
| attribute_info().
-spec token_info(token()) -> [token_info()].
@@ -214,7 +214,7 @@ attributes_info(Attrs, [A|As]) when is_atom(A) ->
AttributeInfo when is_tuple(AttributeInfo) ->
[AttributeInfo|attributes_info(Attrs, As)]
end;
-attributes_info({Line,Column}, column=Item) when ?ALINE(Line),
+attributes_info({Line,Column}, column=Item) when ?ALINE(Line),
?COLUMN(Column) ->
{Item,Column};
attributes_info(Line, column) when ?ALINE(Line) ->
@@ -230,12 +230,12 @@ attributes_info(Attrs, length=Item) ->
end;
attributes_info(Line, line=Item) when ?ALINE(Line) ->
{Item,Line};
-attributes_info({Line,Column}, line=Item) when ?ALINE(Line),
+attributes_info({Line,Column}, line=Item) when ?ALINE(Line),
?COLUMN(Column) ->
{Item,Line};
attributes_info(Attrs, line=Item) ->
attr_info(Attrs, Item);
-attributes_info({Line,Column}=Location, location=Item) when ?ALINE(Line),
+attributes_info({Line,Column}=Location, location=Item) when ?ALINE(Line),
?COLUMN(Column) ->
{Item,Location};
attributes_info(Line, location=Item) when ?ALINE(Line) ->
@@ -289,11 +289,11 @@ string_thing(_) -> "string".
options(Opts0) when is_list(Opts0) ->
Opts = lists:foldr(fun expand_opt/2, [], Opts0),
- [RW_fun] =
+ [RW_fun] =
case opts(Opts, [reserved_word_fun], []) of
badarg ->
erlang:error(badarg, [Opts0]);
- R ->
+ R ->
R
end,
Comment = proplists:get_bool(return_comments, Opts),
@@ -336,7 +336,7 @@ attr_info(Attrs, Item) ->
case catch lists:keysearch(Item, 1, Attrs) of
{value,{Item,Value}} ->
{Item,Value};
- false ->
+ false ->
undefined;
_ ->
erlang:error(badarg, [Attrs, Item])
@@ -591,12 +591,12 @@ scan_atom(Cs0, St, Line, Col, Toks, Ncs0) ->
case catch list_to_atom(Wcs) of
Name when is_atom(Name) ->
case (St#erl_scan.resword_fun)(Name) of
- true ->
+ true ->
tok2(Cs, St, Line, Col, Toks, Wcs, Name);
- false ->
+ false ->
tok3(Cs, St, Line, Col, Toks, atom, Wcs, Name)
end;
- _Error ->
+ _Error ->
Ncol = incr_column(Col, length(Wcs)),
scan_error({illegal,atom}, Line, Col, Line, Ncol, Cs)
end
@@ -610,7 +610,7 @@ scan_variable(Cs0, St, Line, Col, Toks, Ncs0) ->
case catch list_to_atom(Wcs) of
Name when is_atom(Name) ->
tok3(Cs, St, Line, Col, Toks, var, Wcs, Name);
- _Error ->
+ _Error ->
Ncol = incr_column(Col, length(Wcs)),
scan_error({illegal,var}, Line, Col, Line, Ncol, Cs)
end
@@ -690,7 +690,7 @@ scan_nl_spcs([]=Cs, _St, Line, Col, Toks, N) ->
{more,{Cs,Col,Toks,Line,N,fun scan_nl_spcs/6}};
scan_nl_spcs(Cs, St, Line, Col, Toks, N) ->
newline_end(Cs, St, Line, Col, Toks, N, nl_spcs(N)).
-
+
scan_nl_tabs([$\t|Cs], St, Line, Col, Toks, N) when N < 11 ->
scan_nl_tabs(Cs, St, Line, Col, Toks, N+1);
scan_nl_tabs([]=Cs, _St, Line, Col, Toks, N) ->
@@ -701,7 +701,7 @@ scan_nl_tabs(Cs, St, Line, Col, Toks, N) ->
%% Note: returning {more,Cont} is meaningless here; one could just as
%% well return several tokens. But since tokens() scans up to a full
%% stop anyway, nothing is gained by not collecting all white spaces.
-scan_nl_white_space([$\n|Cs], #erl_scan{text = false}=St, Line, no_col=Col,
+scan_nl_white_space([$\n|Cs], #erl_scan{text = false}=St, Line, no_col=Col,
Toks0, Ncs) ->
Toks = [{white_space,Line,lists:reverse(Ncs)}|Toks0],
scan_newline(Cs, St, Line+1, Col, Toks);
@@ -714,7 +714,7 @@ scan_nl_white_space([C|Cs], St, Line, Col, Toks, Ncs) when ?WHITE_SPACE(C) ->
scan_nl_white_space(Cs, St, Line, Col, Toks, [C|Ncs]);
scan_nl_white_space([]=Cs, _St, Line, Col, Toks, Ncs) ->
{more,{Cs,Col,Toks,Line,Ncs,fun scan_nl_white_space/6}};
-scan_nl_white_space(Cs, #erl_scan{text = false}=St, Line, no_col=Col,
+scan_nl_white_space(Cs, #erl_scan{text = false}=St, Line, no_col=Col,
Toks, Ncs) ->
scan1(Cs, St, Line+1, Col, [{white_space,Line,lists:reverse(Ncs)}|Toks]);
scan_nl_white_space(Cs, St, Line, Col, Toks, Ncs0) ->
@@ -723,7 +723,7 @@ scan_nl_white_space(Cs, St, Line, Col, Toks, Ncs0) ->
Token = {white_space,Attrs,Ncs},
scan1(Cs, St, Line+1, new_column(Col, length(Ncs)), [Token|Toks]).
-newline_end(Cs, #erl_scan{text = false}=St, Line, no_col=Col,
+newline_end(Cs, #erl_scan{text = false}=St, Line, no_col=Col,
Toks, _N, Ncs) ->
scan1(Cs, St, Line+1, Col, [{white_space,Line,Ncs}|Toks]);
newline_end(Cs, St, Line, Col, Toks, N, Ncs) ->
@@ -789,7 +789,7 @@ scan_char([$\\|Cs]=Cs0, St, Line, Col, Toks) ->
Ntoks = [{char,Attrs,Val}|Toks],
scan1(Ncs, St, Line, Ncol, Ntoks)
end;
-scan_char([$\n=C|Cs], St, Line, Col, Toks) ->
+scan_char([$\n=C|Cs], St, Line, Col, Toks) ->
Attrs = attributes(Line, Col, St, [$$,C]),
scan1(Cs, St, Line+1, new_column(Col, 1), [{char,Attrs,C}|Toks]);
scan_char([C|Cs], St, Line, Col, Toks) when ?CHAR(C) ->
@@ -896,7 +896,7 @@ scan_string_no_col([Q|Cs], Line, Col, Q, Wcs, Uni) ->
{Cs,Line,Col,_DontCare=[],lists:reverse(Wcs),Uni};
scan_string_no_col([$\n=C|Cs], Line, Col, Q, Wcs, Uni) ->
scan_string_no_col(Cs, Line+1, Col, Q, [C|Wcs], Uni);
-scan_string_no_col([C|Cs], Line, Col, Q, Wcs, Uni) when C =/= $\\,
+scan_string_no_col([C|Cs], Line, Col, Q, Wcs, Uni) when C =/= $\\,
?CHAR(C), ?UNI255(C) ->
scan_string_no_col(Cs, Line, Col, Q, [C|Wcs], Uni);
scan_string_no_col(Cs, Line, Col, Q, Wcs, Uni) ->
@@ -909,7 +909,7 @@ scan_string_col([Q|Cs], Line, Col, Q, Wcs0, Uni) ->
{Cs,Line,Col+1,Str,Wcs,Uni};
scan_string_col([$\n=C|Cs], Line, _xCol, Q, Wcs, Uni) ->
scan_string_col(Cs, Line+1, 1, Q, [C|Wcs], Uni);
-scan_string_col([C|Cs], Line, Col, Q, Wcs, Uni) when C =/= $\\,
+scan_string_col([C|Cs], Line, Col, Q, Wcs, Uni) when C =/= $\\,
?CHAR(C), ?UNI255(C) ->
scan_string_col(Cs, Line, Col+1, Q, [C|Wcs], Uni);
scan_string_col(Cs, Line, Col, Q, Wcs, Uni) ->
@@ -970,8 +970,8 @@ scan_string1(eof, Line, Col, _Q, _Str, Wcs, _Uni) ->
{error,Line,Col,lists:reverse(Wcs),eof}.
-define(OCT(C), C >= $0, C =< $7).
--define(HEX(C), C >= $0 andalso C =< $9 orelse
- C >= $A andalso C =< $F orelse
+-define(HEX(C), C >= $0 andalso C =< $9 orelse
+ C >= $A andalso C =< $F orelse
C >= $a andalso C =< $f).
%% \<1-3> octal digits
@@ -1086,7 +1086,7 @@ scan_number(Cs, St, Line, Col, Toks, Ncs0) ->
Ncol = incr_column(Col, length(Ncs)),
scan_error({illegal,integer}, Line, Col, Line, Ncol, Cs)
end.
-
+
scan_based_int([C|Cs], St, Line, Col, Toks, {B,Ncs,Bcs})
when ?DIGIT(C), C < $0+B ->
scan_based_int(Cs, St, Line, Col, Toks, {B,[C|Ncs],Bcs});
@@ -1262,7 +1262,7 @@ nl_tabs(8) -> "\n\t\t\t\t\t\t\t";
nl_tabs(9) -> "\n\t\t\t\t\t\t\t\t";
nl_tabs(10) -> "\n\t\t\t\t\t\t\t\t\t";
nl_tabs(11) -> "\n\t\t\t\t\t\t\t\t\t\t".
-
+
tabs(1) -> "\t";
tabs(2) -> "\t\t";
tabs(3) -> "\t\t\t";
@@ -1303,5 +1303,4 @@ reserved_word('bsl') -> true;
reserved_word('bsr') -> true;
reserved_word('or') -> true;
reserved_word('xor') -> true;
-reserved_word('spec') -> true;
reserved_word(_) -> false.
diff --git a/lib/stdlib/src/ets.erl b/lib/stdlib/src/ets.erl
index 9f84e3639f..d7b5dbc636 100644
--- a/lib/stdlib/src/ets.erl
+++ b/lib/stdlib/src/ets.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1996-2010. 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(ets).
@@ -230,7 +230,7 @@ from_dets(EtsTable, DetsTable) ->
erlang:error(Unexpected,[EtsTable,DetsTable])
end.
--spec to_dets(tab(), dets:tab_name()) -> tab().
+-spec to_dets(tab(), dets:tab_name()) -> dets:tab_name().
to_dets(EtsTable, DetsTable) ->
case (catch dets:from_ets(DetsTable, EtsTable)) of
@@ -622,14 +622,14 @@ do_read_and_verify(ReadFun,InitState,Tab,FtOptions,HeadCount,Verify) ->
end,
{ok,Tab};
{ok,{FinalMD5State,FinalCount,['$end_of_table',LastInfo],_}} ->
- ECount = case lists:keysearch(count,1,LastInfo) of
- {value,{count,N}} ->
+ ECount = case lists:keyfind(count,1,LastInfo) of
+ {count,N} ->
N;
_ ->
false
end,
- EMD5 = case lists:keysearch(md5,1,LastInfo) of
- {value,{md5,M}} ->
+ EMD5 = case lists:keyfind(md5,1,LastInfo) of
+ {md5,M} ->
M;
_ ->
false
@@ -742,22 +742,21 @@ get_header_data(Name,true) ->
false ->
throw(badfile);
true ->
- Major = case lists:keysearch(major,1,L) of
- {value,{major,Maj}} ->
+ Major = case lists:keyfind(major,1,L) of
+ {major,Maj} ->
Maj;
_ ->
0
end,
- Minor = case lists:keysearch(minor,1,L) of
- {value,{minor,Min}} ->
+ Minor = case lists:keyfind(minor,1,L) of
+ {minor,Min} ->
Min;
_ ->
0
end,
FtOptions =
- case lists:keysearch(extended_info,1,L) of
- {value,{extended_info,I}}
- when is_list(I) ->
+ case lists:keyfind(extended_info,1,L) of
+ {extended_info,I} when is_list(I) ->
#filetab_options
{
object_count =
@@ -786,29 +785,28 @@ get_header_data(Name,true) ->
end;
get_header_data(Name, false) ->
- case wrap_chunk(Name,start,1,false) of
+ case wrap_chunk(Name, start, 1, false) of
{C,[Tup]} when is_tuple(Tup) ->
L = tuple_to_list(Tup),
case verify_header_mandatory(L) of
false ->
throw(badfile);
true ->
- Major = case lists:keysearch(major_version,1,L) of
- {value,{major_version,Maj}} ->
+ Major = case lists:keyfind(major_version, 1, L) of
+ {major_version, Maj} ->
Maj;
_ ->
0
end,
- Minor = case lists:keysearch(minor_version,1,L) of
- {value,{minor_version,Min}} ->
+ Minor = case lists:keyfind(minor_version, 1, L) of
+ {minor_version, Min} ->
Min;
_ ->
0
end,
FtOptions =
- case lists:keysearch(extended_info,1,L) of
- {value,{extended_info,I}}
- when is_list(I) ->
+ case lists:keyfind(extended_info, 1, L) of
+ {extended_info, I} when is_list(I) ->
#filetab_options
{
object_count =
@@ -825,25 +823,26 @@ get_header_data(Name, false) ->
throw(badfile)
end.
-md5_and_convert([],MD5State,Count) ->
+md5_and_convert([], MD5State, Count) ->
{[],MD5State,Count,[]};
-md5_and_convert([H|T],MD5State,Count) when is_binary(H) ->
+md5_and_convert([H|T], MD5State, Count) when is_binary(H) ->
case (catch binary_to_term(H)) of
{'EXIT', _} ->
md5_and_convert(T,MD5State,Count);
- ['$end_of_table',Dat] ->
- {[],MD5State,Count,['$end_of_table',Dat]};
+ ['$end_of_table',_Dat] = L ->
+ {[],MD5State,Count,L};
Term ->
- X = erlang:md5_update(MD5State,H),
- {Rest,NewMD5,NewCount,NewLast} = md5_and_convert(T,X,Count+1),
+ X = erlang:md5_update(MD5State, H),
+ {Rest,NewMD5,NewCount,NewLast} = md5_and_convert(T, X, Count+1),
{[Term | Rest],NewMD5,NewCount,NewLast}
end.
-scan_for_endinfo([],Count) ->
+
+scan_for_endinfo([], Count) ->
{[],Count,[]};
-scan_for_endinfo([['$end_of_table',Dat]],Count) ->
+scan_for_endinfo([['$end_of_table',Dat]], Count) ->
{['$end_of_table',Dat],Count,[]};
-scan_for_endinfo([Term|T],Count) ->
- {NewLast,NCount,Rest} = scan_for_endinfo(T,Count+1),
+scan_for_endinfo([Term|T], Count) ->
+ {NewLast,NCount,Rest} = scan_for_endinfo(T, Count+1),
{NewLast,NCount,[Term | Rest]}.
load_table(ReadFun, State, Tab) ->
@@ -852,19 +851,19 @@ load_table(ReadFun, State, Tab) ->
[] ->
{ok,NewState};
List ->
- ets:insert(Tab,List),
- load_table(ReadFun,NewState,Tab)
+ ets:insert(Tab, List),
+ load_table(ReadFun, NewState, Tab)
end.
create_tab(I) ->
- {value, {name, Name}} = lists:keysearch(name, 1, I),
- {value, {type, Type}} = lists:keysearch(type, 1, I),
- {value, {protection, P}} = lists:keysearch(protection, 1, I),
- {value, {named_table, Val}} = lists:keysearch(named_table, 1, I),
- {value, {keypos, Kp}} = lists:keysearch(keypos, 1, I),
- {value, {size, Sz}} = lists:keysearch(size, 1, I),
+ {name, Name} = lists:keyfind(name, 1, I),
+ {type, Type} = lists:keyfind(type, 1, I),
+ {protection, P} = lists:keyfind(protection, 1, I),
+ {named_table, Val} = lists:keyfind(named_table, 1, I),
+ {keypos, _Kp} = Keypos = lists:keyfind(keypos, 1, I),
+ {size, Sz} = lists:keyfind(size, 1, I),
try
- Tab = ets:new(Name, [Type, P, {keypos, Kp} | named_table(Val)]),
+ Tab = ets:new(Name, [Type, P, Keypos | named_table(Val)]),
{ok, Tab, Sz}
catch
_:_ ->
@@ -905,9 +904,9 @@ tabfile_info(File) when is_list(File) ; is_atom(File) ->
{value, Val} = lists:keysearch(named_table, 1, FullHeader),
{value, Kp} = lists:keysearch(keypos, 1, FullHeader),
{value, Sz} = lists:keysearch(size, 1, FullHeader),
- Ei = case lists:keysearch(extended_info, 1, FullHeader) of
- {value, Ei0} -> Ei0;
- _ -> {extended_info, []}
+ Ei = case lists:keyfind(extended_info, 1, FullHeader) of
+ false -> {extended_info, []};
+ Ei0 -> Ei0
end,
{ok, [N,Type,P,Val,Kp,Sz,Ei,{version,{Major,Minor}}]}
catch
@@ -1021,21 +1020,20 @@ options(Option, Keys) ->
options([Option], Keys, []).
options(Options, [Key | Keys], L) when is_list(Options) ->
- V = case lists:keysearch(Key, 1, Options) of
- {value, {n_objects, default}} ->
+ V = case lists:keyfind(Key, 1, Options) of
+ {n_objects, default} ->
{ok, default_option(Key)};
- {value, {n_objects, NObjs}} when is_integer(NObjs),
- NObjs >= 1 ->
+ {n_objects, NObjs} when is_integer(NObjs), NObjs >= 1 ->
{ok, NObjs};
- {value, {traverse, select}} ->
+ {traverse, select} ->
{ok, select};
- {value, {traverse, {select, MS}}} ->
- {ok, {select, MS}};
- {value, {traverse, first_next}} ->
+ {traverse, {select, _MS} = Select} ->
+ {ok, Select};
+ {traverse, first_next} ->
{ok, first_next};
- {value, {traverse, last_prev}} ->
+ {traverse, last_prev} ->
{ok, last_prev};
- {value, {Key, _}} ->
+ {Key, _} ->
badarg;
false ->
Default = default_option(Key),
diff --git a/lib/stdlib/src/gen_event.erl b/lib/stdlib/src/gen_event.erl
index 1b30aaf5eb..27ff9441e6 100644
--- a/lib/stdlib/src/gen_event.erl
+++ b/lib/stdlib/src/gen_event.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1996-2010. 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(gen_event).
@@ -42,7 +42,6 @@
system_continue/3,
system_terminate/4,
system_code_change/4,
- print_event/3,
format_status/2]).
-import(error_logger, [error_msg/2]).
@@ -239,7 +238,7 @@ fetch_msg(Parent, ServerName, MSL, Debug, Hib) ->
Msg when Debug =:= [] ->
handle_msg(Msg, Parent, ServerName, MSL, []);
Msg ->
- Debug1 = sys:handle_debug(Debug, {?MODULE, print_event},
+ Debug1 = sys:handle_debug(Debug, fun print_event/3,
ServerName, {in, Msg}),
handle_msg(Msg, Parent, ServerName, MSL, Debug1)
end.
diff --git a/lib/stdlib/src/gen_fsm.erl b/lib/stdlib/src/gen_fsm.erl
index ba0275ae2b..9961646418 100644
--- a/lib/stdlib/src/gen_fsm.erl
+++ b/lib/stdlib/src/gen_fsm.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1996-2010. 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(gen_fsm).
@@ -116,7 +116,7 @@
-export([behaviour_info/1]).
%% Internal exports
--export([init_it/6, print_event/3,
+-export([init_it/6,
system_continue/3,
system_terminate/4,
system_code_change/4,
@@ -376,7 +376,7 @@ decode_msg(Msg,Parent, Name, StateName, StateData, Mod, Time, Debug, Hib) ->
_Msg when Debug =:= [] ->
handle_msg(Msg, Parent, Name, StateName, StateData, Mod, Time);
_Msg ->
- Debug1 = sys:handle_debug(Debug, {?MODULE, print_event},
+ Debug1 = sys:handle_debug(Debug, fun print_event/3,
{Name, StateName}, {in, Msg}),
handle_msg(Msg, Parent, Name, StateName, StateData,
Mod, Time, Debug1)
@@ -466,11 +466,11 @@ handle_msg(Msg, Parent, Name, StateName, StateData, Mod, _Time, Debug) ->
From = from(Msg),
case catch dispatch(Msg, Mod, StateName, StateData) of
{next_state, NStateName, NStateData} ->
- Debug1 = sys:handle_debug(Debug, {?MODULE, print_event},
+ Debug1 = sys:handle_debug(Debug, fun print_event/3,
{Name, NStateName}, return),
loop(Parent, Name, NStateName, NStateData, Mod, infinity, Debug1);
{next_state, NStateName, NStateData, Time1} ->
- Debug1 = sys:handle_debug(Debug, {?MODULE, print_event},
+ Debug1 = sys:handle_debug(Debug, fun print_event/3,
{Name, NStateName}, return),
loop(Parent, Name, NStateName, NStateData, Mod, Time1, Debug1);
{reply, Reply, NStateName, NStateData} when From =/= undefined ->
@@ -519,7 +519,7 @@ reply({To, Tag}, Reply) ->
reply(Name, {To, Tag}, Reply, Debug, StateName) ->
reply({To, Tag}, Reply),
- sys:handle_debug(Debug, {?MODULE, print_event}, Name,
+ sys:handle_debug(Debug, fun print_event/3, Name,
{out, Reply, To, StateName}).
%%% ---------------------------------------------------
diff --git a/lib/stdlib/src/gen_server.erl b/lib/stdlib/src/gen_server.erl
index f1a9a31c63..1c9e5270b6 100644
--- a/lib/stdlib/src/gen_server.erl
+++ b/lib/stdlib/src/gen_server.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1996-2010. 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(gen_server).
@@ -103,7 +103,7 @@
format_status/2]).
%% Internal exports
--export([init_it/6, print_event/3]).
+-export([init_it/6]).
-import(error_logger, [format/2]).
@@ -353,7 +353,7 @@ decode_msg(Msg, Parent, Name, State, Mod, Time, Debug, Hib) ->
_Msg when Debug =:= [] ->
handle_msg(Msg, Parent, Name, State, Mod);
_Msg ->
- Debug1 = sys:handle_debug(Debug, {?MODULE, print_event},
+ Debug1 = sys:handle_debug(Debug, fun print_event/3,
Name, {in, Msg}),
handle_msg(Msg, Parent, Name, State, Mod, Debug1)
end.
@@ -589,11 +589,11 @@ handle_msg({'$gen_call', From, Msg}, Parent, Name, State, Mod, Debug) ->
Debug1 = reply(Name, From, Reply, NState, Debug),
loop(Parent, Name, NState, Mod, Time1, Debug1);
{noreply, NState} ->
- Debug1 = sys:handle_debug(Debug, {?MODULE, print_event}, Name,
+ Debug1 = sys:handle_debug(Debug, fun print_event/3, Name,
{noreply, NState}),
loop(Parent, Name, NState, Mod, infinity, Debug1);
{noreply, NState, Time1} ->
- Debug1 = sys:handle_debug(Debug, {?MODULE, print_event}, Name,
+ Debug1 = sys:handle_debug(Debug, fun print_event/3, Name,
{noreply, NState}),
loop(Parent, Name, NState, Mod, Time1, Debug1);
{stop, Reason, Reply, NState} ->
@@ -625,11 +625,11 @@ handle_common_reply(Reply, Parent, Name, Msg, Mod, State) ->
handle_common_reply(Reply, Parent, Name, Msg, Mod, State, Debug) ->
case Reply of
{noreply, NState} ->
- Debug1 = sys:handle_debug(Debug, {?MODULE, print_event}, Name,
+ Debug1 = sys:handle_debug(Debug, fun print_event/3, Name,
{noreply, NState}),
loop(Parent, Name, NState, Mod, infinity, Debug1);
{noreply, NState, Time1} ->
- Debug1 = sys:handle_debug(Debug, {?MODULE, print_event}, Name,
+ Debug1 = sys:handle_debug(Debug, fun print_event/3, Name,
{noreply, NState}),
loop(Parent, Name, NState, Mod, Time1, Debug1);
{stop, Reason, NState} ->
@@ -642,7 +642,7 @@ handle_common_reply(Reply, Parent, Name, Msg, Mod, State, Debug) ->
reply(Name, {To, Tag}, Reply, State, Debug) ->
reply({To, Tag}, Reply),
- sys:handle_debug(Debug, {?MODULE, print_event}, Name,
+ sys:handle_debug(Debug, fun print_event/3, Name,
{out, Reply, To, State} ).
diff --git a/lib/stdlib/src/lists.erl b/lib/stdlib/src/lists.erl
index e1f8d1c200..857eda8161 100644
--- a/lib/stdlib/src/lists.erl
+++ b/lib/stdlib/src/lists.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1996-2010. 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(lists).
@@ -25,7 +25,7 @@
unzip/1, unzip3/1, zip/2, zip3/3, zipwith/3, zipwith3/4,
sort/1, merge/1, merge/2, rmerge/2, merge3/3, rmerge3/3,
usort/1, umerge/1, umerge3/3, umerge/2, rumerge3/3, rumerge/2,
- concat/1, flatten/1, flatten/2, flat_length/1, flatlength/1,
+ concat/1, flatten/1, flatten/2, flatlength/1,
keydelete/3, keyreplace/4, keytake/3, keystore/4,
keysort/2, keymerge/3, rkeymerge/3, rukeymerge/3,
ukeysort/2, ukeymerge/3, keymap/3]).
@@ -40,8 +40,6 @@
mapfoldl/3,mapfoldr/3,foreach/2,takewhile/2,dropwhile/2,splitwith/2,
split/2]).
--deprecated([flat_length/1]).
-
%% member(X, L) -> (true | false)
%% test if X is a member of the list L
%% Now a BIF!
@@ -436,13 +434,6 @@ do_flatten([H|T], Tail) ->
do_flatten([], Tail) ->
Tail.
-%% flat_length(List) (undocumented can be removed later)
-%% Calculate the length of a list of lists.
-
--spec flat_length([_]) -> non_neg_integer().
-
-flat_length(List) -> flatlength(List).
-
%% flatlength(List)
%% Calculate the length of a list of lists.
diff --git a/lib/stdlib/src/otp_internal.erl b/lib/stdlib/src/otp_internal.erl
index 7ea7de8d58..f3cfd78d54 100644
--- a/lib/stdlib/src/otp_internal.erl
+++ b/lib/stdlib/src/otp_internal.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1999-2010. 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(otp_internal).
@@ -236,98 +236,116 @@ obsolete_1(erlang, fault, 2) ->
obsolete_1(file, rawopen, 2) ->
{removed, "deprecated (will be removed in R13B); use file:open/2 with the raw option"};
-obsolete_1(httpd, start, 0) -> {deprecated,{inets,start,[2,3]},"R14B"};
-obsolete_1(httpd, start, 1) -> {deprecated,{inets,start,[2,3]},"R14B"};
-obsolete_1(httpd, start_link, 1) -> {deprecated,{inets,start,[2,3]},"R14B"};
-obsolete_1(httpd, start_child, 0) -> {deprecated,{inets,start,[2,3]},"R14B"};
-obsolete_1(httpd, start_child, 1) -> {deprecated,{inets,start,[2,3]},"R14B"};
-obsolete_1(httpd, stop, 0) -> {deprecated,{inets,stop,2},"R14B"};
-obsolete_1(httpd, stop, 1) -> {deprecated,{inets,stop,2},"R14B"};
-obsolete_1(httpd, stop, 2) -> {deprecated,{inets,stop,2},"R14B"};
-obsolete_1(httpd, stop_child, 0) -> {deprecated,{inets,stop,2},"R14B"};
-obsolete_1(httpd, stop_child, 1) -> {deprecated,{inets,stop,2},"R14B"};
-obsolete_1(httpd, stop_child, 2) -> {deprecated,{inets,stop,2},"R14B"};
-obsolete_1(httpd, restart, 0) -> {deprecated,{httpd,reload_config,2},"R14B"};
-obsolete_1(httpd, restart, 1) -> {deprecated,{httpd,reload_config,2},"R14B"};
-obsolete_1(httpd, restart, 2) -> {deprecated,{httpd,reload_config,2},"R14B"};
-obsolete_1(httpd, block, 0) -> {deprecated,{httpd,reload_config,2},"R14B"};
-obsolete_1(httpd, block, 1) -> {deprecated,{httpd,reload_config,2},"R14B"};
-obsolete_1(httpd, block, 2) -> {deprecated,{httpd,reload_config,2},"R14B"};
-obsolete_1(httpd, block, 3) -> {deprecated,{httpd,reload_config,2},"R14B"};
-obsolete_1(httpd, block, 4) -> {deprecated,{httpd,reload_config,2},"R14B"};
-obsolete_1(httpd, unblock, 0) -> {deprecated,{httpd,reload_config,2},"R14B"};
-obsolete_1(httpd, unblock, 1) -> {deprecated,{httpd,reload_config,2},"R14B"};
-obsolete_1(httpd, unblock, 2) -> {deprecated,{httpd,reload_config,2},"R14B"};
+obsolete_1(http, request, 1) -> {deprecated,{httpc,request,1},"R15B"};
+obsolete_1(http, request, 2) -> {deprecated,{httpc,request,2},"R15B"};
+obsolete_1(http, request, 4) -> {deprecated,{httpc,request,4},"R15B"};
+obsolete_1(http, request, 5) -> {deprecated,{httpc,request,5},"R15B"};
+obsolete_1(http, cancel_request, 1) -> {deprecated,{httpc,cancel_request,1},"R15B"};
+obsolete_1(http, cancel_request, 2) -> {deprecated,{httpc,cancel_request,2},"R15B"};
+obsolete_1(http, set_option, 2) -> {deprecated,{httpc,set_option,2},"R15B"};
+obsolete_1(http, set_option, 3) -> {deprecated,{httpc,set_option,3},"R15B"};
+obsolete_1(http, set_options, 1) -> {deprecated,{httpc,set_options,1},"R15B"};
+obsolete_1(http, set_options, 2) -> {deprecated,{httpc,set_options,2},"R15B"};
+obsolete_1(http, verify_cookies, 2) -> {deprecated,{httpc,verify_cookies,2},"R15B"};
+obsolete_1(http, verify_cookies, 3) -> {deprecated,{httpc,verify_cookies,3},"R15B"};
+obsolete_1(http, cookie_header, 1) -> {deprecated,{httpc,cookie_header,1},"R15B"};
+obsolete_1(http, cookie_header, 2) -> {deprecated,{httpc,cookie_header,2},"R15B"};
+obsolete_1(http, stream_next, 1) -> {deprecated,{httpc,stream_next,1},"R15B"};
+obsolete_1(http, default_profile, 0) -> {deprecated,{httpc,default_profile,0},"R15B"};
+
+obsolete_1(httpd, start, 0) -> {removed,{inets,start,[2,3]},"R14B"};
+obsolete_1(httpd, start, 1) -> {removed,{inets,start,[2,3]},"R14B"};
+obsolete_1(httpd, start_link, 0) -> {removed,{inets,start,[2,3]},"R14B"};
+obsolete_1(httpd, start_link, 1) -> {removed,{inets,start,[2,3]},"R14B"};
+obsolete_1(httpd, start_child, 0) -> {removed,{inets,start,[2,3]},"R14B"};
+obsolete_1(httpd, start_child, 1) -> {removed,{inets,start,[2,3]},"R14B"};
+obsolete_1(httpd, stop, 0) -> {removed,{inets,stop,2},"R14B"};
+obsolete_1(httpd, stop, 1) -> {removed,{inets,stop,2},"R14B"};
+obsolete_1(httpd, stop, 2) -> {removed,{inets,stop,2},"R14B"};
+obsolete_1(httpd, stop_child, 0) -> {removed,{inets,stop,2},"R14B"};
+obsolete_1(httpd, stop_child, 1) -> {removed,{inets,stop,2},"R14B"};
+obsolete_1(httpd, stop_child, 2) -> {removed,{inets,stop,2},"R14B"};
+obsolete_1(httpd, restart, 0) -> {removed,{httpd,reload_config,2},"R14B"};
+obsolete_1(httpd, restart, 1) -> {removed,{httpd,reload_config,2},"R14B"};
+obsolete_1(httpd, restart, 2) -> {removed,{httpd,reload_config,2},"R14B"};
+obsolete_1(httpd, block, 0) -> {removed,{httpd,reload_config,2},"R14B"};
+obsolete_1(httpd, block, 1) -> {removed,{httpd,reload_config,2},"R14B"};
+obsolete_1(httpd, block, 2) -> {removed,{httpd,reload_config,2},"R14B"};
+obsolete_1(httpd, block, 3) -> {removed,{httpd,reload_config,2},"R14B"};
+obsolete_1(httpd, block, 4) -> {removed,{httpd,reload_config,2},"R14B"};
+obsolete_1(httpd, unblock, 0) -> {removed,{httpd,reload_config,2},"R14B"};
+obsolete_1(httpd, unblock, 1) -> {removed,{httpd,reload_config,2},"R14B"};
+obsolete_1(httpd, unblock, 2) -> {removed,{httpd,reload_config,2},"R14B"};
obsolete_1(httpd_util, key1search, 2) -> {removed,{proplists,get_value,2},"R13B"};
obsolete_1(httpd_util, key1search, 3) -> {removed,{proplists,get_value,3},"R13B"};
-obsolete_1(ftp, open, 3) -> {deprecated,{inets,start,[2,3]},"R14B"};
-obsolete_1(ftp, force_active, 1) -> {deprecated,{inets,start,[2,3]},"R14B"};
+obsolete_1(ftp, open, 3) -> {removed,{inets,start,[2,3]},"R14B"};
+obsolete_1(ftp, force_active, 1) -> {removed,{inets,start,[2,3]},"R14B"};
%% Added in R12B-4.
obsolete_1(ssh_cm, connect, A) when 1 =< A, A =< 3 ->
- {deprecated,{ssh,connect,A},"R14B"};
+ {removed,{ssh,connect,A},"R14B"};
obsolete_1(ssh_cm, listen, A) when 2 =< A, A =< 4 ->
- {deprecated,{ssh,daemon,A},"R14B"};
+ {removed,{ssh,daemon,A},"R14B"};
obsolete_1(ssh_cm, stop_listener, 1) ->
- {deprecated,{ssh,stop_listener,[1,2]},"R14B"};
+ {removed,{ssh,stop_listener,[1,2]},"R14B"};
obsolete_1(ssh_cm, session_open, A) when A =:= 2; A =:= 4 ->
- {deprecated,{ssh_connection,session_channel,A},"R14B"};
+ {removed,{ssh_connection,session_channel,A},"R14B"};
obsolete_1(ssh_cm, direct_tcpip, A) when A =:= 6; A =:= 8 ->
- {deprecated,{ssh_connection,direct_tcpip,A}};
+ {removed,{ssh_connection,direct_tcpip,A}};
obsolete_1(ssh_cm, tcpip_forward, 3) ->
- {deprecated,{ssh_connection,tcpip_forward,3},"R14B"};
+ {removed,{ssh_connection,tcpip_forward,3},"R14B"};
obsolete_1(ssh_cm, cancel_tcpip_forward, 3) ->
- {deprecated,{ssh_connection,cancel_tcpip_forward,3},"R14B"};
+ {removed,{ssh_connection,cancel_tcpip_forward,3},"R14B"};
obsolete_1(ssh_cm, open_pty, A) when A =:= 3; A =:= 7; A =:= 9 ->
- {deprecated,{ssh_connection,open_pty,A},"R14"};
+ {removed,{ssh_connection,open_pty,A},"R14"};
obsolete_1(ssh_cm, setenv, 5) ->
- {deprecated,{ssh_connection,setenv,5},"R14B"};
+ {removed,{ssh_connection,setenv,5},"R14B"};
obsolete_1(ssh_cm, shell, 2) ->
- {deprecated,{ssh_connection,shell,2},"R14B"};
+ {removed,{ssh_connection,shell,2},"R14B"};
obsolete_1(ssh_cm, exec, 4) ->
- {deprecated,{ssh_connection,exec,4},"R14B"};
+ {removed,{ssh_connection,exec,4},"R14B"};
obsolete_1(ssh_cm, subsystem, 4) ->
- {deprecated,{ssh_connection,subsystem,4},"R14B"};
+ {removed,{ssh_connection,subsystem,4},"R14B"};
obsolete_1(ssh_cm, winch, A) when A =:= 4; A =:= 6 ->
- {deprecated,{ssh_connection,window_change,A},"R14B"};
+ {removed,{ssh_connection,window_change,A},"R14B"};
obsolete_1(ssh_cm, signal, 3) ->
- {deprecated,{ssh_connection,signal,3},"R14B"};
+ {removed,{ssh_connection,signal,3},"R14B"};
obsolete_1(ssh_cm, attach, A) when A =:= 2; A =:= 3 ->
- {deprecated,{ssh,attach,A}};
+ {removed,{ssh,attach,A}};
obsolete_1(ssh_cm, detach, 2) ->
- {deprecated,"no longer useful; will be removed in R14B"};
+ {removed,"no longer useful; will be removed in R14B"};
obsolete_1(ssh_cm, set_user_ack, 4) ->
- {deprecated,"no longer useful; will be removed in R14B"};
+ {removed,"no longer useful; will be removed in R14B"};
obsolete_1(ssh_cm, adjust_window, 3) ->
- {deprecated,{ssh_connection,adjust_window,3},"R14B"};
+ {removed,{ssh_connection,adjust_window,3},"R14B"};
obsolete_1(ssh_cm, close, 2) ->
- {deprecated,{ssh_connection,close,2},"R14B"};
+ {removed,{ssh_connection,close,2},"R14B"};
obsolete_1(ssh_cm, stop, 1) ->
- {deprecated,{ssh,close,1},"R14B"};
+ {removed,{ssh,close,1},"R14B"};
obsolete_1(ssh_cm, send_eof, 2) ->
- {deprecated,{ssh_connection,send_eof,2},"R14B"};
+ {removed,{ssh_connection,send_eof,2},"R14B"};
obsolete_1(ssh_cm, send, A) when A =:= 3; A =:= 4 ->
- {deprecated,{ssh_connection,send,A},"R14B"};
+ {removed,{ssh_connection,send,A},"R14B"};
obsolete_1(ssh_cm, send_ack, A) when 3 =< A, A =< 5 ->
- {deprecated,{ssh_connection,send,[3,4]},"R14B"};
+ {removed,{ssh_connection,send,[3,4]},"R14B"};
obsolete_1(ssh_ssh, connect, A) when 1 =< A, A =< 3 ->
- {deprecated,{ssh,shell,A},"R14B"};
+ {removed,{ssh,shell,A},"R14B"};
obsolete_1(ssh_sshd, listen, A) when 0 =< A, A =< 3 ->
- {deprecated,{ssh,daemon,[1,2,3]},"R14"};
+ {removed,{ssh,daemon,[1,2,3]},"R14"};
obsolete_1(ssh_sshd, stop, 1) ->
- {deprecated,{ssh,stop_listener,1}};
+ {removed,{ssh,stop_listener,1}};
%% Added in R13A.
obsolete_1(regexp, _, _) ->
{deprecated, "the regexp module is deprecated (will be removed in R15A); use the re module instead"};
obsolete_1(lists, flat_length, 1) ->
- {deprecated,{lists,flatlength,1},"R14"};
+ {removed,{lists,flatlength,1},"R14"};
obsolete_1(ssh_sftp, connect, A) when 1 =< A, A =< 3 ->
- {deprecated,{ssh_sftp,start_channel,A},"R14B"};
+ {removed,{ssh_sftp,start_channel,A},"R14B"};
obsolete_1(ssh_sftp, stop, 1) ->
- {deprecated,{ssh_sftp,stop_channel,1},"R14B"};
+ {removed,{ssh_sftp,stop_channel,1},"R14B"};
%% Added in R13B01.
obsolete_1(ssl_pkix, decode_cert_file, A) when A =:= 1; A =:= 2 ->
@@ -337,7 +355,7 @@ obsolete_1(ssl_pkix, decode_cert, A) when A =:= 1; A =:= 2 ->
%% Added in R13B04.
obsolete_1(erlang, concat_binary, 1) ->
- {deprecated,{erlang,list_to_binary,1},"R14B"};
+ {deprecated,{erlang,list_to_binary,1},"R15B"};
obsolete_1(_, _, _) ->
no.
diff --git a/lib/stdlib/test/epp_SUITE.erl b/lib/stdlib/test/epp_SUITE.erl
index 3342e8f1ff..4806b5d361 100644
--- a/lib/stdlib/test/epp_SUITE.erl
+++ b/lib/stdlib/test/epp_SUITE.erl
@@ -23,7 +23,8 @@
upcase_mac/1, upcase_mac_1/1, upcase_mac_2/1,
variable/1, variable_1/1, otp_4870/1, otp_4871/1, otp_5362/1,
pmod/1, not_circular/1, skip_header/1, otp_6277/1, otp_7702/1,
- otp_8130/1, overload_mac/1, otp_8388/1, otp_8470/1, otp_8503/1]).
+ otp_8130/1, overload_mac/1, otp_8388/1, otp_8470/1, otp_8503/1,
+ otp_8562/1]).
-export([epp_parse_erl_form/2]).
@@ -63,7 +64,7 @@ all(doc) ->
all(suite) ->
[rec_1, upcase_mac, predef_mac, variable, otp_4870, otp_4871, otp_5362,
pmod, not_circular, skip_header, otp_6277, otp_7702, otp_8130,
- overload_mac, otp_8388, otp_8470, otp_8503].
+ overload_mac, otp_8388, otp_8470, otp_8503, otp_8562].
rec_1(doc) ->
["Recursive macros hang or crash epp (OTP-1398)."];
@@ -616,9 +617,9 @@ otp_8130(Config) when is_list(Config) ->
"t() -> 14 = (#file_info{size = 14})#file_info.size, ok.\n">>,
ok},
- {otp_8130_7,
+ {otp_8130_7_new,
<<"-record(b, {b}).\n"
- "-define(A, {{a,#b.b.\n"
+ "-define(A, {{a,#b.b).\n"
"t() -> {{a,2}} = ?A}}, ok.">>,
ok},
@@ -750,7 +751,14 @@ otp_8130(Config) when is_list(Config) ->
{otp_8130_c24,
<<"\n-include(\"no such file.erl\").\n">>,
- {errors,[{{2,2},epp,{include,file,"no such file.erl"}}],[]}}
+ {errors,[{{2,2},epp,{include,file,"no such file.erl"}}],[]}},
+
+ {otp_8130_7,
+ <<"-record(b, {b}).\n"
+ "-define(A, {{a,#b.b.\n"
+ "t() -> {{a,2}} = ?A}}, ok.">>,
+ {errors,[{{2,20},epp,missing_parenthesis},
+ {{3,19},epp,{undefined,'A',none}}],[]}}
],
?line [] = compile(Config, Cs),
@@ -1047,13 +1055,13 @@ overload_mac(Config) when is_list(Config) ->
"-undef(A).\n"
"t1() -> ?A.\n",
"t2() -> ?A(1).">>,
- {errors,[{{4,9},epp,{undefined,'A', none}},
- {{5,9},epp,{undefined,'A', 1}}],[]}},
+ {errors,[{{4,10},epp,{undefined,'A', none}},
+ {{5,10},epp,{undefined,'A', 1}}],[]}},
%% cannot overload predefined macros
{overload_mac_c2,
<<"-define(MODULE(X), X).">>,
- {errors,[{{1,9},epp,{redefine_predef,'MODULE'}}],[]}},
+ {errors,[{{1,50},epp,{redefine_predef,'MODULE'}}],[]}},
%% cannot overload macros with same arity
{overload_mac_c3,
@@ -1120,27 +1128,27 @@ otp_8388(Config) when is_list(Config) ->
{macro_1,
<<"-define(m(A), A).\n"
"t() -> ?m(,).\n">>,
- {errors,[{{2,11},epp,{arg_error,m}}],[]}},
+ {errors,[{{2,9},epp,{arg_error,m}}],[]}},
{macro_2,
<<"-define(m(A), A).\n"
"t() -> ?m(a,).\n">>,
- {errors,[{{2,12},epp,{arg_error,m}}],[]}},
+ {errors,[{{2,9},epp,{arg_error,m}}],[]}},
{macro_3,
<<"-define(LINE, a).\n">>,
- {errors,[{{1,9},epp,{redefine_predef,'LINE'}}],[]}},
+ {errors,[{{1,50},epp,{redefine_predef,'LINE'}}],[]}},
{macro_4,
<<"-define(A(B, C, D), {B,C,D}).\n"
"t() -> ?A(a,,3).\n">>,
- {errors,[{{2,8},epp,{mismatch,'A'}}],[]}},
+ {errors,[{{2,9},epp,{mismatch,'A'}}],[]}},
{macro_5,
<<"-define(Q, {?F0(), ?F1(,,4)}).\n">>,
- {errors,[{{1,24},epp,{arg_error,'F1'}}],[]}},
+ {errors,[{{1,62},epp,{arg_error,'F1'}}],[]}},
{macro_6,
<<"-define(FOO(X), ?BAR(X)).\n"
"-define(BAR(X), ?FOO(X)).\n"
"-undef(FOO).\n"
"test() -> ?BAR(1).\n">>,
- {errors,[{{4,11},epp,{undefined,'FOO',1}}],[]}}
+ {errors,[{{4,12},epp,{undefined,'FOO',1}}],[]}}
],
?line [] = compile(Config, Ts),
ok.
@@ -1175,6 +1183,20 @@ otp_8503(Config) when is_list(Config) ->
?line receive _ -> fail() after 0 -> ok end,
ok.
+otp_8562(doc) ->
+ ["OTP-8503. Record with no fields is considered typed."];
+otp_8562(suite) ->
+ [];
+otp_8562(Config) when is_list(Config) ->
+ Cs = [{otp_8562,
+ <<"-define(P(), {a,b}.\n"
+ "-define(P3, .\n">>,
+ {errors,[{{1,60},epp,missing_parenthesis},
+ {{2,13},epp,missing_parenthesis}], []}}
+ ],
+ ?line [] = compile(Config, Cs),
+ ok.
+
check(Config, Tests) ->
eval_tests(Config, fun check_test/2, Tests).
diff --git a/lib/stdlib/test/erl_pp_SUITE.erl b/lib/stdlib/test/erl_pp_SUITE.erl
index 92a54108aa..66730b7b94 100644
--- a/lib/stdlib/test/erl_pp_SUITE.erl
+++ b/lib/stdlib/test/erl_pp_SUITE.erl
@@ -46,7 +46,7 @@
neg_indent/1,
tickets/1,
otp_6321/1, otp_6911/1, otp_6914/1, otp_8150/1, otp_8238/1,
- otp_8473/1, otp_8522/1]).
+ otp_8473/1, otp_8522/1, otp_8567/1]).
%% Internal export.
-export([ehook/6]).
@@ -150,15 +150,15 @@ recs(Config) when is_list(Config) ->
(A#r1.a)#r.a > 3 -> 3
end(#r1{a = #r{a = 4}}),
7 = fun(A) when record(A#r3.a, r1) -> 7 end(#r3{}),
- [#r1{a = 2,b = 1}] =
+ [#r1{a = 2,b = 1}] =
fun() ->
- [A || A <- [#r1{a = 1, b = 3},
- #r2{a = 2,b = 1},
+ [A || A <- [#r1{a = 1, b = 3},
+ #r2{a = 2,b = 1},
#r1{a = 2, b = 1}],
- A#r1.a >
+ A#r1.a >
A#r1.b]
end(),
- {[_],b} =
+ {[_],b} =
fun(L) ->
%% A is checked only once:
R1 = [{A,B} || A <- L, A#r1.a, B <- L, A#r1.b],
@@ -177,7 +177,7 @@ recs(Config) when is_list(Config) ->
end(#r1{a = 2}),
%% The test done twice (an effect of doing the test as soon as possible).
- 3 = fun(A) when A#r1.a > 3,
+ 3 = fun(A) when A#r1.a > 3,
record(A, r1) -> 3
end(#r1{a = 5}),
@@ -251,18 +251,18 @@ recs(Config) when is_list(Config) ->
ok
end(),
- both = fun(A) when A#r.a, A#r.b -> both
+ both = fun(A) when A#r.a, A#r.b -> both
end(#r{a = true, b = true}),
ok = fun() ->
- F = fun(A, B) when ((A#r1.a) orelse (B#r2.a))
+ F = fun(A, B) when ((A#r1.a) orelse (B#r2.a))
or (B#r2.b) or (A#r1.b) ->
true;
(_, _) -> false
end,
- true = F(#r1{a = false, b = false},
+ true = F(#r1{a = false, b = false},
#r2{a = false, b = true}),
- false = F(#r1{a = true, b = true},
+ false = F(#r1{a = true, b = true},
#r1{a = false, b = true}),
ok
end(),
@@ -273,7 +273,7 @@ recs(Config) when is_list(Config) ->
<<"-record(r1, {a, b = foo:bar(kljlfjsdlf, kjlksdjf)}).
-record(r2, {c = #r1{}, d = #r1{a = bar:foo(kljklsjdf)}}).
- t() ->
+ t() ->
R = #r2{},
R#r2{c = R, d = #r1{}}.">>}
],
@@ -304,10 +304,10 @@ try_catch(Config) when is_list(Config) ->
{try_6,
<<"t() -> try 1=2 catch throw:{badmatch,2} -> 3 end.">>},
{try_7,
- <<"t() -> try 1=2 of 3 -> 4
+ <<"t() -> try 1=2 of 3 -> 4
catch error:{badmatch,2} -> 5 end.">>},
{try_8,
- <<"t() -> try 1=2
+ <<"t() -> try 1=2
catch error:{badmatch,2} -> 3
after put(try_catch, 4) end.">>},
{try_9,
@@ -371,7 +371,7 @@ receive_after(Config) when is_list(Config) ->
{X,Y};
Z ->
Z
- after
+ after
foo:bar() ->
{3,4}
end.">>}
@@ -429,7 +429,7 @@ head_tail(Config) when is_list(Config) ->
{list_4,
<<"t() -> [a].">>},
{list_5,
- <<"t() ->
+ <<"t() ->
[foo:bar(lkjljlskdfj, klsdajflds, sdafkljsdlfkjdas, kjlsdadjl),
bar:foo(kljlkjsdf, lkjsdlfj, [kljsfj, sdfdsfsad])].">>}
],
@@ -462,7 +462,7 @@ cond1(Config) when is_list(Config) ->
" true ->\n"
" {x,y}\n"
"end" = CChars,
-% ?line ok = pp_expr(<<"cond
+% ?line ok = pp_expr(<<"cond
% {foo,bar} ->
% [a,b];
% true ->
@@ -544,7 +544,7 @@ old_mnemosyne_syntax(Config) when is_list(Config) ->
" X <- table(tab),\n"
" X.foo = bar\n"
" ]\n"
- "end" =
+ "end" =
lists:flatten(erl_pp:expr(Q)),
R = {rule,12,sales,2,
@@ -559,7 +559,7 @@ old_mnemosyne_syntax(Config) when is_list(Config) ->
{atom,14,sales}}]}]},
?line "sales(E, employee) :-\n"
" E <- table(employee),\n"
- " E.salary = sales.\n" =
+ " E.salary = sales.\n" =
lists:flatten(erl_pp:form(R)),
ok.
@@ -660,7 +660,7 @@ hook(Config) when is_list(Config) ->
?line "INVALID-FORM:{foo,bar}:" = lists:flatten(erl_pp:expr({foo,bar})),
- %% A list (as before R6), not a list of lists.
+ %% A list (as before R6), not a list of lists.
G = [{op,1,'>',{atom,1,a},{foo,{atom,1,b}}}], % not a proper guard
GChars = lists:flatten(erl_pp:guard(G, H)),
G2 = [{op,1,'>',{atom,1,a},
@@ -677,23 +677,23 @@ hook(Config) when is_list(Config) ->
%% Note: no leading spaces before "begin".
Block = {block,0,[{match,0,{var,0,'A'},{integer,0,3}},
{atom,0,true}]},
- ?line "begin\n A =" ++ _ =
+ ?line "begin\n A =" ++ _ =
lists:flatten(erl_pp:expr(Block, 17, none)),
%% Special...
- ?line true =
+ ?line true =
"{some,value}" =:= lists:flatten(erl_pp:expr({value,0,{some,value}})),
%% Silly...
?line true =
- "if true -> 0 end" =:=
+ "if true -> 0 end" =:=
flat_expr({'if',0,[{clause,0,[],[],[{atom,0,0}]}]}),
%% More compatibility: before R6
OldIf = {'if',0,[{clause,0,[],[{atom,0,true}],[{atom,0,b}]}]},
NewIf = {'if',0,[{clause,0,[],[[{atom,0,true}]],[{atom,0,b}]}]},
OldIfChars = lists:flatten(erl_pp:expr(OldIf)),
- NewIfChars = lists:flatten(erl_pp:expr(NewIf)),
+ NewIfChars = lists:flatten(erl_pp:expr(NewIf)),
?line true = OldIfChars =:= NewIfChars,
ok.
@@ -706,7 +706,7 @@ remove_indentation(S) ->
ehook(HE, I, P, H, foo, bar) ->
hook(HE, I, P, H).
-hook({foo,E}, I, P, H) ->
+hook({foo,E}, I, P, H) ->
erl_pp:expr({call,0,{atom,0,foo},[E]}, I, P, H).
neg_indent(suite) ->
@@ -722,14 +722,14 @@ neg_indent(Config) when is_list(Config) ->
end">>),
?line ok = pp_expr(
<<"fun() ->
- F = fun(A, B) when ((A#r1.a) orelse (B#r2.a))
+ F = fun(A, B) when ((A#r1.a) orelse (B#r2.a))
or (B#r2.b) or (A#r1.b) ->
true;
(_, _) -> false
end,
- true = F(#r1{a = false, b = false},
+ true = F(#r1{a = false, b = false},
#r2{a = false, b = true}),
- false = F(#r1{a = true, b = true},
+ false = F(#r1{a = true, b = true},
#r1{a = false, b = true}),
ok
end()">>),
@@ -764,7 +764,8 @@ neg_indent(Config) when is_list(Config) ->
ok.
tickets(suite) ->
- [otp_6321, otp_6911, otp_6914, otp_8150, otp_8238, otp_8473, otp_8522].
+ [otp_6321, otp_6911, otp_6914, otp_8150, otp_8238, otp_8473, otp_8522,
+ otp_8567].
otp_6321(doc) ->
"OTP_6321. Bug fix of exprs().";
@@ -813,7 +814,7 @@ otp_8150(doc) ->
"OTP_8150. Types.";
otp_8150(suite) -> [];
otp_8150(Config) when is_list(Config) ->
- ?line _ = [{N,ok} = {N,pp_forms(B)} ||
+ ?line _ = [{N,ok} = {N,pp_forms(B)} ||
{N,B} <- type_examples()
],
ok.
@@ -918,7 +919,7 @@ otp_8473(suite) -> [];
otp_8473(Config) when is_list(Config) ->
Ex = [{ex1,<<"-type 'fun'(A) :: A.\n"
"-type funkar() :: 'fun'(fun((integer()) -> atom())).\n">>}],
- ?line _ = [{N,ok} = {N,pp_forms(B)} ||
+ ?line _ = [{N,ok} = {N,pp_forms(B)} ||
{N,B} <- Ex],
ok.
@@ -949,12 +950,57 @@ count_atom(L, A) when is_list(L) ->
count_atom(_, _) ->
0.
+otp_8567(doc) ->
+ "OTP_8567. Avoid duplicated 'undefined' in record field types.";
+otp_8567(suite) -> [];
+otp_8567(Config) when is_list(Config) ->
+ FileName = filename('otp_8567.erl', Config),
+ C = <<"-module otp_8567.\n"
+ "-compile export_all.\n"
+ "-spec(a).\n"
+ "-record r, {a}.\n"
+ "-record s, {a :: integer()}.\n"
+ "-type t() :: {#r{},#s{}}.\n">>,
+ ?line ok = file:write_file(FileName, C),
+ ?line {error,[{_,[{3,erl_parse,["syntax error before: ","')'"]}]}],_} =
+ compile:file(FileName, [return]),
+
+ F = <<"-module(otp_8567).\n"
+ "-compile(export_all).\n"
+ "-record(t, {a}).\n"
+ "-record(u, {a :: integer()}).\n"
+ "-opaque ot() :: {#t{}, #u{}}.\n"
+ "-opaque(ot1() :: atom()).\n"
+ "-type a() :: integer().\n"
+ "-spec t() -> a().\n"
+ "t() ->\n"
+ " 3.\n"
+ "\n"
+ "-spec(t1/1 :: (ot()) -> ot1()).\n"
+ "t1(A) ->\n"
+ " A.\n"
+ "\n"
+ "-spec(t2 (ot()) -> ot1()).\n"
+ "t2(A) ->\n"
+ " A.\n"
+ "\n"
+ "-spec(otp_8567:t3/1 :: (ot()) -> ot1()).\n"
+ "t3(A) ->\n"
+ " A.\n"
+ "\n"
+ "-spec(otp_8567:t4 (ot()) -> ot1()).\n"
+ "t4(A) ->\n"
+ " A.\n">>,
+ ?line ok = pp_forms(F),
+
+ ok.
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
compile(Config, Tests) ->
F = fun({N,P}, BadL) ->
case catch compile_file(Config, P) of
- ok ->
+ ok ->
case pp_forms(P) of
ok ->
BadL;
@@ -962,8 +1008,8 @@ compile(Config, Tests) ->
?t:format("~nTest ~p failed.~n", [N]),
fail()
end;
- Bad ->
- ?t:format("~nTest ~p failed. got~n ~p~n",
+ Bad ->
+ ?t:format("~nTest ~p failed. got~n ~p~n",
[N, Bad]),
fail()
end
@@ -993,7 +1039,7 @@ compile_file(Config, Test0) ->
Error ->
Error
end.
-
+
compile_file(Config, Test0, Opts0) ->
FileName = filename('erl_pp_test.erl', Config),
Test = list_to_binary(["-module(erl_pp_test). "
@@ -1002,7 +1048,7 @@ compile_file(Config, Test0, Opts0) ->
Opts = [export_all,return,nowarn_unused_record,{outdir,?privdir} | Opts0],
ok = file:write_file(FileName, Test),
case compile:file(FileName, Opts) of
- {ok, _M, _Ws} ->
+ {ok, _M, _Ws} ->
{ok, filename:rootname(FileName)};
Error -> Error
end.
@@ -1029,7 +1075,7 @@ pp_forms(Bin, Hook) ->
end.
parse_and_pp_forms(String, Hook) ->
- lists:append(lists:map(fun(AF) -> erl_pp:form(AF, Hook)
+ lists:append(lists:map(fun(AF) -> erl_pp:form(AF, Hook)
end, parse_forms(String))).
parse_forms(Chars) ->
@@ -1037,13 +1083,13 @@ parse_forms(Chars) ->
parse_forms2(String, [], 1, []).
parse_forms2([], _Cont, _Line, Forms) ->
- lists:reverse(Forms);
+ lists:reverse(Forms);
parse_forms2(String, Cont0, Line, Forms) ->
case erl_scan:tokens(Cont0, String, Line) of
{done, {ok, Tokens, EndLine}, Chars} ->
{ok, Form} = erl_parse:parse_form(Tokens),
parse_forms2(Chars, [], EndLine, [Form | Forms]);
- {more, Cont} when element(3, Cont) =:= [] ->
+ {more, Cont} when element(3, Cont) =:= [] ->
%% extra spaces after forms...
parse_forms2([], Cont, Line, Forms);
{more, Cont} ->
@@ -1061,10 +1107,10 @@ pp_expr(Bin, Hook) ->
PP2 = (catch parse_and_pp_expr(PPneg, 0, Hook)),
if
PP1 =:= PP2 -> % same line numbers
- case
+ case
(test_max_line(PP1) =:= ok) and (test_new_line(PPneg) =:= ok)
of
- true ->
+ true ->
ok;
false ->
not_ok
@@ -1097,7 +1143,7 @@ test_max_line(String) ->
end.
max_line(String) ->
- lists:max([0 | [length(Sub) ||
+ lists:max([0 | [length(Sub) ||
Sub <- string:tokens(String, "\n"),
string:substr(Sub, 1, 5) =/= "-file"]]).
diff --git a/lib/stdlib/test/erl_scan_SUITE.erl b/lib/stdlib/test/erl_scan_SUITE.erl
index 32a06d15c7..afeb67eeb1 100644
--- a/lib/stdlib/test/erl_scan_SUITE.erl
+++ b/lib/stdlib/test/erl_scan_SUITE.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1998-2010. 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_scan_SUITE).
@@ -34,7 +34,7 @@
-define(line, put(line, ?LINE), ).
-define(config(A,B),config(A,B)).
-define(t, test_server).
-%% config(priv_dir, _) ->
+%% config(priv_dir, _) ->
%% ".";
%% config(data_dir, _) ->
%% ".".
@@ -45,7 +45,7 @@
init_per_testcase(_Case, Config) when is_list(Config) ->
?line Dog=test_server:timetrap(test_server:seconds(1200)),
[{watchdog, Dog}|Config].
-
+
fin_per_testcase(_Case, Config) ->
Dog=?config(watchdog, Config),
test_server:timetrap_cancel(Dog),
@@ -97,7 +97,7 @@ assert_type(N, integer) when is_integer(N) ->
ok;
assert_type(N, atom) when is_atom(N) ->
ok.
-
+
check(String) ->
Error = erl_scan:string(String),
check_error(Error, erl_scan).
@@ -146,7 +146,7 @@ iso88591(Config) when is_list(Config) ->
ok -> ok %Aok
end.
-otp_7810(doc) ->
+otp_7810(doc) ->
["OTP-7810. White spaces, comments, and more.."];
otp_7810(suite) ->
[];
@@ -185,7 +185,7 @@ reserved_words() ->
'andalso', 'orelse', 'end', 'fun', 'if', 'let', 'of',
'query', 'receive', 'when', 'bnot', 'not', 'div',
'rem', 'band', 'and', 'bor', 'bxor', 'bsl', 'bsr',
- 'or', 'xor', 'spec'] , % 'spec' shouldn't be there...
+ 'or', 'xor'] ,
[begin
?line {RW, true} = {RW, erl_scan:reserved_word(RW)},
S = atom_to_list(RW),
@@ -203,7 +203,7 @@ atoms() ->
?line test_string("a@2", [{atom,1,a@2}]),
?line test_string([39,65,200,39], [{atom,1,'A�'}]),
?line test_string("�rlig �sten", [{atom,1,�rlig},{atom,1,�sten}]),
- ?line {ok,[{atom,_,'$a'}],{1,6}} =
+ ?line {ok,[{atom,_,'$a'}],{1,6}} =
erl_scan:string("'$\\a'", {1,1}),
?line test("'$\\a'"),
ok.
@@ -221,8 +221,8 @@ punctuations() ->
Three = ["/=:=", "<=:=", "==:=", ">=:="], % three tokens...
No = Three ++ L,
SL0 = [{S1++S2,{-length(S1),S1,S2}} ||
- S1 <- L,
- S2 <- L,
+ S1 <- L,
+ S2 <- L,
not lists:member(S1++S2, No)],
SL = family_list(SL0),
%% Two tokens. When there are several answers, the one with
@@ -250,15 +250,15 @@ comments() ->
?line test("a %%\n b"),
?line {ok,[],1} = erl_scan:string("%"),
?line test("a %%\n b"),
- ?line {ok,[{atom,_,a},{atom,_,b}],{2,3}} =
+ ?line {ok,[{atom,_,a},{atom,_,b}],{2,3}} =
erl_scan:string("a %%\n b",{1,1}),
- ?line {ok,[{atom,_,a},{comment,_,"%%"},{atom,_,b}],{2,3}} =
+ ?line {ok,[{atom,_,a},{comment,_,"%%"},{atom,_,b}],{2,3}} =
erl_scan:string("a %%\n b",{1,1}, [return_comments]),
?line {ok,[{atom,_,a},
{white_space,_," "},
{white_space,_,"\n "},
{atom,_,b}],
- {2,3}} =
+ {2,3}} =
erl_scan:string("a %%\n b",{1,1},[return_white_spaces]),
?line {ok,[{atom,_,a},
{white_space,_," "},
@@ -275,14 +275,14 @@ errors() ->
?line {error,{1,erl_scan,char},1} = erl_scan:string("$"),
?line test_string([34,65,200,34], [{string,1,"A�"}]),
?line test_string("\\", [{'\\',1}]),
- ?line {'EXIT',_} =
+ ?line {'EXIT',_} =
(catch {foo, erl_scan:string('$\\a', {1,1})}), % type error
- ?line {'EXIT',_} =
+ ?line {'EXIT',_} =
(catch {foo, erl_scan:tokens([], '$\\a', {1,1})}), % type error
?line "{a,tuple}" = erl_scan:format_error({a,tuple}),
ok.
-
+
integers() ->
[begin
I = list_to_integer(S),
@@ -299,14 +299,14 @@ base_integers() ->
?line test_string(BS++"#"++S, Ts)
end || {BS,S} <- [{"2","11"}, {"5","23234"}, {"12","05a"},
{"16","abcdef"}, {"16","ABCDEF"}] ],
-
+
?line {error,{1,erl_scan,{base,1}},1} = erl_scan:string("1#000"),
-
+
?line test_string("12#bc", [{integer,1,11},{atom,1,c}]),
-
+
[begin
Str = BS ++ "#" ++ S,
- ?line {error,{1,erl_scan,{illegal,integer}},1} =
+ ?line {error,{1,erl_scan,{illegal,integer}},1} =
erl_scan:string(Str)
end || {BS,S} <- [{"3","3"},{"15","f"}, {"12","c"}] ],
@@ -323,8 +323,8 @@ floats() ->
end || FS <- ["1.0","001.17","3.31200","1.0e0","1.0E17",
"34.21E-18", "17.0E+14"]],
?line test_string("1.e2", [{integer,1,1},{'.',1},{atom,1,e2}]),
-
- ?line {error,{1,erl_scan,{illegal,float}},1} =
+
+ ?line {error,{1,erl_scan,{illegal,float}},1} =
erl_scan:string("1.0e400"),
[begin
?line {error,{1,erl_scan,{illegal,float}},1} = erl_scan:string(S)
@@ -345,16 +345,16 @@ dots() ->
{".a", {ok,[{'.',1},{atom,1,a}],1}}
],
?line [R = erl_scan:string(S) || {S, R} <- Dot],
-
+
?line {ok,[{dot,_}=T1],{1,2}} = erl_scan:string(".", {1,1}, text),
- ?line [{column,1},{length,1},{line,1},{text,"."}] =
+ ?line [{column,1},{length,1},{line,1},{text,"."}] =
erl_scan:token_info(T1, [column, length, line, text]),
?line {ok,[{dot,_}=T2],{1,3}} = erl_scan:string(".%", {1,1}, text),
- ?line [{column,1},{length,1},{line,1},{text,"."}] =
+ ?line [{column,1},{length,1},{line,1},{text,"."}] =
erl_scan:token_info(T2, [column, length, line, text]),
?line {ok,[{dot,_}=T3],{1,6}} =
erl_scan:string(".% �h", {1,1}, text),
- ?line [{column,1},{length,1},{line,1},{text,"."}] =
+ ?line [{column,1},{length,1},{line,1},{text,"."}] =
erl_scan:token_info(T3, [column, length, line, text]),
?line {error,{{1,2},erl_scan,char},{1,3}} =
erl_scan:string(".$", {1,1}),
@@ -376,10 +376,10 @@ dots() ->
?line {done,{ok,[{comment,_,"%. "},
{white_space,_,"\n"},
{dot,_}],
- {2,3}}, ""} =
+ {2,3}}, ""} =
erl_scan:tokens(C, "\n. ", {1,1}, return), % any loc, any options
- ?line [test_string(S, R) ||
+ ?line [test_string(S, R) ||
{S, R} <- [{".$\n", [{'.',1},{char,1,$\n}]},
{"$\\\n", [{char,1,$\n}]},
{"'\\\n'", [{atom,1,'\n'}]},
@@ -392,7 +392,7 @@ chars() ->
Ts = [{char,1,C}],
?line test_string(L, Ts)
end || C <- lists:seq(0, 255)],
-
+
%% Leading zeroes...
[begin
L = lists:flatten(io_lib:format("$\\~3.8.0b", [C])),
@@ -406,13 +406,13 @@ chars() ->
Ts = [{char,1,C band 2#11111}],
?line test_string(L, Ts)
end || C <- lists:seq(0, 255)],
-
+
[begin
L = "$\\" ++ [C],
Ts = [{char,1,V}],
?line test_string(L, Ts)
- end || {C,V} <- [{$n,$\n}, {$r,$\r}, {$t,$\t}, {$v,$\v},
- {$b,$\b}, {$f,$\f}, {$e,$\e}, {$s,$\s},
+ end || {C,V} <- [{$n,$\n}, {$r,$\r}, {$t,$\t}, {$v,$\v},
+ {$b,$\b}, {$f,$\f}, {$e,$\e}, {$s,$\s},
{$d,$\d}]],
EC = [$\n,$\r,$\t,$\v,$\b,$\f,$\e,$\s,$\d],
@@ -445,7 +445,7 @@ chars() ->
end || C <- lists:seq(0, 255) -- (No ++ [$\\])],
?line test_string("$\n", [{char,1,$\n}]),
- ?line {error,{{1,1},erl_scan,char},{1,4}} =
+ ?line {error,{{1,1},erl_scan,char},{1,4}} =
erl_scan:string("$\\^",{1,1}),
?line test_string("$\\\n", [{char,1,$\n}]),
%% Robert's scanner returns line 1:
@@ -453,7 +453,7 @@ chars() ->
?line test_string("$\n\n", [{char,1,$\n}]),
?line test("$\n\n"),
ok.
-
+
variables() ->
?line test_string(" \237_Aou�eiy��", [{var,1,'_Aou�eiy��'}]),
@@ -469,8 +469,8 @@ eof() ->
?line {done,{eof,2},eof} = erl_scan:tokens(C1, eof, 1),
{more, C2} = erl_scan:tokens([], "abra", 1),
%% An error before R13A.
- %% ?line {done,Err={error,{1,erl_scan,scan},1},eof} =
- ?line {done,{ok,[{atom,1,abra}],1},eof} =
+ %% ?line {done,Err={error,{1,erl_scan,scan},1},eof} =
+ ?line {done,{ok,[{atom,1,abra}],1},eof} =
erl_scan:tokens(C2, eof, 1),
%% With column.
@@ -478,7 +478,7 @@ eof() ->
?line {done,{eof,{2,1}},eof} = erl_scan:tokens(C3, eof, 1),
{more, C4} = erl_scan:tokens([], "abra", {1,1}),
%% An error before R13A.
- %% ?line {done,{error,{{1,1},erl_scan,scan},{1,5}},eof} =
+ %% ?line {done,{error,{{1,1},erl_scan,scan},{1,5}},eof} =
?line {done,{ok,[{atom,_,abra}],{1,5}},eof} =
erl_scan:tokens(C4, eof, 1),
@@ -486,7 +486,7 @@ eof() ->
%% the R12B scanner returns eof as LeftoverChars: (eof is correct)
?line {more, C5} = erl_scan:tokens([], "a", 1),
%% An error before R13A.
- %% ?line {done,{error,{1,erl_scan,scan},1},eof} =
+ %% ?line {done,{error,{1,erl_scan,scan},1},eof} =
?line {done,{ok,[{atom,1,a}],1},eof} =
erl_scan:tokens(C5,eof,1),
@@ -528,7 +528,7 @@ illegal() ->
erl_scan:tokens([], "foo "++Atom++". ", {1,1}),
?line {error,{{1,1},erl_scan,{illegal,atom}},{1,1003}} =
erl_scan:string(QAtom, {1,1}),
- ?line {done,{error,{{1,5},erl_scan,{illegal,atom}},{1,1007}},". "} =
+ ?line {done,{error,{{1,5},erl_scan,{illegal,atom}},{1,1007}},". "} =
erl_scan:tokens([], "foo "++QAtom++". ", {1,1}),
?line {error,{{1,1},erl_scan,{illegal,var}},{1,1001}} =
erl_scan:string(Var, {1,1}),
@@ -553,7 +553,7 @@ crashes() ->
?line {'EXIT',_} = (catch {foo, erl_scan:string("\"\\v"++[-1,$"])}), %$"
?line {'EXIT',_} = (catch {foo, erl_scan:string([$",-1,$"])}),
?line {'EXIT',_} = (catch {foo, erl_scan:string("% foo"++[-1])}),
- ?line {'EXIT',_} =
+ ?line {'EXIT',_} =
(catch {foo, erl_scan:string("% foo"++[-1],{1,1})}),
?line {'EXIT',_} = (catch {foo, erl_scan:string([a])}), % type error
@@ -564,7 +564,7 @@ crashes() ->
?line {'EXIT',_} = (catch {foo, erl_scan:string("\"\\v"++[a,$"])}), %$"
?line {'EXIT',_} = (catch {foo, erl_scan:string([$",a,$"])}),
?line {'EXIT',_} = (catch {foo, erl_scan:string("% foo"++[a])}),
- ?line {'EXIT',_} =
+ ?line {'EXIT',_} =
(catch {foo, erl_scan:string("% foo"++[a],{1,1})}),
?line {'EXIT',_} = (catch {foo, erl_scan:string([3.0])}), % type error
@@ -573,26 +573,26 @@ crashes() ->
options() ->
%% line and column are not options, but tested here
- ?line {ok,[{atom,1,foo},{white_space,1," "},{comment,1,"% bar"}], 1} =
+ ?line {ok,[{atom,1,foo},{white_space,1," "},{comment,1,"% bar"}], 1} =
erl_scan:string("foo % bar", 1, return),
- ?line {ok,[{atom,1,foo},{white_space,1," "}],1} =
+ ?line {ok,[{atom,1,foo},{white_space,1," "}],1} =
erl_scan:string("foo % bar", 1, return_white_spaces),
- ?line {ok,[{atom,1,foo},{comment,1,"% bar"}],1} =
+ ?line {ok,[{atom,1,foo},{comment,1,"% bar"}],1} =
erl_scan:string("foo % bar", 1, return_comments),
- ?line {ok,[{atom,17,foo}],17} =
+ ?line {ok,[{atom,17,foo}],17} =
erl_scan:string("foo % bar", 17),
- ?line {'EXIT',{function_clause,_}} =
- (catch {foo,
+ ?line {'EXIT',{function_clause,_}} =
+ (catch {foo,
erl_scan:string("foo % bar", {a,1}, [])}), % type error
- ?line {ok,[{atom,_,foo}],{17,18}} =
+ ?line {ok,[{atom,_,foo}],{17,18}} =
erl_scan:string("foo % bar", {17,9}, []),
- ?line {'EXIT',{function_clause,_}} =
+ ?line {'EXIT',{function_clause,_}} =
(catch {foo,
erl_scan:string("foo % bar", {1,0}, [])}), % type error
- ?line {ok,[{foo,1}],1} =
+ ?line {ok,[{foo,1}],1} =
erl_scan:string("foo % bar",1, [{reserved_word_fun,
fun(W) -> W =:= foo end}]),
- ?line {'EXIT',{badarg,_}} =
+ ?line {'EXIT',{badarg,_}} =
(catch {foo,
erl_scan:string("foo % bar",1, % type error
[{reserved_word_fun,
@@ -618,14 +618,14 @@ more_options() ->
token_info() ->
?line {ok,[T1],_} = erl_scan:string("foo", {1,18}, [text]),
- {'EXIT',{badarg,_}} =
+ {'EXIT',{badarg,_}} =
(catch {foo, erl_scan:token_info(T1, foo)}), % type error
?line {line,1} = erl_scan:token_info(T1, line),
?line {column,18} = erl_scan:token_info(T1, column),
?line {length,3} = erl_scan:token_info(T1, length),
?line {text,"foo"} = erl_scan:token_info(T1, text),
?line [{category,atom},{column,18},{length,3},{line,1},
- {symbol,foo},{text,"foo"}] =
+ {symbol,foo},{text,"foo"}] =
erl_scan:token_info(T1),
?line [{length,3},{column,18}] =
erl_scan:token_info(T1, [length, column]),
@@ -648,9 +648,9 @@ token_info() ->
?line {category,'='} = erl_scan:token_info(T3, category),
?line [{symbol,'='}] = erl_scan:token_info(T3, [symbol]),
ok.
-
+
attributes_info() ->
- ?line {'EXIT',_} =
+ ?line {'EXIT',_} =
(catch {foo,erl_scan:attributes_info(foo)}), % type error
?line [{line,18}] = erl_scan:attributes_info(18),
?line {location,19} = erl_scan:attributes_info(19, location),
@@ -717,9 +717,9 @@ set_attribute() ->
?line [{line,{17,11}},{text,"foo"}] =
erl_scan:attributes_info(A7, [line,column,text]),
- ?line {'EXIT',_} =
+ ?line {'EXIT',_} =
(catch {foo, erl_scan:set_attribute(line, [], F2)}), % type error
- ?line {'EXIT',{badarg,_}} =
+ ?line {'EXIT',{badarg,_}} =
(catch {foo, erl_scan:set_attribute(column, [], F2)}), % type error
ok.
@@ -790,14 +790,14 @@ unicode() ->
?line {ok,[{char,1,83},{integer,1,45}],1} =
erl_scan:string("$\\12345"), % not unicode
- ?line {error,{1,erl_scan,{illegal,character}},1} =
+ ?line {error,{1,erl_scan,{illegal,character}},1} =
erl_scan:string([1089]),
- ?line {error,{{1,1},erl_scan,{illegal,character}},{1,2}} =
+ ?line {error,{{1,1},erl_scan,{illegal,character}},{1,2}} =
erl_scan:string([1089], {1,1}),
?line {error,{1,erl_scan,{illegal,character}},1} =
- %% ?line {error,{1,erl_scan,{illegal,atom}},1} =
+ %% ?line {error,{1,erl_scan,{illegal,atom}},1} =
erl_scan:string("'a"++[1089]++"b'"),
- ?line {error,{{1,3},erl_scan,{illegal,character}},{1,4}} =
+ ?line {error,{{1,3},erl_scan,{illegal,character}},{1,4}} =
erl_scan:string("'a"++[1089]++"b'", {1,1}),
?line test("\"a"++[1089]++"b\""),
?line {ok,[{char,1,1}],1} = erl_scan:string([$$,$\\,$^,1089]),
@@ -822,7 +822,7 @@ unicode() ->
?line {ok,[{integer,1,16#aaa}],1} = erl_scan:string(Qs),
?line {ok,[Q2],{1,9}} = erl_scan:string("$\\x{aaa}", {1,1}, text),
?line [{category,integer},{column,1},{length,8},
- {line,1},{symbol,16#aaa},{text,Qs}] =
+ {line,1},{symbol,16#aaa},{text,Qs}] =
erl_scan:token_info(Q2),
U1 = "\"\\x{aaa}\"",
@@ -830,11 +830,11 @@ unicode() ->
?line [{category,'['},{column,1},{length,1},{line,1},
{symbol,'['},{text,"\""}] = erl_scan:token_info(T1, Tags),
?line [{category,integer},{column,2},{length,7},
- {line,1},{symbol,16#aaa},{text,"\\x{aaa}"}] =
+ {line,1},{symbol,16#aaa},{text,"\\x{aaa}"}] =
erl_scan:token_info(T2, Tags),
?line [{category,']'},{column,9},{length,1},{line,1},
{symbol,']'},{text,"\""}] = erl_scan:token_info(T3, Tags),
- ?line {ok,[{'[',1},{integer,1,16#aaa},{']',1}],1} =
+ ?line {ok,[{'[',1},{integer,1,16#aaa},{']',1}],1} =
erl_scan:string(U1, 1),
U2 = "\"\\x41\\x{fff}\\x42\"",
@@ -844,7 +844,7 @@ unicode() ->
U3 = "\"a\n\\x{fff}\n\"",
?line {ok,[{'[',1},{char,1,$a},{',',1},{char,1,$\n},
{',',2},{integer,2,16#fff},{',',2},{char,2,$\n},
- {']',3}],3} =
+ {']',3}],3} =
erl_scan:string(U3, 1),
U4 = "\"\\^\n\\x{aaa}\\^\n\"",
@@ -867,10 +867,10 @@ unicode() ->
{char,_,$d},{']',_}],{1,8}} = erl_scan:string(Str1, {1,1}),
?line test(Str1),
Comment = "%% "++[1089],
- ?line {ok,[{comment,1,[$%,$%,$\s,1089]}],1} =
+ ?line {ok,[{comment,1,[$%,$%,$\s,1089]}],1} =
erl_scan:string(Comment, 1, return),
- ?line {ok,[{comment,_,[$%,$%,$\s,1089]}],{1,5}} =
- erl_scan:string(Comment, {1,1}, return),
+ ?line {ok,[{comment,_,[$%,$%,$\s,1089]}],{1,5}} =
+ erl_scan:string(Comment, {1,1}, return),
ok.
more_chars() ->
@@ -885,7 +885,7 @@ more_chars() ->
erl_scan:tokens(C1, eof, 1),
?line {ok,[{char,1,123},{atom,1,a},{'}',1}],1} =
erl_scan:string("$\\{a}"),
-
+
?line {error,{{1,1},erl_scan,char},{1,4}} =
erl_scan:string("$\\x", {1,1}),
?line {error,{{1,1},erl_scan,char},{1,5}} =
@@ -893,12 +893,12 @@ more_chars() ->
?line {more, C3} = erl_scan:tokens([], "$\\x", {1,1}),
?line {done,{error,{{1,1},erl_scan,char},{1,4}},eof} =
erl_scan:tokens(C3, eof, 1),
- ?line {error,{{1,1},erl_scan,char},{1,5}} =
+ ?line {error,{{1,1},erl_scan,char},{1,5}} =
erl_scan:string("$\\x{",{1,1}),
?line {more, C2} = erl_scan:tokens([], "$\\x{", {1,1}),
- ?line {done,{error,{{1,1},erl_scan,char},{1,5}},eof} =
+ ?line {done,{error,{{1,1},erl_scan,char},{1,5}},eof} =
erl_scan:tokens(C2, eof, 1),
- ?line {error,{1,erl_scan,{illegal,character}},1} =
+ ?line {error,{1,erl_scan,{illegal,character}},1} =
erl_scan:string("$\\x{g}"),
?line {error,{{1,1},erl_scan,{illegal,character}},{1,5}} =
erl_scan:string("$\\x{g}", {1,1}),
@@ -924,12 +924,12 @@ more_chars() ->
?line test("$\\x{10FFFF}"),
?line test("$\\x{10ffff}"),
?line test("\"$\n \\{1}\""),
- ?line {error,{1,erl_scan,{illegal,character}},1} =
+ ?line {error,{1,erl_scan,{illegal,character}},1} =
erl_scan:string("$\\x{110000}"),
- ?line {error,{{1,1},erl_scan,{illegal,character}},{1,12}} =
+ ?line {error,{{1,1},erl_scan,{illegal,character}},{1,12}} =
erl_scan:string("$\\x{110000}", {1,1}),
- ?line {error,{{1,1},erl_scan,{illegal,character}},{1,4}} =
+ ?line {error,{{1,1},erl_scan,{illegal,character}},{1,4}} =
erl_scan:string("$\\xfg", {1,1}),
?line test("$\\xffg"),
@@ -953,11 +953,11 @@ test(String) ->
{Wtokens, Wend},
{Ctokens, Cend},
{CWtokens, CWend},
- {CWtokens2, _}] =
+ {CWtokens2, _}] =
[scan_string_with_column(String, X) ||
- X <- [[],
- [return_white_spaces],
- [return_comments],
+ X <- [[],
+ [return_white_spaces],
+ [return_comments],
[return],
[return]]], % for white space compaction test
@@ -969,7 +969,7 @@ test(String) ->
{none,Tokens} = {none, filter_tokens(CWtokens, [white_space,comment])},
{comments,Ctokens} =
{comments,filter_tokens(CWtokens, [white_space])},
- {white_spaces,Wtokens} =
+ {white_spaces,Wtokens} =
{white_spaces,filter_tokens(CWtokens, [comment])},
%% Use token attributes to extract parts from the original string,
@@ -991,9 +991,9 @@ test(String) ->
%% Line attribute only:
[Simple,Wsimple,Csimple,WCsimple] = Simples =
[element(2, erl_scan:string(String, 1, Opts)) ||
- Opts <- [[],
- [return_white_spaces],
- [return_comments],
+ Opts <- [[],
+ [return_white_spaces],
+ [return_comments],
[return]]],
{consistent,true} = {consistent,consistent_attributes(Simples)},
{simple_wc,WCsimple} = {simple_wc,simplify(CWtokens)},
@@ -1004,19 +1004,19 @@ test(String) ->
%% Line attribute only, with text:
[SimpleTxt,WsimpleTxt,CsimpleTxt,WCsimpleTxt] = SimplesTxt =
[element(2, erl_scan:string(String, 1, [text|Opts])) ||
- Opts <- [[],
- [return_white_spaces],
- [return_comments],
+ Opts <- [[],
+ [return_white_spaces],
+ [return_comments],
[return]]],
TextTxt = get_text(WCsimpleTxt),
{text_txt,TextTxt,String} = {text_txt,String,TextTxt},
- {consistent_txt,true} =
+ {consistent_txt,true} =
{consistent_txt,consistent_attributes(SimplesTxt)},
- {simple_txt,SimpleTxt} =
+ {simple_txt,SimpleTxt} =
{simple_txt,filter_tokens(WCsimpleTxt, [white_space,comment])},
- {simple_c_txt,CsimpleTxt} =
+ {simple_c_txt,CsimpleTxt} =
{simple_c_txt,filter_tokens(WCsimpleTxt, [white_space])},
- {simple_w_txt,WsimpleTxt} =
+ {simple_w_txt,WsimpleTxt} =
{simple_w_txt,filter_tokens(WCsimpleTxt, [comment])},
ok.
@@ -1024,18 +1024,18 @@ test(String) ->
test_white_space_compaction(Tokens, Tokens2) when Tokens =:= Tokens2 ->
[WS, WS2] = [select_tokens(Ts, [white_space]) || Ts <- [Tokens, Tokens2]],
test_wsc(WS, WS2).
-
+
test_wsc([], []) ->
ok;
test_wsc([Token|Tokens], [Token2|Tokens2]) ->
- [Text, Text2] = [Text ||
- {text, Text} <-
+ [Text, Text2] = [Text ||
+ {text, Text} <-
[erl_scan:token_info(T, text) ||
T <- [Token, Token2]]],
Sz = erts_debug:size(Text),
Sz2 = erts_debug:size({Text, Text2}),
IsCompacted = Sz2 < 2*Sz+erts_debug:size({a,a}),
- ToBeCompacted = is_compacted(Text),
+ ToBeCompacted = is_compacted(Text),
if
IsCompacted =:= ToBeCompacted ->
test_wsc(Tokens, Tokens2);
@@ -1050,14 +1050,14 @@ is_compacted("\n\r") ->
is_compacted("\n\f") ->
true;
is_compacted([$\n|String]) ->
- all_spaces(String)
+ all_spaces(String)
orelse
all_tabs(String);
is_compacted(String) ->
all_spaces(String)
orelse
all_tabs(String).
-
+
all_spaces(L) ->
all_same(L, $\s).
@@ -1078,7 +1078,7 @@ newlines_first([Token|Tokens]) ->
_ ->
Nnls =:= 0
end,
- if
+ if
OK -> newlines_first(Tokens);
true -> OK
end.
@@ -1097,7 +1097,7 @@ simplify([]) ->
get_text(Tokens) ->
lists:flatten(
- [T ||
+ [T ||
Token <- Tokens,
({text,T} = erl_scan:token_info(Token, text)) =/= []]).
@@ -1108,7 +1108,7 @@ test_decorated_tokens(String, Tokens) ->
token_attrs(Tokens) ->
[{L,C,Len,T} ||
Token <- Tokens,
- ([{line,L},{column,C},{length,Len},{text,T}] =
+ ([{line,L},{column,C},{length,Len},{text,T}] =
erl_scan:token_info(Token, [line,column,length,text])) =/= []].
test_strings([], _S, Line, Column) ->
@@ -1150,7 +1150,7 @@ scan_string_with_column(String, Options0) ->
{ok, Ts1, End1} = erl_scan:string(String, StartLoc, Options),
TString = String ++ ". ",
{ok,Ts2,End2} = scan_tokens(TString, Options, [], StartLoc),
- {ok, Ts3, End3} =
+ {ok, Ts3, End3} =
scan_tokens_1({more, []}, TString, Options, [], StartLoc),
{end_2,End2,End3} = {end_2,End3,End2},
{EndLine1,EndColumn1} = End1,
@@ -1190,8 +1190,8 @@ consistent_attributes([Ts | TsL]) ->
L = [T || T <- Ts, is_integer(element(2, T))],
case L of
[] ->
- TagsL = [[Tag || {Tag,_} <-
- erl_scan:attributes_info(element(2, T))] ||
+ TagsL = [[Tag || {Tag,_} <-
+ erl_scan:attributes_info(element(2, T))] ||
T <- Ts],
case lists:usort(TagsL) of
[_] ->
diff --git a/lib/stdlib/test/re_SUITE.erl b/lib/stdlib/test/re_SUITE.erl
index 02683f9f1a..46a84d4e24 100644
--- a/lib/stdlib/test/re_SUITE.erl
+++ b/lib/stdlib/test/re_SUITE.erl
@@ -18,12 +18,12 @@
%%
-module(re_SUITE).
--export([all/1, pcre/1,compile_options/1,run_options/1,combined_options/1,replace_autogen/1,global_capture/1,replace_input_types/1,replace_return/1,split_autogen/1,split_options/1,split_specials/1,error_handling/1,pcre_cve_2008_2371/1]).
+-export([all/1, pcre/1,compile_options/1,run_options/1,combined_options/1,replace_autogen/1,global_capture/1,replace_input_types/1,replace_return/1,split_autogen/1,split_options/1,split_specials/1,error_handling/1,pcre_cve_2008_2371/1,pcre_compile_workspace_overflow/1,re_infinite_loop/1]).
-include("test_server.hrl").
-include_lib("kernel/include/file.hrl").
-all(suite) -> [pcre,compile_options,run_options,combined_options,replace_autogen,global_capture,replace_input_types,replace_return,split_autogen,split_options,split_specials,error_handling,pcre_cve_2008_2371].
+all(suite) -> [pcre,compile_options,run_options,combined_options,replace_autogen,global_capture,replace_input_types,replace_return,split_autogen,split_options,split_specials,error_handling,pcre_cve_2008_2371,pcre_compile_workspace_overflow,re_infinite_loop].
pcre(doc) ->
["Run all applicable tests from the PCRE testsuites."];
@@ -544,3 +544,25 @@ pcre_cve_2008_2371(Config) when is_list(Config) ->
%% Make sure it doesn't crash the emulator.
re:compile(<<"(?i)[\xc3\xa9\xc3\xbd]|[\xc3\xa9\xc3\xbdA]">>, [unicode]),
ok.
+
+pcre_compile_workspace_overflow(doc) ->
+ "Patch from http://vcs.pcre.org/viewvc/code/trunk/pcre_compile.c?r1=504&r2=505&view=patch";
+pcre_compile_workspace_overflow(Config) when is_list(Config) ->
+ N = 819,
+ ?line {error,{"internal error: overran compiling workspace",799}} =
+ re:compile([lists:duplicate(N, $(), lists:duplicate(N, $))]),
+ ok.
+re_infinite_loop(doc) ->
+ "Make sure matches that really loop infinitely actually fail";
+re_infinite_loop(Config) when is_list(Config) ->
+ Dog = ?t:timetrap(?t:minutes(1)),
+ ?line Str =
+ "http:/www.flickr.com/slideShow/index.gne?group_id=&user_id=69845378@N0",
+ ?line EMail_regex = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+"
+ ++ "(\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*"
+ ++ "@.*([a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+"
+ ++ "([a-zA-Z]{2}|com|org|net|gov|mil"
+ ++ "|biz|info|mobi|name|aero|jobs|museum)",
+ ?line nomatch = re:run(Str, EMail_regex),
+ ?t:timetrap_cancel(Dog),
+ ok.
diff --git a/lib/test_server/doc/src/test_server_ctrl.xml b/lib/test_server/doc/src/test_server_ctrl.xml
index 4a778bcaf7..8b60849b61 100644
--- a/lib/test_server/doc/src/test_server_ctrl.xml
+++ b/lib/test_server/doc/src/test_server_ctrl.xml
@@ -538,9 +538,6 @@ Optional, if not given the test server controller node
test server controller node. The log must be formatted using
<c>ttb:format/1/2</c>.
</p>
- <p>This is valid for all targets except the OSE/Delta target
- for which all nodes will be logged and automatically formatted
- in one single text file called <c>allnodes-test_server</c>.</p>
</desc>
</func>
<func>
diff --git a/lib/test_server/doc/src/ts.xml b/lib/test_server/doc/src/ts.xml
index 0f91d3eea2..f60c79aadd 100644
--- a/lib/test_server/doc/src/ts.xml
+++ b/lib/test_server/doc/src/ts.xml
@@ -250,7 +250,7 @@
running test suites. If a remote host is to be used, the
<c>TargetSystem</c> argument must be given so that "cross
installation" can be done. This should be used for testing on
- VxWorks or OSE/Delta. Installation is required for any of the
+ VxWorks. Installation is required for any of the
functions in <c>ts</c> to work.
</p>
<p>Opts may be one or more of
@@ -275,7 +275,7 @@
strings.
</item>
<item><c>{slavetargets, SlaveTarges}</c><br></br>
- For VxWorks and OSE/Delta only. This is a list of
+ For VxWorks only. This is a list of
available hosts where slave nodes can be started. This is
necessary because only one node can run per host in the
VxWorks environment. This is not the same as
diff --git a/lib/test_server/src/test_server.erl b/lib/test_server/src/test_server.erl
index f918f47415..7db103a4c6 100644
--- a/lib/test_server/src/test_server.erl
+++ b/lib/test_server/src/test_server.erl
@@ -1763,7 +1763,7 @@ call_crash(Time,Crash,M,F,A) ->
%% Slave and Peer:
%% {remote, true} - Start the node on a remote host. If not specified,
%% the node will be started on the local host (with
-%% some exceptions, as for the case of VxWorks and OSE,
+%% some exceptions, for instance VxWorks,
%% where all nodes are started on a remote host).
%% {args, Arguments} - Arguments passed directly to the node.
%% {cleanup, false} - Nodes started with this option will not be killed
@@ -2014,14 +2014,8 @@ temp_name(Stem) ->
app_test(App) ->
app_test(App, pedantic).
app_test(App, Mode) ->
- case os:type() of
- {ose,_} ->
- Comment = "Skipping app_test on OSE",
- comment(Comment), % in case user ignores the return value
- {skip,Comment};
- _other ->
- test_server_sup:app_test(App, Mode)
- end.
+ test_server_sup:app_test(App, Mode).
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/lib/test_server/src/test_server_internal.hrl b/lib/test_server/src/test_server_internal.hrl
index 6fa5ef75b1..c9c52854e3 100644
--- a/lib/test_server/src/test_server_internal.hrl
+++ b/lib/test_server/src/test_server_internal.hrl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2002-2010. 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%
%%
@@ -37,7 +37,7 @@
username, % string()
cookie, % string(); Cookie for target node
naming, % string(); "-name" | "-sname"
- master, % string(); For OSE this is the master
+ master, % string(); Was used for OSE's master
% node for main target and slave nodes.
% For other platforms the target node
% itself is master for slave nodes
diff --git a/lib/test_server/src/test_server_node.erl b/lib/test_server/src/test_server_node.erl
index ddc89d50d4..32886b6765 100644
--- a/lib/test_server/src/test_server_node.erl
+++ b/lib/test_server/src/test_server_node.erl
@@ -1,31 +1,28 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2002-2010. 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(test_server_node).
--compile(r11).
%%%
%%% The same compiled code for this module must be possible to load
-%%% in R11B, R12B and later. To make that possible no bit syntax
-%%% must be used.
+%%% in R12B and later.
%%%
-
%% Test Controller interface
-export([is_release_available/1]).
-export([start_remote_main_target/1,stop/1]).
diff --git a/lib/test_server/src/ts.erl b/lib/test_server/src/ts.erl
index 1b750c3858..e23b891392 100644
--- a/lib/test_server/src/ts.erl
+++ b/lib/test_server/src/ts.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1997-2010. 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%
%%
@@ -112,7 +112,7 @@
" Mandatory for remote targets\n"
" {master, {MasterHost, MasterCookie}}\n"
" - Master host and cookie for targets which are\n"
- " started as slave nodes (i.e. OSE/Delta targets\n"
+ " started as slave nodes.\n"
" erl_boot_server must be started on master before\n"
" test is run.\n"
" Optional, default is controller host and then\n"
diff --git a/lib/test_server/src/ts_erl_config.erl b/lib/test_server/src/ts_erl_config.erl
index 4fc46fc5d6..5cdbf0fbb8 100644
--- a/lib/test_server/src/ts_erl_config.erl
+++ b/lib/test_server/src/ts_erl_config.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1997-2010. 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%
%%
@@ -161,7 +161,6 @@ system_include(Root, Vars) ->
case ts_lib:var(os, Vars) of
"Windows" ++ _T -> "sys/win32";
"VxWorks" -> "sys.vxworks";
- "OSE" -> "sys/ose";
_ -> "sys/unix"
end,
" -I" ++ filename:nativename(filename:join([Root, "erts", "emulator", SysDir])).
@@ -219,7 +218,7 @@ erl_interface(Vars,OsType) ->
{unix,_} ->
"-lpthread";
_ ->
- "" % VxWorks or OSE
+ "" % VxWorks
end,
CrossCompile = case OsType of
vxworks -> "true";
diff --git a/lib/test_server/src/ts_run.erl b/lib/test_server/src/ts_run.erl
index 3461e1383c..888ac98973 100644
--- a/lib/test_server/src/ts_run.erl
+++ b/lib/test_server/src/ts_run.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 1997-2010. 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%
%%
@@ -198,8 +198,6 @@ get_spec_filename_1(Vars, TestDir, File) ->
case ts_lib:var(os, Vars) of
"VxWorks" ->
check_spec_filename(TestDir, File, ".spec.vxworks");
- "OSE" ->
- check_spec_filename(TestDir, File, ".spec.ose");
"Windows"++_ ->
check_spec_filename(TestDir, File, ".spec.win");
_Other ->
@@ -306,53 +304,36 @@ make_make(Vars, Spec, State) ->
add_make_testcase(Vars, Spec, St) ->
Makefile = St#state.makefile,
Dir = filename:dirname(Makefile),
- case ts_lib:var(os, Vars) of
- "OSE" ->
- %% For OSE, C code in datadir must be linked in the image file,
- %% and erlang code is sent as binaries from test_server_ctrl
- %% Making erlang code here because the Makefile.src probably won't
- %% work.
- Erl_flags=[{i, "../../test_server"}|ts_lib:var(erl_flags,Vars)],
- {ok, Cwd} = file:get_cwd(),
- ok = file:set_cwd(Dir),
- Result = (catch make:all(Erl_flags)),
- ok = file:set_cwd(Cwd),
- case Result of
- up_to_date -> {ok, Vars, Spec, St};
- _error -> {error, {erlang_make_failed,Dir}}
- end;
+ Shortname = filename:basename(Makefile),
+ Suite = filename:basename(Dir, "_data"),
+ Config = [{data_dir,Dir},{makefile,Shortname}],
+ MakeModule = Suite ++ "_make",
+ MakeModuleSrc = filename:join(filename:dirname(Dir),
+ MakeModule ++ ".erl"),
+ MakeMod = list_to_atom(MakeModule),
+ case filelib:is_file(MakeModuleSrc) of
+ true -> ok;
+ false -> generate_make_module(ts_lib:var(make_command, Vars),
+ MakeModuleSrc,
+ MakeModule)
+ end,
+ case Suite of
+ "all_SUITE" ->
+ {ok,Vars,Spec,St#state{all={MakeMod,Config}}};
_ ->
- Shortname = filename:basename(Makefile),
- Suite = filename:basename(Dir, "_data"),
- Config = [{data_dir,Dir},{makefile,Shortname}],
- MakeModule = Suite ++ "_make",
- MakeModuleSrc = filename:join(filename:dirname(Dir),
- MakeModule ++ ".erl"),
- MakeMod = list_to_atom(MakeModule),
- case filelib:is_file(MakeModuleSrc) of
- true -> ok;
- false -> generate_make_module(ts_lib:var(make_command, Vars),
- MakeModuleSrc,
- MakeModule)
- end,
- case Suite of
- "all_SUITE" ->
- {ok,Vars,Spec,St#state{all={MakeMod,Config}}};
- _ ->
- %% Avoid duplicates of testcases. There is no longer
- %% a check for this in test_server_ctrl.
- TestCase = {list_to_atom(Suite),all},
- TopCase0 = case St#state.topcase of
- List when is_list(List) ->
- List -- [TestCase];
- Top ->
- [Top] -- [TestCase]
- end,
- TopCase = [{make,{MakeMod,make,[Config]},
- TestCase,
- {MakeMod,unmake,[Config]}}|TopCase0],
- {ok,Vars,Spec,St#state{topcase=TopCase}}
- end
+ %% Avoid duplicates of testcases. There is no longer
+ %% a check for this in test_server_ctrl.
+ TestCase = {list_to_atom(Suite),all},
+ TopCase0 = case St#state.topcase of
+ List when is_list(List) ->
+ List -- [TestCase];
+ Top ->
+ [Top] -- [TestCase]
+ end,
+ TopCase = [{make,{MakeMod,make,[Config]},
+ TestCase,
+ {MakeMod,unmake,[Config]}}|TopCase0],
+ {ok,Vars,Spec,St#state{topcase=TopCase}}
end.
generate_make_module(MakeCmd, Name, ModuleString) ->
@@ -392,7 +373,7 @@ make_test_suite(Vars, _Spec, State) ->
{ok, Cwd} = file:get_cwd(),
ok = file:set_cwd(TestDir),
- Result = (catch make:all(Erl_flags)),
+ Result = (catch make_all(Erl_flags)),
ok = file:set_cwd(Cwd),
case Result of
up_to_date ->
@@ -629,9 +610,6 @@ make_test_server_args(Args0,Options,Vars) ->
"VxWorks" ->
F = write_parameterfile(vxworks,Vars),
" PARAMETERS " ++ F;
- "OSE" ->
- F = write_parameterfile(ose,Vars),
- " PARAMETERS " ++ F;
_ ->
""
end,
@@ -743,4 +721,52 @@ split_one(Path) ->
split_path(Path) ->
string:tokens(Path,";").
+%%
+%% Run make:all/1 if the test suite seems to be designed
+%% to be built/re-built by ts.
+%%
+make_all(Flags) ->
+ case filelib:is_regular("Emakefile") of
+ false ->
+ make_all_no_emakefile(Flags);
+ true ->
+ make:all(Flags)
+ end.
+make_all_no_emakefile(Flags) ->
+ case filelib:wildcard("*.beam") of
+ [] ->
+ %% Since there are no *.beam files, we will assume
+ %% that this test suite was designed to be built and
+ %% re-built by ts. Create an Emakefile so that
+ %% make:all/1 will be run the next time too
+ %% (in case a test suite is being interactively
+ %% developed).
+ create_emakefile(Flags, "*.erl");
+ [_|_] ->
+ %% There is no Emakefile and there already are
+ %% some *.beam files here. Assume that this test
+ %% suite was not designed to be re-built by ts.
+ %% Only create a Emakefile that will compile
+ %% generated *_SUITE_make files (if any).
+ create_emakefile(Flags, "*_SUITE_make.erl")
+ end.
+
+create_emakefile(Flags, Wc) ->
+ case filelib:wildcard(Wc) of
+ [] ->
+ %% There are no files to be built (i.e. not even any
+ %% generated *_SUITE_make.erl files). We must handle
+ %% this case specially, because make:all/1 will crash
+ %% on Emakefile with an empty list of modules.
+ io:put_chars("No Emakefile found - not running make:all/1\n"),
+ up_to_date;
+ [_|_]=Ms0 ->
+ io:format("Creating an Emakefile for compiling files matching ~s\n",
+ [Wc]),
+ Ms = [list_to_atom(filename:rootname(M, ".erl")) || M <- Ms0],
+ Make0 = {Ms,Flags},
+ Make = io_lib:format("~p. \n", [Make0]),
+ ok = file:write_file("Emakefile", Make),
+ make:all(Flags)
+ end.
diff --git a/lib/tools/emacs/erlang-eunit.el b/lib/tools/emacs/erlang-eunit.el
index 1046143698..b2598f93e6 100644
--- a/lib/tools/emacs/erlang-eunit.el
+++ b/lib/tools/emacs/erlang-eunit.el
@@ -1,19 +1,19 @@
;;
;; %CopyrightBegin%
-;;
-;; Copyright Ericsson AB 2009. All Rights Reserved.
-;;
+;;
+;; Copyright Ericsson AB 2009-2010. 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%
;;;
;;; Purpose: Provide EUnit utilities.
diff --git a/lib/wx/api_gen/README b/lib/wx/api_gen/README
index 3c49f7b2a5..10b5209789 100644
--- a/lib/wx/api_gen/README
+++ b/lib/wx/api_gen/README
@@ -2,16 +2,20 @@ API GENERATION:
Most of the code in wx is generated.
Users of wxErlang should not normally need to regenerate the generated code,
as it is checked in by wxErlang developers, when changes are made.
- 2008-09-29 Code checked in is currently generated from wxwidgets 2.8.7.
+
+ Code checked in is currently generated from wxwidgets 2.8.10.
REQUIREMENTS:
The code generation requires doxygen (1.4.6) which is
used to parse wxWidgets c++ headers and generate xml files (in
wx_xml/).
- (2008-09-29 doxygen 1.4.6 is required.
- Later versions of Doxygen - up to 1.5.6 at least - have a bug in the xml generation
- which causes us problems. This has been logged and we are waiting for a fix.)
+ 2008-09-29 doxygen 1.4.6 is required.
+ Later versions of Doxygen - up to 1.5.6 at least - have a bug in the xml generation
+ which causes us problems. This has been logged and we are waiting for a fix.
+
+ doxygen 1.6.1 and doxygen 1.6.3 might work but is not what I use, i.e.
+ review the diffs.
CONFIGURATION:
wxapi.conf contains the specification to the code generator. The code
@@ -22,5 +26,11 @@ CONFIGURATION:
and running make. Sometimes the code generator will require changes,
I havn't thought of everything yet.
+RUNNING:
+ I use the following alias wxgen='make WXGTK_DIR=/opt/local/include/wx-2.8/ GL_DIR=/home/dgud/opengl'
+
+ I keep the opengl headers separate so I don't go backwards in version when generating the code
+ from another machine.
+
CONTRIBUTION:
Send me patches or update the svn version.
diff --git a/lib/wx/api_gen/gl_doxygen.conf b/lib/wx/api_gen/gl_doxygen.conf
index e29a3654b5..c9bdb6a408 100644
--- a/lib/wx/api_gen/gl_doxygen.conf
+++ b/lib/wx/api_gen/gl_doxygen.conf
@@ -8,7 +8,7 @@ PROJECT_NUMBER = 0.1
OUTPUT_DIRECTORY = ./
CREATE_SUBDIRS = NO
OUTPUT_LANGUAGE = English
-USE_WINDOWS_ENCODING = NO
+#USE_WINDOWS_ENCODING = NO
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF =
@@ -20,7 +20,7 @@ STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
-DETAILS_AT_TOP = NO
+# DETAILS_AT_TOP = NO
INHERIT_DOCS = YES
DISTRIBUTE_GROUP_DOC = NO
SEPARATE_MEMBER_PAGES = NO
@@ -175,17 +175,20 @@ PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = YES
-EXPAND_ONLY_PREDEF = NO
+EXPAND_ONLY_PREDEF = YES
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
PREDEFINED = \
APIENTRY="" \
+ APIENTRYP="*" \
+ GLAPIENTRY="" \
+ GLAPIENTRYP="*" \
WINGDIAPI="" \
GLAPI="" \
GL_GLEXT_PROTOTYPES="1"
-EXPAND_AS_DEFINED = YES
+EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration::additions related to external references
@@ -214,9 +217,9 @@ DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
DOT_PATH =
DOTFILE_DIRS =
-MAX_DOT_GRAPH_WIDTH = 1024
-MAX_DOT_GRAPH_HEIGHT = 1024
-MAX_DOT_GRAPH_DEPTH = 0
+#MAX_DOT_GRAPH_WIDTH = 1024
+#MAX_DOT_GRAPH_HEIGHT = 1024
+#MAX_DOT_GRAPH_DEPTH = 0
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
diff --git a/lib/wx/api_gen/gl_gen.erl b/lib/wx/api_gen/gl_gen.erl
index 91a6a1adbf..42802c6de7 100644
--- a/lib/wx/api_gen/gl_gen.erl
+++ b/lib/wx/api_gen/gl_gen.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2008-2010. 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%
%%
%%%-------------------------------------------------------------------
@@ -47,9 +47,9 @@ safe(What, QuitOnErr) ->
io:format("Completed succesfully~n~n", []),
QuitOnErr andalso gen_util:halt(0)
catch Err:Reason ->
- catch gen_util:close(),
io:format("Error ~p: ~p:~p~n ~p~n",
[get(current_func),Err,Reason,erlang:get_stacktrace()]),
+ (catch gen_util:close()),
timer:sleep(1999),
QuitOnErr andalso gen_util:halt(1)
end.
@@ -605,7 +605,7 @@ is_equal(F1=#func{type=T1,params=A1},F2=#func{type=T2,params=A2}) ->
true -> ok;
false ->
%% io:format("A1: ~p~nA2: ~p~n",[A1,A2]),
- ?warning("Skipped Ext Not Equal ~p ~p~n",
+ ?warning("Keeping Ext Not Equal ~p ~p~n",
[F1#func.name,F2#func.name])
end,
Equal.
diff --git a/lib/wx/api_gen/gl_gen_c.erl b/lib/wx/api_gen/gl_gen_c.erl
index 864ce8b1ac..3293050ab9 100644
--- a/lib/wx/api_gen/gl_gen_c.erl
+++ b/lib/wx/api_gen/gl_gen_c.erl
@@ -136,8 +136,7 @@ declare_var(A=#arg{name=N,in=false,type=#type{name=T,base=binary,size=Sz}}) ->
true = is_number(Sz), %% Assert
w(" ~s ~s[~p];~n", [T,N,Sz]),
A;
-declare_var(A=#arg{name=N,in=false,
- type=#type{name=T="GLUquadric",base=B,by_val=false,single=true}}) ->
+declare_var(A=#arg{in=false, type=#type{name="GLUquadric",by_val=false,single=true}}) ->
A;
declare_var(A=#arg{name=N,in=false,
type=#type{name=T,base=B,by_val=false,single=true}}) ->
diff --git a/lib/wx/api_gen/gl_gen_erl.erl b/lib/wx/api_gen/gl_gen_erl.erl
index 07e4d6f783..ce35484561 100644
--- a/lib/wx/api_gen/gl_gen_erl.erl
+++ b/lib/wx/api_gen/gl_gen_erl.erl
@@ -178,9 +178,16 @@ gen_funcs(F) ->
erase(current_func),
w(".~n~n",[]).
-gen_export([F|_]) when is_list(F) ->
+gen_export(F) ->
+ try gen_export_1(F)
+ catch E:R ->
+ io:format("Crash ~p:~p in ~p ~n",[E,R, erlang:get_stacktrace()]),
+ io:format("Func = ~p~n ~p", [F, get(F)])
+ end.
+
+gen_export_1([F|_]) when is_list(F) ->
gen_export2(get(F));
-gen_export(F) when is_list(F) ->
+gen_export_1(F) when is_list(F) ->
gen_export2(get(F)).
gen_export2(#func{name=Name,alt={vector,VecPos,Vec}}) ->
diff --git a/lib/wx/api_gen/wx_doxygen.conf b/lib/wx/api_gen/wx_doxygen.conf
index 1fc57486e6..df150fd154 100644
--- a/lib/wx/api_gen/wx_doxygen.conf
+++ b/lib/wx/api_gen/wx_doxygen.conf
@@ -8,7 +8,7 @@ PROJECT_NUMBER = 0.1
OUTPUT_DIRECTORY = ./
CREATE_SUBDIRS = NO
OUTPUT_LANGUAGE = English
-USE_WINDOWS_ENCODING = NO
+#USE_WINDOWS_ENCODING = NO
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF =
@@ -20,7 +20,7 @@ STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
-DETAILS_AT_TOP = NO
+# DETAILS_AT_TOP = NO
INHERIT_DOCS = YES
DISTRIBUTE_GROUP_DOC = NO
SEPARATE_MEMBER_PAGES = NO
@@ -73,11 +73,11 @@ WARN_LOGFILE =
# configuration options related to the input files
#---------------------------------------------------------------------------
INPUT = @WXGTK_DIR@/wx/ wx_extra/
-#FILE_PATTERNS = *.h
+# FILE_PATTERNS = *.h
RECURSIVE = YES
EXCLUDE =
EXCLUDE_SYMLINKS = NO
-EXCLUDE_PATTERNS = mac/* mgl/* msw/* os2/* x11/* gtk1/* cocoa/* motif/* msdos/* palmos/* private/*
+EXCLUDE_PATTERNS = mac/* mgl/* msw/* os2/* x11/* gtk1/* cocoa/* motif/* msdos/* palmos/* private/* vms_x_fix.h
EXAMPLE_PATH =
EXAMPLE_PATTERNS =
EXAMPLE_RECURSIVE = NO
@@ -176,10 +176,11 @@ PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = YES
-EXPAND_ONLY_PREDEF = NO
+EXPAND_ONLY_PREDEF = YES
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
+
PREDEFINED = \
wxUSE_MENUS=1 \
wxUSE_TOOLBAR=1 \
@@ -215,6 +216,7 @@ PREDEFINED = \
wxUSE_LISTBOX=1 \
wxUSE_BMPBUTTON=1 \
wxUSE_CHECKBOX=1 \
+ wxUSE_CHECKLISTBOX=1 \
wxUSE_TREECTRL=1 \
wxUSE_LISTCTRL=1 \
wxUSE_BOOKCTRL=1 \
@@ -251,15 +253,17 @@ PREDEFINED = \
wxUSE_CLIPBOARD=1 \
wxABI_VERSION=20809 \
__WXGTK24__=1 \
+ __WXGTK20__=1 \
__WXGTK__=1 \
+ wxCHECKLBOX_CHECKED="" \
WXDLLEXPORT=""
# WXWIN_COMPATIBILITY_2_6=1 \
-
-EXPAND_AS_DEFINED = YES
+
+EXPAND_AS_DEFINED = WX_FORWARD_TO_SCROLL_HELPER
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
-# Configuration::additions related to external references
+# Configuration::additions related to external references
#---------------------------------------------------------------------------
TAGFILES =
GENERATE_TAGFILE =
@@ -285,9 +289,6 @@ DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
DOT_PATH =
DOTFILE_DIRS =
-MAX_DOT_GRAPH_WIDTH = 1024
-MAX_DOT_GRAPH_HEIGHT = 1024
-MAX_DOT_GRAPH_DEPTH = 0
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
diff --git a/lib/wx/api_gen/wx_gen.erl b/lib/wx/api_gen/wx_gen.erl
index 2ed4476440..c075324c1f 100644
--- a/lib/wx/api_gen/wx_gen.erl
+++ b/lib/wx/api_gen/wx_gen.erl
@@ -255,19 +255,24 @@ parse_attr(Defs, Class, Ev, Info = #hs{acc=AccList0}) ->
parse_attr1([{{attr,_}, #xmlElement{content=C, attributes=Attrs}}|R], AttrList0, Opts, Res) ->
Parse = fun(Con, Ac) -> parse_param(Con, Opts, Ac) end,
Param0 = foldl(Parse, #param{}, drop_empty(C)),
- case keysearch(prot, #xmlAttribute.name, Attrs) of
- {value, #xmlAttribute{value = "public"}} ->
- {Acc,AttrList} = attr_acc(Param0, AttrList0),
- parse_attr1(R,AttrList,Opts,
- [Param0#param{in=false,prot=public,acc=Acc}|Res]);
- {value, #xmlAttribute{value = "protected"}} ->
- {Acc,AttrList} = attr_acc(Param0, AttrList0),
- parse_attr1(R,AttrList,Opts,
- [Param0#param{in=false,prot=protected,acc=Acc}|Res]);
- {value, #xmlAttribute{value = "private"}} ->
- {Acc,AttrList} = attr_acc(Param0, AttrList0),
- parse_attr1(R,AttrList,Opts,
- [Param0#param{in=false,prot=private,acc=Acc}|Res])
+ case Param0 of
+ #param{where=nowhere} ->
+ parse_attr1(R,AttrList0,Opts,Res);
+ _ ->
+ case keysearch(prot, #xmlAttribute.name, Attrs) of
+ {value, #xmlAttribute{value = "public"}} ->
+ {Acc,AttrList} = attr_acc(Param0, AttrList0),
+ parse_attr1(R,AttrList,Opts,
+ [Param0#param{in=false,prot=public,acc=Acc}|Res]);
+ {value, #xmlAttribute{value = "protected"}} ->
+ {Acc,AttrList} = attr_acc(Param0, AttrList0),
+ parse_attr1(R,AttrList,Opts,
+ [Param0#param{in=false,prot=protected,acc=Acc}|Res]);
+ {value, #xmlAttribute{value = "private"}} ->
+ {Acc,AttrList} = attr_acc(Param0, AttrList0),
+ parse_attr1(R,AttrList,Opts,
+ [Param0#param{in=false,prot=private,acc=Acc}|Res])
+ end
end;
parse_attr1([{_Id,_}|R],AttrList,Info, Res) ->
parse_attr1(R,AttrList,Info, Res);
@@ -591,17 +596,17 @@ parse_param(#xmlElement{name=array,content=C},_Opts, T = #param{type=Type0}) ->
[#xmlText{value=RealVar}] = C,
[Name] = string:tokens(RealVar, "() "),
T#param{name=Name};
-%% #type{mod=[const]} ->
-%% T#param{type=Type0#type{single=array, by_val=true}};
-%% _ ->
-%% T#param{type=Type0#type{single=array, by_val=false}}
_ ->
T#param{type=Type0#type{single=array, by_val=true}}
end;
parse_param(#xmlElement{name=name,content=[C]}, _, T) ->
%% Attributes have this
- #xmlText{value=Name} = C,
- T#param{name=Name};
+ case C of
+ #xmlText{value=Name="ms_classInfo"} ->
+ T#param{name=Name, where=nowhere};
+ #xmlText{value=Name} ->
+ T#param{name=Name}
+ end;
%% Skipped: Attributes have this
parse_param(#xmlElement{name=definition}, _, T) -> T;
parse_param(#xmlElement{name=argsstring}, _, T) -> T;
@@ -610,6 +615,7 @@ parse_param(#xmlElement{name=detaileddescription}, _, T) -> T;
parse_param(#xmlElement{name=inbodydescription}, _, T) -> T;
parse_param(#xmlElement{name=location}, _, T) -> T;
parse_param(#xmlElement{name=referencedby}, _, T) -> T;
+parse_param(#xmlElement{name=reimplements}, _, T) -> T;
parse_param(Other=#xmlElement{name=Name}, _, T) ->
io:format("Unhandled Param ~p ~p ~n in ~p~n", [Name,Other,T]),
?error(unhandled_param).
@@ -1274,11 +1280,11 @@ extract_enum(#xmlElement{name=memberdef,content=C}, Class, File) ->
undefined ->
%% io:format("1Enum name ~p~n", [Name]),
%% [io:format(" ~s ~p~n", [D,V]) || {D,V} <- Vals],
- put({enum, Name}, #enum{vals=Vals});
+ put({enum, Name}, #enum{vals=Vals, from={File,Class,Name0}});
E = #enum{vals=undefined} ->
%% io:format("2Enum name ~p~n", [Name]),
%% [io:format(" ~s ~p~n", [D,V]) || {D,V} <- Vals],
- put({enum, Name}, E#enum{vals=Vals});
+ put({enum, Name}, E#enum{vals=Vals, from={File,Class,Name0}});
#enum{vals=Vals} -> ok;
%% io:format("Same? ~p ~n", [PVals == Vals])
#enum{vals=OldVals} ->
@@ -1352,7 +1358,7 @@ extract_defs(Defs, File) ->
{Vals,_Skip} ->
%% io:format("Defs file ~p~n", [File]),
%% [io:format(" ~s ~p~n", [D,V]) || {D,V} <- Vals, not is_integer(V)]
- put({enum, {define,"From " ++ File ++ ".h"}}, #enum{vals=Vals})
+ put({enum, {define,"From " ++ File ++ ".h"}}, #enum{vals=Vals, from={File, undefined, "@define"}})
end.
extract_defs2(#xmlElement{name=memberdef,content=C},{Acc,Skip}) ->
diff --git a/lib/wx/api_gen/wx_gen.hrl b/lib/wx/api_gen/wx_gen.hrl
index b34d399358..17265a2842 100644
--- a/lib/wx/api_gen/wx_gen.hrl
+++ b/lib/wx/api_gen/wx_gen.hrl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2008-2010. 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%
-record(class,
{
@@ -72,7 +72,7 @@
}
).
--record(enum, {skip="", as_atom=false, vals}).
+-record(enum, {from, skip="", as_atom=false, vals}).
-record(const,{name,val,enum,is_const}).
-define(error(What),
diff --git a/lib/wx/api_gen/wx_gen_cpp.erl b/lib/wx/api_gen/wx_gen_cpp.erl
index 9e9f8799c7..846cec46c4 100644
--- a/lib/wx/api_gen/wx_gen_cpp.erl
+++ b/lib/wx/api_gen/wx_gen_cpp.erl
@@ -1010,6 +1010,11 @@ gen_macros() ->
w("#include <wx/filename.h>~n"),
w("~n~n", []),
+ w("#ifndef wxICON_DEFAULT_BITMAP_TYPE~n",[]),
+ w(" #define wxICON_DEFAULT_BITMAP_TYPE wxBITMAP_TYPE_ICO_RESOURCE~n",[]),
+ w("#endif~n", []),
+ w("~n~n", []),
+
[w("#define ~s_~s ~p~n", [Class,Name,Id]) ||
{Class,Name,_,Id} <- wx_gen_erl:get_unique_names()],
w("~n~n").
diff --git a/lib/wx/api_gen/wx_gen_erl.erl b/lib/wx/api_gen/wx_gen_erl.erl
index d75442d307..7962dd9fbf 100644
--- a/lib/wx/api_gen/wx_gen_erl.erl
+++ b/lib/wx/api_gen/wx_gen_erl.erl
@@ -1035,29 +1035,34 @@ gen_enums_ints() ->
" href, target %% string()~n"
" }).~n", []),
w("~n%% Hardcoded Defines~n", []),
- Enums = [E || E = {{enum,_},#enum{as_atom=false}} <- get()],
+ Enums = [E || {{enum,_},E = #enum{as_atom=false}} <- get()],
w("-define(wxDefaultSize, {-1,-1}).~n", []),
w("-define(wxDefaultPosition, {-1,-1}).~n", []),
w("~n%% Global Variables~n", []),
[w("-define(~s, wxe_util:get_const(~s)).~n", [Gvar, Gvar]) ||
{Gvar,_,_Id} <- get(gvars)],
w("~n%% Enum and defines~n", []),
- foldl(fun({{enum,Type},Enum= #enum{as_atom=false}}, Done) ->
- build_enum_ints(Type,Enum,Done);
+ foldl(fun(Enum= #enum{vals=Vals}, Done) when Vals =/= [] ->
+ build_enum_ints(Enum,Done);
(_,Done) -> Done
end, gb_sets:empty(), lists:sort(Enums)),
close().
-build_enum_ints(Type,#enum{vals=Vals},Done) ->
- case Type of
- [$@|_] -> ok; % anonymous
- {Class,[$@|_]} when Vals =/= [] -> w("% From class ~s~n", [Class]);
- {Class,Enum} when Vals =/= [] -> w("% From ~s::~s~n", [Class,Enum]);
- _ when Vals =/= [] -> w("% Type ~s~n", [Type]);
- _ -> ok
+build_enum_ints(#enum{from=From, vals=Vals},Done) ->
+ case From of
+ {File, undefined, [$@|_]} ->
+ w("% From \"~s.h\"~n",[File]);
+ {File, undefined, Name} ->
+ w("% From \"~s.h\": ~s~n",[File, Name]);
+ {_File, Class,[$@|_]} ->
+ w("% From class ~s~n",[Class]);
+ {_File, Class, Name} ->
+ w("% From class ~s::~s~n",[Class, Name])
end,
- Format = fun(#const{name=Name,val=Value,is_const=true}) when is_integer(Value) ->
+ Format = fun(#const{name="wxEVT_" ++ _}) ->
+ ignore; %% Ignore event macros they are not valid in our event model
+ (#const{name=Name,val=Value,is_const=true}) when is_integer(Value) ->
w("-define(~s, ~p).~n", [enum_name(Name),Value]);
(#const{name=Name,val=Value,is_const=false}) when is_integer(Value) ->
w("-define(~s, wxe_util:get_const(~s)).~n", [enum_name(Name),enum_name(Name)]);
diff --git a/lib/wx/api_gen/wxapi.conf b/lib/wx/api_gen/wxapi.conf
index 4f7bbfedef..c91a9d7fff 100644
--- a/lib/wx/api_gen/wxapi.conf
+++ b/lib/wx/api_gen/wxapi.conf
@@ -27,7 +27,11 @@
wxFONTENCODING_UTF32,wxFONTENCODING_UTF16,
wxDEFAULT_CONTROL_BORDER,wxMOD_CMD,
wxMAJOR_VERSION, wxMINOR_VERSION,
- wxRELEASE_NUMBER,wxSUBRELEASE_NUMBER,wxBETA_NUMBER
+ wxRELEASE_NUMBER,wxSUBRELEASE_NUMBER,wxBETA_NUMBER,
+ %%
+ wxALWAYS_NATIVE_DOUBLE_BUFFER,
+ wxGAUGE_EMULATE_INDETERMINATE_MODE,
+ wxTR_DEFAULT_STYLE
]}.
{gvars,
@@ -702,7 +706,7 @@
['wxCheckBox','~wxCheckBox','Create','GetValue','Get3StateValue',
'Is3rdStateAllowedForUser','Is3State','IsChecked','SetValue',
'Set3StateValue']}.
-{class, wxCheckListBox, wxListBox, [{skip,[{wxCheckListBox,8}]}],
+{class, wxCheckListBox, wxListBox, [{skip,[{wxCheckListBox,8}]}],
[{'wxCheckListBox',[{"pos",{def, "wxDefaultPosition"}},
{"size",{def, "wxDefaultSize"}},
{"choices",{def, ""}}]},
@@ -1686,7 +1690,7 @@
{class, wxSplitterEvent, wxNotifyEvent,
- [
+ [{acc, [{x, skip}, {y, skip}, {pos, skip}, {win, skip}, {pt, skip}]}, %% arrgh doxygen bugs
{event,
[wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED,
wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING,
diff --git a/lib/wx/c_src/gen/gl_fdefs.h b/lib/wx/c_src/gen/gl_fdefs.h
index f8851ddb83..2096f7a413 100644
--- a/lib/wx/c_src/gen/gl_fdefs.h
+++ b/lib/wx/c_src/gen/gl_fdefs.h
@@ -16,7 +16,7 @@
*
* %CopyrightEnd%
*/
-/***** This file is generated do not edit ****/
+/***** This file is generated do not edit ****/
#ifdef WX_DEF_EXTS
# define WXE_EXTERN
diff --git a/lib/wx/c_src/gen/gl_finit.h b/lib/wx/c_src/gen/gl_finit.h
index a22192d06a..ef29f05c4d 100644
--- a/lib/wx/c_src/gen/gl_finit.h
+++ b/lib/wx/c_src/gen/gl_finit.h
@@ -16,7 +16,7 @@
*
* %CopyrightEnd%
*/
-/***** This file is generated do not edit ****/
+/***** This file is generated do not edit ****/
static struct {
const char * name;
diff --git a/lib/wx/c_src/gen/gl_funcs.cpp b/lib/wx/c_src/gen/gl_funcs.cpp
index 41a5524891..95d3c23b23 100644
--- a/lib/wx/c_src/gen/gl_funcs.cpp
+++ b/lib/wx/c_src/gen/gl_funcs.cpp
@@ -16,7 +16,7 @@
*
* %CopyrightEnd%
*/
-/***** This file is generated do not edit ****/
+/***** This file is generated do not edit ****/
#include <stdio.h>
#include <string.h>
@@ -41,10 +41,10 @@ void gl_dispatch(int op, char *bp,ErlDrvTermData caller,WXEBinRef *bins[]){
}
};
- switch(op)
+ switch(op)
{
- case 5000:
- wxe_tess_impl(bp, caller);
+ case 5000:
+ wxe_tess_impl(bp, caller);
break;
case WXE_BIN_INCR:
driver_binary_inc_refc(bins[0]->bin);
@@ -52,7 +52,7 @@ void gl_dispatch(int op, char *bp,ErlDrvTermData caller,WXEBinRef *bins[]){
case WXE_BIN_DECR:
driver_binary_dec_refc(bins[0]->bin);
break;
-case 5010: { // gluBuild1DMipmapLevels
+case 5010: { // gluBuild1DMipmapLevels
GLenum *target = (GLenum *) bp; bp += 4;
GLint *internalFormat = (GLint *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
@@ -69,8 +69,8 @@ case 5010: { // gluBuild1DMipmapLevels
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5011: { // gluBuild1DMipmaps
+}; break;
+case 5011: { // gluBuild1DMipmaps
GLenum *target = (GLenum *) bp; bp += 4;
GLint *internalFormat = (GLint *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
@@ -84,8 +84,8 @@ case 5011: { // gluBuild1DMipmaps
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5012: { // gluBuild2DMipmapLevels
+}; break;
+case 5012: { // gluBuild2DMipmapLevels
GLenum *target = (GLenum *) bp; bp += 4;
GLint *internalFormat = (GLint *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
@@ -103,8 +103,8 @@ case 5012: { // gluBuild2DMipmapLevels
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5013: { // gluBuild2DMipmaps
+}; break;
+case 5013: { // gluBuild2DMipmaps
GLenum *target = (GLenum *) bp; bp += 4;
GLint *internalFormat = (GLint *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
@@ -119,8 +119,8 @@ case 5013: { // gluBuild2DMipmaps
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5014: { // gluBuild3DMipmapLevels
+}; break;
+case 5014: { // gluBuild3DMipmapLevels
GLenum *target = (GLenum *) bp; bp += 4;
GLint *internalFormat = (GLint *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
@@ -139,8 +139,8 @@ case 5014: { // gluBuild3DMipmapLevels
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5015: { // gluBuild3DMipmaps
+}; break;
+case 5015: { // gluBuild3DMipmaps
GLenum *target = (GLenum *) bp; bp += 4;
GLint *internalFormat = (GLint *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
@@ -156,8 +156,8 @@ case 5015: { // gluBuild3DMipmaps
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5016: { // gluCheckExtension
+}; break;
+case 5016: { // gluCheckExtension
int * extNameLen = (int *) bp; bp += 4;
GLubyte * extName = (GLubyte *) bp; bp += (8-((*extNameLen*1+4)%8))%8;
int * extStringLen = (int *) bp; bp += 4;
@@ -169,8 +169,8 @@ case 5016: { // gluCheckExtension
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5017: { // gluCylinder
+}; break;
+case 5017: { // gluCylinder
GLUquadric * quad = (GLUquadric *) * (GLuint64EXT *) bp; bp += 8;
GLdouble *base = (GLdouble *) bp; bp += 8;
GLdouble *top = (GLdouble *) bp; bp += 8;
@@ -178,20 +178,20 @@ case 5017: { // gluCylinder
GLint *slices = (GLint *) bp; bp += 4;
GLint *stacks = (GLint *) bp; bp += 4;
wegluCylinder(quad,*base,*top,*height,*slices,*stacks);
-}; break;
-case 5018: { // gluDeleteQuadric
+}; break;
+case 5018: { // gluDeleteQuadric
GLUquadric * quad = (GLUquadric *) * (GLuint64EXT *) bp; bp += 8;
wegluDeleteQuadric(quad);
-}; break;
-case 5019: { // gluDisk
+}; break;
+case 5019: { // gluDisk
GLUquadric * quad = (GLUquadric *) * (GLuint64EXT *) bp; bp += 8;
GLdouble *inner = (GLdouble *) bp; bp += 8;
GLdouble *outer = (GLdouble *) bp; bp += 8;
GLint *slices = (GLint *) bp; bp += 4;
GLint *loops = (GLint *) bp; bp += 4;
wegluDisk(quad,*inner,*outer,*slices,*loops);
-}; break;
-case 5020: { // gluErrorString
+}; break;
+case 5020: { // gluErrorString
GLenum *error = (GLenum *) bp; bp += 4;
const GLubyte * result = wegluErrorString(*error);
int AP = 0; ErlDrvTermData rt[7];
@@ -200,8 +200,8 @@ case 5020: { // gluErrorString
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 7 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,7);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5021: { // gluGetString
+}; break;
+case 5021: { // gluGetString
GLenum *name = (GLenum *) bp; bp += 4;
const GLubyte * result = wegluGetString(*name);
int AP = 0; ErlDrvTermData rt[7];
@@ -210,8 +210,8 @@ case 5021: { // gluGetString
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 7 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,7);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5022: { // gluLookAt
+}; break;
+case 5022: { // gluLookAt
GLdouble *eyeX = (GLdouble *) bp; bp += 8;
GLdouble *eyeY = (GLdouble *) bp; bp += 8;
GLdouble *eyeZ = (GLdouble *) bp; bp += 8;
@@ -222,8 +222,8 @@ case 5022: { // gluLookAt
GLdouble *upY = (GLdouble *) bp; bp += 8;
GLdouble *upZ = (GLdouble *) bp; bp += 8;
wegluLookAt(*eyeX,*eyeY,*eyeZ,*centerX,*centerY,*centerZ,*upX,*upY,*upZ);
-}; break;
-case 5023: { // gluNewQuadric
+}; break;
+case 5023: { // gluNewQuadric
GLUquadric * result = wegluNewQuadric();
int AP = 0; ErlDrvTermData rt[6];
rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "_wxe_result_");
@@ -231,15 +231,15 @@ case 5023: { // gluNewQuadric
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5024: { // gluOrtho2D
+}; break;
+case 5024: { // gluOrtho2D
GLdouble *left = (GLdouble *) bp; bp += 8;
GLdouble *right = (GLdouble *) bp; bp += 8;
GLdouble *bottom = (GLdouble *) bp; bp += 8;
GLdouble *top = (GLdouble *) bp; bp += 8;
wegluOrtho2D(*left,*right,*bottom,*top);
-}; break;
-case 5025: { // gluPartialDisk
+}; break;
+case 5025: { // gluPartialDisk
GLUquadric * quad = (GLUquadric *) * (GLuint64EXT *) bp; bp += 8;
GLdouble *inner = (GLdouble *) bp; bp += 8;
GLdouble *outer = (GLdouble *) bp; bp += 8;
@@ -248,23 +248,23 @@ case 5025: { // gluPartialDisk
GLdouble *start = (GLdouble *) bp; bp += 8;
GLdouble *sweep = (GLdouble *) bp; bp += 8;
wegluPartialDisk(quad,*inner,*outer,*slices,*loops,*start,*sweep);
-}; break;
-case 5026: { // gluPerspective
+}; break;
+case 5026: { // gluPerspective
GLdouble *fovy = (GLdouble *) bp; bp += 8;
GLdouble *aspect = (GLdouble *) bp; bp += 8;
GLdouble *zNear = (GLdouble *) bp; bp += 8;
GLdouble *zFar = (GLdouble *) bp; bp += 8;
wegluPerspective(*fovy,*aspect,*zNear,*zFar);
-}; break;
-case 5027: { // gluPickMatrix
+}; break;
+case 5027: { // gluPickMatrix
GLdouble *x = (GLdouble *) bp; bp += 8;
GLdouble *y = (GLdouble *) bp; bp += 8;
GLdouble *delX = (GLdouble *) bp; bp += 8;
GLdouble *delY = (GLdouble *) bp; bp += 8;
GLint * viewport = (GLint *) bp; bp += 16;
wegluPickMatrix(*x,*y,*delX,*delY,viewport);
-}; break;
-case 5028: { // gluProject
+}; break;
+case 5028: { // gluProject
GLdouble *objX = (GLdouble *) bp; bp += 8;
GLdouble *objY = (GLdouble *) bp; bp += 8;
GLdouble *objZ = (GLdouble *) bp; bp += 8;
@@ -285,28 +285,28 @@ case 5028: { // gluProject
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5029: { // gluQuadricDrawStyle
+}; break;
+case 5029: { // gluQuadricDrawStyle
GLUquadric * quad = (GLUquadric *) * (GLuint64EXT *) bp; bp += 8;
GLenum *draw = (GLenum *) bp; bp += 4;
wegluQuadricDrawStyle(quad,*draw);
-}; break;
-case 5030: { // gluQuadricNormals
+}; break;
+case 5030: { // gluQuadricNormals
GLUquadric * quad = (GLUquadric *) * (GLuint64EXT *) bp; bp += 8;
GLenum *normal = (GLenum *) bp; bp += 4;
wegluQuadricNormals(quad,*normal);
-}; break;
-case 5031: { // gluQuadricOrientation
+}; break;
+case 5031: { // gluQuadricOrientation
GLUquadric * quad = (GLUquadric *) * (GLuint64EXT *) bp; bp += 8;
GLenum *orientation = (GLenum *) bp; bp += 4;
wegluQuadricOrientation(quad,*orientation);
-}; break;
-case 5032: { // gluQuadricTexture
+}; break;
+case 5032: { // gluQuadricTexture
GLUquadric * quad = (GLUquadric *) * (GLuint64EXT *) bp; bp += 8;
GLboolean *texture = (GLboolean *) bp; bp += 1;
wegluQuadricTexture(quad,*texture);
-}; break;
-case 5033: { // gluScaleImage
+}; break;
+case 5033: { // gluScaleImage
GLenum *format = (GLenum *) bp; bp += 4;
GLsizei *wIn = (GLsizei *) bp; bp += 4;
GLsizei *hIn = (GLsizei *) bp; bp += 4;
@@ -323,15 +323,15 @@ case 5033: { // gluScaleImage
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5034: { // gluSphere
+}; break;
+case 5034: { // gluSphere
GLUquadric * quad = (GLUquadric *) * (GLuint64EXT *) bp; bp += 8;
GLdouble *radius = (GLdouble *) bp; bp += 8;
GLint *slices = (GLint *) bp; bp += 4;
GLint *stacks = (GLint *) bp; bp += 4;
wegluSphere(quad,*radius,*slices,*stacks);
-}; break;
-case 5035: { // gluUnProject
+}; break;
+case 5035: { // gluUnProject
GLdouble *winX = (GLdouble *) bp; bp += 8;
GLdouble *winY = (GLdouble *) bp; bp += 8;
GLdouble *winZ = (GLdouble *) bp; bp += 8;
@@ -352,8 +352,8 @@ case 5035: { // gluUnProject
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5036: { // gluUnProject4
+}; break;
+case 5036: { // gluUnProject4
GLdouble *winX = (GLdouble *) bp; bp += 8;
GLdouble *winY = (GLdouble *) bp; bp += 8;
GLdouble *winZ = (GLdouble *) bp; bp += 8;
@@ -379,18 +379,18 @@ case 5036: { // gluUnProject4
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 16 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,16);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5037: { // glAccum
+}; break;
+case 5037: { // glAccum
GLenum *op = (GLenum *) bp; bp += 4;
GLfloat *value = (GLfloat *) bp; bp += 4;
weglAccum(*op,*value);
-}; break;
-case 5038: { // glAlphaFunc
+}; break;
+case 5038: { // glAlphaFunc
GLenum *func = (GLenum *) bp; bp += 4;
GLclampf *ref = (GLclampf *) bp; bp += 4;
weglAlphaFunc(*func,*ref);
-}; break;
-case 5039: { // glAreTexturesResident
+}; break;
+case 5039: { // glAreTexturesResident
int * texturesLen = (int *) bp; bp += 4;
GLuint * textures = (GLuint *) bp; bp += (8-((*texturesLen*4+4)%8))%8;
GLboolean *residences;
@@ -407,23 +407,23 @@ case 5039: { // glAreTexturesResident
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 11 + (*texturesLen)*2 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,11 + (*texturesLen)*2);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
- driver_free(rt);
+ driver_free(rt);
driver_free(residences);
-}; break;
-case 5040: { // glArrayElement
+}; break;
+case 5040: { // glArrayElement
GLint *i = (GLint *) bp; bp += 4;
weglArrayElement(*i);
-}; break;
-case 5041: { // glBegin
+}; break;
+case 5041: { // glBegin
GLenum *mode = (GLenum *) bp; bp += 4;
weglBegin(*mode);
-}; break;
-case 5042: { // glBindTexture
+}; break;
+case 5042: { // glBindTexture
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *texture = (GLuint *) bp; bp += 4;
weglBindTexture(*target,*texture);
-}; break;
-case 5043: { // glBitmap
+}; break;
+case 5043: { // glBitmap
GLsizei *width = (GLsizei *) bp; bp += 4;
GLsizei *height = (GLsizei *) bp; bp += 4;
GLfloat *xorig = (GLfloat *) bp; bp += 4;
@@ -432,8 +432,8 @@ case 5043: { // glBitmap
GLfloat *ymove = (GLfloat *) bp; bp += 4;
GLubyte *bitmap = (GLubyte *) * (int *) bp; bp += 4;
weglBitmap(*width,*height,*xorig,*yorig,*xmove,*ymove,bitmap);
-}; break;
-case 5044: { // glBitmap
+}; break;
+case 5044: { // glBitmap
GLsizei *width = (GLsizei *) bp; bp += 4;
GLsizei *height = (GLsizei *) bp; bp += 4;
GLfloat *xorig = (GLfloat *) bp; bp += 4;
@@ -442,156 +442,156 @@ case 5044: { // glBitmap
GLfloat *ymove = (GLfloat *) bp; bp += 4;
GLubyte *bitmap = (GLubyte *) bins[0]->base;
weglBitmap(*width,*height,*xorig,*yorig,*xmove,*ymove,bitmap);
-}; break;
-case 5045: { // glBlendFunc
+}; break;
+case 5045: { // glBlendFunc
GLenum *sfactor = (GLenum *) bp; bp += 4;
GLenum *dfactor = (GLenum *) bp; bp += 4;
weglBlendFunc(*sfactor,*dfactor);
-}; break;
-case 5046: { // glCallList
+}; break;
+case 5046: { // glCallList
GLuint *list = (GLuint *) bp; bp += 4;
weglCallList(*list);
-}; break;
-case 5047: { // glCallLists
+}; break;
+case 5047: { // glCallLists
int * listsLen = (int *) bp; bp += 4;
GLuint * lists = (GLuint *) bp; bp += (8-((*listsLen*4+4)%8))%8;
weglCallLists(*listsLen,GL_UNSIGNED_INT,lists);
-}; break;
-case 5048: { // glClear
+}; break;
+case 5048: { // glClear
GLbitfield *mask = (GLbitfield *) bp; bp += 4;
weglClear(*mask);
-}; break;
-case 5049: { // glClearAccum
+}; break;
+case 5049: { // glClearAccum
GLfloat *red = (GLfloat *) bp; bp += 4;
GLfloat *green = (GLfloat *) bp; bp += 4;
GLfloat *blue = (GLfloat *) bp; bp += 4;
GLfloat *alpha = (GLfloat *) bp; bp += 4;
weglClearAccum(*red,*green,*blue,*alpha);
-}; break;
-case 5050: { // glClearColor
+}; break;
+case 5050: { // glClearColor
GLclampf *red = (GLclampf *) bp; bp += 4;
GLclampf *green = (GLclampf *) bp; bp += 4;
GLclampf *blue = (GLclampf *) bp; bp += 4;
GLclampf *alpha = (GLclampf *) bp; bp += 4;
weglClearColor(*red,*green,*blue,*alpha);
-}; break;
-case 5051: { // glClearDepth
+}; break;
+case 5051: { // glClearDepth
GLclampd *depth = (GLclampd *) bp; bp += 8;
weglClearDepth(*depth);
-}; break;
-case 5052: { // glClearIndex
+}; break;
+case 5052: { // glClearIndex
GLfloat *c = (GLfloat *) bp; bp += 4;
weglClearIndex(*c);
-}; break;
-case 5053: { // glClearStencil
+}; break;
+case 5053: { // glClearStencil
GLint *s = (GLint *) bp; bp += 4;
weglClearStencil(*s);
-}; break;
-case 5054: { // glClipPlane
+}; break;
+case 5054: { // glClipPlane
GLenum *plane = (GLenum *) bp; bp += 4;
bp += 4;
GLdouble * equation = (GLdouble *) bp; bp += 32;
weglClipPlane(*plane,equation);
-}; break;
-case 5055: { // glColor3bv
+}; break;
+case 5055: { // glColor3bv
GLbyte *v = (GLbyte *) bp; bp += 1;
weglColor3bv(v);
-}; break;
-case 5056: { // glColor3dv
+}; break;
+case 5056: { // glColor3dv
GLdouble *v = (GLdouble *) bp; bp += 8;
weglColor3dv(v);
-}; break;
-case 5057: { // glColor3fv
+}; break;
+case 5057: { // glColor3fv
GLfloat *v = (GLfloat *) bp; bp += 4;
weglColor3fv(v);
-}; break;
-case 5058: { // glColor3iv
+}; break;
+case 5058: { // glColor3iv
GLint *v = (GLint *) bp; bp += 4;
weglColor3iv(v);
-}; break;
-case 5059: { // glColor3sv
+}; break;
+case 5059: { // glColor3sv
GLshort *v = (GLshort *) bp; bp += 2;
weglColor3sv(v);
-}; break;
-case 5060: { // glColor3ubv
+}; break;
+case 5060: { // glColor3ubv
GLubyte *v = (GLubyte *) bp; bp += 1;
weglColor3ubv(v);
-}; break;
-case 5061: { // glColor3uiv
+}; break;
+case 5061: { // glColor3uiv
GLuint *v = (GLuint *) bp; bp += 4;
weglColor3uiv(v);
-}; break;
-case 5062: { // glColor3usv
+}; break;
+case 5062: { // glColor3usv
GLushort *v = (GLushort *) bp; bp += 2;
weglColor3usv(v);
-}; break;
-case 5063: { // glColor4bv
+}; break;
+case 5063: { // glColor4bv
GLbyte *v = (GLbyte *) bp; bp += 1;
weglColor4bv(v);
-}; break;
-case 5064: { // glColor4dv
+}; break;
+case 5064: { // glColor4dv
GLdouble *v = (GLdouble *) bp; bp += 8;
weglColor4dv(v);
-}; break;
-case 5065: { // glColor4fv
+}; break;
+case 5065: { // glColor4fv
GLfloat *v = (GLfloat *) bp; bp += 4;
weglColor4fv(v);
-}; break;
-case 5066: { // glColor4iv
+}; break;
+case 5066: { // glColor4iv
GLint *v = (GLint *) bp; bp += 4;
weglColor4iv(v);
-}; break;
-case 5067: { // glColor4sv
+}; break;
+case 5067: { // glColor4sv
GLshort *v = (GLshort *) bp; bp += 2;
weglColor4sv(v);
-}; break;
-case 5068: { // glColor4ubv
+}; break;
+case 5068: { // glColor4ubv
GLubyte *v = (GLubyte *) bp; bp += 1;
weglColor4ubv(v);
-}; break;
-case 5069: { // glColor4uiv
+}; break;
+case 5069: { // glColor4uiv
GLuint *v = (GLuint *) bp; bp += 4;
weglColor4uiv(v);
-}; break;
-case 5070: { // glColor4usv
+}; break;
+case 5070: { // glColor4usv
GLushort *v = (GLushort *) bp; bp += 2;
weglColor4usv(v);
-}; break;
-case 5071: { // glColorMask
+}; break;
+case 5071: { // glColorMask
GLboolean *red = (GLboolean *) bp; bp += 1;
GLboolean *green = (GLboolean *) bp; bp += 1;
GLboolean *blue = (GLboolean *) bp; bp += 1;
GLboolean *alpha = (GLboolean *) bp; bp += 1;
weglColorMask(*red,*green,*blue,*alpha);
-}; break;
-case 5072: { // glColorMaterial
+}; break;
+case 5072: { // glColorMaterial
GLenum *face = (GLenum *) bp; bp += 4;
GLenum *mode = (GLenum *) bp; bp += 4;
weglColorMaterial(*face,*mode);
-}; break;
-case 5073: { // glColorPointer
+}; break;
+case 5073: { // glColorPointer
GLint *size = (GLint *) bp; bp += 4;
GLenum *type = (GLenum *) bp; bp += 4;
GLsizei *stride = (GLsizei *) bp; bp += 4;
GLvoid *pointer = (GLvoid *) * (int *) bp; bp += 4;
weglColorPointer(*size,*type,*stride,pointer);
-}; break;
-case 5074: { // glColorPointer
+}; break;
+case 5074: { // glColorPointer
GLint *size = (GLint *) bp; bp += 4;
GLenum *type = (GLenum *) bp; bp += 4;
GLsizei *stride = (GLsizei *) bp; bp += 4;
GLvoid *pointer = (GLvoid *) bins[0]->base;
weglColorPointer(*size,*type,*stride,pointer);
-}; break;
-case 5075: { // glCopyPixels
+}; break;
+case 5075: { // glCopyPixels
GLint *x = (GLint *) bp; bp += 4;
GLint *y = (GLint *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
GLsizei *height = (GLsizei *) bp; bp += 4;
GLenum *type = (GLenum *) bp; bp += 4;
weglCopyPixels(*x,*y,*width,*height,*type);
-}; break;
-case 5076: { // glCopyTexImage1D
+}; break;
+case 5076: { // glCopyTexImage1D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLenum *internalFormat = (GLenum *) bp; bp += 4;
@@ -600,8 +600,8 @@ case 5076: { // glCopyTexImage1D
GLsizei *width = (GLsizei *) bp; bp += 4;
GLint *border = (GLint *) bp; bp += 4;
weglCopyTexImage1D(*target,*level,*internalFormat,*x,*y,*width,*border);
-}; break;
-case 5077: { // glCopyTexImage2D
+}; break;
+case 5077: { // glCopyTexImage2D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLenum *internalFormat = (GLenum *) bp; bp += 4;
@@ -611,8 +611,8 @@ case 5077: { // glCopyTexImage2D
GLsizei *height = (GLsizei *) bp; bp += 4;
GLint *border = (GLint *) bp; bp += 4;
weglCopyTexImage2D(*target,*level,*internalFormat,*x,*y,*width,*height,*border);
-}; break;
-case 5078: { // glCopyTexSubImage1D
+}; break;
+case 5078: { // glCopyTexSubImage1D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLint *xoffset = (GLint *) bp; bp += 4;
@@ -620,8 +620,8 @@ case 5078: { // glCopyTexSubImage1D
GLint *y = (GLint *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
weglCopyTexSubImage1D(*target,*level,*xoffset,*x,*y,*width);
-}; break;
-case 5079: { // glCopyTexSubImage2D
+}; break;
+case 5079: { // glCopyTexSubImage2D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLint *xoffset = (GLint *) bp; bp += 4;
@@ -631,150 +631,150 @@ case 5079: { // glCopyTexSubImage2D
GLsizei *width = (GLsizei *) bp; bp += 4;
GLsizei *height = (GLsizei *) bp; bp += 4;
weglCopyTexSubImage2D(*target,*level,*xoffset,*yoffset,*x,*y,*width,*height);
-}; break;
-case 5080: { // glCullFace
+}; break;
+case 5080: { // glCullFace
GLenum *mode = (GLenum *) bp; bp += 4;
weglCullFace(*mode);
-}; break;
-case 5081: { // glDeleteLists
+}; break;
+case 5081: { // glDeleteLists
GLuint *list = (GLuint *) bp; bp += 4;
GLsizei *range = (GLsizei *) bp; bp += 4;
weglDeleteLists(*list,*range);
-}; break;
-case 5082: { // glDeleteTextures
+}; break;
+case 5082: { // glDeleteTextures
int * texturesLen = (int *) bp; bp += 4;
GLuint * textures = (GLuint *) bp; bp += (8-((*texturesLen*4+4)%8))%8;
weglDeleteTextures(*texturesLen,textures);
-}; break;
-case 5083: { // glDepthFunc
+}; break;
+case 5083: { // glDepthFunc
GLenum *func = (GLenum *) bp; bp += 4;
weglDepthFunc(*func);
-}; break;
-case 5084: { // glDepthMask
+}; break;
+case 5084: { // glDepthMask
GLboolean *flag = (GLboolean *) bp; bp += 1;
weglDepthMask(*flag);
-}; break;
-case 5085: { // glDepthRange
+}; break;
+case 5085: { // glDepthRange
GLclampd *zNear = (GLclampd *) bp; bp += 8;
GLclampd *zFar = (GLclampd *) bp; bp += 8;
weglDepthRange(*zNear,*zFar);
-}; break;
-case 5086: { // glDisable
+}; break;
+case 5086: { // glDisable
GLenum *cap = (GLenum *) bp; bp += 4;
weglDisable(*cap);
-}; break;
-case 5087: { // glDisableClientState
+}; break;
+case 5087: { // glDisableClientState
GLenum *array = (GLenum *) bp; bp += 4;
weglDisableClientState(*array);
-}; break;
-case 5088: { // glDrawArrays
+}; break;
+case 5088: { // glDrawArrays
GLenum *mode = (GLenum *) bp; bp += 4;
GLint *first = (GLint *) bp; bp += 4;
GLsizei *count = (GLsizei *) bp; bp += 4;
weglDrawArrays(*mode,*first,*count);
-}; break;
-case 5089: { // glDrawBuffer
+}; break;
+case 5089: { // glDrawBuffer
GLenum *mode = (GLenum *) bp; bp += 4;
weglDrawBuffer(*mode);
-}; break;
-case 5090: { // glDrawElements
+}; break;
+case 5090: { // glDrawElements
GLenum *mode = (GLenum *) bp; bp += 4;
GLsizei *count = (GLsizei *) bp; bp += 4;
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *indices = (GLvoid *) * (int *) bp; bp += 4;
weglDrawElements(*mode,*count,*type,indices);
-}; break;
-case 5091: { // glDrawElements
+}; break;
+case 5091: { // glDrawElements
GLenum *mode = (GLenum *) bp; bp += 4;
GLsizei *count = (GLsizei *) bp; bp += 4;
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *indices = (GLvoid *) bins[0]->base;
weglDrawElements(*mode,*count,*type,indices);
-}; break;
-case 5092: { // glDrawPixels
+}; break;
+case 5092: { // glDrawPixels
GLsizei *width = (GLsizei *) bp; bp += 4;
GLsizei *height = (GLsizei *) bp; bp += 4;
GLenum *format = (GLenum *) bp; bp += 4;
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *pixels = (GLvoid *) * (int *) bp; bp += 4;
weglDrawPixels(*width,*height,*format,*type,pixels);
-}; break;
-case 5093: { // glDrawPixels
+}; break;
+case 5093: { // glDrawPixels
GLsizei *width = (GLsizei *) bp; bp += 4;
GLsizei *height = (GLsizei *) bp; bp += 4;
GLenum *format = (GLenum *) bp; bp += 4;
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *pixels = (GLvoid *) bins[0]->base;
weglDrawPixels(*width,*height,*format,*type,pixels);
-}; break;
-case 5094: { // glEdgeFlagv
+}; break;
+case 5094: { // glEdgeFlagv
GLboolean *flag = (GLboolean *) bp; bp += 1;
weglEdgeFlagv(flag);
-}; break;
-case 5095: { // glEdgeFlagPointer
+}; break;
+case 5095: { // glEdgeFlagPointer
GLsizei *stride = (GLsizei *) bp; bp += 4;
GLvoid *pointer = (GLvoid *) * (int *) bp; bp += 4;
weglEdgeFlagPointer(*stride,pointer);
-}; break;
-case 5096: { // glEdgeFlagPointer
+}; break;
+case 5096: { // glEdgeFlagPointer
GLsizei *stride = (GLsizei *) bp; bp += 4;
GLvoid *pointer = (GLvoid *) bins[0]->base;
weglEdgeFlagPointer(*stride,pointer);
-}; break;
-case 5097: { // glEnable
+}; break;
+case 5097: { // glEnable
GLenum *cap = (GLenum *) bp; bp += 4;
weglEnable(*cap);
-}; break;
-case 5098: { // glEnableClientState
+}; break;
+case 5098: { // glEnableClientState
GLenum *array = (GLenum *) bp; bp += 4;
weglEnableClientState(*array);
-}; break;
-case 5099: { // glEnd
+}; break;
+case 5099: { // glEnd
weglEnd();
-}; break;
-case 5100: { // glEndList
+}; break;
+case 5100: { // glEndList
weglEndList();
-}; break;
-case 5101: { // glEvalCoord1dv
+}; break;
+case 5101: { // glEvalCoord1dv
GLdouble *u = (GLdouble *) bp; bp += 8;
weglEvalCoord1dv(u);
-}; break;
-case 5102: { // glEvalCoord1fv
+}; break;
+case 5102: { // glEvalCoord1fv
GLfloat *u = (GLfloat *) bp; bp += 4;
weglEvalCoord1fv(u);
-}; break;
-case 5103: { // glEvalCoord2dv
+}; break;
+case 5103: { // glEvalCoord2dv
GLdouble *u = (GLdouble *) bp; bp += 8;
weglEvalCoord2dv(u);
-}; break;
-case 5104: { // glEvalCoord2fv
+}; break;
+case 5104: { // glEvalCoord2fv
GLfloat *u = (GLfloat *) bp; bp += 4;
weglEvalCoord2fv(u);
-}; break;
-case 5105: { // glEvalMesh1
+}; break;
+case 5105: { // glEvalMesh1
GLenum *mode = (GLenum *) bp; bp += 4;
GLint *i1 = (GLint *) bp; bp += 4;
GLint *i2 = (GLint *) bp; bp += 4;
weglEvalMesh1(*mode,*i1,*i2);
-}; break;
-case 5106: { // glEvalMesh2
+}; break;
+case 5106: { // glEvalMesh2
GLenum *mode = (GLenum *) bp; bp += 4;
GLint *i1 = (GLint *) bp; bp += 4;
GLint *i2 = (GLint *) bp; bp += 4;
GLint *j1 = (GLint *) bp; bp += 4;
GLint *j2 = (GLint *) bp; bp += 4;
weglEvalMesh2(*mode,*i1,*i2,*j1,*j2);
-}; break;
-case 5107: { // glEvalPoint1
+}; break;
+case 5107: { // glEvalPoint1
GLint *i = (GLint *) bp; bp += 4;
weglEvalPoint1(*i);
-}; break;
-case 5108: { // glEvalPoint2
+}; break;
+case 5108: { // glEvalPoint2
GLint *i = (GLint *) bp; bp += 4;
GLint *j = (GLint *) bp; bp += 4;
weglEvalPoint2(*i,*j);
-}; break;
-case 5109: { // glFeedbackBuffer
+}; break;
+case 5109: { // glFeedbackBuffer
GLsizei *size = (GLsizei *) bp; bp += 4;
GLenum *type = (GLenum *) bp; bp += 4;
GLfloat *buffer = (GLfloat *) bins[0]->base;
@@ -784,40 +784,40 @@ case 5109: { // glFeedbackBuffer
rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "ok");
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5110: { // glFinish
+}; break;
+case 5110: { // glFinish
weglFinish();
-}; break;
-case 5111: { // glFlush
+}; break;
+case 5111: { // glFlush
weglFlush();
-}; break;
-case 5112: { // glFogf
+}; break;
+case 5112: { // glFogf
GLenum *pname = (GLenum *) bp; bp += 4;
GLfloat *param = (GLfloat *) bp; bp += 4;
weglFogf(*pname,*param);
-}; break;
-case 5113: { // glFogfv
+}; break;
+case 5113: { // glFogfv
GLenum *pname = (GLenum *) bp; bp += 4;
int *paramsLen = (int *) bp; bp += 4;
GLfloat *params = (GLfloat *) bp; bp += *paramsLen*4+((*paramsLen)+0)%2*4;
weglFogfv(*pname,params);
-}; break;
-case 5114: { // glFogi
+}; break;
+case 5114: { // glFogi
GLenum *pname = (GLenum *) bp; bp += 4;
GLint *param = (GLint *) bp; bp += 4;
weglFogi(*pname,*param);
-}; break;
-case 5115: { // glFogiv
+}; break;
+case 5115: { // glFogiv
GLenum *pname = (GLenum *) bp; bp += 4;
int *paramsLen = (int *) bp; bp += 4;
GLint *params = (GLint *) bp; bp += *paramsLen*4+((*paramsLen)+0)%2*4;
weglFogiv(*pname,params);
-}; break;
-case 5116: { // glFrontFace
+}; break;
+case 5116: { // glFrontFace
GLenum *mode = (GLenum *) bp; bp += 4;
weglFrontFace(*mode);
-}; break;
-case 5117: { // glFrustum
+}; break;
+case 5117: { // glFrustum
GLdouble *left = (GLdouble *) bp; bp += 8;
GLdouble *right = (GLdouble *) bp; bp += 8;
GLdouble *bottom = (GLdouble *) bp; bp += 8;
@@ -825,8 +825,8 @@ case 5117: { // glFrustum
GLdouble *zNear = (GLdouble *) bp; bp += 8;
GLdouble *zFar = (GLdouble *) bp; bp += 8;
weglFrustum(*left,*right,*bottom,*top,*zNear,*zFar);
-}; break;
-case 5118: { // glGenLists
+}; break;
+case 5118: { // glGenLists
GLsizei *range = (GLsizei *) bp; bp += 4;
GLuint result = weglGenLists(*range);
int AP = 0; ErlDrvTermData rt[6];
@@ -835,8 +835,8 @@ case 5118: { // glGenLists
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5119: { // glGenTextures
+}; break;
+case 5119: { // glGenTextures
GLsizei *n = (GLsizei *) bp; bp += 4;
GLuint *textures;
textures = (GLuint *) driver_alloc(sizeof(GLuint) * *n);
@@ -850,10 +850,10 @@ case 5119: { // glGenTextures
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 7 + (*n)*2 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,7 + (*n)*2);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
- driver_free(rt);
+ driver_free(rt);
driver_free(textures);
-}; break;
-case 5120: { // glGetBooleanv
+}; break;
+case 5120: { // glGetBooleanv
GLenum *pname = (GLenum *) bp; bp += 4;
GLboolean params[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
weglGetBooleanv(*pname,params);
@@ -880,8 +880,8 @@ case 5120: { // glGetBooleanv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 39 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,39);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5121: { // glGetClipPlane
+}; break;
+case 5121: { // glGetClipPlane
GLenum *plane = (GLenum *) bp; bp += 4;
GLdouble equation[4] = {0.0,0.0,0.0,0.0};
weglGetClipPlane(*plane,equation);
@@ -896,8 +896,8 @@ case 5121: { // glGetClipPlane
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5122: { // glGetDoublev
+}; break;
+case 5122: { // glGetDoublev
GLenum *pname = (GLenum *) bp; bp += 4;
GLdouble params[16] = {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
weglGetDoublev(*pname,params);
@@ -924,8 +924,8 @@ case 5122: { // glGetDoublev
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 39 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,39);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5123: { // glGetError
+}; break;
+case 5123: { // glGetError
GLenum result = weglGetError();
int AP = 0; ErlDrvTermData rt[6];
rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "_wxe_result_");
@@ -933,8 +933,8 @@ case 5123: { // glGetError
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5124: { // glGetFloatv
+}; break;
+case 5124: { // glGetFloatv
GLenum *pname = (GLenum *) bp; bp += 4;
GLfloat params[16] = {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
weglGetFloatv(*pname,params);
@@ -962,8 +962,8 @@ case 5124: { // glGetFloatv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 39 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,39);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5125: { // glGetIntegerv
+}; break;
+case 5125: { // glGetIntegerv
GLenum *pname = (GLenum *) bp; bp += 4;
GLint params[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
weglGetIntegerv(*pname,params);
@@ -990,8 +990,8 @@ case 5125: { // glGetIntegerv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 39 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,39);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5126: { // glGetLightfv
+}; break;
+case 5126: { // glGetLightfv
GLenum *light = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLfloat params[4] = {0.0,0.0,0.0,0.0};
@@ -1008,8 +1008,8 @@ case 5126: { // glGetLightfv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5127: { // glGetLightiv
+}; break;
+case 5127: { // glGetLightiv
GLenum *light = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint params[4] = {0,0,0,0};
@@ -1025,8 +1025,8 @@ case 5127: { // glGetLightiv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5128: { // glGetMapdv
+}; break;
+case 5128: { // glGetMapdv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *query = (GLenum *) bp; bp += 4;
GLdouble *v = (GLdouble *) bins[0]->base;
@@ -1036,8 +1036,8 @@ case 5128: { // glGetMapdv
rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "ok");
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5129: { // glGetMapfv
+}; break;
+case 5129: { // glGetMapfv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *query = (GLenum *) bp; bp += 4;
GLfloat *v = (GLfloat *) bins[0]->base;
@@ -1047,8 +1047,8 @@ case 5129: { // glGetMapfv
rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "ok");
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5130: { // glGetMapiv
+}; break;
+case 5130: { // glGetMapiv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *query = (GLenum *) bp; bp += 4;
GLint *v = (GLint *) bins[0]->base;
@@ -1058,8 +1058,8 @@ case 5130: { // glGetMapiv
rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "ok");
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5131: { // glGetMaterialfv
+}; break;
+case 5131: { // glGetMaterialfv
GLenum *face = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLfloat params[4] = {0.0,0.0,0.0,0.0};
@@ -1076,8 +1076,8 @@ case 5131: { // glGetMaterialfv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5132: { // glGetMaterialiv
+}; break;
+case 5132: { // glGetMaterialiv
GLenum *face = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint params[4] = {0,0,0,0};
@@ -1093,8 +1093,8 @@ case 5132: { // glGetMaterialiv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5133: { // glGetPixelMapfv
+}; break;
+case 5133: { // glGetPixelMapfv
GLenum *map = (GLenum *) bp; bp += 4;
GLfloat *values = (GLfloat *) bins[0]->base;
weglGetPixelMapfv(*map,values);
@@ -1103,8 +1103,8 @@ case 5133: { // glGetPixelMapfv
rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "ok");
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5134: { // glGetPixelMapuiv
+}; break;
+case 5134: { // glGetPixelMapuiv
GLenum *map = (GLenum *) bp; bp += 4;
GLuint *values = (GLuint *) bins[0]->base;
weglGetPixelMapuiv(*map,values);
@@ -1113,8 +1113,8 @@ case 5134: { // glGetPixelMapuiv
rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "ok");
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5135: { // glGetPixelMapusv
+}; break;
+case 5135: { // glGetPixelMapusv
GLenum *map = (GLenum *) bp; bp += 4;
GLushort *values = (GLushort *) bins[0]->base;
weglGetPixelMapusv(*map,values);
@@ -1123,8 +1123,8 @@ case 5135: { // glGetPixelMapusv
rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "ok");
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5136: { // glGetPolygonStipple
+}; break;
+case 5136: { // glGetPolygonStipple
GLubyte mask[128];
weglGetPolygonStipple(mask);
int AP = 0; ErlDrvTermData rt[8];
@@ -1136,8 +1136,8 @@ case 5136: { // glGetPolygonStipple
if (AP != 8 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,8);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
driver_free_binary(BinCopy);
-}; break;
-case 5137: { // glGetString
+}; break;
+case 5137: { // glGetString
GLenum *name = (GLenum *) bp; bp += 4;
const GLubyte * result = weglGetString(*name);
int AP = 0; ErlDrvTermData rt[7];
@@ -1146,8 +1146,8 @@ case 5137: { // glGetString
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 7 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,7);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5138: { // glGetTexEnvfv
+}; break;
+case 5138: { // glGetTexEnvfv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLfloat params[4] = {0.0,0.0,0.0,0.0};
@@ -1164,8 +1164,8 @@ case 5138: { // glGetTexEnvfv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5139: { // glGetTexEnviv
+}; break;
+case 5139: { // glGetTexEnviv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint params[4] = {0,0,0,0};
@@ -1181,8 +1181,8 @@ case 5139: { // glGetTexEnviv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5140: { // glGetTexGendv
+}; break;
+case 5140: { // glGetTexGendv
GLenum *coord = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLdouble params[4] = {0.0,0.0,0.0,0.0};
@@ -1198,8 +1198,8 @@ case 5140: { // glGetTexGendv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5141: { // glGetTexGenfv
+}; break;
+case 5141: { // glGetTexGenfv
GLenum *coord = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLfloat params[4] = {0.0,0.0,0.0,0.0};
@@ -1216,8 +1216,8 @@ case 5141: { // glGetTexGenfv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5142: { // glGetTexGeniv
+}; break;
+case 5142: { // glGetTexGeniv
GLenum *coord = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint params[4] = {0,0,0,0};
@@ -1233,8 +1233,8 @@ case 5142: { // glGetTexGeniv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5143: { // glGetTexImage
+}; break;
+case 5143: { // glGetTexImage
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLenum *format = (GLenum *) bp; bp += 4;
@@ -1246,8 +1246,8 @@ case 5143: { // glGetTexImage
rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "ok");
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5144: { // glGetTexLevelParameterfv
+}; break;
+case 5144: { // glGetTexLevelParameterfv
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
@@ -1262,8 +1262,8 @@ case 5144: { // glGetTexLevelParameterfv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 8 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,8);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5145: { // glGetTexLevelParameteriv
+}; break;
+case 5145: { // glGetTexLevelParameteriv
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
@@ -1277,8 +1277,8 @@ case 5145: { // glGetTexLevelParameteriv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 8 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,8);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5146: { // glGetTexParameterfv
+}; break;
+case 5146: { // glGetTexParameterfv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLfloat params[4] = {0.0,0.0,0.0,0.0};
@@ -1295,8 +1295,8 @@ case 5146: { // glGetTexParameterfv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5147: { // glGetTexParameteriv
+}; break;
+case 5147: { // glGetTexParameteriv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint params[4] = {0,0,0,0};
@@ -1312,64 +1312,64 @@ case 5147: { // glGetTexParameteriv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5148: { // glHint
+}; break;
+case 5148: { // glHint
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *mode = (GLenum *) bp; bp += 4;
weglHint(*target,*mode);
-}; break;
-case 5149: { // glIndexMask
+}; break;
+case 5149: { // glIndexMask
GLuint *mask = (GLuint *) bp; bp += 4;
weglIndexMask(*mask);
-}; break;
-case 5150: { // glIndexPointer
+}; break;
+case 5150: { // glIndexPointer
GLenum *type = (GLenum *) bp; bp += 4;
GLsizei *stride = (GLsizei *) bp; bp += 4;
GLvoid *pointer = (GLvoid *) * (int *) bp; bp += 4;
weglIndexPointer(*type,*stride,pointer);
-}; break;
-case 5151: { // glIndexPointer
+}; break;
+case 5151: { // glIndexPointer
GLenum *type = (GLenum *) bp; bp += 4;
GLsizei *stride = (GLsizei *) bp; bp += 4;
GLvoid *pointer = (GLvoid *) bins[0]->base;
weglIndexPointer(*type,*stride,pointer);
-}; break;
-case 5152: { // glIndexdv
+}; break;
+case 5152: { // glIndexdv
GLdouble *c = (GLdouble *) bp; bp += 8;
weglIndexdv(c);
-}; break;
-case 5153: { // glIndexfv
+}; break;
+case 5153: { // glIndexfv
GLfloat *c = (GLfloat *) bp; bp += 4;
weglIndexfv(c);
-}; break;
-case 5154: { // glIndexiv
+}; break;
+case 5154: { // glIndexiv
GLint *c = (GLint *) bp; bp += 4;
weglIndexiv(c);
-}; break;
-case 5155: { // glIndexsv
+}; break;
+case 5155: { // glIndexsv
GLshort *c = (GLshort *) bp; bp += 2;
weglIndexsv(c);
-}; break;
-case 5156: { // glIndexubv
+}; break;
+case 5156: { // glIndexubv
GLubyte *c = (GLubyte *) bp; bp += 1;
weglIndexubv(c);
-}; break;
-case 5157: { // glInitNames
+}; break;
+case 5157: { // glInitNames
weglInitNames();
-}; break;
-case 5158: { // glInterleavedArrays
+}; break;
+case 5158: { // glInterleavedArrays
GLenum *format = (GLenum *) bp; bp += 4;
GLsizei *stride = (GLsizei *) bp; bp += 4;
GLvoid *pointer = (GLvoid *) * (int *) bp; bp += 4;
weglInterleavedArrays(*format,*stride,pointer);
-}; break;
-case 5159: { // glInterleavedArrays
+}; break;
+case 5159: { // glInterleavedArrays
GLenum *format = (GLenum *) bp; bp += 4;
GLsizei *stride = (GLsizei *) bp; bp += 4;
GLvoid *pointer = (GLvoid *) bins[0]->base;
weglInterleavedArrays(*format,*stride,pointer);
-}; break;
-case 5160: { // glIsEnabled
+}; break;
+case 5160: { // glIsEnabled
GLenum *cap = (GLenum *) bp; bp += 4;
GLboolean result = weglIsEnabled(*cap);
int AP = 0; ErlDrvTermData rt[6];
@@ -1378,8 +1378,8 @@ case 5160: { // glIsEnabled
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5161: { // glIsList
+}; break;
+case 5161: { // glIsList
GLuint *list = (GLuint *) bp; bp += 4;
GLboolean result = weglIsList(*list);
int AP = 0; ErlDrvTermData rt[6];
@@ -1388,8 +1388,8 @@ case 5161: { // glIsList
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5162: { // glIsTexture
+}; break;
+case 5162: { // glIsTexture
GLuint *texture = (GLuint *) bp; bp += 4;
GLboolean result = weglIsTexture(*texture);
int AP = 0; ErlDrvTermData rt[6];
@@ -1398,88 +1398,88 @@ case 5162: { // glIsTexture
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5163: { // glLightModelf
+}; break;
+case 5163: { // glLightModelf
GLenum *pname = (GLenum *) bp; bp += 4;
GLfloat *param = (GLfloat *) bp; bp += 4;
weglLightModelf(*pname,*param);
-}; break;
-case 5164: { // glLightModelfv
+}; break;
+case 5164: { // glLightModelfv
GLenum *pname = (GLenum *) bp; bp += 4;
int *paramsLen = (int *) bp; bp += 4;
GLfloat *params = (GLfloat *) bp; bp += *paramsLen*4+((*paramsLen)+0)%2*4;
weglLightModelfv(*pname,params);
-}; break;
-case 5165: { // glLightModeli
+}; break;
+case 5165: { // glLightModeli
GLenum *pname = (GLenum *) bp; bp += 4;
GLint *param = (GLint *) bp; bp += 4;
weglLightModeli(*pname,*param);
-}; break;
-case 5166: { // glLightModeliv
+}; break;
+case 5166: { // glLightModeliv
GLenum *pname = (GLenum *) bp; bp += 4;
int *paramsLen = (int *) bp; bp += 4;
GLint *params = (GLint *) bp; bp += *paramsLen*4+((*paramsLen)+0)%2*4;
weglLightModeliv(*pname,params);
-}; break;
-case 5167: { // glLightf
+}; break;
+case 5167: { // glLightf
GLenum *light = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLfloat *param = (GLfloat *) bp; bp += 4;
weglLightf(*light,*pname,*param);
-}; break;
-case 5168: { // glLightfv
+}; break;
+case 5168: { // glLightfv
GLenum *light = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
int *paramsLen = (int *) bp; bp += 4;
GLfloat *params = (GLfloat *) bp; bp += *paramsLen*4+((*paramsLen)+1)%2*4;
weglLightfv(*light,*pname,params);
-}; break;
-case 5169: { // glLighti
+}; break;
+case 5169: { // glLighti
GLenum *light = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint *param = (GLint *) bp; bp += 4;
weglLighti(*light,*pname,*param);
-}; break;
-case 5170: { // glLightiv
+}; break;
+case 5170: { // glLightiv
GLenum *light = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
int *paramsLen = (int *) bp; bp += 4;
GLint *params = (GLint *) bp; bp += *paramsLen*4+((*paramsLen)+1)%2*4;
weglLightiv(*light,*pname,params);
-}; break;
-case 5171: { // glLineStipple
+}; break;
+case 5171: { // glLineStipple
GLint *factor = (GLint *) bp; bp += 4;
GLushort *pattern = (GLushort *) bp; bp += 2;
weglLineStipple(*factor,*pattern);
-}; break;
-case 5172: { // glLineWidth
+}; break;
+case 5172: { // glLineWidth
GLfloat *width = (GLfloat *) bp; bp += 4;
weglLineWidth(*width);
-}; break;
-case 5173: { // glListBase
+}; break;
+case 5173: { // glListBase
GLuint *base = (GLuint *) bp; bp += 4;
weglListBase(*base);
-}; break;
-case 5174: { // glLoadIdentity
+}; break;
+case 5174: { // glLoadIdentity
weglLoadIdentity();
-}; break;
-case 5175: { // glLoadMatrixd
+}; break;
+case 5175: { // glLoadMatrixd
GLdouble * m = (GLdouble *) bp; bp += 128;
weglLoadMatrixd(m);
-}; break;
-case 5176: { // glLoadMatrixf
+}; break;
+case 5176: { // glLoadMatrixf
GLfloat * m = (GLfloat *) bp; bp += 64;
weglLoadMatrixf(m);
-}; break;
-case 5177: { // glLoadName
+}; break;
+case 5177: { // glLoadName
GLuint *name = (GLuint *) bp; bp += 4;
weglLoadName(*name);
-}; break;
-case 5178: { // glLogicOp
+}; break;
+case 5178: { // glLogicOp
GLenum *opcode = (GLenum *) bp; bp += 4;
weglLogicOp(*opcode);
-}; break;
-case 5179: { // glMap1d
+}; break;
+case 5179: { // glMap1d
GLenum *target = (GLenum *) bp; bp += 4;
bp += 4;
GLdouble *u1 = (GLdouble *) bp; bp += 8;
@@ -1488,8 +1488,8 @@ case 5179: { // glMap1d
GLint *order = (GLint *) bp; bp += 4;
GLdouble *points = (GLdouble *) bins[0]->base;
weglMap1d(*target,*u1,*u2,*stride,*order,points);
-}; break;
-case 5180: { // glMap1f
+}; break;
+case 5180: { // glMap1f
GLenum *target = (GLenum *) bp; bp += 4;
GLfloat *u1 = (GLfloat *) bp; bp += 4;
GLfloat *u2 = (GLfloat *) bp; bp += 4;
@@ -1497,8 +1497,8 @@ case 5180: { // glMap1f
GLint *order = (GLint *) bp; bp += 4;
GLfloat *points = (GLfloat *) bins[0]->base;
weglMap1f(*target,*u1,*u2,*stride,*order,points);
-}; break;
-case 5181: { // glMap2d
+}; break;
+case 5181: { // glMap2d
GLenum *target = (GLenum *) bp; bp += 4;
bp += 4;
GLdouble *u1 = (GLdouble *) bp; bp += 8;
@@ -1511,8 +1511,8 @@ case 5181: { // glMap2d
GLint *vorder = (GLint *) bp; bp += 4;
GLdouble *points = (GLdouble *) bins[0]->base;
weglMap2d(*target,*u1,*u2,*ustride,*uorder,*v1,*v2,*vstride,*vorder,points);
-}; break;
-case 5182: { // glMap2f
+}; break;
+case 5182: { // glMap2f
GLenum *target = (GLenum *) bp; bp += 4;
GLfloat *u1 = (GLfloat *) bp; bp += 4;
GLfloat *u2 = (GLfloat *) bp; bp += 4;
@@ -1524,21 +1524,21 @@ case 5182: { // glMap2f
GLint *vorder = (GLint *) bp; bp += 4;
GLfloat *points = (GLfloat *) bins[0]->base;
weglMap2f(*target,*u1,*u2,*ustride,*uorder,*v1,*v2,*vstride,*vorder,points);
-}; break;
-case 5183: { // glMapGrid1d
+}; break;
+case 5183: { // glMapGrid1d
GLint *un = (GLint *) bp; bp += 4;
bp += 4;
GLdouble *u1 = (GLdouble *) bp; bp += 8;
GLdouble *u2 = (GLdouble *) bp; bp += 8;
weglMapGrid1d(*un,*u1,*u2);
-}; break;
-case 5184: { // glMapGrid1f
+}; break;
+case 5184: { // glMapGrid1f
GLint *un = (GLint *) bp; bp += 4;
GLfloat *u1 = (GLfloat *) bp; bp += 4;
GLfloat *u2 = (GLfloat *) bp; bp += 4;
weglMapGrid1f(*un,*u1,*u2);
-}; break;
-case 5185: { // glMapGrid2d
+}; break;
+case 5185: { // glMapGrid2d
GLint *un = (GLint *) bp; bp += 4;
bp += 4;
GLdouble *u1 = (GLdouble *) bp; bp += 8;
@@ -1548,8 +1548,8 @@ case 5185: { // glMapGrid2d
GLdouble *v1 = (GLdouble *) bp; bp += 8;
GLdouble *v2 = (GLdouble *) bp; bp += 8;
weglMapGrid2d(*un,*u1,*u2,*vn,*v1,*v2);
-}; break;
-case 5186: { // glMapGrid2f
+}; break;
+case 5186: { // glMapGrid2f
GLint *un = (GLint *) bp; bp += 4;
GLfloat *u1 = (GLfloat *) bp; bp += 4;
GLfloat *u2 = (GLfloat *) bp; bp += 4;
@@ -1557,83 +1557,83 @@ case 5186: { // glMapGrid2f
GLfloat *v1 = (GLfloat *) bp; bp += 4;
GLfloat *v2 = (GLfloat *) bp; bp += 4;
weglMapGrid2f(*un,*u1,*u2,*vn,*v1,*v2);
-}; break;
-case 5187: { // glMaterialf
+}; break;
+case 5187: { // glMaterialf
GLenum *face = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLfloat *param = (GLfloat *) bp; bp += 4;
weglMaterialf(*face,*pname,*param);
-}; break;
-case 5188: { // glMaterialfv
+}; break;
+case 5188: { // glMaterialfv
GLenum *face = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
int *paramsLen = (int *) bp; bp += 4;
GLfloat *params = (GLfloat *) bp; bp += *paramsLen*4+((*paramsLen)+1)%2*4;
weglMaterialfv(*face,*pname,params);
-}; break;
-case 5189: { // glMateriali
+}; break;
+case 5189: { // glMateriali
GLenum *face = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint *param = (GLint *) bp; bp += 4;
weglMateriali(*face,*pname,*param);
-}; break;
-case 5190: { // glMaterialiv
+}; break;
+case 5190: { // glMaterialiv
GLenum *face = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
int *paramsLen = (int *) bp; bp += 4;
GLint *params = (GLint *) bp; bp += *paramsLen*4+((*paramsLen)+1)%2*4;
weglMaterialiv(*face,*pname,params);
-}; break;
-case 5191: { // glMatrixMode
+}; break;
+case 5191: { // glMatrixMode
GLenum *mode = (GLenum *) bp; bp += 4;
weglMatrixMode(*mode);
-}; break;
-case 5192: { // glMultMatrixd
+}; break;
+case 5192: { // glMultMatrixd
GLdouble * m = (GLdouble *) bp; bp += 128;
weglMultMatrixd(m);
-}; break;
-case 5193: { // glMultMatrixf
+}; break;
+case 5193: { // glMultMatrixf
GLfloat * m = (GLfloat *) bp; bp += 64;
weglMultMatrixf(m);
-}; break;
-case 5194: { // glNewList
+}; break;
+case 5194: { // glNewList
GLuint *list = (GLuint *) bp; bp += 4;
GLenum *mode = (GLenum *) bp; bp += 4;
weglNewList(*list,*mode);
-}; break;
-case 5195: { // glNormal3bv
+}; break;
+case 5195: { // glNormal3bv
GLbyte *v = (GLbyte *) bp; bp += 1;
weglNormal3bv(v);
-}; break;
-case 5196: { // glNormal3dv
+}; break;
+case 5196: { // glNormal3dv
GLdouble *v = (GLdouble *) bp; bp += 8;
weglNormal3dv(v);
-}; break;
-case 5197: { // glNormal3fv
+}; break;
+case 5197: { // glNormal3fv
GLfloat *v = (GLfloat *) bp; bp += 4;
weglNormal3fv(v);
-}; break;
-case 5198: { // glNormal3iv
+}; break;
+case 5198: { // glNormal3iv
GLint *v = (GLint *) bp; bp += 4;
weglNormal3iv(v);
-}; break;
-case 5199: { // glNormal3sv
+}; break;
+case 5199: { // glNormal3sv
GLshort *v = (GLshort *) bp; bp += 2;
weglNormal3sv(v);
-}; break;
-case 5200: { // glNormalPointer
+}; break;
+case 5200: { // glNormalPointer
GLenum *type = (GLenum *) bp; bp += 4;
GLsizei *stride = (GLsizei *) bp; bp += 4;
GLvoid *pointer = (GLvoid *) * (int *) bp; bp += 4;
weglNormalPointer(*type,*stride,pointer);
-}; break;
-case 5201: { // glNormalPointer
+}; break;
+case 5201: { // glNormalPointer
GLenum *type = (GLenum *) bp; bp += 4;
GLsizei *stride = (GLsizei *) bp; bp += 4;
GLvoid *pointer = (GLvoid *) bins[0]->base;
weglNormalPointer(*type,*stride,pointer);
-}; break;
-case 5202: { // glOrtho
+}; break;
+case 5202: { // glOrtho
GLdouble *left = (GLdouble *) bp; bp += 8;
GLdouble *right = (GLdouble *) bp; bp += 8;
GLdouble *bottom = (GLdouble *) bp; bp += 8;
@@ -1641,159 +1641,159 @@ case 5202: { // glOrtho
GLdouble *zNear = (GLdouble *) bp; bp += 8;
GLdouble *zFar = (GLdouble *) bp; bp += 8;
weglOrtho(*left,*right,*bottom,*top,*zNear,*zFar);
-}; break;
-case 5203: { // glPassThrough
+}; break;
+case 5203: { // glPassThrough
GLfloat *token = (GLfloat *) bp; bp += 4;
weglPassThrough(*token);
-}; break;
-case 5204: { // glPixelMapfv
+}; break;
+case 5204: { // glPixelMapfv
GLenum *map = (GLenum *) bp; bp += 4;
GLsizei *mapsize = (GLsizei *) bp; bp += 4;
GLfloat *values = (GLfloat *) bins[0]->base;
weglPixelMapfv(*map,*mapsize,values);
-}; break;
-case 5205: { // glPixelMapuiv
+}; break;
+case 5205: { // glPixelMapuiv
GLenum *map = (GLenum *) bp; bp += 4;
GLsizei *mapsize = (GLsizei *) bp; bp += 4;
GLuint *values = (GLuint *) bins[0]->base;
weglPixelMapuiv(*map,*mapsize,values);
-}; break;
-case 5206: { // glPixelMapusv
+}; break;
+case 5206: { // glPixelMapusv
GLenum *map = (GLenum *) bp; bp += 4;
GLsizei *mapsize = (GLsizei *) bp; bp += 4;
GLushort *values = (GLushort *) bins[0]->base;
weglPixelMapusv(*map,*mapsize,values);
-}; break;
-case 5207: { // glPixelStoref
+}; break;
+case 5207: { // glPixelStoref
GLenum *pname = (GLenum *) bp; bp += 4;
GLfloat *param = (GLfloat *) bp; bp += 4;
weglPixelStoref(*pname,*param);
-}; break;
-case 5208: { // glPixelStorei
+}; break;
+case 5208: { // glPixelStorei
GLenum *pname = (GLenum *) bp; bp += 4;
GLint *param = (GLint *) bp; bp += 4;
weglPixelStorei(*pname,*param);
-}; break;
-case 5209: { // glPixelTransferf
+}; break;
+case 5209: { // glPixelTransferf
GLenum *pname = (GLenum *) bp; bp += 4;
GLfloat *param = (GLfloat *) bp; bp += 4;
weglPixelTransferf(*pname,*param);
-}; break;
-case 5210: { // glPixelTransferi
+}; break;
+case 5210: { // glPixelTransferi
GLenum *pname = (GLenum *) bp; bp += 4;
GLint *param = (GLint *) bp; bp += 4;
weglPixelTransferi(*pname,*param);
-}; break;
-case 5211: { // glPixelZoom
+}; break;
+case 5211: { // glPixelZoom
GLfloat *xfactor = (GLfloat *) bp; bp += 4;
GLfloat *yfactor = (GLfloat *) bp; bp += 4;
weglPixelZoom(*xfactor,*yfactor);
-}; break;
-case 5212: { // glPointSize
+}; break;
+case 5212: { // glPointSize
GLfloat *size = (GLfloat *) bp; bp += 4;
weglPointSize(*size);
-}; break;
-case 5213: { // glPolygonMode
+}; break;
+case 5213: { // glPolygonMode
GLenum *face = (GLenum *) bp; bp += 4;
GLenum *mode = (GLenum *) bp; bp += 4;
weglPolygonMode(*face,*mode);
-}; break;
-case 5214: { // glPolygonOffset
+}; break;
+case 5214: { // glPolygonOffset
GLfloat *factor = (GLfloat *) bp; bp += 4;
GLfloat *units = (GLfloat *) bp; bp += 4;
weglPolygonOffset(*factor,*units);
-}; break;
-case 5215: { // glPolygonStipple
+}; break;
+case 5215: { // glPolygonStipple
GLubyte *mask = (GLubyte *) bins[0]->base;
weglPolygonStipple(mask);
-}; break;
-case 5216: { // glPopAttrib
+}; break;
+case 5216: { // glPopAttrib
weglPopAttrib();
-}; break;
-case 5217: { // glPopClientAttrib
+}; break;
+case 5217: { // glPopClientAttrib
weglPopClientAttrib();
-}; break;
-case 5218: { // glPopMatrix
+}; break;
+case 5218: { // glPopMatrix
weglPopMatrix();
-}; break;
-case 5219: { // glPopName
+}; break;
+case 5219: { // glPopName
weglPopName();
-}; break;
-case 5220: { // glPrioritizeTextures
+}; break;
+case 5220: { // glPrioritizeTextures
int * texturesLen = (int *) bp; bp += 4;
GLuint * textures = (GLuint *) bp; bp += (8-((*texturesLen*4+4)%8))%8;
int * prioritiesLen = (int *) bp; bp += 4;
GLclampf * priorities = (GLclampf *) bp; bp += (8-((*prioritiesLen*4+4)%8))%8;
weglPrioritizeTextures(*texturesLen,textures,priorities);
-}; break;
-case 5221: { // glPushAttrib
+}; break;
+case 5221: { // glPushAttrib
GLbitfield *mask = (GLbitfield *) bp; bp += 4;
weglPushAttrib(*mask);
-}; break;
-case 5222: { // glPushClientAttrib
+}; break;
+case 5222: { // glPushClientAttrib
GLbitfield *mask = (GLbitfield *) bp; bp += 4;
weglPushClientAttrib(*mask);
-}; break;
-case 5223: { // glPushMatrix
+}; break;
+case 5223: { // glPushMatrix
weglPushMatrix();
-}; break;
-case 5224: { // glPushName
+}; break;
+case 5224: { // glPushName
GLuint *name = (GLuint *) bp; bp += 4;
weglPushName(*name);
-}; break;
-case 5225: { // glRasterPos2dv
+}; break;
+case 5225: { // glRasterPos2dv
GLdouble *v = (GLdouble *) bp; bp += 8;
weglRasterPos2dv(v);
-}; break;
-case 5226: { // glRasterPos2fv
+}; break;
+case 5226: { // glRasterPos2fv
GLfloat *v = (GLfloat *) bp; bp += 4;
weglRasterPos2fv(v);
-}; break;
-case 5227: { // glRasterPos2iv
+}; break;
+case 5227: { // glRasterPos2iv
GLint *v = (GLint *) bp; bp += 4;
weglRasterPos2iv(v);
-}; break;
-case 5228: { // glRasterPos2sv
+}; break;
+case 5228: { // glRasterPos2sv
GLshort *v = (GLshort *) bp; bp += 2;
weglRasterPos2sv(v);
-}; break;
-case 5229: { // glRasterPos3dv
+}; break;
+case 5229: { // glRasterPos3dv
GLdouble *v = (GLdouble *) bp; bp += 8;
weglRasterPos3dv(v);
-}; break;
-case 5230: { // glRasterPos3fv
+}; break;
+case 5230: { // glRasterPos3fv
GLfloat *v = (GLfloat *) bp; bp += 4;
weglRasterPos3fv(v);
-}; break;
-case 5231: { // glRasterPos3iv
+}; break;
+case 5231: { // glRasterPos3iv
GLint *v = (GLint *) bp; bp += 4;
weglRasterPos3iv(v);
-}; break;
-case 5232: { // glRasterPos3sv
+}; break;
+case 5232: { // glRasterPos3sv
GLshort *v = (GLshort *) bp; bp += 2;
weglRasterPos3sv(v);
-}; break;
-case 5233: { // glRasterPos4dv
+}; break;
+case 5233: { // glRasterPos4dv
GLdouble *v = (GLdouble *) bp; bp += 8;
weglRasterPos4dv(v);
-}; break;
-case 5234: { // glRasterPos4fv
+}; break;
+case 5234: { // glRasterPos4fv
GLfloat *v = (GLfloat *) bp; bp += 4;
weglRasterPos4fv(v);
-}; break;
-case 5235: { // glRasterPos4iv
+}; break;
+case 5235: { // glRasterPos4iv
GLint *v = (GLint *) bp; bp += 4;
weglRasterPos4iv(v);
-}; break;
-case 5236: { // glRasterPos4sv
+}; break;
+case 5236: { // glRasterPos4sv
GLshort *v = (GLshort *) bp; bp += 2;
weglRasterPos4sv(v);
-}; break;
-case 5237: { // glReadBuffer
+}; break;
+case 5237: { // glReadBuffer
GLenum *mode = (GLenum *) bp; bp += 4;
weglReadBuffer(*mode);
-}; break;
-case 5238: { // glReadPixels
+}; break;
+case 5238: { // glReadPixels
GLint *x = (GLint *) bp; bp += 4;
GLint *y = (GLint *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
@@ -1807,56 +1807,56 @@ case 5238: { // glReadPixels
rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "ok");
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5239: { // glRectd
+}; break;
+case 5239: { // glRectd
GLdouble *x1 = (GLdouble *) bp; bp += 8;
GLdouble *y1 = (GLdouble *) bp; bp += 8;
GLdouble *x2 = (GLdouble *) bp; bp += 8;
GLdouble *y2 = (GLdouble *) bp; bp += 8;
weglRectd(*x1,*y1,*x2,*y2);
-}; break;
-case 5240: { // glRectdv
+}; break;
+case 5240: { // glRectdv
GLdouble * v1 = (GLdouble *) bp; bp += 16;
GLdouble * v2 = (GLdouble *) bp; bp += 16;
weglRectdv(v1,v2);
-}; break;
-case 5241: { // glRectf
+}; break;
+case 5241: { // glRectf
GLfloat *x1 = (GLfloat *) bp; bp += 4;
GLfloat *y1 = (GLfloat *) bp; bp += 4;
GLfloat *x2 = (GLfloat *) bp; bp += 4;
GLfloat *y2 = (GLfloat *) bp; bp += 4;
weglRectf(*x1,*y1,*x2,*y2);
-}; break;
-case 5242: { // glRectfv
+}; break;
+case 5242: { // glRectfv
GLfloat * v1 = (GLfloat *) bp; bp += 8;
GLfloat * v2 = (GLfloat *) bp; bp += 8;
weglRectfv(v1,v2);
-}; break;
-case 5243: { // glRecti
+}; break;
+case 5243: { // glRecti
GLint *x1 = (GLint *) bp; bp += 4;
GLint *y1 = (GLint *) bp; bp += 4;
GLint *x2 = (GLint *) bp; bp += 4;
GLint *y2 = (GLint *) bp; bp += 4;
weglRecti(*x1,*y1,*x2,*y2);
-}; break;
-case 5244: { // glRectiv
+}; break;
+case 5244: { // glRectiv
GLint * v1 = (GLint *) bp; bp += 8;
GLint * v2 = (GLint *) bp; bp += 8;
weglRectiv(v1,v2);
-}; break;
-case 5245: { // glRects
+}; break;
+case 5245: { // glRects
GLshort *x1 = (GLshort *) bp; bp += 2;
GLshort *y1 = (GLshort *) bp; bp += 2;
GLshort *x2 = (GLshort *) bp; bp += 2;
GLshort *y2 = (GLshort *) bp; bp += 2;
weglRects(*x1,*y1,*x2,*y2);
-}; break;
-case 5246: { // glRectsv
+}; break;
+case 5246: { // glRectsv
GLshort * v1 = (GLshort *) bp; bp += 4;
GLshort * v2 = (GLshort *) bp; bp += 4;
weglRectsv(v1,v2);
-}; break;
-case 5247: { // glRenderMode
+}; break;
+case 5247: { // glRenderMode
GLenum *mode = (GLenum *) bp; bp += 4;
GLint result = weglRenderMode(*mode);
int AP = 0; ErlDrvTermData rt[6];
@@ -1865,41 +1865,41 @@ case 5247: { // glRenderMode
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5248: { // glRotated
+}; break;
+case 5248: { // glRotated
GLdouble *angle = (GLdouble *) bp; bp += 8;
GLdouble *x = (GLdouble *) bp; bp += 8;
GLdouble *y = (GLdouble *) bp; bp += 8;
GLdouble *z = (GLdouble *) bp; bp += 8;
weglRotated(*angle,*x,*y,*z);
-}; break;
-case 5249: { // glRotatef
+}; break;
+case 5249: { // glRotatef
GLfloat *angle = (GLfloat *) bp; bp += 4;
GLfloat *x = (GLfloat *) bp; bp += 4;
GLfloat *y = (GLfloat *) bp; bp += 4;
GLfloat *z = (GLfloat *) bp; bp += 4;
weglRotatef(*angle,*x,*y,*z);
-}; break;
-case 5250: { // glScaled
+}; break;
+case 5250: { // glScaled
GLdouble *x = (GLdouble *) bp; bp += 8;
GLdouble *y = (GLdouble *) bp; bp += 8;
GLdouble *z = (GLdouble *) bp; bp += 8;
weglScaled(*x,*y,*z);
-}; break;
-case 5251: { // glScalef
+}; break;
+case 5251: { // glScalef
GLfloat *x = (GLfloat *) bp; bp += 4;
GLfloat *y = (GLfloat *) bp; bp += 4;
GLfloat *z = (GLfloat *) bp; bp += 4;
weglScalef(*x,*y,*z);
-}; break;
-case 5252: { // glScissor
+}; break;
+case 5252: { // glScissor
GLint *x = (GLint *) bp; bp += 4;
GLint *y = (GLint *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
GLsizei *height = (GLsizei *) bp; bp += 4;
weglScissor(*x,*y,*width,*height);
-}; break;
-case 5253: { // glSelectBuffer
+}; break;
+case 5253: { // glSelectBuffer
GLsizei *size = (GLsizei *) bp; bp += 4;
GLuint *buffer = (GLuint *) bins[0]->base;
weglSelectBuffer(*size,buffer);
@@ -1908,171 +1908,171 @@ case 5253: { // glSelectBuffer
rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "ok");
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5254: { // glShadeModel
+}; break;
+case 5254: { // glShadeModel
GLenum *mode = (GLenum *) bp; bp += 4;
weglShadeModel(*mode);
-}; break;
-case 5255: { // glStencilFunc
+}; break;
+case 5255: { // glStencilFunc
GLenum *func = (GLenum *) bp; bp += 4;
GLint *ref = (GLint *) bp; bp += 4;
GLuint *mask = (GLuint *) bp; bp += 4;
weglStencilFunc(*func,*ref,*mask);
-}; break;
-case 5256: { // glStencilMask
+}; break;
+case 5256: { // glStencilMask
GLuint *mask = (GLuint *) bp; bp += 4;
weglStencilMask(*mask);
-}; break;
-case 5257: { // glStencilOp
+}; break;
+case 5257: { // glStencilOp
GLenum *fail = (GLenum *) bp; bp += 4;
GLenum *zfail = (GLenum *) bp; bp += 4;
GLenum *zpass = (GLenum *) bp; bp += 4;
weglStencilOp(*fail,*zfail,*zpass);
-}; break;
-case 5258: { // glTexCoord1dv
+}; break;
+case 5258: { // glTexCoord1dv
GLdouble *v = (GLdouble *) bp; bp += 8;
weglTexCoord1dv(v);
-}; break;
-case 5259: { // glTexCoord1fv
+}; break;
+case 5259: { // glTexCoord1fv
GLfloat *v = (GLfloat *) bp; bp += 4;
weglTexCoord1fv(v);
-}; break;
-case 5260: { // glTexCoord1iv
+}; break;
+case 5260: { // glTexCoord1iv
GLint *v = (GLint *) bp; bp += 4;
weglTexCoord1iv(v);
-}; break;
-case 5261: { // glTexCoord1sv
+}; break;
+case 5261: { // glTexCoord1sv
GLshort *v = (GLshort *) bp; bp += 2;
weglTexCoord1sv(v);
-}; break;
-case 5262: { // glTexCoord2dv
+}; break;
+case 5262: { // glTexCoord2dv
GLdouble *v = (GLdouble *) bp; bp += 8;
weglTexCoord2dv(v);
-}; break;
-case 5263: { // glTexCoord2fv
+}; break;
+case 5263: { // glTexCoord2fv
GLfloat *v = (GLfloat *) bp; bp += 4;
weglTexCoord2fv(v);
-}; break;
-case 5264: { // glTexCoord2iv
+}; break;
+case 5264: { // glTexCoord2iv
GLint *v = (GLint *) bp; bp += 4;
weglTexCoord2iv(v);
-}; break;
-case 5265: { // glTexCoord2sv
+}; break;
+case 5265: { // glTexCoord2sv
GLshort *v = (GLshort *) bp; bp += 2;
weglTexCoord2sv(v);
-}; break;
-case 5266: { // glTexCoord3dv
+}; break;
+case 5266: { // glTexCoord3dv
GLdouble *v = (GLdouble *) bp; bp += 8;
weglTexCoord3dv(v);
-}; break;
-case 5267: { // glTexCoord3fv
+}; break;
+case 5267: { // glTexCoord3fv
GLfloat *v = (GLfloat *) bp; bp += 4;
weglTexCoord3fv(v);
-}; break;
-case 5268: { // glTexCoord3iv
+}; break;
+case 5268: { // glTexCoord3iv
GLint *v = (GLint *) bp; bp += 4;
weglTexCoord3iv(v);
-}; break;
-case 5269: { // glTexCoord3sv
+}; break;
+case 5269: { // glTexCoord3sv
GLshort *v = (GLshort *) bp; bp += 2;
weglTexCoord3sv(v);
-}; break;
-case 5270: { // glTexCoord4dv
+}; break;
+case 5270: { // glTexCoord4dv
GLdouble *v = (GLdouble *) bp; bp += 8;
weglTexCoord4dv(v);
-}; break;
-case 5271: { // glTexCoord4fv
+}; break;
+case 5271: { // glTexCoord4fv
GLfloat *v = (GLfloat *) bp; bp += 4;
weglTexCoord4fv(v);
-}; break;
-case 5272: { // glTexCoord4iv
+}; break;
+case 5272: { // glTexCoord4iv
GLint *v = (GLint *) bp; bp += 4;
weglTexCoord4iv(v);
-}; break;
-case 5273: { // glTexCoord4sv
+}; break;
+case 5273: { // glTexCoord4sv
GLshort *v = (GLshort *) bp; bp += 2;
weglTexCoord4sv(v);
-}; break;
-case 5274: { // glTexCoordPointer
+}; break;
+case 5274: { // glTexCoordPointer
GLint *size = (GLint *) bp; bp += 4;
GLenum *type = (GLenum *) bp; bp += 4;
GLsizei *stride = (GLsizei *) bp; bp += 4;
GLvoid *pointer = (GLvoid *) * (int *) bp; bp += 4;
weglTexCoordPointer(*size,*type,*stride,pointer);
-}; break;
-case 5275: { // glTexCoordPointer
+}; break;
+case 5275: { // glTexCoordPointer
GLint *size = (GLint *) bp; bp += 4;
GLenum *type = (GLenum *) bp; bp += 4;
GLsizei *stride = (GLsizei *) bp; bp += 4;
GLvoid *pointer = (GLvoid *) bins[0]->base;
weglTexCoordPointer(*size,*type,*stride,pointer);
-}; break;
-case 5276: { // glTexEnvf
+}; break;
+case 5276: { // glTexEnvf
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLfloat *param = (GLfloat *) bp; bp += 4;
weglTexEnvf(*target,*pname,*param);
-}; break;
-case 5277: { // glTexEnvfv
+}; break;
+case 5277: { // glTexEnvfv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
int *paramsLen = (int *) bp; bp += 4;
GLfloat *params = (GLfloat *) bp; bp += *paramsLen*4+((*paramsLen)+1)%2*4;
weglTexEnvfv(*target,*pname,params);
-}; break;
-case 5278: { // glTexEnvi
+}; break;
+case 5278: { // glTexEnvi
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint *param = (GLint *) bp; bp += 4;
weglTexEnvi(*target,*pname,*param);
-}; break;
-case 5279: { // glTexEnviv
+}; break;
+case 5279: { // glTexEnviv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
int *paramsLen = (int *) bp; bp += 4;
GLint *params = (GLint *) bp; bp += *paramsLen*4+((*paramsLen)+1)%2*4;
weglTexEnviv(*target,*pname,params);
-}; break;
-case 5280: { // glTexGend
+}; break;
+case 5280: { // glTexGend
GLenum *coord = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLdouble *param = (GLdouble *) bp; bp += 8;
weglTexGend(*coord,*pname,*param);
-}; break;
-case 5281: { // glTexGendv
+}; break;
+case 5281: { // glTexGendv
GLenum *coord = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
int *paramsLen = (int *) bp; bp += 8;
GLdouble *params = (GLdouble *) bp; bp += *paramsLen*8;
weglTexGendv(*coord,*pname,params);
-}; break;
-case 5282: { // glTexGenf
+}; break;
+case 5282: { // glTexGenf
GLenum *coord = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLfloat *param = (GLfloat *) bp; bp += 4;
weglTexGenf(*coord,*pname,*param);
-}; break;
-case 5283: { // glTexGenfv
+}; break;
+case 5283: { // glTexGenfv
GLenum *coord = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
int *paramsLen = (int *) bp; bp += 4;
GLfloat *params = (GLfloat *) bp; bp += *paramsLen*4+((*paramsLen)+1)%2*4;
weglTexGenfv(*coord,*pname,params);
-}; break;
-case 5284: { // glTexGeni
+}; break;
+case 5284: { // glTexGeni
GLenum *coord = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint *param = (GLint *) bp; bp += 4;
weglTexGeni(*coord,*pname,*param);
-}; break;
-case 5285: { // glTexGeniv
+}; break;
+case 5285: { // glTexGeniv
GLenum *coord = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
int *paramsLen = (int *) bp; bp += 4;
GLint *params = (GLint *) bp; bp += *paramsLen*4+((*paramsLen)+1)%2*4;
weglTexGeniv(*coord,*pname,params);
-}; break;
-case 5286: { // glTexImage1D
+}; break;
+case 5286: { // glTexImage1D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLint *internalformat = (GLint *) bp; bp += 4;
@@ -2082,8 +2082,8 @@ case 5286: { // glTexImage1D
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *pixels = (GLvoid *) * (int *) bp; bp += 4;
weglTexImage1D(*target,*level,*internalformat,*width,*border,*format,*type,pixels);
-}; break;
-case 5287: { // glTexImage1D
+}; break;
+case 5287: { // glTexImage1D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLint *internalformat = (GLint *) bp; bp += 4;
@@ -2093,8 +2093,8 @@ case 5287: { // glTexImage1D
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *pixels = (GLvoid *) bins[0]->base;
weglTexImage1D(*target,*level,*internalformat,*width,*border,*format,*type,pixels);
-}; break;
-case 5288: { // glTexImage2D
+}; break;
+case 5288: { // glTexImage2D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLint *internalformat = (GLint *) bp; bp += 4;
@@ -2105,8 +2105,8 @@ case 5288: { // glTexImage2D
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *pixels = (GLvoid *) * (int *) bp; bp += 4;
weglTexImage2D(*target,*level,*internalformat,*width,*height,*border,*format,*type,pixels);
-}; break;
-case 5289: { // glTexImage2D
+}; break;
+case 5289: { // glTexImage2D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLint *internalformat = (GLint *) bp; bp += 4;
@@ -2117,34 +2117,34 @@ case 5289: { // glTexImage2D
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *pixels = (GLvoid *) bins[0]->base;
weglTexImage2D(*target,*level,*internalformat,*width,*height,*border,*format,*type,pixels);
-}; break;
-case 5290: { // glTexParameterf
+}; break;
+case 5290: { // glTexParameterf
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLfloat *param = (GLfloat *) bp; bp += 4;
weglTexParameterf(*target,*pname,*param);
-}; break;
-case 5291: { // glTexParameterfv
+}; break;
+case 5291: { // glTexParameterfv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
int *paramsLen = (int *) bp; bp += 4;
GLfloat *params = (GLfloat *) bp; bp += *paramsLen*4+((*paramsLen)+1)%2*4;
weglTexParameterfv(*target,*pname,params);
-}; break;
-case 5292: { // glTexParameteri
+}; break;
+case 5292: { // glTexParameteri
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint *param = (GLint *) bp; bp += 4;
weglTexParameteri(*target,*pname,*param);
-}; break;
-case 5293: { // glTexParameteriv
+}; break;
+case 5293: { // glTexParameteriv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
int *paramsLen = (int *) bp; bp += 4;
GLint *params = (GLint *) bp; bp += *paramsLen*4+((*paramsLen)+1)%2*4;
weglTexParameteriv(*target,*pname,params);
-}; break;
-case 5294: { // glTexSubImage1D
+}; break;
+case 5294: { // glTexSubImage1D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLint *xoffset = (GLint *) bp; bp += 4;
@@ -2153,8 +2153,8 @@ case 5294: { // glTexSubImage1D
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *pixels = (GLvoid *) * (int *) bp; bp += 4;
weglTexSubImage1D(*target,*level,*xoffset,*width,*format,*type,pixels);
-}; break;
-case 5295: { // glTexSubImage1D
+}; break;
+case 5295: { // glTexSubImage1D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLint *xoffset = (GLint *) bp; bp += 4;
@@ -2163,8 +2163,8 @@ case 5295: { // glTexSubImage1D
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *pixels = (GLvoid *) bins[0]->base;
weglTexSubImage1D(*target,*level,*xoffset,*width,*format,*type,pixels);
-}; break;
-case 5296: { // glTexSubImage2D
+}; break;
+case 5296: { // glTexSubImage2D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLint *xoffset = (GLint *) bp; bp += 4;
@@ -2175,8 +2175,8 @@ case 5296: { // glTexSubImage2D
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *pixels = (GLvoid *) * (int *) bp; bp += 4;
weglTexSubImage2D(*target,*level,*xoffset,*yoffset,*width,*height,*format,*type,pixels);
-}; break;
-case 5297: { // glTexSubImage2D
+}; break;
+case 5297: { // glTexSubImage2D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLint *xoffset = (GLint *) bp; bp += 4;
@@ -2187,100 +2187,100 @@ case 5297: { // glTexSubImage2D
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *pixels = (GLvoid *) bins[0]->base;
weglTexSubImage2D(*target,*level,*xoffset,*yoffset,*width,*height,*format,*type,pixels);
-}; break;
-case 5298: { // glTranslated
+}; break;
+case 5298: { // glTranslated
GLdouble *x = (GLdouble *) bp; bp += 8;
GLdouble *y = (GLdouble *) bp; bp += 8;
GLdouble *z = (GLdouble *) bp; bp += 8;
weglTranslated(*x,*y,*z);
-}; break;
-case 5299: { // glTranslatef
+}; break;
+case 5299: { // glTranslatef
GLfloat *x = (GLfloat *) bp; bp += 4;
GLfloat *y = (GLfloat *) bp; bp += 4;
GLfloat *z = (GLfloat *) bp; bp += 4;
weglTranslatef(*x,*y,*z);
-}; break;
-case 5300: { // glVertex2dv
+}; break;
+case 5300: { // glVertex2dv
GLdouble *v = (GLdouble *) bp; bp += 8;
weglVertex2dv(v);
-}; break;
-case 5301: { // glVertex2fv
+}; break;
+case 5301: { // glVertex2fv
GLfloat *v = (GLfloat *) bp; bp += 4;
weglVertex2fv(v);
-}; break;
-case 5302: { // glVertex2iv
+}; break;
+case 5302: { // glVertex2iv
GLint *v = (GLint *) bp; bp += 4;
weglVertex2iv(v);
-}; break;
-case 5303: { // glVertex2sv
+}; break;
+case 5303: { // glVertex2sv
GLshort *v = (GLshort *) bp; bp += 2;
weglVertex2sv(v);
-}; break;
-case 5304: { // glVertex3dv
+}; break;
+case 5304: { // glVertex3dv
GLdouble *v = (GLdouble *) bp; bp += 8;
weglVertex3dv(v);
-}; break;
-case 5305: { // glVertex3fv
+}; break;
+case 5305: { // glVertex3fv
GLfloat *v = (GLfloat *) bp; bp += 4;
weglVertex3fv(v);
-}; break;
-case 5306: { // glVertex3iv
+}; break;
+case 5306: { // glVertex3iv
GLint *v = (GLint *) bp; bp += 4;
weglVertex3iv(v);
-}; break;
-case 5307: { // glVertex3sv
+}; break;
+case 5307: { // glVertex3sv
GLshort *v = (GLshort *) bp; bp += 2;
weglVertex3sv(v);
-}; break;
-case 5308: { // glVertex4dv
+}; break;
+case 5308: { // glVertex4dv
GLdouble *v = (GLdouble *) bp; bp += 8;
weglVertex4dv(v);
-}; break;
-case 5309: { // glVertex4fv
+}; break;
+case 5309: { // glVertex4fv
GLfloat *v = (GLfloat *) bp; bp += 4;
weglVertex4fv(v);
-}; break;
-case 5310: { // glVertex4iv
+}; break;
+case 5310: { // glVertex4iv
GLint *v = (GLint *) bp; bp += 4;
weglVertex4iv(v);
-}; break;
-case 5311: { // glVertex4sv
+}; break;
+case 5311: { // glVertex4sv
GLshort *v = (GLshort *) bp; bp += 2;
weglVertex4sv(v);
-}; break;
-case 5312: { // glVertexPointer
+}; break;
+case 5312: { // glVertexPointer
GLint *size = (GLint *) bp; bp += 4;
GLenum *type = (GLenum *) bp; bp += 4;
GLsizei *stride = (GLsizei *) bp; bp += 4;
GLvoid *pointer = (GLvoid *) * (int *) bp; bp += 4;
weglVertexPointer(*size,*type,*stride,pointer);
-}; break;
-case 5313: { // glVertexPointer
+}; break;
+case 5313: { // glVertexPointer
GLint *size = (GLint *) bp; bp += 4;
GLenum *type = (GLenum *) bp; bp += 4;
GLsizei *stride = (GLsizei *) bp; bp += 4;
GLvoid *pointer = (GLvoid *) bins[0]->base;
weglVertexPointer(*size,*type,*stride,pointer);
-}; break;
-case 5314: { // glViewport
+}; break;
+case 5314: { // glViewport
GLint *x = (GLint *) bp; bp += 4;
GLint *y = (GLint *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
GLsizei *height = (GLsizei *) bp; bp += 4;
weglViewport(*x,*y,*width,*height);
-}; break;
-case 5315: { // glBlendColor
+}; break;
+case 5315: { // glBlendColor
GLclampf *red = (GLclampf *) bp; bp += 4;
GLclampf *green = (GLclampf *) bp; bp += 4;
GLclampf *blue = (GLclampf *) bp; bp += 4;
GLclampf *alpha = (GLclampf *) bp; bp += 4;
weglBlendColor(*red,*green,*blue,*alpha);
-}; break;
-case 5316: { // glBlendEquation
+}; break;
+case 5316: { // glBlendEquation
GLenum *mode = (GLenum *) bp; bp += 4;
weglBlendEquation(*mode);
-}; break;
-case 5317: { // glDrawRangeElements
+}; break;
+case 5317: { // glDrawRangeElements
GLenum *mode = (GLenum *) bp; bp += 4;
GLuint *start = (GLuint *) bp; bp += 4;
GLuint *end = (GLuint *) bp; bp += 4;
@@ -2288,8 +2288,8 @@ case 5317: { // glDrawRangeElements
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *indices = (GLvoid *) * (int *) bp; bp += 4;
weglDrawRangeElements(*mode,*start,*end,*count,*type,indices);
-}; break;
-case 5318: { // glDrawRangeElements
+}; break;
+case 5318: { // glDrawRangeElements
GLenum *mode = (GLenum *) bp; bp += 4;
GLuint *start = (GLuint *) bp; bp += 4;
GLuint *end = (GLuint *) bp; bp += 4;
@@ -2297,8 +2297,8 @@ case 5318: { // glDrawRangeElements
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *indices = (GLvoid *) bins[0]->base;
weglDrawRangeElements(*mode,*start,*end,*count,*type,indices);
-}; break;
-case 5319: { // glTexImage3D
+}; break;
+case 5319: { // glTexImage3D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLint *internalformat = (GLint *) bp; bp += 4;
@@ -2310,8 +2310,8 @@ case 5319: { // glTexImage3D
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *pixels = (GLvoid *) * (int *) bp; bp += 4;
weglTexImage3D(*target,*level,*internalformat,*width,*height,*depth,*border,*format,*type,pixels);
-}; break;
-case 5320: { // glTexImage3D
+}; break;
+case 5320: { // glTexImage3D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLint *internalformat = (GLint *) bp; bp += 4;
@@ -2323,8 +2323,8 @@ case 5320: { // glTexImage3D
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *pixels = (GLvoid *) bins[0]->base;
weglTexImage3D(*target,*level,*internalformat,*width,*height,*depth,*border,*format,*type,pixels);
-}; break;
-case 5321: { // glTexSubImage3D
+}; break;
+case 5321: { // glTexSubImage3D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLint *xoffset = (GLint *) bp; bp += 4;
@@ -2337,8 +2337,8 @@ case 5321: { // glTexSubImage3D
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *pixels = (GLvoid *) * (int *) bp; bp += 4;
weglTexSubImage3D(*target,*level,*xoffset,*yoffset,*zoffset,*width,*height,*depth,*format,*type,pixels);
-}; break;
-case 5322: { // glTexSubImage3D
+}; break;
+case 5322: { // glTexSubImage3D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLint *xoffset = (GLint *) bp; bp += 4;
@@ -2351,8 +2351,8 @@ case 5322: { // glTexSubImage3D
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *pixels = (GLvoid *) bins[0]->base;
weglTexSubImage3D(*target,*level,*xoffset,*yoffset,*zoffset,*width,*height,*depth,*format,*type,pixels);
-}; break;
-case 5323: { // glCopyTexSubImage3D
+}; break;
+case 5323: { // glCopyTexSubImage3D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLint *xoffset = (GLint *) bp; bp += 4;
@@ -2363,8 +2363,8 @@ case 5323: { // glCopyTexSubImage3D
GLsizei *width = (GLsizei *) bp; bp += 4;
GLsizei *height = (GLsizei *) bp; bp += 4;
weglCopyTexSubImage3D(*target,*level,*xoffset,*yoffset,*zoffset,*x,*y,*width,*height);
-}; break;
-case 5324: { // glColorTable
+}; break;
+case 5324: { // glColorTable
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *internalformat = (GLenum *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
@@ -2372,8 +2372,8 @@ case 5324: { // glColorTable
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *table = (GLvoid *) * (int *) bp; bp += 4;
weglColorTable(*target,*internalformat,*width,*format,*type,table);
-}; break;
-case 5325: { // glColorTable
+}; break;
+case 5325: { // glColorTable
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *internalformat = (GLenum *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
@@ -2381,28 +2381,28 @@ case 5325: { // glColorTable
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *table = (GLvoid *) bins[0]->base;
weglColorTable(*target,*internalformat,*width,*format,*type,table);
-}; break;
-case 5326: { // glColorTableParameterfv
+}; break;
+case 5326: { // glColorTableParameterfv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLfloat * params = (GLfloat *) bp; bp += 16;
weglColorTableParameterfv(*target,*pname,params);
-}; break;
-case 5327: { // glColorTableParameteriv
+}; break;
+case 5327: { // glColorTableParameteriv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint * params = (GLint *) bp; bp += 16;
weglColorTableParameteriv(*target,*pname,params);
-}; break;
-case 5328: { // glCopyColorTable
+}; break;
+case 5328: { // glCopyColorTable
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *internalformat = (GLenum *) bp; bp += 4;
GLint *x = (GLint *) bp; bp += 4;
GLint *y = (GLint *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
weglCopyColorTable(*target,*internalformat,*x,*y,*width);
-}; break;
-case 5329: { // glGetColorTable
+}; break;
+case 5329: { // glGetColorTable
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *format = (GLenum *) bp; bp += 4;
GLenum *type = (GLenum *) bp; bp += 4;
@@ -2413,8 +2413,8 @@ case 5329: { // glGetColorTable
rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "ok");
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5330: { // glGetColorTableParameterfv
+}; break;
+case 5330: { // glGetColorTableParameterfv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLfloat params[4] = {0.0,0.0,0.0,0.0};
@@ -2431,8 +2431,8 @@ case 5330: { // glGetColorTableParameterfv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5331: { // glGetColorTableParameteriv
+}; break;
+case 5331: { // glGetColorTableParameteriv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint params[4] = {0,0,0,0};
@@ -2448,8 +2448,8 @@ case 5331: { // glGetColorTableParameteriv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5332: { // glColorSubTable
+}; break;
+case 5332: { // glColorSubTable
GLenum *target = (GLenum *) bp; bp += 4;
GLsizei *start = (GLsizei *) bp; bp += 4;
GLsizei *count = (GLsizei *) bp; bp += 4;
@@ -2457,8 +2457,8 @@ case 5332: { // glColorSubTable
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *data = (GLvoid *) * (int *) bp; bp += 4;
weglColorSubTable(*target,*start,*count,*format,*type,data);
-}; break;
-case 5333: { // glColorSubTable
+}; break;
+case 5333: { // glColorSubTable
GLenum *target = (GLenum *) bp; bp += 4;
GLsizei *start = (GLsizei *) bp; bp += 4;
GLsizei *count = (GLsizei *) bp; bp += 4;
@@ -2466,16 +2466,16 @@ case 5333: { // glColorSubTable
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *data = (GLvoid *) bins[0]->base;
weglColorSubTable(*target,*start,*count,*format,*type,data);
-}; break;
-case 5334: { // glCopyColorSubTable
+}; break;
+case 5334: { // glCopyColorSubTable
GLenum *target = (GLenum *) bp; bp += 4;
GLsizei *start = (GLsizei *) bp; bp += 4;
GLint *x = (GLint *) bp; bp += 4;
GLint *y = (GLint *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
weglCopyColorSubTable(*target,*start,*x,*y,*width);
-}; break;
-case 5335: { // glConvolutionFilter1D
+}; break;
+case 5335: { // glConvolutionFilter1D
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *internalformat = (GLenum *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
@@ -2483,8 +2483,8 @@ case 5335: { // glConvolutionFilter1D
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *image = (GLvoid *) * (int *) bp; bp += 4;
weglConvolutionFilter1D(*target,*internalformat,*width,*format,*type,image);
-}; break;
-case 5336: { // glConvolutionFilter1D
+}; break;
+case 5336: { // glConvolutionFilter1D
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *internalformat = (GLenum *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
@@ -2492,8 +2492,8 @@ case 5336: { // glConvolutionFilter1D
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *image = (GLvoid *) bins[0]->base;
weglConvolutionFilter1D(*target,*internalformat,*width,*format,*type,image);
-}; break;
-case 5337: { // glConvolutionFilter2D
+}; break;
+case 5337: { // glConvolutionFilter2D
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *internalformat = (GLenum *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
@@ -2502,8 +2502,8 @@ case 5337: { // glConvolutionFilter2D
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *image = (GLvoid *) * (int *) bp; bp += 4;
weglConvolutionFilter2D(*target,*internalformat,*width,*height,*format,*type,image);
-}; break;
-case 5338: { // glConvolutionFilter2D
+}; break;
+case 5338: { // glConvolutionFilter2D
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *internalformat = (GLenum *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
@@ -2512,30 +2512,30 @@ case 5338: { // glConvolutionFilter2D
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *image = (GLvoid *) bins[0]->base;
weglConvolutionFilter2D(*target,*internalformat,*width,*height,*format,*type,image);
-}; break;
-case 5339: { // glConvolutionParameterfv
+}; break;
+case 5339: { // glConvolutionParameterfv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
int *paramsLen = (int *) bp; bp += 4;
GLfloat *params = (GLfloat *) bp; bp += *paramsLen*4+((*paramsLen)+1)%2*4;
weglConvolutionParameterfv(*target,*pname,params);
-}; break;
-case 5340: { // glConvolutionParameteriv
+}; break;
+case 5340: { // glConvolutionParameteriv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
int *paramsLen = (int *) bp; bp += 4;
GLint *params = (GLint *) bp; bp += *paramsLen*4+((*paramsLen)+1)%2*4;
weglConvolutionParameteriv(*target,*pname,params);
-}; break;
-case 5341: { // glCopyConvolutionFilter1D
+}; break;
+case 5341: { // glCopyConvolutionFilter1D
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *internalformat = (GLenum *) bp; bp += 4;
GLint *x = (GLint *) bp; bp += 4;
GLint *y = (GLint *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
weglCopyConvolutionFilter1D(*target,*internalformat,*x,*y,*width);
-}; break;
-case 5342: { // glCopyConvolutionFilter2D
+}; break;
+case 5342: { // glCopyConvolutionFilter2D
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *internalformat = (GLenum *) bp; bp += 4;
GLint *x = (GLint *) bp; bp += 4;
@@ -2543,8 +2543,8 @@ case 5342: { // glCopyConvolutionFilter2D
GLsizei *width = (GLsizei *) bp; bp += 4;
GLsizei *height = (GLsizei *) bp; bp += 4;
weglCopyConvolutionFilter2D(*target,*internalformat,*x,*y,*width,*height);
-}; break;
-case 5343: { // glGetConvolutionFilter
+}; break;
+case 5343: { // glGetConvolutionFilter
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *format = (GLenum *) bp; bp += 4;
GLenum *type = (GLenum *) bp; bp += 4;
@@ -2555,8 +2555,8 @@ case 5343: { // glGetConvolutionFilter
rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "ok");
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5344: { // glGetConvolutionParameterfv
+}; break;
+case 5344: { // glGetConvolutionParameterfv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLfloat params[4] = {0.0,0.0,0.0,0.0};
@@ -2573,8 +2573,8 @@ case 5344: { // glGetConvolutionParameterfv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5345: { // glGetConvolutionParameteriv
+}; break;
+case 5345: { // glGetConvolutionParameteriv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint params[4] = {0,0,0,0};
@@ -2590,8 +2590,8 @@ case 5345: { // glGetConvolutionParameteriv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5346: { // glSeparableFilter2D
+}; break;
+case 5346: { // glSeparableFilter2D
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *internalformat = (GLenum *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
@@ -2601,8 +2601,8 @@ case 5346: { // glSeparableFilter2D
GLvoid *row = (GLvoid *) * (int *) bp; bp += 4;
GLvoid *column = (GLvoid *) * (int *) bp; bp += 4;
weglSeparableFilter2D(*target,*internalformat,*width,*height,*format,*type,row,column);
-}; break;
-case 5347: { // glSeparableFilter2D
+}; break;
+case 5347: { // glSeparableFilter2D
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *internalformat = (GLenum *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
@@ -2612,8 +2612,8 @@ case 5347: { // glSeparableFilter2D
GLvoid *row = (GLvoid *) bins[0]->base;
GLvoid *column = (GLvoid *) bins[1]->base;
weglSeparableFilter2D(*target,*internalformat,*width,*height,*format,*type,row,column);
-}; break;
-case 5348: { // glGetHistogram
+}; break;
+case 5348: { // glGetHistogram
GLenum *target = (GLenum *) bp; bp += 4;
GLboolean *reset = (GLboolean *) bp; bp += 1;
bp += 3;
@@ -2626,8 +2626,8 @@ case 5348: { // glGetHistogram
rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "ok");
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5349: { // glGetHistogramParameterfv
+}; break;
+case 5349: { // glGetHistogramParameterfv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLfloat params[1] = {0.0};
@@ -2641,8 +2641,8 @@ case 5349: { // glGetHistogramParameterfv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 8 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,8);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5350: { // glGetHistogramParameteriv
+}; break;
+case 5350: { // glGetHistogramParameteriv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint params[1] = {0};
@@ -2655,8 +2655,8 @@ case 5350: { // glGetHistogramParameteriv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 8 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,8);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5351: { // glGetMinmax
+}; break;
+case 5351: { // glGetMinmax
GLenum *target = (GLenum *) bp; bp += 4;
GLboolean *reset = (GLboolean *) bp; bp += 1;
bp += 3;
@@ -2669,8 +2669,8 @@ case 5351: { // glGetMinmax
rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "ok");
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5352: { // glGetMinmaxParameterfv
+}; break;
+case 5352: { // glGetMinmaxParameterfv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLfloat params[1] = {0.0};
@@ -2684,8 +2684,8 @@ case 5352: { // glGetMinmaxParameterfv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 8 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,8);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5353: { // glGetMinmaxParameteriv
+}; break;
+case 5353: { // glGetMinmaxParameteriv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint params[1] = {0};
@@ -2698,38 +2698,38 @@ case 5353: { // glGetMinmaxParameteriv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 8 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,8);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5354: { // glHistogram
+}; break;
+case 5354: { // glHistogram
GLenum *target = (GLenum *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
GLenum *internalformat = (GLenum *) bp; bp += 4;
GLboolean *sink = (GLboolean *) bp; bp += 1;
weglHistogram(*target,*width,*internalformat,*sink);
-}; break;
-case 5355: { // glMinmax
+}; break;
+case 5355: { // glMinmax
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *internalformat = (GLenum *) bp; bp += 4;
GLboolean *sink = (GLboolean *) bp; bp += 1;
weglMinmax(*target,*internalformat,*sink);
-}; break;
-case 5356: { // glResetHistogram
+}; break;
+case 5356: { // glResetHistogram
GLenum *target = (GLenum *) bp; bp += 4;
weglResetHistogram(*target);
-}; break;
-case 5357: { // glResetMinmax
+}; break;
+case 5357: { // glResetMinmax
GLenum *target = (GLenum *) bp; bp += 4;
weglResetMinmax(*target);
-}; break;
-case 5358: { // glActiveTexture
+}; break;
+case 5358: { // glActiveTexture
GLenum *texture = (GLenum *) bp; bp += 4;
weglActiveTexture(*texture);
-}; break;
-case 5359: { // glSampleCoverage
+}; break;
+case 5359: { // glSampleCoverage
GLclampf *value = (GLclampf *) bp; bp += 4;
GLboolean *invert = (GLboolean *) bp; bp += 1;
weglSampleCoverage(*value,*invert);
-}; break;
-case 5360: { // glCompressedTexImage3D
+}; break;
+case 5360: { // glCompressedTexImage3D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLenum *internalformat = (GLenum *) bp; bp += 4;
@@ -2740,8 +2740,8 @@ case 5360: { // glCompressedTexImage3D
GLsizei *imageSize = (GLsizei *) bp; bp += 4;
GLvoid *data = (GLvoid *) * (int *) bp; bp += 4;
weglCompressedTexImage3D(*target,*level,*internalformat,*width,*height,*depth,*border,*imageSize,data);
-}; break;
-case 5361: { // glCompressedTexImage3D
+}; break;
+case 5361: { // glCompressedTexImage3D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLenum *internalformat = (GLenum *) bp; bp += 4;
@@ -2752,8 +2752,8 @@ case 5361: { // glCompressedTexImage3D
GLsizei *imageSize = (GLsizei *) bp; bp += 4;
GLvoid *data = (GLvoid *) bins[0]->base;
weglCompressedTexImage3D(*target,*level,*internalformat,*width,*height,*depth,*border,*imageSize,data);
-}; break;
-case 5362: { // glCompressedTexImage2D
+}; break;
+case 5362: { // glCompressedTexImage2D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLenum *internalformat = (GLenum *) bp; bp += 4;
@@ -2763,8 +2763,8 @@ case 5362: { // glCompressedTexImage2D
GLsizei *imageSize = (GLsizei *) bp; bp += 4;
GLvoid *data = (GLvoid *) * (int *) bp; bp += 4;
weglCompressedTexImage2D(*target,*level,*internalformat,*width,*height,*border,*imageSize,data);
-}; break;
-case 5363: { // glCompressedTexImage2D
+}; break;
+case 5363: { // glCompressedTexImage2D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLenum *internalformat = (GLenum *) bp; bp += 4;
@@ -2774,8 +2774,8 @@ case 5363: { // glCompressedTexImage2D
GLsizei *imageSize = (GLsizei *) bp; bp += 4;
GLvoid *data = (GLvoid *) bins[0]->base;
weglCompressedTexImage2D(*target,*level,*internalformat,*width,*height,*border,*imageSize,data);
-}; break;
-case 5364: { // glCompressedTexImage1D
+}; break;
+case 5364: { // glCompressedTexImage1D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLenum *internalformat = (GLenum *) bp; bp += 4;
@@ -2784,8 +2784,8 @@ case 5364: { // glCompressedTexImage1D
GLsizei *imageSize = (GLsizei *) bp; bp += 4;
GLvoid *data = (GLvoid *) * (int *) bp; bp += 4;
weglCompressedTexImage1D(*target,*level,*internalformat,*width,*border,*imageSize,data);
-}; break;
-case 5365: { // glCompressedTexImage1D
+}; break;
+case 5365: { // glCompressedTexImage1D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLenum *internalformat = (GLenum *) bp; bp += 4;
@@ -2794,8 +2794,8 @@ case 5365: { // glCompressedTexImage1D
GLsizei *imageSize = (GLsizei *) bp; bp += 4;
GLvoid *data = (GLvoid *) bins[0]->base;
weglCompressedTexImage1D(*target,*level,*internalformat,*width,*border,*imageSize,data);
-}; break;
-case 5366: { // glCompressedTexSubImage3D
+}; break;
+case 5366: { // glCompressedTexSubImage3D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLint *xoffset = (GLint *) bp; bp += 4;
@@ -2808,8 +2808,8 @@ case 5366: { // glCompressedTexSubImage3D
GLsizei *imageSize = (GLsizei *) bp; bp += 4;
GLvoid *data = (GLvoid *) * (int *) bp; bp += 4;
weglCompressedTexSubImage3D(*target,*level,*xoffset,*yoffset,*zoffset,*width,*height,*depth,*format,*imageSize,data);
-}; break;
-case 5367: { // glCompressedTexSubImage3D
+}; break;
+case 5367: { // glCompressedTexSubImage3D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLint *xoffset = (GLint *) bp; bp += 4;
@@ -2822,8 +2822,8 @@ case 5367: { // glCompressedTexSubImage3D
GLsizei *imageSize = (GLsizei *) bp; bp += 4;
GLvoid *data = (GLvoid *) bins[0]->base;
weglCompressedTexSubImage3D(*target,*level,*xoffset,*yoffset,*zoffset,*width,*height,*depth,*format,*imageSize,data);
-}; break;
-case 5368: { // glCompressedTexSubImage2D
+}; break;
+case 5368: { // glCompressedTexSubImage2D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLint *xoffset = (GLint *) bp; bp += 4;
@@ -2834,8 +2834,8 @@ case 5368: { // glCompressedTexSubImage2D
GLsizei *imageSize = (GLsizei *) bp; bp += 4;
GLvoid *data = (GLvoid *) * (int *) bp; bp += 4;
weglCompressedTexSubImage2D(*target,*level,*xoffset,*yoffset,*width,*height,*format,*imageSize,data);
-}; break;
-case 5369: { // glCompressedTexSubImage2D
+}; break;
+case 5369: { // glCompressedTexSubImage2D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLint *xoffset = (GLint *) bp; bp += 4;
@@ -2846,8 +2846,8 @@ case 5369: { // glCompressedTexSubImage2D
GLsizei *imageSize = (GLsizei *) bp; bp += 4;
GLvoid *data = (GLvoid *) bins[0]->base;
weglCompressedTexSubImage2D(*target,*level,*xoffset,*yoffset,*width,*height,*format,*imageSize,data);
-}; break;
-case 5370: { // glCompressedTexSubImage1D
+}; break;
+case 5370: { // glCompressedTexSubImage1D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLint *xoffset = (GLint *) bp; bp += 4;
@@ -2856,8 +2856,8 @@ case 5370: { // glCompressedTexSubImage1D
GLsizei *imageSize = (GLsizei *) bp; bp += 4;
GLvoid *data = (GLvoid *) * (int *) bp; bp += 4;
weglCompressedTexSubImage1D(*target,*level,*xoffset,*width,*format,*imageSize,data);
-}; break;
-case 5371: { // glCompressedTexSubImage1D
+}; break;
+case 5371: { // glCompressedTexSubImage1D
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLint *xoffset = (GLint *) bp; bp += 4;
@@ -2866,8 +2866,8 @@ case 5371: { // glCompressedTexSubImage1D
GLsizei *imageSize = (GLsizei *) bp; bp += 4;
GLvoid *data = (GLvoid *) bins[0]->base;
weglCompressedTexSubImage1D(*target,*level,*xoffset,*width,*format,*imageSize,data);
-}; break;
-case 5372: { // glGetCompressedTexImage
+}; break;
+case 5372: { // glGetCompressedTexImage
GLenum *target = (GLenum *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLvoid *img = (GLvoid *) bins[0]->base;
@@ -2877,247 +2877,247 @@ case 5372: { // glGetCompressedTexImage
rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "ok");
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5373: { // glClientActiveTexture
+}; break;
+case 5373: { // glClientActiveTexture
GLenum *texture = (GLenum *) bp; bp += 4;
weglClientActiveTexture(*texture);
-}; break;
-case 5374: { // glMultiTexCoord1dv
+}; break;
+case 5374: { // glMultiTexCoord1dv
GLenum *target = (GLenum *) bp; bp += 4;
bp += 4;
GLdouble *v = (GLdouble *) bp; bp += 8;
weglMultiTexCoord1dv(*target,v);
-}; break;
-case 5375: { // glMultiTexCoord1fv
+}; break;
+case 5375: { // glMultiTexCoord1fv
GLenum *target = (GLenum *) bp; bp += 4;
GLfloat *v = (GLfloat *) bp; bp += 4;
weglMultiTexCoord1fv(*target,v);
-}; break;
-case 5376: { // glMultiTexCoord1iv
+}; break;
+case 5376: { // glMultiTexCoord1iv
GLenum *target = (GLenum *) bp; bp += 4;
GLint *v = (GLint *) bp; bp += 4;
weglMultiTexCoord1iv(*target,v);
-}; break;
-case 5377: { // glMultiTexCoord1sv
+}; break;
+case 5377: { // glMultiTexCoord1sv
GLenum *target = (GLenum *) bp; bp += 4;
GLshort *v = (GLshort *) bp; bp += 2;
weglMultiTexCoord1sv(*target,v);
-}; break;
-case 5378: { // glMultiTexCoord2dv
+}; break;
+case 5378: { // glMultiTexCoord2dv
GLenum *target = (GLenum *) bp; bp += 4;
bp += 4;
GLdouble *v = (GLdouble *) bp; bp += 8;
weglMultiTexCoord2dv(*target,v);
-}; break;
-case 5379: { // glMultiTexCoord2fv
+}; break;
+case 5379: { // glMultiTexCoord2fv
GLenum *target = (GLenum *) bp; bp += 4;
GLfloat *v = (GLfloat *) bp; bp += 4;
weglMultiTexCoord2fv(*target,v);
-}; break;
-case 5380: { // glMultiTexCoord2iv
+}; break;
+case 5380: { // glMultiTexCoord2iv
GLenum *target = (GLenum *) bp; bp += 4;
GLint *v = (GLint *) bp; bp += 4;
weglMultiTexCoord2iv(*target,v);
-}; break;
-case 5381: { // glMultiTexCoord2sv
+}; break;
+case 5381: { // glMultiTexCoord2sv
GLenum *target = (GLenum *) bp; bp += 4;
GLshort *v = (GLshort *) bp; bp += 2;
weglMultiTexCoord2sv(*target,v);
-}; break;
-case 5382: { // glMultiTexCoord3dv
+}; break;
+case 5382: { // glMultiTexCoord3dv
GLenum *target = (GLenum *) bp; bp += 4;
bp += 4;
GLdouble *v = (GLdouble *) bp; bp += 8;
weglMultiTexCoord3dv(*target,v);
-}; break;
-case 5383: { // glMultiTexCoord3fv
+}; break;
+case 5383: { // glMultiTexCoord3fv
GLenum *target = (GLenum *) bp; bp += 4;
GLfloat *v = (GLfloat *) bp; bp += 4;
weglMultiTexCoord3fv(*target,v);
-}; break;
-case 5384: { // glMultiTexCoord3iv
+}; break;
+case 5384: { // glMultiTexCoord3iv
GLenum *target = (GLenum *) bp; bp += 4;
GLint *v = (GLint *) bp; bp += 4;
weglMultiTexCoord3iv(*target,v);
-}; break;
-case 5385: { // glMultiTexCoord3sv
+}; break;
+case 5385: { // glMultiTexCoord3sv
GLenum *target = (GLenum *) bp; bp += 4;
GLshort *v = (GLshort *) bp; bp += 2;
weglMultiTexCoord3sv(*target,v);
-}; break;
-case 5386: { // glMultiTexCoord4dv
+}; break;
+case 5386: { // glMultiTexCoord4dv
GLenum *target = (GLenum *) bp; bp += 4;
bp += 4;
GLdouble *v = (GLdouble *) bp; bp += 8;
weglMultiTexCoord4dv(*target,v);
-}; break;
-case 5387: { // glMultiTexCoord4fv
+}; break;
+case 5387: { // glMultiTexCoord4fv
GLenum *target = (GLenum *) bp; bp += 4;
GLfloat *v = (GLfloat *) bp; bp += 4;
weglMultiTexCoord4fv(*target,v);
-}; break;
-case 5388: { // glMultiTexCoord4iv
+}; break;
+case 5388: { // glMultiTexCoord4iv
GLenum *target = (GLenum *) bp; bp += 4;
GLint *v = (GLint *) bp; bp += 4;
weglMultiTexCoord4iv(*target,v);
-}; break;
-case 5389: { // glMultiTexCoord4sv
+}; break;
+case 5389: { // glMultiTexCoord4sv
GLenum *target = (GLenum *) bp; bp += 4;
GLshort *v = (GLshort *) bp; bp += 2;
weglMultiTexCoord4sv(*target,v);
-}; break;
-case 5390: { // glLoadTransposeMatrixf
+}; break;
+case 5390: { // glLoadTransposeMatrixf
GLfloat * m = (GLfloat *) bp; bp += 64;
weglLoadTransposeMatrixf(m);
-}; break;
-case 5391: { // glLoadTransposeMatrixd
+}; break;
+case 5391: { // glLoadTransposeMatrixd
GLdouble * m = (GLdouble *) bp; bp += 128;
weglLoadTransposeMatrixd(m);
-}; break;
-case 5392: { // glMultTransposeMatrixf
+}; break;
+case 5392: { // glMultTransposeMatrixf
GLfloat * m = (GLfloat *) bp; bp += 64;
weglMultTransposeMatrixf(m);
-}; break;
-case 5393: { // glMultTransposeMatrixd
+}; break;
+case 5393: { // glMultTransposeMatrixd
GLdouble * m = (GLdouble *) bp; bp += 128;
weglMultTransposeMatrixd(m);
-}; break;
-case 5394: { // glBlendFuncSeparate
+}; break;
+case 5394: { // glBlendFuncSeparate
GLenum *sfactorRGB = (GLenum *) bp; bp += 4;
GLenum *dfactorRGB = (GLenum *) bp; bp += 4;
GLenum *sfactorAlpha = (GLenum *) bp; bp += 4;
GLenum *dfactorAlpha = (GLenum *) bp; bp += 4;
weglBlendFuncSeparate(*sfactorRGB,*dfactorRGB,*sfactorAlpha,*dfactorAlpha);
-}; break;
-case 5395: { // glMultiDrawArrays
+}; break;
+case 5395: { // glMultiDrawArrays
GLenum *mode = (GLenum *) bp; bp += 4;
int * firstLen = (int *) bp; bp += 4;
GLint * first = (GLint *) bp; bp += (8-((*firstLen*4+0)%8))%8;
int * countLen = (int *) bp; bp += 4;
GLsizei * count = (GLsizei *) bp; bp += (8-((*countLen*4+4)%8))%8;
weglMultiDrawArrays(*mode,first,count,*firstLen);
-}; break;
-case 5396: { // glPointParameterf
+}; break;
+case 5396: { // glPointParameterf
GLenum *pname = (GLenum *) bp; bp += 4;
GLfloat *param = (GLfloat *) bp; bp += 4;
weglPointParameterf(*pname,*param);
-}; break;
-case 5397: { // glPointParameterfv
+}; break;
+case 5397: { // glPointParameterfv
GLenum *pname = (GLenum *) bp; bp += 4;
int *paramsLen = (int *) bp; bp += 4;
GLfloat *params = (GLfloat *) bp; bp += *paramsLen*4+((*paramsLen)+0)%2*4;
weglPointParameterfv(*pname,params);
-}; break;
-case 5398: { // glPointParameteri
+}; break;
+case 5398: { // glPointParameteri
GLenum *pname = (GLenum *) bp; bp += 4;
GLint *param = (GLint *) bp; bp += 4;
weglPointParameteri(*pname,*param);
-}; break;
-case 5399: { // glPointParameteriv
+}; break;
+case 5399: { // glPointParameteriv
GLenum *pname = (GLenum *) bp; bp += 4;
int *paramsLen = (int *) bp; bp += 4;
GLint *params = (GLint *) bp; bp += *paramsLen*4+((*paramsLen)+0)%2*4;
weglPointParameteriv(*pname,params);
-}; break;
-case 5400: { // glFogCoordfv
+}; break;
+case 5400: { // glFogCoordfv
GLfloat *coord = (GLfloat *) bp; bp += 4;
weglFogCoordfv(coord);
-}; break;
-case 5401: { // glFogCoorddv
+}; break;
+case 5401: { // glFogCoorddv
GLdouble *coord = (GLdouble *) bp; bp += 8;
weglFogCoorddv(coord);
-}; break;
-case 5402: { // glFogCoordPointer
+}; break;
+case 5402: { // glFogCoordPointer
GLenum *type = (GLenum *) bp; bp += 4;
GLsizei *stride = (GLsizei *) bp; bp += 4;
GLvoid *pointer = (GLvoid *) * (int *) bp; bp += 4;
weglFogCoordPointer(*type,*stride,pointer);
-}; break;
-case 5403: { // glFogCoordPointer
+}; break;
+case 5403: { // glFogCoordPointer
GLenum *type = (GLenum *) bp; bp += 4;
GLsizei *stride = (GLsizei *) bp; bp += 4;
GLvoid *pointer = (GLvoid *) bins[0]->base;
weglFogCoordPointer(*type,*stride,pointer);
-}; break;
-case 5404: { // glSecondaryColor3bv
+}; break;
+case 5404: { // glSecondaryColor3bv
GLbyte *v = (GLbyte *) bp; bp += 1;
weglSecondaryColor3bv(v);
-}; break;
-case 5405: { // glSecondaryColor3dv
+}; break;
+case 5405: { // glSecondaryColor3dv
GLdouble *v = (GLdouble *) bp; bp += 8;
weglSecondaryColor3dv(v);
-}; break;
-case 5406: { // glSecondaryColor3fv
+}; break;
+case 5406: { // glSecondaryColor3fv
GLfloat *v = (GLfloat *) bp; bp += 4;
weglSecondaryColor3fv(v);
-}; break;
-case 5407: { // glSecondaryColor3iv
+}; break;
+case 5407: { // glSecondaryColor3iv
GLint *v = (GLint *) bp; bp += 4;
weglSecondaryColor3iv(v);
-}; break;
-case 5408: { // glSecondaryColor3sv
+}; break;
+case 5408: { // glSecondaryColor3sv
GLshort *v = (GLshort *) bp; bp += 2;
weglSecondaryColor3sv(v);
-}; break;
-case 5409: { // glSecondaryColor3ubv
+}; break;
+case 5409: { // glSecondaryColor3ubv
GLubyte *v = (GLubyte *) bp; bp += 1;
weglSecondaryColor3ubv(v);
-}; break;
-case 5410: { // glSecondaryColor3uiv
+}; break;
+case 5410: { // glSecondaryColor3uiv
GLuint *v = (GLuint *) bp; bp += 4;
weglSecondaryColor3uiv(v);
-}; break;
-case 5411: { // glSecondaryColor3usv
+}; break;
+case 5411: { // glSecondaryColor3usv
GLushort *v = (GLushort *) bp; bp += 2;
weglSecondaryColor3usv(v);
-}; break;
-case 5412: { // glSecondaryColorPointer
+}; break;
+case 5412: { // glSecondaryColorPointer
GLint *size = (GLint *) bp; bp += 4;
GLenum *type = (GLenum *) bp; bp += 4;
GLsizei *stride = (GLsizei *) bp; bp += 4;
GLvoid *pointer = (GLvoid *) * (int *) bp; bp += 4;
weglSecondaryColorPointer(*size,*type,*stride,pointer);
-}; break;
-case 5413: { // glSecondaryColorPointer
+}; break;
+case 5413: { // glSecondaryColorPointer
GLint *size = (GLint *) bp; bp += 4;
GLenum *type = (GLenum *) bp; bp += 4;
GLsizei *stride = (GLsizei *) bp; bp += 4;
GLvoid *pointer = (GLvoid *) bins[0]->base;
weglSecondaryColorPointer(*size,*type,*stride,pointer);
-}; break;
-case 5414: { // glWindowPos2dv
+}; break;
+case 5414: { // glWindowPos2dv
GLdouble *v = (GLdouble *) bp; bp += 8;
weglWindowPos2dv(v);
-}; break;
-case 5415: { // glWindowPos2fv
+}; break;
+case 5415: { // glWindowPos2fv
GLfloat *v = (GLfloat *) bp; bp += 4;
weglWindowPos2fv(v);
-}; break;
-case 5416: { // glWindowPos2iv
+}; break;
+case 5416: { // glWindowPos2iv
GLint *v = (GLint *) bp; bp += 4;
weglWindowPos2iv(v);
-}; break;
-case 5417: { // glWindowPos2sv
+}; break;
+case 5417: { // glWindowPos2sv
GLshort *v = (GLshort *) bp; bp += 2;
weglWindowPos2sv(v);
-}; break;
-case 5418: { // glWindowPos3dv
+}; break;
+case 5418: { // glWindowPos3dv
GLdouble *v = (GLdouble *) bp; bp += 8;
weglWindowPos3dv(v);
-}; break;
-case 5419: { // glWindowPos3fv
+}; break;
+case 5419: { // glWindowPos3fv
GLfloat *v = (GLfloat *) bp; bp += 4;
weglWindowPos3fv(v);
-}; break;
-case 5420: { // glWindowPos3iv
+}; break;
+case 5420: { // glWindowPos3iv
GLint *v = (GLint *) bp; bp += 4;
weglWindowPos3iv(v);
-}; break;
-case 5421: { // glWindowPos3sv
+}; break;
+case 5421: { // glWindowPos3sv
GLshort *v = (GLshort *) bp; bp += 2;
weglWindowPos3sv(v);
-}; break;
-case 5422: { // glGenQueries
+}; break;
+case 5422: { // glGenQueries
GLsizei *n = (GLsizei *) bp; bp += 4;
GLuint *ids;
ids = (GLuint *) driver_alloc(sizeof(GLuint) * *n);
@@ -3131,15 +3131,15 @@ case 5422: { // glGenQueries
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 7 + (*n)*2 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,7 + (*n)*2);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
- driver_free(rt);
+ driver_free(rt);
driver_free(ids);
-}; break;
-case 5423: { // glDeleteQueries
+}; break;
+case 5423: { // glDeleteQueries
int * idsLen = (int *) bp; bp += 4;
GLuint * ids = (GLuint *) bp; bp += (8-((*idsLen*4+4)%8))%8;
weglDeleteQueries(*idsLen,ids);
-}; break;
-case 5424: { // glIsQuery
+}; break;
+case 5424: { // glIsQuery
GLuint *id = (GLuint *) bp; bp += 4;
GLboolean result = weglIsQuery(*id);
int AP = 0; ErlDrvTermData rt[6];
@@ -3148,17 +3148,17 @@ case 5424: { // glIsQuery
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5425: { // glBeginQuery
+}; break;
+case 5425: { // glBeginQuery
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *id = (GLuint *) bp; bp += 4;
weglBeginQuery(*target,*id);
-}; break;
-case 5426: { // glEndQuery
+}; break;
+case 5426: { // glEndQuery
GLenum *target = (GLenum *) bp; bp += 4;
weglEndQuery(*target);
-}; break;
-case 5427: { // glGetQueryiv
+}; break;
+case 5427: { // glGetQueryiv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint params[1] = {0};
@@ -3169,8 +3169,8 @@ case 5427: { // glGetQueryiv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5428: { // glGetQueryObjectiv
+}; break;
+case 5428: { // glGetQueryObjectiv
GLuint *id = (GLuint *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint params[1] = {0};
@@ -3181,8 +3181,8 @@ case 5428: { // glGetQueryObjectiv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5429: { // glGetQueryObjectuiv
+}; break;
+case 5429: { // glGetQueryObjectuiv
GLuint *id = (GLuint *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLuint params[1] = {0};
@@ -3193,18 +3193,18 @@ case 5429: { // glGetQueryObjectuiv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5430: { // glBindBuffer
+}; break;
+case 5430: { // glBindBuffer
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *buffer = (GLuint *) bp; bp += 4;
weglBindBuffer(*target,*buffer);
-}; break;
-case 5431: { // glDeleteBuffers
+}; break;
+case 5431: { // glDeleteBuffers
int * buffersLen = (int *) bp; bp += 4;
GLuint * buffers = (GLuint *) bp; bp += (8-((*buffersLen*4+4)%8))%8;
weglDeleteBuffers(*buffersLen,buffers);
-}; break;
-case 5432: { // glGenBuffers
+}; break;
+case 5432: { // glGenBuffers
GLsizei *n = (GLsizei *) bp; bp += 4;
GLuint *buffers;
buffers = (GLuint *) driver_alloc(sizeof(GLuint) * *n);
@@ -3218,10 +3218,10 @@ case 5432: { // glGenBuffers
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 7 + (*n)*2 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,7 + (*n)*2);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
- driver_free(rt);
+ driver_free(rt);
driver_free(buffers);
-}; break;
-case 5433: { // glIsBuffer
+}; break;
+case 5433: { // glIsBuffer
GLuint *buffer = (GLuint *) bp; bp += 4;
GLboolean result = weglIsBuffer(*buffer);
int AP = 0; ErlDrvTermData rt[6];
@@ -3230,40 +3230,40 @@ case 5433: { // glIsBuffer
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5434: { // glBufferData
+}; break;
+case 5434: { // glBufferData
GLenum *target = (GLenum *) bp; bp += 4;
bp += 4;
GLsizeiptr size = (GLsizeiptr) * (GLuint64EXT *) bp; bp += 8;
GLvoid *data = (GLvoid *) * (int *) bp; bp += 4;
GLenum *usage = (GLenum *) bp; bp += 4;
weglBufferData(*target,size,data,*usage);
-}; break;
-case 5435: { // glBufferData
+}; break;
+case 5435: { // glBufferData
GLenum *target = (GLenum *) bp; bp += 4;
bp += 4;
GLsizeiptr size = (GLsizeiptr) * (GLuint64EXT *) bp; bp += 8;
GLvoid *data = (GLvoid *) bins[0]->base;
GLenum *usage = (GLenum *) bp; bp += 4;
weglBufferData(*target,size,data,*usage);
-}; break;
-case 5436: { // glBufferSubData
+}; break;
+case 5436: { // glBufferSubData
GLenum *target = (GLenum *) bp; bp += 4;
bp += 4;
GLintptr offset = (GLintptr) * (GLuint64EXT *) bp; bp += 8;
GLsizeiptr size = (GLsizeiptr) * (GLuint64EXT *) bp; bp += 8;
GLvoid *data = (GLvoid *) * (int *) bp; bp += 4;
weglBufferSubData(*target,offset,size,data);
-}; break;
-case 5437: { // glBufferSubData
+}; break;
+case 5437: { // glBufferSubData
GLenum *target = (GLenum *) bp; bp += 4;
bp += 4;
GLintptr offset = (GLintptr) * (GLuint64EXT *) bp; bp += 8;
GLsizeiptr size = (GLsizeiptr) * (GLuint64EXT *) bp; bp += 8;
GLvoid *data = (GLvoid *) bins[0]->base;
weglBufferSubData(*target,offset,size,data);
-}; break;
-case 5438: { // glGetBufferSubData
+}; break;
+case 5438: { // glGetBufferSubData
GLenum *target = (GLenum *) bp; bp += 4;
bp += 4;
GLintptr offset = (GLintptr) * (GLuint64EXT *) bp; bp += 8;
@@ -3275,8 +3275,8 @@ case 5438: { // glGetBufferSubData
rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "ok");
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5439: { // glGetBufferParameteriv
+}; break;
+case 5439: { // glGetBufferParameteriv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint params[1] = {0};
@@ -3287,53 +3287,53 @@ case 5439: { // glGetBufferParameteriv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5440: { // glBlendEquationSeparate
+}; break;
+case 5440: { // glBlendEquationSeparate
GLenum *modeRGB = (GLenum *) bp; bp += 4;
GLenum *modeAlpha = (GLenum *) bp; bp += 4;
weglBlendEquationSeparate(*modeRGB,*modeAlpha);
-}; break;
-case 5441: { // glDrawBuffers
+}; break;
+case 5441: { // glDrawBuffers
int * bufsLen = (int *) bp; bp += 4;
GLenum * bufs = (GLenum *) bp; bp += (8-((*bufsLen*4+4)%8))%8;
weglDrawBuffers(*bufsLen,bufs);
-}; break;
-case 5442: { // glStencilOpSeparate
+}; break;
+case 5442: { // glStencilOpSeparate
GLenum *face = (GLenum *) bp; bp += 4;
GLenum *sfail = (GLenum *) bp; bp += 4;
GLenum *dpfail = (GLenum *) bp; bp += 4;
GLenum *dppass = (GLenum *) bp; bp += 4;
weglStencilOpSeparate(*face,*sfail,*dpfail,*dppass);
-}; break;
-case 5443: { // glStencilFuncSeparate
+}; break;
+case 5443: { // glStencilFuncSeparate
GLenum *frontfunc = (GLenum *) bp; bp += 4;
GLenum *backfunc = (GLenum *) bp; bp += 4;
GLint *ref = (GLint *) bp; bp += 4;
GLuint *mask = (GLuint *) bp; bp += 4;
weglStencilFuncSeparate(*frontfunc,*backfunc,*ref,*mask);
-}; break;
-case 5444: { // glStencilMaskSeparate
+}; break;
+case 5444: { // glStencilMaskSeparate
GLenum *face = (GLenum *) bp; bp += 4;
GLuint *mask = (GLuint *) bp; bp += 4;
weglStencilMaskSeparate(*face,*mask);
-}; break;
-case 5445: { // glAttachShader
+}; break;
+case 5445: { // glAttachShader
GLuint *program = (GLuint *) bp; bp += 4;
GLuint *shader = (GLuint *) bp; bp += 4;
weglAttachShader(*program,*shader);
-}; break;
-case 5446: { // glBindAttribLocation
+}; break;
+case 5446: { // glBindAttribLocation
GLuint *program = (GLuint *) bp; bp += 4;
GLuint *index = (GLuint *) bp; bp += 4;
GLchar *name = (GLchar *) bp;
int nameLen = strlen((char *)name); bp += nameLen+1+((8-((1+nameLen+0)%8))%8);
weglBindAttribLocation(*program,*index,name);
-}; break;
-case 5447: { // glCompileShader
+}; break;
+case 5447: { // glCompileShader
GLuint *shader = (GLuint *) bp; bp += 4;
weglCompileShader(*shader);
-}; break;
-case 5448: { // glCreateProgram
+}; break;
+case 5448: { // glCreateProgram
GLuint result = weglCreateProgram();
int AP = 0; ErlDrvTermData rt[6];
rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "_wxe_result_");
@@ -3341,8 +3341,8 @@ case 5448: { // glCreateProgram
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5449: { // glCreateShader
+}; break;
+case 5449: { // glCreateShader
GLenum *type = (GLenum *) bp; bp += 4;
GLuint result = weglCreateShader(*type);
int AP = 0; ErlDrvTermData rt[6];
@@ -3351,29 +3351,29 @@ case 5449: { // glCreateShader
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5450: { // glDeleteProgram
+}; break;
+case 5450: { // glDeleteProgram
GLuint *program = (GLuint *) bp; bp += 4;
weglDeleteProgram(*program);
-}; break;
-case 5451: { // glDeleteShader
+}; break;
+case 5451: { // glDeleteShader
GLuint *shader = (GLuint *) bp; bp += 4;
weglDeleteShader(*shader);
-}; break;
-case 5452: { // glDetachShader
+}; break;
+case 5452: { // glDetachShader
GLuint *program = (GLuint *) bp; bp += 4;
GLuint *shader = (GLuint *) bp; bp += 4;
weglDetachShader(*program,*shader);
-}; break;
-case 5453: { // glDisableVertexAttribArray
+}; break;
+case 5453: { // glDisableVertexAttribArray
GLuint *index = (GLuint *) bp; bp += 4;
weglDisableVertexAttribArray(*index);
-}; break;
-case 5454: { // glEnableVertexAttribArray
+}; break;
+case 5454: { // glEnableVertexAttribArray
GLuint *index = (GLuint *) bp; bp += 4;
weglEnableVertexAttribArray(*index);
-}; break;
-case 5455: { // glGetActiveAttrib
+}; break;
+case 5455: { // glGetActiveAttrib
GLuint *program = (GLuint *) bp; bp += 4;
GLuint *index = (GLuint *) bp; bp += 4;
GLsizei *bufSize = (GLsizei *) bp; bp += 4;
@@ -3393,8 +3393,8 @@ case 5455: { // glGetActiveAttrib
if (AP != 13 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,13);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
driver_free(name);
-}; break;
-case 5456: { // glGetActiveUniform
+}; break;
+case 5456: { // glGetActiveUniform
GLuint *program = (GLuint *) bp; bp += 4;
GLuint *index = (GLuint *) bp; bp += 4;
GLsizei *bufSize = (GLsizei *) bp; bp += 4;
@@ -3414,8 +3414,8 @@ case 5456: { // glGetActiveUniform
if (AP != 13 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,13);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
driver_free(name);
-}; break;
-case 5457: { // glGetAttachedShaders
+}; break;
+case 5457: { // glGetAttachedShaders
GLuint *program = (GLuint *) bp; bp += 4;
GLsizei *maxCount = (GLsizei *) bp; bp += 4;
GLsizei count[1] = {0};
@@ -3431,10 +3431,10 @@ case 5457: { // glGetAttachedShaders
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 7 + (*count)*2 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,7 + (*count)*2);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
- driver_free(rt);
+ driver_free(rt);
driver_free(obj);
-}; break;
-case 5458: { // glGetAttribLocation
+}; break;
+case 5458: { // glGetAttribLocation
GLuint *program = (GLuint *) bp; bp += 4;
GLchar *name = (GLchar *) bp;
int nameLen = strlen((char *)name); bp += nameLen+1+((8-((1+nameLen+4)%8))%8);
@@ -3445,8 +3445,8 @@ case 5458: { // glGetAttribLocation
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5459: { // glGetProgramiv
+}; break;
+case 5459: { // glGetProgramiv
GLuint *program = (GLuint *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint params[1] = {0};
@@ -3457,8 +3457,8 @@ case 5459: { // glGetProgramiv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5460: { // glGetProgramInfoLog
+}; break;
+case 5460: { // glGetProgramInfoLog
GLuint *program = (GLuint *) bp; bp += 4;
GLsizei *bufSize = (GLsizei *) bp; bp += 4;
GLsizei length[1] = {0};
@@ -3472,8 +3472,8 @@ case 5460: { // glGetProgramInfoLog
if (AP != 7 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,7);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
driver_free(infoLog);
-}; break;
-case 5461: { // glGetShaderiv
+}; break;
+case 5461: { // glGetShaderiv
GLuint *shader = (GLuint *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint params[1] = {0};
@@ -3484,8 +3484,8 @@ case 5461: { // glGetShaderiv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5462: { // glGetShaderInfoLog
+}; break;
+case 5462: { // glGetShaderInfoLog
GLuint *shader = (GLuint *) bp; bp += 4;
GLsizei *bufSize = (GLsizei *) bp; bp += 4;
GLsizei length[1] = {0};
@@ -3499,8 +3499,8 @@ case 5462: { // glGetShaderInfoLog
if (AP != 7 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,7);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
driver_free(infoLog);
-}; break;
-case 5463: { // glGetShaderSource
+}; break;
+case 5463: { // glGetShaderSource
GLuint *shader = (GLuint *) bp; bp += 4;
GLsizei *bufSize = (GLsizei *) bp; bp += 4;
GLsizei length[1] = {0};
@@ -3514,8 +3514,8 @@ case 5463: { // glGetShaderSource
if (AP != 7 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,7);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
driver_free(source);
-}; break;
-case 5464: { // glGetUniformLocation
+}; break;
+case 5464: { // glGetUniformLocation
GLuint *program = (GLuint *) bp; bp += 4;
GLchar *name = (GLchar *) bp;
int nameLen = strlen((char *)name); bp += nameLen+1+((8-((1+nameLen+4)%8))%8);
@@ -3526,8 +3526,8 @@ case 5464: { // glGetUniformLocation
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5465: { // glGetUniformfv
+}; break;
+case 5465: { // glGetUniformfv
GLuint *program = (GLuint *) bp; bp += 4;
GLint *location = (GLint *) bp; bp += 4;
GLfloat params[16] = {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
@@ -3556,8 +3556,8 @@ case 5465: { // glGetUniformfv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 38 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,38);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5466: { // glGetUniformiv
+}; break;
+case 5466: { // glGetUniformiv
GLuint *program = (GLuint *) bp; bp += 4;
GLint *location = (GLint *) bp; bp += 4;
GLint params[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
@@ -3585,8 +3585,8 @@ case 5466: { // glGetUniformiv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 38 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,38);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5467: { // glGetVertexAttribdv
+}; break;
+case 5467: { // glGetVertexAttribdv
GLuint *index = (GLuint *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLdouble params[4] = {0.0,0.0,0.0,0.0};
@@ -3602,8 +3602,8 @@ case 5467: { // glGetVertexAttribdv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5468: { // glGetVertexAttribfv
+}; break;
+case 5468: { // glGetVertexAttribfv
GLuint *index = (GLuint *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLfloat params[4] = {0.0,0.0,0.0,0.0};
@@ -3620,8 +3620,8 @@ case 5468: { // glGetVertexAttribfv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5469: { // glGetVertexAttribiv
+}; break;
+case 5469: { // glGetVertexAttribiv
GLuint *index = (GLuint *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint params[4] = {0,0,0,0};
@@ -3637,8 +3637,8 @@ case 5469: { // glGetVertexAttribiv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5470: { // glIsProgram
+}; break;
+case 5470: { // glIsProgram
GLuint *program = (GLuint *) bp; bp += 4;
GLboolean result = weglIsProgram(*program);
int AP = 0; ErlDrvTermData rt[6];
@@ -3647,8 +3647,8 @@ case 5470: { // glIsProgram
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5471: { // glIsShader
+}; break;
+case 5471: { // glIsShader
GLuint *shader = (GLuint *) bp; bp += 4;
GLboolean result = weglIsShader(*shader);
int AP = 0; ErlDrvTermData rt[6];
@@ -3657,275 +3657,275 @@ case 5471: { // glIsShader
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5472: { // glLinkProgram
+}; break;
+case 5472: { // glLinkProgram
GLuint *program = (GLuint *) bp; bp += 4;
weglLinkProgram(*program);
-}; break;
-case 5473: { // glShaderSource
+}; break;
+case 5473: { // glShaderSource
GLuint *shader = (GLuint *) bp; bp += 4;
int * stringLen = (int *) bp; bp += 4;
int * stringTotSize = (int *) bp; bp += 4;
GLchar **string;
- string = (GLchar **) driver_alloc(sizeof(GLchar *) * *stringLen);
+ string = (GLchar **) driver_alloc(sizeof(GLchar *) * *stringLen);
for(int i=0;i<*stringLen;i++) {
string[i] = (GLchar *) bp; bp += 1+strlen(bp);};
bp += (8 - ((0 + *stringTotSize) % 8)) % 8;
weglShaderSource(*shader,*stringLen,(const GLchar **) string,NULL);
driver_free(string);
-}; break;
-case 5474: { // glUseProgram
+}; break;
+case 5474: { // glUseProgram
GLuint *program = (GLuint *) bp; bp += 4;
weglUseProgram(*program);
-}; break;
-case 5475: { // glUniform1f
+}; break;
+case 5475: { // glUniform1f
GLint *location = (GLint *) bp; bp += 4;
GLfloat *v0 = (GLfloat *) bp; bp += 4;
weglUniform1f(*location,*v0);
-}; break;
-case 5476: { // glUniform2f
+}; break;
+case 5476: { // glUniform2f
GLint *location = (GLint *) bp; bp += 4;
GLfloat *v0 = (GLfloat *) bp; bp += 4;
GLfloat *v1 = (GLfloat *) bp; bp += 4;
weglUniform2f(*location,*v0,*v1);
-}; break;
-case 5477: { // glUniform3f
+}; break;
+case 5477: { // glUniform3f
GLint *location = (GLint *) bp; bp += 4;
GLfloat *v0 = (GLfloat *) bp; bp += 4;
GLfloat *v1 = (GLfloat *) bp; bp += 4;
GLfloat *v2 = (GLfloat *) bp; bp += 4;
weglUniform3f(*location,*v0,*v1,*v2);
-}; break;
-case 5478: { // glUniform4f
+}; break;
+case 5478: { // glUniform4f
GLint *location = (GLint *) bp; bp += 4;
GLfloat *v0 = (GLfloat *) bp; bp += 4;
GLfloat *v1 = (GLfloat *) bp; bp += 4;
GLfloat *v2 = (GLfloat *) bp; bp += 4;
GLfloat *v3 = (GLfloat *) bp; bp += 4;
weglUniform4f(*location,*v0,*v1,*v2,*v3);
-}; break;
-case 5479: { // glUniform1i
+}; break;
+case 5479: { // glUniform1i
GLint *location = (GLint *) bp; bp += 4;
GLint *v0 = (GLint *) bp; bp += 4;
weglUniform1i(*location,*v0);
-}; break;
-case 5480: { // glUniform2i
+}; break;
+case 5480: { // glUniform2i
GLint *location = (GLint *) bp; bp += 4;
GLint *v0 = (GLint *) bp; bp += 4;
GLint *v1 = (GLint *) bp; bp += 4;
weglUniform2i(*location,*v0,*v1);
-}; break;
-case 5481: { // glUniform3i
+}; break;
+case 5481: { // glUniform3i
GLint *location = (GLint *) bp; bp += 4;
GLint *v0 = (GLint *) bp; bp += 4;
GLint *v1 = (GLint *) bp; bp += 4;
GLint *v2 = (GLint *) bp; bp += 4;
weglUniform3i(*location,*v0,*v1,*v2);
-}; break;
-case 5482: { // glUniform4i
+}; break;
+case 5482: { // glUniform4i
GLint *location = (GLint *) bp; bp += 4;
GLint *v0 = (GLint *) bp; bp += 4;
GLint *v1 = (GLint *) bp; bp += 4;
GLint *v2 = (GLint *) bp; bp += 4;
GLint *v3 = (GLint *) bp; bp += 4;
weglUniform4i(*location,*v0,*v1,*v2,*v3);
-}; break;
-case 5483: { // glUniform1fv
+}; break;
+case 5483: { // glUniform1fv
GLint *location = (GLint *) bp; bp += 4;
int * valueLen = (int *) bp; bp += 4;
GLfloat * value = (GLfloat *) bp; bp += (8-((*valueLen*4+0)%8))%8;
weglUniform1fv(*location,*valueLen,value);
-}; break;
-case 5484: { // glUniform2fv
+}; break;
+case 5484: { // glUniform2fv
GLint *location = (GLint *) bp; bp += 4;
int *valueLen = (int *) bp; bp += 4;
GLfloat * value = (GLfloat *) bp; bp += *valueLen*8;
weglUniform2fv(*location,*valueLen,value);
-}; break;
-case 5485: { // glUniform3fv
+}; break;
+case 5485: { // glUniform3fv
GLint *location = (GLint *) bp; bp += 4;
int *valueLen = (int *) bp; bp += 4;
GLfloat * value = (GLfloat *) bp; bp += *valueLen*12;
weglUniform3fv(*location,*valueLen,value);
-}; break;
-case 5486: { // glUniform4fv
+}; break;
+case 5486: { // glUniform4fv
GLint *location = (GLint *) bp; bp += 4;
int *valueLen = (int *) bp; bp += 4;
GLfloat * value = (GLfloat *) bp; bp += *valueLen*16;
weglUniform4fv(*location,*valueLen,value);
-}; break;
-case 5487: { // glUniform1iv
+}; break;
+case 5487: { // glUniform1iv
GLint *location = (GLint *) bp; bp += 4;
int * valueLen = (int *) bp; bp += 4;
GLint * value = (GLint *) bp; bp += (8-((*valueLen*4+0)%8))%8;
weglUniform1iv(*location,*valueLen,value);
-}; break;
-case 5488: { // glUniform2iv
+}; break;
+case 5488: { // glUniform2iv
GLint *location = (GLint *) bp; bp += 4;
int *valueLen = (int *) bp; bp += 4;
GLint * value = (GLint *) bp; bp += *valueLen*8;
weglUniform2iv(*location,*valueLen,value);
-}; break;
-case 5489: { // glUniform3iv
+}; break;
+case 5489: { // glUniform3iv
GLint *location = (GLint *) bp; bp += 4;
int *valueLen = (int *) bp; bp += 4;
GLint * value = (GLint *) bp; bp += *valueLen*12;
weglUniform3iv(*location,*valueLen,value);
-}; break;
-case 5490: { // glUniform4iv
+}; break;
+case 5490: { // glUniform4iv
GLint *location = (GLint *) bp; bp += 4;
int *valueLen = (int *) bp; bp += 4;
GLint * value = (GLint *) bp; bp += *valueLen*16;
weglUniform4iv(*location,*valueLen,value);
-}; break;
-case 5491: { // glUniformMatrix2fv
+}; break;
+case 5491: { // glUniformMatrix2fv
GLint *location = (GLint *) bp; bp += 4;
GLboolean *transpose = (GLboolean *) bp; bp += 1;
bp += 3;
int *valueLen = (int *) bp; bp += 4;
GLfloat * value = (GLfloat *) bp; bp += *valueLen*16;
weglUniformMatrix2fv(*location,*valueLen,*transpose,value);
-}; break;
-case 5492: { // glUniformMatrix3fv
+}; break;
+case 5492: { // glUniformMatrix3fv
GLint *location = (GLint *) bp; bp += 4;
GLboolean *transpose = (GLboolean *) bp; bp += 1;
bp += 3;
int *valueLen = (int *) bp; bp += 4;
GLfloat * value = (GLfloat *) bp; bp += *valueLen*36;
weglUniformMatrix3fv(*location,*valueLen,*transpose,value);
-}; break;
-case 5493: { // glUniformMatrix4fv
+}; break;
+case 5493: { // glUniformMatrix4fv
GLint *location = (GLint *) bp; bp += 4;
GLboolean *transpose = (GLboolean *) bp; bp += 1;
bp += 3;
int *valueLen = (int *) bp; bp += 4;
GLfloat * value = (GLfloat *) bp; bp += *valueLen*64;
weglUniformMatrix4fv(*location,*valueLen,*transpose,value);
-}; break;
-case 5494: { // glValidateProgram
+}; break;
+case 5494: { // glValidateProgram
GLuint *program = (GLuint *) bp; bp += 4;
weglValidateProgram(*program);
-}; break;
-case 5495: { // glVertexAttrib1dv
+}; break;
+case 5495: { // glVertexAttrib1dv
GLuint *index = (GLuint *) bp; bp += 4;
bp += 4;
GLdouble *v = (GLdouble *) bp; bp += 8;
weglVertexAttrib1dv(*index,v);
-}; break;
-case 5496: { // glVertexAttrib1fv
+}; break;
+case 5496: { // glVertexAttrib1fv
GLuint *index = (GLuint *) bp; bp += 4;
GLfloat *v = (GLfloat *) bp; bp += 4;
weglVertexAttrib1fv(*index,v);
-}; break;
-case 5497: { // glVertexAttrib1sv
+}; break;
+case 5497: { // glVertexAttrib1sv
GLuint *index = (GLuint *) bp; bp += 4;
GLshort *v = (GLshort *) bp; bp += 2;
weglVertexAttrib1sv(*index,v);
-}; break;
-case 5498: { // glVertexAttrib2dv
+}; break;
+case 5498: { // glVertexAttrib2dv
GLuint *index = (GLuint *) bp; bp += 4;
bp += 4;
GLdouble *v = (GLdouble *) bp; bp += 8;
weglVertexAttrib2dv(*index,v);
-}; break;
-case 5499: { // glVertexAttrib2fv
+}; break;
+case 5499: { // glVertexAttrib2fv
GLuint *index = (GLuint *) bp; bp += 4;
GLfloat *v = (GLfloat *) bp; bp += 4;
weglVertexAttrib2fv(*index,v);
-}; break;
-case 5500: { // glVertexAttrib2sv
+}; break;
+case 5500: { // glVertexAttrib2sv
GLuint *index = (GLuint *) bp; bp += 4;
GLshort *v = (GLshort *) bp; bp += 2;
weglVertexAttrib2sv(*index,v);
-}; break;
-case 5501: { // glVertexAttrib3dv
+}; break;
+case 5501: { // glVertexAttrib3dv
GLuint *index = (GLuint *) bp; bp += 4;
bp += 4;
GLdouble *v = (GLdouble *) bp; bp += 8;
weglVertexAttrib3dv(*index,v);
-}; break;
-case 5502: { // glVertexAttrib3fv
+}; break;
+case 5502: { // glVertexAttrib3fv
GLuint *index = (GLuint *) bp; bp += 4;
GLfloat *v = (GLfloat *) bp; bp += 4;
weglVertexAttrib3fv(*index,v);
-}; break;
-case 5503: { // glVertexAttrib3sv
+}; break;
+case 5503: { // glVertexAttrib3sv
GLuint *index = (GLuint *) bp; bp += 4;
GLshort *v = (GLshort *) bp; bp += 2;
weglVertexAttrib3sv(*index,v);
-}; break;
-case 5504: { // glVertexAttrib4Nbv
+}; break;
+case 5504: { // glVertexAttrib4Nbv
GLuint *index = (GLuint *) bp; bp += 4;
GLbyte * v = (GLbyte *) bp; bp += 4;
weglVertexAttrib4Nbv(*index,v);
-}; break;
-case 5505: { // glVertexAttrib4Niv
+}; break;
+case 5505: { // glVertexAttrib4Niv
GLuint *index = (GLuint *) bp; bp += 4;
GLint * v = (GLint *) bp; bp += 16;
weglVertexAttrib4Niv(*index,v);
-}; break;
-case 5506: { // glVertexAttrib4Nsv
+}; break;
+case 5506: { // glVertexAttrib4Nsv
GLuint *index = (GLuint *) bp; bp += 4;
GLshort * v = (GLshort *) bp; bp += 8;
weglVertexAttrib4Nsv(*index,v);
-}; break;
-case 5507: { // glVertexAttrib4Nubv
+}; break;
+case 5507: { // glVertexAttrib4Nubv
GLuint *index = (GLuint *) bp; bp += 4;
GLubyte * v = (GLubyte *) bp; bp += 4;
weglVertexAttrib4Nubv(*index,v);
-}; break;
-case 5508: { // glVertexAttrib4Nuiv
+}; break;
+case 5508: { // glVertexAttrib4Nuiv
GLuint *index = (GLuint *) bp; bp += 4;
GLuint * v = (GLuint *) bp; bp += 16;
weglVertexAttrib4Nuiv(*index,v);
-}; break;
-case 5509: { // glVertexAttrib4Nusv
+}; break;
+case 5509: { // glVertexAttrib4Nusv
GLuint *index = (GLuint *) bp; bp += 4;
GLushort * v = (GLushort *) bp; bp += 8;
weglVertexAttrib4Nusv(*index,v);
-}; break;
-case 5510: { // glVertexAttrib4bv
+}; break;
+case 5510: { // glVertexAttrib4bv
GLuint *index = (GLuint *) bp; bp += 4;
GLbyte * v = (GLbyte *) bp; bp += 4;
weglVertexAttrib4bv(*index,v);
-}; break;
-case 5511: { // glVertexAttrib4dv
+}; break;
+case 5511: { // glVertexAttrib4dv
GLuint *index = (GLuint *) bp; bp += 4;
bp += 4;
GLdouble * v = (GLdouble *) bp; bp += 32;
weglVertexAttrib4dv(*index,v);
-}; break;
-case 5512: { // glVertexAttrib4fv
+}; break;
+case 5512: { // glVertexAttrib4fv
GLuint *index = (GLuint *) bp; bp += 4;
GLfloat * v = (GLfloat *) bp; bp += 16;
weglVertexAttrib4fv(*index,v);
-}; break;
-case 5513: { // glVertexAttrib4iv
+}; break;
+case 5513: { // glVertexAttrib4iv
GLuint *index = (GLuint *) bp; bp += 4;
GLint * v = (GLint *) bp; bp += 16;
weglVertexAttrib4iv(*index,v);
-}; break;
-case 5514: { // glVertexAttrib4sv
+}; break;
+case 5514: { // glVertexAttrib4sv
GLuint *index = (GLuint *) bp; bp += 4;
GLshort * v = (GLshort *) bp; bp += 8;
weglVertexAttrib4sv(*index,v);
-}; break;
-case 5515: { // glVertexAttrib4ubv
+}; break;
+case 5515: { // glVertexAttrib4ubv
GLuint *index = (GLuint *) bp; bp += 4;
GLubyte * v = (GLubyte *) bp; bp += 4;
weglVertexAttrib4ubv(*index,v);
-}; break;
-case 5516: { // glVertexAttrib4uiv
+}; break;
+case 5516: { // glVertexAttrib4uiv
GLuint *index = (GLuint *) bp; bp += 4;
GLuint * v = (GLuint *) bp; bp += 16;
weglVertexAttrib4uiv(*index,v);
-}; break;
-case 5517: { // glVertexAttrib4usv
+}; break;
+case 5517: { // glVertexAttrib4usv
GLuint *index = (GLuint *) bp; bp += 4;
GLushort * v = (GLushort *) bp; bp += 8;
weglVertexAttrib4usv(*index,v);
-}; break;
-case 5518: { // glVertexAttribPointer
+}; break;
+case 5518: { // glVertexAttribPointer
GLuint *index = (GLuint *) bp; bp += 4;
GLint *size = (GLint *) bp; bp += 4;
GLenum *type = (GLenum *) bp; bp += 4;
@@ -3934,8 +3934,8 @@ case 5518: { // glVertexAttribPointer
GLsizei *stride = (GLsizei *) bp; bp += 4;
GLvoid *pointer = (GLvoid *) * (int *) bp; bp += 4;
weglVertexAttribPointer(*index,*size,*type,*normalized,*stride,pointer);
-}; break;
-case 5519: { // glVertexAttribPointer
+}; break;
+case 5519: { // glVertexAttribPointer
GLuint *index = (GLuint *) bp; bp += 4;
GLint *size = (GLint *) bp; bp += 4;
GLenum *type = (GLenum *) bp; bp += 4;
@@ -3944,64 +3944,64 @@ case 5519: { // glVertexAttribPointer
GLsizei *stride = (GLsizei *) bp; bp += 4;
GLvoid *pointer = (GLvoid *) bins[0]->base;
weglVertexAttribPointer(*index,*size,*type,*normalized,*stride,pointer);
-}; break;
-case 5520: { // glUniformMatrix2x3fv
+}; break;
+case 5520: { // glUniformMatrix2x3fv
GLint *location = (GLint *) bp; bp += 4;
GLboolean *transpose = (GLboolean *) bp; bp += 1;
bp += 3;
int *valueLen = (int *) bp; bp += 4;
GLfloat * value = (GLfloat *) bp; bp += *valueLen*24;
weglUniformMatrix2x3fv(*location,*valueLen,*transpose,value);
-}; break;
-case 5521: { // glUniformMatrix3x2fv
+}; break;
+case 5521: { // glUniformMatrix3x2fv
GLint *location = (GLint *) bp; bp += 4;
GLboolean *transpose = (GLboolean *) bp; bp += 1;
bp += 3;
int *valueLen = (int *) bp; bp += 4;
GLfloat * value = (GLfloat *) bp; bp += *valueLen*24;
weglUniformMatrix3x2fv(*location,*valueLen,*transpose,value);
-}; break;
-case 5522: { // glUniformMatrix2x4fv
+}; break;
+case 5522: { // glUniformMatrix2x4fv
GLint *location = (GLint *) bp; bp += 4;
GLboolean *transpose = (GLboolean *) bp; bp += 1;
bp += 3;
int *valueLen = (int *) bp; bp += 4;
GLfloat * value = (GLfloat *) bp; bp += *valueLen*32;
weglUniformMatrix2x4fv(*location,*valueLen,*transpose,value);
-}; break;
-case 5523: { // glUniformMatrix4x2fv
+}; break;
+case 5523: { // glUniformMatrix4x2fv
GLint *location = (GLint *) bp; bp += 4;
GLboolean *transpose = (GLboolean *) bp; bp += 1;
bp += 3;
int *valueLen = (int *) bp; bp += 4;
GLfloat * value = (GLfloat *) bp; bp += *valueLen*32;
weglUniformMatrix4x2fv(*location,*valueLen,*transpose,value);
-}; break;
-case 5524: { // glUniformMatrix3x4fv
+}; break;
+case 5524: { // glUniformMatrix3x4fv
GLint *location = (GLint *) bp; bp += 4;
GLboolean *transpose = (GLboolean *) bp; bp += 1;
bp += 3;
int *valueLen = (int *) bp; bp += 4;
GLfloat * value = (GLfloat *) bp; bp += *valueLen*48;
weglUniformMatrix3x4fv(*location,*valueLen,*transpose,value);
-}; break;
-case 5525: { // glUniformMatrix4x3fv
+}; break;
+case 5525: { // glUniformMatrix4x3fv
GLint *location = (GLint *) bp; bp += 4;
GLboolean *transpose = (GLboolean *) bp; bp += 1;
bp += 3;
int *valueLen = (int *) bp; bp += 4;
GLfloat * value = (GLfloat *) bp; bp += *valueLen*48;
weglUniformMatrix4x3fv(*location,*valueLen,*transpose,value);
-}; break;
-case 5526: { // glColorMaski
+}; break;
+case 5526: { // glColorMaski
GLuint *index = (GLuint *) bp; bp += 4;
GLboolean *r = (GLboolean *) bp; bp += 1;
GLboolean *g = (GLboolean *) bp; bp += 1;
GLboolean *b = (GLboolean *) bp; bp += 1;
GLboolean *a = (GLboolean *) bp; bp += 1;
weglColorMaski(*index,*r,*g,*b,*a);
-}; break;
-case 5527: { // glGetBooleani_v
+}; break;
+case 5527: { // glGetBooleani_v
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *index = (GLuint *) bp; bp += 4;
GLboolean data[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
@@ -4029,8 +4029,8 @@ case 5527: { // glGetBooleani_v
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 39 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,39);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5528: { // glGetIntegeri_v
+}; break;
+case 5528: { // glGetIntegeri_v
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *index = (GLuint *) bp; bp += 4;
GLint data[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
@@ -4058,18 +4058,18 @@ case 5528: { // glGetIntegeri_v
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 39 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,39);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5529: { // glEnablei
+}; break;
+case 5529: { // glEnablei
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *index = (GLuint *) bp; bp += 4;
weglEnablei(*target,*index);
-}; break;
-case 5530: { // glDisablei
+}; break;
+case 5530: { // glDisablei
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *index = (GLuint *) bp; bp += 4;
weglDisablei(*target,*index);
-}; break;
-case 5531: { // glIsEnabledi
+}; break;
+case 5531: { // glIsEnabledi
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *index = (GLuint *) bp; bp += 4;
GLboolean result = weglIsEnabledi(*target,*index);
@@ -4079,15 +4079,15 @@ case 5531: { // glIsEnabledi
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5532: { // glBeginTransformFeedback
+}; break;
+case 5532: { // glBeginTransformFeedback
GLenum *primitiveMode = (GLenum *) bp; bp += 4;
weglBeginTransformFeedback(*primitiveMode);
-}; break;
-case 5533: { // glEndTransformFeedback
+}; break;
+case 5533: { // glEndTransformFeedback
weglEndTransformFeedback();
-}; break;
-case 5534: { // glBindBufferRange
+}; break;
+case 5534: { // glBindBufferRange
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *index = (GLuint *) bp; bp += 4;
GLuint *buffer = (GLuint *) bp; bp += 4;
@@ -4095,27 +4095,27 @@ case 5534: { // glBindBufferRange
GLintptr offset = (GLintptr) * (GLuint64EXT *) bp; bp += 8;
GLsizeiptr size = (GLsizeiptr) * (GLuint64EXT *) bp; bp += 8;
weglBindBufferRange(*target,*index,*buffer,offset,size);
-}; break;
-case 5535: { // glBindBufferBase
+}; break;
+case 5535: { // glBindBufferBase
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *index = (GLuint *) bp; bp += 4;
GLuint *buffer = (GLuint *) bp; bp += 4;
weglBindBufferBase(*target,*index,*buffer);
-}; break;
-case 5536: { // glTransformFeedbackVaryings
+}; break;
+case 5536: { // glTransformFeedbackVaryings
GLuint *program = (GLuint *) bp; bp += 4;
int * varyingsLen = (int *) bp; bp += 4;
int * varyingsTotSize = (int *) bp; bp += 4;
GLchar **varyings;
- varyings = (GLchar **) driver_alloc(sizeof(GLchar *) * *varyingsLen);
+ varyings = (GLchar **) driver_alloc(sizeof(GLchar *) * *varyingsLen);
for(int i=0;i<*varyingsLen;i++) {
varyings[i] = (GLchar *) bp; bp += 1+strlen(bp);};
bp += (8 - ((0 + *varyingsTotSize) % 8)) % 8;
GLenum *bufferMode = (GLenum *) bp; bp += 4;
weglTransformFeedbackVaryings(*program,*varyingsLen,(const GLchar **) varyings,*bufferMode);
driver_free(varyings);
-}; break;
-case 5537: { // glGetTransformFeedbackVarying
+}; break;
+case 5537: { // glGetTransformFeedbackVarying
GLuint *program = (GLuint *) bp; bp += 4;
GLuint *index = (GLuint *) bp; bp += 4;
GLsizei *bufSize = (GLsizei *) bp; bp += 4;
@@ -4135,37 +4135,37 @@ case 5537: { // glGetTransformFeedbackVarying
if (AP != 13 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,13);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
driver_free(name);
-}; break;
-case 5538: { // glClampColor
+}; break;
+case 5538: { // glClampColor
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *clamp = (GLenum *) bp; bp += 4;
weglClampColor(*target,*clamp);
-}; break;
-case 5539: { // glBeginConditionalRender
+}; break;
+case 5539: { // glBeginConditionalRender
GLuint *id = (GLuint *) bp; bp += 4;
GLenum *mode = (GLenum *) bp; bp += 4;
weglBeginConditionalRender(*id,*mode);
-}; break;
-case 5540: { // glEndConditionalRender
+}; break;
+case 5540: { // glEndConditionalRender
weglEndConditionalRender();
-}; break;
-case 5541: { // glVertexAttribIPointer
+}; break;
+case 5541: { // glVertexAttribIPointer
GLuint *index = (GLuint *) bp; bp += 4;
GLint *size = (GLint *) bp; bp += 4;
GLenum *type = (GLenum *) bp; bp += 4;
GLsizei *stride = (GLsizei *) bp; bp += 4;
GLvoid *pointer = (GLvoid *) * (int *) bp; bp += 4;
weglVertexAttribIPointer(*index,*size,*type,*stride,pointer);
-}; break;
-case 5542: { // glVertexAttribIPointer
+}; break;
+case 5542: { // glVertexAttribIPointer
GLuint *index = (GLuint *) bp; bp += 4;
GLint *size = (GLint *) bp; bp += 4;
GLenum *type = (GLenum *) bp; bp += 4;
GLsizei *stride = (GLsizei *) bp; bp += 4;
GLvoid *pointer = (GLvoid *) bins[0]->base;
weglVertexAttribIPointer(*index,*size,*type,*stride,pointer);
-}; break;
-case 5543: { // glGetVertexAttribIiv
+}; break;
+case 5543: { // glGetVertexAttribIiv
GLuint *index = (GLuint *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint params[4] = {0,0,0,0};
@@ -4181,8 +4181,8 @@ case 5543: { // glGetVertexAttribIiv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5544: { // glGetVertexAttribIuiv
+}; break;
+case 5544: { // glGetVertexAttribIuiv
GLuint *index = (GLuint *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLuint params[4] = {0,0,0,0};
@@ -4198,8 +4198,8 @@ case 5544: { // glGetVertexAttribIuiv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5545: { // glGetUniformuiv
+}; break;
+case 5545: { // glGetUniformuiv
GLuint *program = (GLuint *) bp; bp += 4;
GLint *location = (GLint *) bp; bp += 4;
GLuint params[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
@@ -4227,15 +4227,15 @@ case 5545: { // glGetUniformuiv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 38 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,38);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5546: { // glBindFragDataLocation
+}; break;
+case 5546: { // glBindFragDataLocation
GLuint *program = (GLuint *) bp; bp += 4;
GLuint *color = (GLuint *) bp; bp += 4;
GLchar *name = (GLchar *) bp;
int nameLen = strlen((char *)name); bp += nameLen+1+((8-((1+nameLen+0)%8))%8);
weglBindFragDataLocation(*program,*color,name);
-}; break;
-case 5547: { // glGetFragDataLocation
+}; break;
+case 5547: { // glGetFragDataLocation
GLuint *program = (GLuint *) bp; bp += 4;
GLchar *name = (GLchar *) bp;
int nameLen = strlen((char *)name); bp += nameLen+1+((8-((1+nameLen+4)%8))%8);
@@ -4246,72 +4246,72 @@ case 5547: { // glGetFragDataLocation
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5548: { // glUniform1ui
+}; break;
+case 5548: { // glUniform1ui
GLint *location = (GLint *) bp; bp += 4;
GLuint *v0 = (GLuint *) bp; bp += 4;
weglUniform1ui(*location,*v0);
-}; break;
-case 5549: { // glUniform2ui
+}; break;
+case 5549: { // glUniform2ui
GLint *location = (GLint *) bp; bp += 4;
GLuint *v0 = (GLuint *) bp; bp += 4;
GLuint *v1 = (GLuint *) bp; bp += 4;
weglUniform2ui(*location,*v0,*v1);
-}; break;
-case 5550: { // glUniform3ui
+}; break;
+case 5550: { // glUniform3ui
GLint *location = (GLint *) bp; bp += 4;
GLuint *v0 = (GLuint *) bp; bp += 4;
GLuint *v1 = (GLuint *) bp; bp += 4;
GLuint *v2 = (GLuint *) bp; bp += 4;
weglUniform3ui(*location,*v0,*v1,*v2);
-}; break;
-case 5551: { // glUniform4ui
+}; break;
+case 5551: { // glUniform4ui
GLint *location = (GLint *) bp; bp += 4;
GLuint *v0 = (GLuint *) bp; bp += 4;
GLuint *v1 = (GLuint *) bp; bp += 4;
GLuint *v2 = (GLuint *) bp; bp += 4;
GLuint *v3 = (GLuint *) bp; bp += 4;
weglUniform4ui(*location,*v0,*v1,*v2,*v3);
-}; break;
-case 5552: { // glUniform1uiv
+}; break;
+case 5552: { // glUniform1uiv
GLint *location = (GLint *) bp; bp += 4;
int * valueLen = (int *) bp; bp += 4;
GLuint * value = (GLuint *) bp; bp += (8-((*valueLen*4+0)%8))%8;
weglUniform1uiv(*location,*valueLen,value);
-}; break;
-case 5553: { // glUniform2uiv
+}; break;
+case 5553: { // glUniform2uiv
GLint *location = (GLint *) bp; bp += 4;
int *valueLen = (int *) bp; bp += 4;
GLuint * value = (GLuint *) bp; bp += *valueLen*8;
weglUniform2uiv(*location,*valueLen,value);
-}; break;
-case 5554: { // glUniform3uiv
+}; break;
+case 5554: { // glUniform3uiv
GLint *location = (GLint *) bp; bp += 4;
int *valueLen = (int *) bp; bp += 4;
GLuint * value = (GLuint *) bp; bp += *valueLen*12;
weglUniform3uiv(*location,*valueLen,value);
-}; break;
-case 5555: { // glUniform4uiv
+}; break;
+case 5555: { // glUniform4uiv
GLint *location = (GLint *) bp; bp += 4;
int *valueLen = (int *) bp; bp += 4;
GLuint * value = (GLuint *) bp; bp += *valueLen*16;
weglUniform4uiv(*location,*valueLen,value);
-}; break;
-case 5556: { // glTexParameterIiv
+}; break;
+case 5556: { // glTexParameterIiv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
int *paramsLen = (int *) bp; bp += 4;
GLint *params = (GLint *) bp; bp += *paramsLen*4+((*paramsLen)+1)%2*4;
weglTexParameterIiv(*target,*pname,params);
-}; break;
-case 5557: { // glTexParameterIuiv
+}; break;
+case 5557: { // glTexParameterIuiv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
int *paramsLen = (int *) bp; bp += 4;
GLuint *params = (GLuint *) bp; bp += *paramsLen*4+((*paramsLen)+1)%2*4;
weglTexParameterIuiv(*target,*pname,params);
-}; break;
-case 5558: { // glGetTexParameterIiv
+}; break;
+case 5558: { // glGetTexParameterIiv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint params[4] = {0,0,0,0};
@@ -4327,8 +4327,8 @@ case 5558: { // glGetTexParameterIiv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5559: { // glGetTexParameterIuiv
+}; break;
+case 5559: { // glGetTexParameterIuiv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLuint params[4] = {0,0,0,0};
@@ -4344,36 +4344,36 @@ case 5559: { // glGetTexParameterIuiv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5560: { // glClearBufferiv
+}; break;
+case 5560: { // glClearBufferiv
GLenum *buffer = (GLenum *) bp; bp += 4;
GLint *drawbuffer = (GLint *) bp; bp += 4;
int *valueLen = (int *) bp; bp += 4;
GLint *value = (GLint *) bp; bp += *valueLen*4+((*valueLen)+1)%2*4;
weglClearBufferiv(*buffer,*drawbuffer,value);
-}; break;
-case 5561: { // glClearBufferuiv
+}; break;
+case 5561: { // glClearBufferuiv
GLenum *buffer = (GLenum *) bp; bp += 4;
GLint *drawbuffer = (GLint *) bp; bp += 4;
int *valueLen = (int *) bp; bp += 4;
GLuint *value = (GLuint *) bp; bp += *valueLen*4+((*valueLen)+1)%2*4;
weglClearBufferuiv(*buffer,*drawbuffer,value);
-}; break;
-case 5562: { // glClearBufferfv
+}; break;
+case 5562: { // glClearBufferfv
GLenum *buffer = (GLenum *) bp; bp += 4;
GLint *drawbuffer = (GLint *) bp; bp += 4;
int *valueLen = (int *) bp; bp += 4;
GLfloat *value = (GLfloat *) bp; bp += *valueLen*4+((*valueLen)+1)%2*4;
weglClearBufferfv(*buffer,*drawbuffer,value);
-}; break;
-case 5563: { // glClearBufferfi
+}; break;
+case 5563: { // glClearBufferfi
GLenum *buffer = (GLenum *) bp; bp += 4;
GLint *drawbuffer = (GLint *) bp; bp += 4;
GLfloat *depth = (GLfloat *) bp; bp += 4;
GLint *stencil = (GLint *) bp; bp += 4;
weglClearBufferfi(*buffer,*drawbuffer,*depth,*stencil);
-}; break;
-case 5564: { // glGetStringi
+}; break;
+case 5564: { // glGetStringi
GLenum *name = (GLenum *) bp; bp += 4;
GLuint *index = (GLuint *) bp; bp += 4;
const GLubyte * result = weglGetStringi(*name,*index);
@@ -4383,197 +4383,197 @@ case 5564: { // glGetStringi
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 7 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,7);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5565: { // glVertexAttribI1iv
+}; break;
+case 5565: { // glVertexAttribI1iv
GLuint *index = (GLuint *) bp; bp += 4;
GLint *v = (GLint *) bp; bp += 4;
weglVertexAttribI1iv(*index,v);
-}; break;
-case 5566: { // glVertexAttribI2iv
+}; break;
+case 5566: { // glVertexAttribI2iv
GLuint *index = (GLuint *) bp; bp += 4;
GLint *v = (GLint *) bp; bp += 4;
weglVertexAttribI2iv(*index,v);
-}; break;
-case 5567: { // glVertexAttribI3iv
+}; break;
+case 5567: { // glVertexAttribI3iv
GLuint *index = (GLuint *) bp; bp += 4;
GLint *v = (GLint *) bp; bp += 4;
weglVertexAttribI3iv(*index,v);
-}; break;
-case 5568: { // glVertexAttribI4iv
+}; break;
+case 5568: { // glVertexAttribI4iv
GLuint *index = (GLuint *) bp; bp += 4;
GLint * v = (GLint *) bp; bp += 16;
weglVertexAttribI4iv(*index,v);
-}; break;
-case 5569: { // glVertexAttribI1uiv
+}; break;
+case 5569: { // glVertexAttribI1uiv
GLuint *index = (GLuint *) bp; bp += 4;
GLuint *v = (GLuint *) bp; bp += 4;
weglVertexAttribI1uiv(*index,v);
-}; break;
-case 5570: { // glVertexAttribI2uiv
+}; break;
+case 5570: { // glVertexAttribI2uiv
GLuint *index = (GLuint *) bp; bp += 4;
GLuint *v = (GLuint *) bp; bp += 4;
weglVertexAttribI2uiv(*index,v);
-}; break;
-case 5571: { // glVertexAttribI3uiv
+}; break;
+case 5571: { // glVertexAttribI3uiv
GLuint *index = (GLuint *) bp; bp += 4;
GLuint *v = (GLuint *) bp; bp += 4;
weglVertexAttribI3uiv(*index,v);
-}; break;
-case 5572: { // glVertexAttribI4uiv
+}; break;
+case 5572: { // glVertexAttribI4uiv
GLuint *index = (GLuint *) bp; bp += 4;
GLuint * v = (GLuint *) bp; bp += 16;
weglVertexAttribI4uiv(*index,v);
-}; break;
-case 5573: { // glVertexAttribI4bv
+}; break;
+case 5573: { // glVertexAttribI4bv
GLuint *index = (GLuint *) bp; bp += 4;
GLbyte * v = (GLbyte *) bp; bp += 4;
weglVertexAttribI4bv(*index,v);
-}; break;
-case 5574: { // glVertexAttribI4sv
+}; break;
+case 5574: { // glVertexAttribI4sv
GLuint *index = (GLuint *) bp; bp += 4;
GLshort * v = (GLshort *) bp; bp += 8;
weglVertexAttribI4sv(*index,v);
-}; break;
-case 5575: { // glVertexAttribI4ubv
+}; break;
+case 5575: { // glVertexAttribI4ubv
GLuint *index = (GLuint *) bp; bp += 4;
GLubyte * v = (GLubyte *) bp; bp += 4;
weglVertexAttribI4ubv(*index,v);
-}; break;
-case 5576: { // glVertexAttribI4usv
+}; break;
+case 5576: { // glVertexAttribI4usv
GLuint *index = (GLuint *) bp; bp += 4;
GLushort * v = (GLushort *) bp; bp += 8;
weglVertexAttribI4usv(*index,v);
-}; break;
-case 5577: { // glDrawArraysInstanced
+}; break;
+case 5577: { // glDrawArraysInstanced
GLenum *mode = (GLenum *) bp; bp += 4;
GLint *first = (GLint *) bp; bp += 4;
GLsizei *count = (GLsizei *) bp; bp += 4;
GLsizei *primcount = (GLsizei *) bp; bp += 4;
weglDrawArraysInstanced(*mode,*first,*count,*primcount);
-}; break;
-case 5578: { // glDrawElementsInstanced
+}; break;
+case 5578: { // glDrawElementsInstanced
GLenum *mode = (GLenum *) bp; bp += 4;
GLsizei *count = (GLsizei *) bp; bp += 4;
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *indices = (GLvoid *) * (int *) bp; bp += 4;
GLsizei *primcount = (GLsizei *) bp; bp += 4;
weglDrawElementsInstanced(*mode,*count,*type,indices,*primcount);
-}; break;
-case 5579: { // glDrawElementsInstanced
+}; break;
+case 5579: { // glDrawElementsInstanced
GLenum *mode = (GLenum *) bp; bp += 4;
GLsizei *count = (GLsizei *) bp; bp += 4;
GLenum *type = (GLenum *) bp; bp += 4;
GLvoid *indices = (GLvoid *) bins[0]->base;
GLsizei *primcount = (GLsizei *) bp; bp += 4;
weglDrawElementsInstanced(*mode,*count,*type,indices,*primcount);
-}; break;
-case 5580: { // glTexBuffer
+}; break;
+case 5580: { // glTexBuffer
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *internalformat = (GLenum *) bp; bp += 4;
GLuint *buffer = (GLuint *) bp; bp += 4;
weglTexBuffer(*target,*internalformat,*buffer);
-}; break;
-case 5581: { // glPrimitiveRestartIndex
+}; break;
+case 5581: { // glPrimitiveRestartIndex
GLuint *index = (GLuint *) bp; bp += 4;
weglPrimitiveRestartIndex(*index);
-}; break;
-case 5582: { // glLoadTransposeMatrixfARB
+}; break;
+case 5582: { // glLoadTransposeMatrixfARB
GLfloat * m = (GLfloat *) bp; bp += 64;
weglLoadTransposeMatrixfARB(m);
-}; break;
-case 5583: { // glLoadTransposeMatrixdARB
+}; break;
+case 5583: { // glLoadTransposeMatrixdARB
GLdouble * m = (GLdouble *) bp; bp += 128;
weglLoadTransposeMatrixdARB(m);
-}; break;
-case 5584: { // glMultTransposeMatrixfARB
+}; break;
+case 5584: { // glMultTransposeMatrixfARB
GLfloat * m = (GLfloat *) bp; bp += 64;
weglMultTransposeMatrixfARB(m);
-}; break;
-case 5585: { // glMultTransposeMatrixdARB
+}; break;
+case 5585: { // glMultTransposeMatrixdARB
GLdouble * m = (GLdouble *) bp; bp += 128;
weglMultTransposeMatrixdARB(m);
-}; break;
-case 5586: { // glWeightbvARB
+}; break;
+case 5586: { // glWeightbvARB
int * weightsLen = (int *) bp; bp += 4;
GLbyte * weights = (GLbyte *) bp; bp += (8-((*weightsLen*1+4)%8))%8;
weglWeightbvARB(*weightsLen,weights);
-}; break;
-case 5587: { // glWeightsvARB
+}; break;
+case 5587: { // glWeightsvARB
int * weightsLen = (int *) bp; bp += 4;
GLshort * weights = (GLshort *) bp; bp += (8-((*weightsLen*2+4)%8))%8;
weglWeightsvARB(*weightsLen,weights);
-}; break;
-case 5588: { // glWeightivARB
+}; break;
+case 5588: { // glWeightivARB
int * weightsLen = (int *) bp; bp += 4;
GLint * weights = (GLint *) bp; bp += (8-((*weightsLen*4+4)%8))%8;
weglWeightivARB(*weightsLen,weights);
-}; break;
-case 5589: { // glWeightfvARB
+}; break;
+case 5589: { // glWeightfvARB
int * weightsLen = (int *) bp; bp += 4;
GLfloat * weights = (GLfloat *) bp; bp += (8-((*weightsLen*4+4)%8))%8;
weglWeightfvARB(*weightsLen,weights);
-}; break;
-case 5590: { // glWeightdvARB
+}; break;
+case 5590: { // glWeightdvARB
int * weightsLen = (int *) bp; bp += 8;
GLdouble * weights = (GLdouble *) bp; bp += (8-((*weightsLen*8+0)%8))%8;
weglWeightdvARB(*weightsLen,weights);
-}; break;
-case 5591: { // glWeightubvARB
+}; break;
+case 5591: { // glWeightubvARB
int * weightsLen = (int *) bp; bp += 4;
GLubyte * weights = (GLubyte *) bp; bp += (8-((*weightsLen*1+4)%8))%8;
weglWeightubvARB(*weightsLen,weights);
-}; break;
-case 5592: { // glWeightusvARB
+}; break;
+case 5592: { // glWeightusvARB
int * weightsLen = (int *) bp; bp += 4;
GLushort * weights = (GLushort *) bp; bp += (8-((*weightsLen*2+4)%8))%8;
weglWeightusvARB(*weightsLen,weights);
-}; break;
-case 5593: { // glWeightuivARB
+}; break;
+case 5593: { // glWeightuivARB
int * weightsLen = (int *) bp; bp += 4;
GLuint * weights = (GLuint *) bp; bp += (8-((*weightsLen*4+4)%8))%8;
weglWeightuivARB(*weightsLen,weights);
-}; break;
-case 5594: { // glVertexBlendARB
+}; break;
+case 5594: { // glVertexBlendARB
GLint *count = (GLint *) bp; bp += 4;
weglVertexBlendARB(*count);
-}; break;
-case 5595: { // glCurrentPaletteMatrixARB
+}; break;
+case 5595: { // glCurrentPaletteMatrixARB
GLint *index = (GLint *) bp; bp += 4;
weglCurrentPaletteMatrixARB(*index);
-}; break;
-case 5596: { // glMatrixIndexubvARB
+}; break;
+case 5596: { // glMatrixIndexubvARB
int * indicesLen = (int *) bp; bp += 4;
GLubyte * indices = (GLubyte *) bp; bp += (8-((*indicesLen*1+4)%8))%8;
weglMatrixIndexubvARB(*indicesLen,indices);
-}; break;
-case 5597: { // glMatrixIndexusvARB
+}; break;
+case 5597: { // glMatrixIndexusvARB
int * indicesLen = (int *) bp; bp += 4;
GLushort * indices = (GLushort *) bp; bp += (8-((*indicesLen*2+4)%8))%8;
weglMatrixIndexusvARB(*indicesLen,indices);
-}; break;
-case 5598: { // glMatrixIndexuivARB
+}; break;
+case 5598: { // glMatrixIndexuivARB
int * indicesLen = (int *) bp; bp += 4;
GLuint * indices = (GLuint *) bp; bp += (8-((*indicesLen*4+4)%8))%8;
weglMatrixIndexuivARB(*indicesLen,indices);
-}; break;
-case 5599: { // glProgramStringARB
+}; break;
+case 5599: { // glProgramStringARB
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *format = (GLenum *) bp; bp += 4;
GLvoid *string = (GLvoid *) bp;
int stringLen = strlen((char *)string); bp += stringLen+1+((8-((1+stringLen+0)%8))%8);
weglProgramStringARB(*target,*format,stringLen,string);
-}; break;
-case 5600: { // glBindProgramARB
+}; break;
+case 5600: { // glBindProgramARB
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *program = (GLuint *) bp; bp += 4;
weglBindProgramARB(*target,*program);
-}; break;
-case 5601: { // glDeleteProgramsARB
+}; break;
+case 5601: { // glDeleteProgramsARB
int * programsLen = (int *) bp; bp += 4;
GLuint * programs = (GLuint *) bp; bp += (8-((*programsLen*4+4)%8))%8;
weglDeleteProgramsARB(*programsLen,programs);
-}; break;
-case 5602: { // glGenProgramsARB
+}; break;
+case 5602: { // glGenProgramsARB
GLsizei *n = (GLsizei *) bp; bp += 4;
GLuint *programs;
programs = (GLuint *) driver_alloc(sizeof(GLuint) * *n);
@@ -4587,10 +4587,10 @@ case 5602: { // glGenProgramsARB
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 7 + (*n)*2 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,7 + (*n)*2);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
- driver_free(rt);
+ driver_free(rt);
driver_free(programs);
-}; break;
-case 5603: { // glProgramEnvParameter4dARB
+}; break;
+case 5603: { // glProgramEnvParameter4dARB
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *index = (GLuint *) bp; bp += 4;
GLdouble *x = (GLdouble *) bp; bp += 8;
@@ -4598,14 +4598,14 @@ case 5603: { // glProgramEnvParameter4dARB
GLdouble *z = (GLdouble *) bp; bp += 8;
GLdouble *w = (GLdouble *) bp; bp += 8;
weglProgramEnvParameter4dARB(*target,*index,*x,*y,*z,*w);
-}; break;
-case 5604: { // glProgramEnvParameter4dvARB
+}; break;
+case 5604: { // glProgramEnvParameter4dvARB
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *index = (GLuint *) bp; bp += 4;
GLdouble * params = (GLdouble *) bp; bp += 32;
weglProgramEnvParameter4dvARB(*target,*index,params);
-}; break;
-case 5605: { // glProgramEnvParameter4fARB
+}; break;
+case 5605: { // glProgramEnvParameter4fARB
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *index = (GLuint *) bp; bp += 4;
GLfloat *x = (GLfloat *) bp; bp += 4;
@@ -4613,14 +4613,14 @@ case 5605: { // glProgramEnvParameter4fARB
GLfloat *z = (GLfloat *) bp; bp += 4;
GLfloat *w = (GLfloat *) bp; bp += 4;
weglProgramEnvParameter4fARB(*target,*index,*x,*y,*z,*w);
-}; break;
-case 5606: { // glProgramEnvParameter4fvARB
+}; break;
+case 5606: { // glProgramEnvParameter4fvARB
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *index = (GLuint *) bp; bp += 4;
GLfloat * params = (GLfloat *) bp; bp += 16;
weglProgramEnvParameter4fvARB(*target,*index,params);
-}; break;
-case 5607: { // glProgramLocalParameter4dARB
+}; break;
+case 5607: { // glProgramLocalParameter4dARB
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *index = (GLuint *) bp; bp += 4;
GLdouble *x = (GLdouble *) bp; bp += 8;
@@ -4628,14 +4628,14 @@ case 5607: { // glProgramLocalParameter4dARB
GLdouble *z = (GLdouble *) bp; bp += 8;
GLdouble *w = (GLdouble *) bp; bp += 8;
weglProgramLocalParameter4dARB(*target,*index,*x,*y,*z,*w);
-}; break;
-case 5608: { // glProgramLocalParameter4dvARB
+}; break;
+case 5608: { // glProgramLocalParameter4dvARB
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *index = (GLuint *) bp; bp += 4;
GLdouble * params = (GLdouble *) bp; bp += 32;
weglProgramLocalParameter4dvARB(*target,*index,params);
-}; break;
-case 5609: { // glProgramLocalParameter4fARB
+}; break;
+case 5609: { // glProgramLocalParameter4fARB
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *index = (GLuint *) bp; bp += 4;
GLfloat *x = (GLfloat *) bp; bp += 4;
@@ -4643,14 +4643,14 @@ case 5609: { // glProgramLocalParameter4fARB
GLfloat *z = (GLfloat *) bp; bp += 4;
GLfloat *w = (GLfloat *) bp; bp += 4;
weglProgramLocalParameter4fARB(*target,*index,*x,*y,*z,*w);
-}; break;
-case 5610: { // glProgramLocalParameter4fvARB
+}; break;
+case 5610: { // glProgramLocalParameter4fvARB
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *index = (GLuint *) bp; bp += 4;
GLfloat * params = (GLfloat *) bp; bp += 16;
weglProgramLocalParameter4fvARB(*target,*index,params);
-}; break;
-case 5611: { // glGetProgramEnvParameterdvARB
+}; break;
+case 5611: { // glGetProgramEnvParameterdvARB
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *index = (GLuint *) bp; bp += 4;
GLdouble params[4] = {0.0,0.0,0.0,0.0};
@@ -4666,8 +4666,8 @@ case 5611: { // glGetProgramEnvParameterdvARB
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5612: { // glGetProgramEnvParameterfvARB
+}; break;
+case 5612: { // glGetProgramEnvParameterfvARB
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *index = (GLuint *) bp; bp += 4;
GLfloat params[4] = {0.0,0.0,0.0,0.0};
@@ -4684,8 +4684,8 @@ case 5612: { // glGetProgramEnvParameterfvARB
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5613: { // glGetProgramLocalParameterdvARB
+}; break;
+case 5613: { // glGetProgramLocalParameterdvARB
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *index = (GLuint *) bp; bp += 4;
GLdouble params[4] = {0.0,0.0,0.0,0.0};
@@ -4701,8 +4701,8 @@ case 5613: { // glGetProgramLocalParameterdvARB
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5614: { // glGetProgramLocalParameterfvARB
+}; break;
+case 5614: { // glGetProgramLocalParameterfvARB
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *index = (GLuint *) bp; bp += 4;
GLfloat params[4] = {0.0,0.0,0.0,0.0};
@@ -4719,8 +4719,8 @@ case 5614: { // glGetProgramLocalParameterfvARB
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 14 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,14);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5615: { // glGetProgramStringARB
+}; break;
+case 5615: { // glGetProgramStringARB
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLvoid *string = (GLvoid *) bins[0]->base;
@@ -4730,12 +4730,12 @@ case 5615: { // glGetProgramStringARB
rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "ok");
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5616: { // glDeleteObjectARB
+}; break;
+case 5616: { // glDeleteObjectARB
GLhandleARB obj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8;
weglDeleteObjectARB(obj);
-}; break;
-case 5617: { // glGetHandleARB
+}; break;
+case 5617: { // glGetHandleARB
GLenum *pname = (GLenum *) bp; bp += 4;
GLhandleARB result = weglGetHandleARB(*pname);
int AP = 0; ErlDrvTermData rt[6];
@@ -4744,13 +4744,13 @@ case 5617: { // glGetHandleARB
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5618: { // glDetachObjectARB
+}; break;
+case 5618: { // glDetachObjectARB
GLhandleARB containerObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8;
GLhandleARB attachedObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8;
weglDetachObjectARB(containerObj,attachedObj);
-}; break;
-case 5619: { // glCreateShaderObjectARB
+}; break;
+case 5619: { // glCreateShaderObjectARB
GLenum *shaderType = (GLenum *) bp; bp += 4;
GLhandleARB result = weglCreateShaderObjectARB(*shaderType);
int AP = 0; ErlDrvTermData rt[6];
@@ -4759,24 +4759,24 @@ case 5619: { // glCreateShaderObjectARB
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5620: { // glShaderSourceARB
+}; break;
+case 5620: { // glShaderSourceARB
GLhandleARB shaderObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8;
int * stringLen = (int *) bp; bp += 4;
int * stringTotSize = (int *) bp; bp += 4;
GLchar **string;
- string = (GLchar **) driver_alloc(sizeof(GLchar *) * *stringLen);
+ string = (GLchar **) driver_alloc(sizeof(GLchar *) * *stringLen);
for(int i=0;i<*stringLen;i++) {
string[i] = (GLchar *) bp; bp += 1+strlen(bp);};
bp += (8 - ((4 + *stringTotSize) % 8)) % 8;
weglShaderSourceARB(shaderObj,*stringLen,(const GLchar **) string,NULL);
driver_free(string);
-}; break;
-case 5621: { // glCompileShaderARB
+}; break;
+case 5621: { // glCompileShaderARB
GLhandleARB shaderObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8;
weglCompileShaderARB(shaderObj);
-}; break;
-case 5622: { // glCreateProgramObjectARB
+}; break;
+case 5622: { // glCreateProgramObjectARB
GLhandleARB result = weglCreateProgramObjectARB();
int AP = 0; ErlDrvTermData rt[6];
rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "_wxe_result_");
@@ -4784,25 +4784,25 @@ case 5622: { // glCreateProgramObjectARB
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5623: { // glAttachObjectARB
+}; break;
+case 5623: { // glAttachObjectARB
GLhandleARB containerObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8;
GLhandleARB obj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8;
weglAttachObjectARB(containerObj,obj);
-}; break;
-case 5624: { // glLinkProgramARB
+}; break;
+case 5624: { // glLinkProgramARB
GLhandleARB programObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8;
weglLinkProgramARB(programObj);
-}; break;
-case 5625: { // glUseProgramObjectARB
+}; break;
+case 5625: { // glUseProgramObjectARB
GLhandleARB programObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8;
weglUseProgramObjectARB(programObj);
-}; break;
-case 5626: { // glValidateProgramARB
+}; break;
+case 5626: { // glValidateProgramARB
GLhandleARB programObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8;
weglValidateProgramARB(programObj);
-}; break;
-case 5627: { // glGetObjectParameterfvARB
+}; break;
+case 5627: { // glGetObjectParameterfvARB
GLhandleARB obj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8;
GLenum *pname = (GLenum *) bp; bp += 4;
GLfloat params[1] = {0.0};
@@ -4814,8 +4814,8 @@ case 5627: { // glGetObjectParameterfvARB
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5628: { // glGetObjectParameterivARB
+}; break;
+case 5628: { // glGetObjectParameterivARB
GLhandleARB obj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint params[1] = {0};
@@ -4826,8 +4826,8 @@ case 5628: { // glGetObjectParameterivARB
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5629: { // glGetInfoLogARB
+}; break;
+case 5629: { // glGetInfoLogARB
GLhandleARB obj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8;
GLsizei *maxLength = (GLsizei *) bp; bp += 4;
GLsizei length[1] = {0};
@@ -4841,8 +4841,8 @@ case 5629: { // glGetInfoLogARB
if (AP != 7 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,7);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
driver_free(infoLog);
-}; break;
-case 5630: { // glGetAttachedObjectsARB
+}; break;
+case 5630: { // glGetAttachedObjectsARB
GLhandleARB containerObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8;
GLsizei *maxCount = (GLsizei *) bp; bp += 4;
GLsizei count[1] = {0};
@@ -4858,10 +4858,10 @@ case 5630: { // glGetAttachedObjectsARB
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 7 + (*count)*2 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,7 + (*count)*2);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
- driver_free(rt);
+ driver_free(rt);
driver_free(obj);
-}; break;
-case 5631: { // glGetUniformLocationARB
+}; break;
+case 5631: { // glGetUniformLocationARB
GLhandleARB programObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8;
GLchar *name = (GLchar *) bp;
int nameLen = strlen((char *)name); bp += nameLen+1+((8-((1+nameLen+0)%8))%8);
@@ -4872,8 +4872,8 @@ case 5631: { // glGetUniformLocationARB
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5632: { // glGetActiveUniformARB
+}; break;
+case 5632: { // glGetActiveUniformARB
GLhandleARB programObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8;
GLuint *index = (GLuint *) bp; bp += 4;
GLsizei *maxLength = (GLsizei *) bp; bp += 4;
@@ -4893,8 +4893,8 @@ case 5632: { // glGetActiveUniformARB
if (AP != 13 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,13);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
driver_free(name);
-}; break;
-case 5633: { // glGetUniformfvARB
+}; break;
+case 5633: { // glGetUniformfvARB
GLhandleARB programObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8;
GLint *location = (GLint *) bp; bp += 4;
GLfloat params[16] = {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
@@ -4923,8 +4923,8 @@ case 5633: { // glGetUniformfvARB
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 38 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,38);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5634: { // glGetUniformivARB
+}; break;
+case 5634: { // glGetUniformivARB
GLhandleARB programObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8;
GLint *location = (GLint *) bp; bp += 4;
GLint params[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
@@ -4952,8 +4952,8 @@ case 5634: { // glGetUniformivARB
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 38 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,38);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5635: { // glGetShaderSourceARB
+}; break;
+case 5635: { // glGetShaderSourceARB
GLhandleARB obj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8;
GLsizei *maxLength = (GLsizei *) bp; bp += 4;
GLsizei length[1] = {0};
@@ -4967,15 +4967,15 @@ case 5635: { // glGetShaderSourceARB
if (AP != 7 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,7);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
driver_free(source);
-}; break;
-case 5636: { // glBindAttribLocationARB
+}; break;
+case 5636: { // glBindAttribLocationARB
GLhandleARB programObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8;
GLuint *index = (GLuint *) bp; bp += 4;
GLchar *name = (GLchar *) bp;
int nameLen = strlen((char *)name); bp += nameLen+1+((8-((1+nameLen+4)%8))%8);
weglBindAttribLocationARB(programObj,*index,name);
-}; break;
-case 5637: { // glGetActiveAttribARB
+}; break;
+case 5637: { // glGetActiveAttribARB
GLhandleARB programObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8;
GLuint *index = (GLuint *) bp; bp += 4;
GLsizei *maxLength = (GLsizei *) bp; bp += 4;
@@ -4995,8 +4995,8 @@ case 5637: { // glGetActiveAttribARB
if (AP != 13 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,13);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
driver_free(name);
-}; break;
-case 5638: { // glGetAttribLocationARB
+}; break;
+case 5638: { // glGetAttribLocationARB
GLhandleARB programObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8;
GLchar *name = (GLchar *) bp;
int nameLen = strlen((char *)name); bp += nameLen+1+((8-((1+nameLen+0)%8))%8);
@@ -5007,8 +5007,8 @@ case 5638: { // glGetAttribLocationARB
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5639: { // glIsRenderbuffer
+}; break;
+case 5639: { // glIsRenderbuffer
GLuint *renderbuffer = (GLuint *) bp; bp += 4;
GLboolean result = weglIsRenderbuffer(*renderbuffer);
int AP = 0; ErlDrvTermData rt[6];
@@ -5017,18 +5017,18 @@ case 5639: { // glIsRenderbuffer
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5640: { // glBindRenderbuffer
+}; break;
+case 5640: { // glBindRenderbuffer
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *renderbuffer = (GLuint *) bp; bp += 4;
weglBindRenderbuffer(*target,*renderbuffer);
-}; break;
-case 5641: { // glDeleteRenderbuffers
+}; break;
+case 5641: { // glDeleteRenderbuffers
int * renderbuffersLen = (int *) bp; bp += 4;
GLuint * renderbuffers = (GLuint *) bp; bp += (8-((*renderbuffersLen*4+4)%8))%8;
weglDeleteRenderbuffers(*renderbuffersLen,renderbuffers);
-}; break;
-case 5642: { // glGenRenderbuffers
+}; break;
+case 5642: { // glGenRenderbuffers
GLsizei *n = (GLsizei *) bp; bp += 4;
GLuint *renderbuffers;
renderbuffers = (GLuint *) driver_alloc(sizeof(GLuint) * *n);
@@ -5042,17 +5042,17 @@ case 5642: { // glGenRenderbuffers
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 7 + (*n)*2 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,7 + (*n)*2);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
- driver_free(rt);
+ driver_free(rt);
driver_free(renderbuffers);
-}; break;
-case 5643: { // glRenderbufferStorage
+}; break;
+case 5643: { // glRenderbufferStorage
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *internalformat = (GLenum *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
GLsizei *height = (GLsizei *) bp; bp += 4;
weglRenderbufferStorage(*target,*internalformat,*width,*height);
-}; break;
-case 5644: { // glGetRenderbufferParameteriv
+}; break;
+case 5644: { // glGetRenderbufferParameteriv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint params[1] = {0};
@@ -5063,8 +5063,8 @@ case 5644: { // glGetRenderbufferParameteriv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5645: { // glIsFramebuffer
+}; break;
+case 5645: { // glIsFramebuffer
GLuint *framebuffer = (GLuint *) bp; bp += 4;
GLboolean result = weglIsFramebuffer(*framebuffer);
int AP = 0; ErlDrvTermData rt[6];
@@ -5073,18 +5073,18 @@ case 5645: { // glIsFramebuffer
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5646: { // glBindFramebuffer
+}; break;
+case 5646: { // glBindFramebuffer
GLenum *target = (GLenum *) bp; bp += 4;
GLuint *framebuffer = (GLuint *) bp; bp += 4;
weglBindFramebuffer(*target,*framebuffer);
-}; break;
-case 5647: { // glDeleteFramebuffers
+}; break;
+case 5647: { // glDeleteFramebuffers
int * framebuffersLen = (int *) bp; bp += 4;
GLuint * framebuffers = (GLuint *) bp; bp += (8-((*framebuffersLen*4+4)%8))%8;
weglDeleteFramebuffers(*framebuffersLen,framebuffers);
-}; break;
-case 5648: { // glGenFramebuffers
+}; break;
+case 5648: { // glGenFramebuffers
GLsizei *n = (GLsizei *) bp; bp += 4;
GLuint *framebuffers;
framebuffers = (GLuint *) driver_alloc(sizeof(GLuint) * *n);
@@ -5098,10 +5098,10 @@ case 5648: { // glGenFramebuffers
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 7 + (*n)*2 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,7 + (*n)*2);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
- driver_free(rt);
+ driver_free(rt);
driver_free(framebuffers);
-}; break;
-case 5649: { // glCheckFramebufferStatus
+}; break;
+case 5649: { // glCheckFramebufferStatus
GLenum *target = (GLenum *) bp; bp += 4;
GLenum result = weglCheckFramebufferStatus(*target);
int AP = 0; ErlDrvTermData rt[6];
@@ -5110,24 +5110,24 @@ case 5649: { // glCheckFramebufferStatus
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5650: { // glFramebufferTexture1D
+}; break;
+case 5650: { // glFramebufferTexture1D
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *attachment = (GLenum *) bp; bp += 4;
GLenum *textarget = (GLenum *) bp; bp += 4;
GLuint *texture = (GLuint *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
weglFramebufferTexture1D(*target,*attachment,*textarget,*texture,*level);
-}; break;
-case 5651: { // glFramebufferTexture2D
+}; break;
+case 5651: { // glFramebufferTexture2D
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *attachment = (GLenum *) bp; bp += 4;
GLenum *textarget = (GLenum *) bp; bp += 4;
GLuint *texture = (GLuint *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
weglFramebufferTexture2D(*target,*attachment,*textarget,*texture,*level);
-}; break;
-case 5652: { // glFramebufferTexture3D
+}; break;
+case 5652: { // glFramebufferTexture3D
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *attachment = (GLenum *) bp; bp += 4;
GLenum *textarget = (GLenum *) bp; bp += 4;
@@ -5135,15 +5135,15 @@ case 5652: { // glFramebufferTexture3D
GLint *level = (GLint *) bp; bp += 4;
GLint *zoffset = (GLint *) bp; bp += 4;
weglFramebufferTexture3D(*target,*attachment,*textarget,*texture,*level,*zoffset);
-}; break;
-case 5653: { // glFramebufferRenderbuffer
+}; break;
+case 5653: { // glFramebufferRenderbuffer
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *attachment = (GLenum *) bp; bp += 4;
GLenum *renderbuffertarget = (GLenum *) bp; bp += 4;
GLuint *renderbuffer = (GLuint *) bp; bp += 4;
weglFramebufferRenderbuffer(*target,*attachment,*renderbuffertarget,*renderbuffer);
-}; break;
-case 5654: { // glGetFramebufferAttachmentParameteriv
+}; break;
+case 5654: { // glGetFramebufferAttachmentParameteriv
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *attachment = (GLenum *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
@@ -5155,12 +5155,12 @@ case 5654: { // glGetFramebufferAttachmentParameteriv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5655: { // glGenerateMipmap
+}; break;
+case 5655: { // glGenerateMipmap
GLenum *target = (GLenum *) bp; bp += 4;
weglGenerateMipmap(*target);
-}; break;
-case 5656: { // glBlitFramebuffer
+}; break;
+case 5656: { // glBlitFramebuffer
GLint *srcX0 = (GLint *) bp; bp += 4;
GLint *srcY0 = (GLint *) bp; bp += 4;
GLint *srcX1 = (GLint *) bp; bp += 4;
@@ -5172,66 +5172,66 @@ case 5656: { // glBlitFramebuffer
GLbitfield *mask = (GLbitfield *) bp; bp += 4;
GLenum *filter = (GLenum *) bp; bp += 4;
weglBlitFramebuffer(*srcX0,*srcY0,*srcX1,*srcY1,*dstX0,*dstY0,*dstX1,*dstY1,*mask,*filter);
-}; break;
-case 5657: { // glRenderbufferStorageMultisample
+}; break;
+case 5657: { // glRenderbufferStorageMultisample
GLenum *target = (GLenum *) bp; bp += 4;
GLsizei *samples = (GLsizei *) bp; bp += 4;
GLenum *internalformat = (GLenum *) bp; bp += 4;
GLsizei *width = (GLsizei *) bp; bp += 4;
GLsizei *height = (GLsizei *) bp; bp += 4;
weglRenderbufferStorageMultisample(*target,*samples,*internalformat,*width,*height);
-}; break;
-case 5658: { // glFramebufferTextureLayer
+}; break;
+case 5658: { // glFramebufferTextureLayer
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *attachment = (GLenum *) bp; bp += 4;
GLuint *texture = (GLuint *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLint *layer = (GLint *) bp; bp += 4;
weglFramebufferTextureLayer(*target,*attachment,*texture,*level,*layer);
-}; break;
-case 5659: { // glProgramParameteriARB
+}; break;
+case 5659: { // glProgramParameteriARB
GLuint *program = (GLuint *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
GLint *value = (GLint *) bp; bp += 4;
weglProgramParameteriARB(*program,*pname,*value);
-}; break;
-case 5660: { // glFramebufferTextureARB
+}; break;
+case 5660: { // glFramebufferTextureARB
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *attachment = (GLenum *) bp; bp += 4;
GLuint *texture = (GLuint *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
weglFramebufferTextureARB(*target,*attachment,*texture,*level);
-}; break;
-case 5661: { // glFramebufferTextureFaceARB
+}; break;
+case 5661: { // glFramebufferTextureFaceARB
GLenum *target = (GLenum *) bp; bp += 4;
GLenum *attachment = (GLenum *) bp; bp += 4;
GLuint *texture = (GLuint *) bp; bp += 4;
GLint *level = (GLint *) bp; bp += 4;
GLenum *face = (GLenum *) bp; bp += 4;
weglFramebufferTextureFaceARB(*target,*attachment,*texture,*level,*face);
-}; break;
-case 5662: { // glVertexAttribDivisorARB
+}; break;
+case 5662: { // glVertexAttribDivisorARB
GLuint *index = (GLuint *) bp; bp += 4;
GLuint *divisor = (GLuint *) bp; bp += 4;
weglVertexAttribDivisorARB(*index,*divisor);
-}; break;
-case 5663: { // glFlushMappedBufferRange
+}; break;
+case 5663: { // glFlushMappedBufferRange
GLenum *target = (GLenum *) bp; bp += 4;
bp += 4;
GLintptr offset = (GLintptr) * (GLuint64EXT *) bp; bp += 8;
GLsizeiptr length = (GLsizeiptr) * (GLuint64EXT *) bp; bp += 8;
weglFlushMappedBufferRange(*target,offset,length);
-}; break;
-case 5664: { // glBindVertexArray
+}; break;
+case 5664: { // glBindVertexArray
GLuint *array = (GLuint *) bp; bp += 4;
weglBindVertexArray(*array);
-}; break;
-case 5665: { // glDeleteVertexArrays
+}; break;
+case 5665: { // glDeleteVertexArrays
int * arraysLen = (int *) bp; bp += 4;
GLuint * arrays = (GLuint *) bp; bp += (8-((*arraysLen*4+4)%8))%8;
weglDeleteVertexArrays(*arraysLen,arrays);
-}; break;
-case 5666: { // glGenVertexArrays
+}; break;
+case 5666: { // glGenVertexArrays
GLsizei *n = (GLsizei *) bp; bp += 4;
GLuint *arrays;
arrays = (GLuint *) driver_alloc(sizeof(GLuint) * *n);
@@ -5245,10 +5245,10 @@ case 5666: { // glGenVertexArrays
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 7 + (*n)*2 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,7 + (*n)*2);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
- driver_free(rt);
+ driver_free(rt);
driver_free(arrays);
-}; break;
-case 5667: { // glIsVertexArray
+}; break;
+case 5667: { // glIsVertexArray
GLuint *array = (GLuint *) bp; bp += 4;
GLboolean result = weglIsVertexArray(*array);
int AP = 0; ErlDrvTermData rt[6];
@@ -5257,13 +5257,13 @@ case 5667: { // glIsVertexArray
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5668: { // glGetUniformIndices
+}; break;
+case 5668: { // glGetUniformIndices
GLuint *program = (GLuint *) bp; bp += 4;
int * uniformNamesLen = (int *) bp; bp += 4;
int * uniformNamesTotSize = (int *) bp; bp += 4;
GLchar **uniformNames;
- uniformNames = (GLchar **) driver_alloc(sizeof(GLchar *) * *uniformNamesLen);
+ uniformNames = (GLchar **) driver_alloc(sizeof(GLchar *) * *uniformNamesLen);
for(int i=0;i<*uniformNamesLen;i++) {
uniformNames[i] = (GLchar *) bp; bp += 1+strlen(bp);};
bp += (8 - ((0 + *uniformNamesTotSize) % 8)) % 8;
@@ -5279,11 +5279,11 @@ case 5668: { // glGetUniformIndices
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 7 + (*uniformNamesLen)*2 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,7 + (*uniformNamesLen)*2);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
- driver_free(rt);
+ driver_free(rt);
driver_free(uniformIndices);
driver_free(uniformNames);
-}; break;
-case 5669: { // glGetActiveUniformsiv
+}; break;
+case 5669: { // glGetActiveUniformsiv
GLuint *program = (GLuint *) bp; bp += 4;
int * uniformIndicesLen = (int *) bp; bp += 4;
GLuint * uniformIndices = (GLuint *) bp; bp += (8-((*uniformIndicesLen*4+0)%8))%8;
@@ -5300,10 +5300,10 @@ case 5669: { // glGetActiveUniformsiv
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 7 + (*uniformIndicesLen)*2 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,7 + (*uniformIndicesLen)*2);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
- driver_free(rt);
+ driver_free(rt);
driver_free(params);
-}; break;
-case 5670: { // glGetActiveUniformName
+}; break;
+case 5670: { // glGetActiveUniformName
GLuint *program = (GLuint *) bp; bp += 4;
GLuint *uniformIndex = (GLuint *) bp; bp += 4;
GLsizei *bufSize = (GLsizei *) bp; bp += 4;
@@ -5318,8 +5318,8 @@ case 5670: { // glGetActiveUniformName
if (AP != 7 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,7);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
driver_free(uniformName);
-}; break;
-case 5671: { // glGetUniformBlockIndex
+}; break;
+case 5671: { // glGetUniformBlockIndex
GLuint *program = (GLuint *) bp; bp += 4;
GLchar *uniformBlockName = (GLchar *) bp;
int uniformBlockNameLen = strlen((char *)uniformBlockName); bp += uniformBlockNameLen+1+((8-((1+uniformBlockNameLen+4)%8))%8);
@@ -5330,8 +5330,8 @@ case 5671: { // glGetUniformBlockIndex
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
if (AP != 6 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,6);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5672: { // glGetActiveUniformBlockiv
+}; break;
+case 5672: { // glGetActiveUniformBlockiv
GLuint *program = (GLuint *) bp; bp += 4;
GLuint *uniformBlockIndex = (GLuint *) bp; bp += 4;
GLenum *pname = (GLenum *) bp; bp += 4;
@@ -5342,8 +5342,8 @@ case 5672: { // glGetActiveUniformBlockiv
rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "ok");
rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2;
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
-}; break;
-case 5673: { // glGetActiveUniformBlockName
+}; break;
+case 5673: { // glGetActiveUniformBlockName
GLuint *program = (GLuint *) bp; bp += 4;
GLuint *uniformBlockIndex = (GLuint *) bp; bp += 4;
GLsizei *bufSize = (GLsizei *) bp; bp += 4;
@@ -5358,49 +5358,49 @@ case 5673: { // glGetActiveUniformBlockName
if (AP != 7 ) fprintf(stderr, "%d: ERROR AP mismatch %d %d\r\n",__LINE__,AP,7);
driver_send_term(WXE_DRV_PORT,caller,rt,AP);
driver_free(uniformBlockName);
-}; break;
-case 5674: { // glUniformBlockBinding
+}; break;
+case 5674: { // glUniformBlockBinding
GLuint *program = (GLuint *) bp; bp += 4;
GLuint *uniformBlockIndex = (GLuint *) bp; bp += 4;
GLuint *uniformBlockBinding = (GLuint *) bp; bp += 4;
weglUniformBlockBinding(*program,*uniformBlockIndex,*uniformBlockBinding);
-}; break;
-case 5675: { // glCopyBufferSubData
+}; break;
+case 5675: { // glCopyBufferSubData
GLenum *readTarget = (GLenum *) bp; bp += 4;
GLenum *writeTarget = (GLenum *) bp; bp += 4;
GLintptr readOffset = (GLintptr) * (GLuint64EXT *) bp; bp += 8;
GLintptr writeOffset = (GLintptr) * (GLuint64EXT *) bp; bp += 8;
GLsizeiptr size = (GLsizeiptr) * (GLuint64EXT *) bp; bp += 8;
weglCopyBufferSubData(*readTarget,*writeTarget,readOffset,writeOffset,size);
-}; break;
-case 5676: { // glResizeBuffersMESA
+}; break;
+case 5676: { // glResizeBuffersMESA
weglResizeBuffersMESA();
-}; break;
-case 5677: { // glWindowPos4dvMESA
+}; break;
+case 5677: { // glWindowPos4dvMESA
GLdouble *v = (GLdouble *) bp; bp += 8;
weglWindowPos4dvMESA(v);
-}; break;
-case 5678: { // glWindowPos4fvMESA
+}; break;
+case 5678: { // glWindowPos4fvMESA
GLfloat *v = (GLfloat *) bp; bp += 4;
weglWindowPos4fvMESA(v);
-}; break;
-case 5679: { // glWindowPos4ivMESA
+}; break;
+case 5679: { // glWindowPos4ivMESA
GLint *v = (GLint *) bp; bp += 4;
weglWindowPos4ivMESA(v);
-}; break;
-case 5680: { // glWindowPos4svMESA
+}; break;
+case 5680: { // glWindowPos4svMESA
GLshort *v = (GLshort *) bp; bp += 2;
weglWindowPos4svMESA(v);
-}; break;
-case 5681: { // glDepthBoundsEXT
+}; break;
+case 5681: { // glDepthBoundsEXT
GLclampd *zmin = (GLclampd *) bp; bp += 8;
GLclampd *zmax = (GLclampd *) bp; bp += 8;
weglDepthBoundsEXT(*zmin,*zmax);
-}; break;
-case 5682: { // glStencilClearTagEXT
+}; break;
+case 5682: { // glStencilClearTagEXT
GLsizei *stencilTagBits = (GLsizei *) bp; bp += 4;
GLuint *stencilClearTag = (GLuint *) bp; bp += 4;
weglStencilClearTagEXT(*stencilTagBits,*stencilClearTag);
-}; break;
+}; break;
}} /* The End */
diff --git a/lib/wx/c_src/gen/glu_finit.h b/lib/wx/c_src/gen/glu_finit.h
index 2f0e2d15e4..63e9c2fc78 100644
--- a/lib/wx/c_src/gen/glu_finit.h
+++ b/lib/wx/c_src/gen/glu_finit.h
@@ -16,7 +16,7 @@
*
* %CopyrightEnd%
*/
-/***** This file is generated do not edit ****/
+/***** This file is generated do not edit ****/
static struct {
const char * name;
diff --git a/lib/wx/c_src/gen/wxe_funcs.cpp b/lib/wx/c_src/gen/wxe_funcs.cpp
index c8549d0716..fd496c2ccc 100644
--- a/lib/wx/c_src/gen/wxe_funcs.cpp
+++ b/lib/wx/c_src/gen/wxe_funcs.cpp
@@ -2209,7 +2209,7 @@ case wxScrolledWindow_new_2: { // wxScrolledWindow::wxScrolledWindow
wxWindowID winid=wxID_ANY;
wxPoint pos= wxDefaultPosition;
wxSize size= wxDefaultSize;
- long style=(wxHSCROLL|wxVSCROLL);
+ long style=wxScrolledWindowStyle;
wxWindow *parent = (wxWindow *) getPtr(bp,memenv); bp += 4;
bp += 4; /* Align */
while( * (int*) bp) { switch (* (int*) bp) {
@@ -2385,7 +2385,7 @@ case wxSashWindow_new_2: { // wxSashWindow::wxSashWindow
wxWindowID id=wxID_ANY;
wxPoint pos= wxDefaultPosition;
wxSize size= wxDefaultSize;
- long style=(0x0040|0x0080)|wxCLIP_CHILDREN;
+ long style=wxSW_3D|wxCLIP_CHILDREN;
wxWindow *parent = (wxWindow *) getPtr(bp,memenv); bp += 4;
bp += 4; /* Align */
while( * (int*) bp) { switch (* (int*) bp) {
@@ -5930,7 +5930,7 @@ case wxBufferedDC_new_0: { // wxBufferedDC::wxBufferedDC
}
case wxBufferedDC_new_2: { // wxBufferedDC::wxBufferedDC
wxBitmap * buffer= &wxNullBitmap;
- int style=0x02;
+ int style=wxBUFFER_CLIENT_AREA;
wxDC *dc = (wxDC *) getPtr(bp,memenv); bp += 4;
bp += 4; /* Align */
while( * (int*) bp) { switch (* (int*) bp) {
@@ -5947,7 +5947,7 @@ buffer = (wxBitmap *) getPtr(bp,memenv); bp += 4;
break;
}
case wxBufferedDC_new_3: { // wxBufferedDC::wxBufferedDC
- int style=0x02;
+ int style=wxBUFFER_CLIENT_AREA;
wxDC *dc = (wxDC *) getPtr(bp,memenv); bp += 4;
int * areaW = (int *) bp; bp += 4;
int * areaH = (int *) bp; bp += 4;
@@ -5965,7 +5965,7 @@ case wxBufferedDC_new_3: { // wxBufferedDC::wxBufferedDC
}
case wxBufferedDC_Init_2: { // wxBufferedDC::Init
wxBitmap * buffer= &wxNullBitmap;
- int style=0x02;
+ int style=wxBUFFER_CLIENT_AREA;
wxBufferedDC *This = (wxBufferedDC *) getPtr(bp,memenv); bp += 4;
wxDC *dc = (wxDC *) getPtr(bp,memenv); bp += 4;
while( * (int*) bp) { switch (* (int*) bp) {
@@ -5981,7 +5981,7 @@ buffer = (wxBitmap *) getPtr(bp,memenv); bp += 4;
break;
}
case wxBufferedDC_Init_3: { // wxBufferedDC::Init
- int style=0x02;
+ int style=wxBUFFER_CLIENT_AREA;
wxBufferedDC *This = (wxBufferedDC *) getPtr(bp,memenv); bp += 4;
wxDC *dc = (wxDC *) getPtr(bp,memenv); bp += 4;
int * areaW = (int *) bp; bp += 4;
@@ -5997,7 +5997,7 @@ case wxBufferedDC_Init_3: { // wxBufferedDC::Init
break;
}
case wxBufferedPaintDC_new_3: { // wxBufferedPaintDC::wxBufferedPaintDC
- int style=0x02;
+ int style=wxBUFFER_CLIENT_AREA;
wxWindow *window = (wxWindow *) getPtr(bp,memenv); bp += 4;
wxBitmap *buffer = (wxBitmap *) getPtr(bp,memenv); bp += 4;
while( * (int*) bp) { switch (* (int*) bp) {
@@ -6011,7 +6011,7 @@ case wxBufferedPaintDC_new_3: { // wxBufferedPaintDC::wxBufferedPaintDC
break;
}
case wxBufferedPaintDC_new_2: { // wxBufferedPaintDC::wxBufferedPaintDC
- int style=0x02;
+ int style=wxBUFFER_CLIENT_AREA;
wxWindow *window = (wxWindow *) getPtr(bp,memenv); bp += 4;
bp += 4; /* Align */
while( * (int*) bp) { switch (* (int*) bp) {
@@ -9163,7 +9163,7 @@ case wxIcon_new_0: { // wxIcon::wxIcon
break;
}
case wxIcon_new_2: { // wxIcon::wxIcon
- wxBitmapType type=wxBITMAP_TYPE_XPM;
+ wxBitmapType type=wxICON_DEFAULT_BITMAP_TYPE;
int desiredWidth=-1;
int desiredHeight=-1;
int * filenameLen = (int *) bp; bp += 4;
@@ -16404,7 +16404,7 @@ case wxTextAttr_SetFlags: { // wxTextAttr::SetFlags
break;
}
case wxTextAttr_SetFont: { // wxTextAttr::SetFont
- long flags=(0x0004|0x0008|0x0010|0x0020|0x0040);
+ long flags=wxTEXT_ATTR_FONT;
wxTextAttr *This = (wxTextAttr *) getPtr(bp,memenv); bp += 4;
wxFont *font = (wxFont *) getPtr(bp,memenv); bp += 4;
while( * (int*) bp) { switch (* (int*) bp) {
@@ -16739,7 +16739,7 @@ case wxTextCtrl_IsSingleLine: { // wxTextCtrl::IsSingleLine
break;
}
case wxTextCtrl_LoadFile: { // wxTextCtrl::LoadFile
- int fileType=0;
+ int fileType=wxTEXT_TYPE_ANY;
wxTextCtrl *This = (wxTextCtrl *) getPtr(bp,memenv); bp += 4;
int * fileLen = (int *) bp; bp += 4;
wxString file = wxString(bp, wxConvUTF8);
@@ -16806,7 +16806,7 @@ case wxTextCtrl_Replace: { // wxTextCtrl::Replace
}
case wxTextCtrl_SaveFile: { // wxTextCtrl::SaveFile
wxString file= wxEmptyString;
- int fileType=0;
+ int fileType=wxTEXT_TYPE_ANY;
wxTextCtrl *This = (wxTextCtrl *) getPtr(bp,memenv); bp += 4;
bp += 4; /* Align */
while( * (int*) bp) { switch (* (int*) bp) {
@@ -20467,7 +20467,7 @@ case wxPalette_IsOk: { // wxPalette::IsOk
case wxDirDialog_new: { // wxDirDialog::wxDirDialog
wxString title= wxDirSelectorPromptStr;
wxString defaultPath= wxEmptyString;
- long style=(wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER);
+ long style=wxDD_DEFAULT_STYLE;
wxPoint pos= wxDefaultPosition;
wxSize sz= wxDefaultSize;
wxWindow *parent = (wxWindow *) getPtr(bp,memenv); bp += 4;
@@ -20541,7 +20541,7 @@ case wxFileDialog_new: { // wxFileDialog::wxFileDialog
wxString defaultDir= wxEmptyString;
wxString defaultFile= wxEmptyString;
wxString wildCard= wxFileSelectorDefaultWildcardStr;
- long style=wxFD_OPEN;
+ long style=wxFD_DEFAULT_STYLE;
wxPoint pos= wxDefaultPosition;
wxSize sz= wxDefaultSize;
wxWindow *parent = (wxWindow *) getPtr(bp,memenv); bp += 4;
@@ -20806,7 +20806,7 @@ case wxFilePickerCtrl_new_3: { // wxFilePickerCtrl::wxFilePickerCtrl
wxString wildcard= wxFileSelectorDefaultWildcardStr;
wxPoint pos= wxDefaultPosition;
wxSize size= wxDefaultSize;
- long style=(0x0400|0x2000);
+ long style=wxFLP_DEFAULT_STYLE;
const wxValidator * validator= &wxDefaultValidator;
wxWindow *parent = (wxWindow *) getPtr(bp,memenv); bp += 4;
int * id = (int *) bp; bp += 4;
@@ -20856,7 +20856,7 @@ case wxFilePickerCtrl_Create: { // wxFilePickerCtrl::Create
wxString wildcard= wxFileSelectorDefaultWildcardStr;
wxPoint pos= wxDefaultPosition;
wxSize size= wxDefaultSize;
- long style=(0x0400|0x2000);
+ long style=wxFLP_DEFAULT_STYLE;
const wxValidator * validator= &wxDefaultValidator;
wxFilePickerCtrl *This = (wxFilePickerCtrl *) getPtr(bp,memenv); bp += 4;
wxWindow *parent = (wxWindow *) getPtr(bp,memenv); bp += 4;
@@ -20929,7 +20929,7 @@ case wxDirPickerCtrl_new_3: { // wxDirPickerCtrl::wxDirPickerCtrl
wxString message= wxDirSelectorPromptStr;
wxPoint pos= wxDefaultPosition;
wxSize size= wxDefaultSize;
- long style=(0x0008);
+ long style=wxDIRP_DEFAULT_STYLE;
const wxValidator * validator= &wxDefaultValidator;
wxWindow *parent = (wxWindow *) getPtr(bp,memenv); bp += 4;
int * id = (int *) bp; bp += 4;
@@ -20973,7 +20973,7 @@ case wxDirPickerCtrl_Create: { // wxDirPickerCtrl::Create
wxString message= wxDirSelectorPromptStr;
wxPoint pos= wxDefaultPosition;
wxSize size= wxDefaultSize;
- long style=(0x0008);
+ long style=wxDIRP_DEFAULT_STYLE;
const wxValidator * validator= &wxDefaultValidator;
wxDirPickerCtrl *This = (wxDirPickerCtrl *) getPtr(bp,memenv); bp += 4;
wxWindow *parent = (wxWindow *) getPtr(bp,memenv); bp += 4;
@@ -21040,7 +21040,7 @@ case wxColourPickerCtrl_new_3: { // wxColourPickerCtrl::wxColourPickerCtrl
wxColour col= *wxBLACK;
wxPoint pos= wxDefaultPosition;
wxSize size= wxDefaultSize;
- long style=0;
+ long style=wxCLRP_DEFAULT_STYLE;
const wxValidator * validator= &wxDefaultValidator;
wxWindow *parent = (wxWindow *) getPtr(bp,memenv); bp += 4;
int * id = (int *) bp; bp += 4;
@@ -21081,7 +21081,7 @@ case wxColourPickerCtrl_Create: { // wxColourPickerCtrl::Create
wxColour col= *wxBLACK;
wxPoint pos= wxDefaultPosition;
wxSize size= wxDefaultSize;
- long style=0;
+ long style=wxCLRP_DEFAULT_STYLE;
const wxValidator * validator= &wxDefaultValidator;
wxColourPickerCtrl *This = (wxColourPickerCtrl *) getPtr(bp,memenv); bp += 4;
wxWindow *parent = (wxWindow *) getPtr(bp,memenv); bp += 4;
@@ -21268,7 +21268,7 @@ case wxFontPickerCtrl_new_3: { // wxFontPickerCtrl::wxFontPickerCtrl
const wxFont * initial= &wxNullFont;
wxPoint pos= wxDefaultPosition;
wxSize size= wxDefaultSize;
- long style=(0x0008|0x0010);
+ long style=wxFNTP_DEFAULT_STYLE;
const wxValidator * validator= &wxDefaultValidator;
wxWindow *parent = (wxWindow *) getPtr(bp,memenv); bp += 4;
int * id = (int *) bp; bp += 4;
@@ -21304,7 +21304,7 @@ case wxFontPickerCtrl_Create: { // wxFontPickerCtrl::Create
const wxFont * initial= &wxNullFont;
wxPoint pos= wxDefaultPosition;
wxSize size= wxDefaultSize;
- long style=(0x0008|0x0010);
+ long style=wxFNTP_DEFAULT_STYLE;
const wxValidator * validator= &wxDefaultValidator;
wxFontPickerCtrl *This = (wxFontPickerCtrl *) getPtr(bp,memenv); bp += 4;
wxWindow *parent = (wxWindow *) getPtr(bp,memenv); bp += 4;
@@ -21480,7 +21480,7 @@ case wxMultiChoiceDialog_new_0: { // wxMultiChoiceDialog::wxMultiChoiceDialog
break;
}
case wxMultiChoiceDialog_new_5: { // wxMultiChoiceDialog::wxMultiChoiceDialog
- long style=(wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxOK|wxCANCEL|wxCENTRE);
+ long style=wxCHOICEDLG_STYLE;
wxPoint pos= wxDefaultPosition;
wxWindow *parent = (wxWindow *) getPtr(bp,memenv); bp += 4;
int * messageLen = (int *) bp; bp += 4;
@@ -21540,7 +21540,7 @@ case wxSingleChoiceDialog_new_0: { // wxSingleChoiceDialog::wxSingleChoiceDialog
}
case wxSingleChoiceDialog_new_5: { // wxSingleChoiceDialog::wxSingleChoiceDialog
char ** clientData = (char **) NULL;
- long style=(wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxOK|wxCANCEL|wxCENTRE);
+ long style=wxCHOICEDLG_STYLE;
wxPoint pos= wxDefaultPosition;
wxWindow *parent = (wxWindow *) getPtr(bp,memenv); bp += 4;
int * messageLen = (int *) bp; bp += 4;
@@ -21599,7 +21599,7 @@ case wxSingleChoiceDialog_SetSelection: { // wxSingleChoiceDialog::SetSelection
case wxTextEntryDialog_new: { // wxTextEntryDialog::wxTextEntryDialog
wxString caption= wxGetTextFromUserPromptStr;
wxString value= wxEmptyString;
- long style=(wxOK|wxCANCEL|wxCENTRE|wxWS_EX_VALIDATE_RECURSIVELY);
+ long style=wxTextEntryDialogStyle;
wxPoint pos= wxDefaultPosition;
wxWindow *parent = (wxWindow *) getPtr(bp,memenv); bp += 4;
int * messageLen = (int *) bp; bp += 4;
@@ -21650,7 +21650,7 @@ case wxTextEntryDialog_SetValue: { // wxTextEntryDialog::SetValue
case wxPasswordEntryDialog_new: { // wxPasswordEntryDialog::wxPasswordEntryDialog
wxString caption= wxGetPasswordFromUserPromptStr;
wxString value= wxEmptyString;
- long style=(wxOK|wxCANCEL|wxCENTRE|wxWS_EX_VALIDATE_RECURSIVELY);
+ long style=wxTextEntryDialogStyle;
wxPoint pos= wxDefaultPosition;
wxWindow *parent = (wxWindow *) getPtr(bp,memenv); bp += 4;
int * messageLen = (int *) bp; bp += 4;
@@ -30758,7 +30758,7 @@ case wxHtmlWindow_new_2: { // wxHtmlWindow::wxHtmlWindow
wxWindowID id=wxID_ANY;
wxPoint pos= wxDefaultPosition;
wxSize size= wxDefaultSize;
- long style=0x0004;
+ long style=wxHW_DEFAULT_STYLE;
wxWindow *parent = (wxWindow *) getPtr(bp,memenv); bp += 4;
bp += 4; /* Align */
while( * (int*) bp) { switch (* (int*) bp) {
diff --git a/lib/wx/c_src/gen/wxe_init.cpp b/lib/wx/c_src/gen/wxe_init.cpp
index 96c775c4c0..bab3261be4 100644
--- a/lib/wx/c_src/gen/wxe_init.cpp
+++ b/lib/wx/c_src/gen/wxe_init.cpp
@@ -24,6 +24,8 @@
void WxeApp::init_nonconsts(wxeMemEnv *memenv, ErlDrvTermData caller) {
wxeReturn rt = wxeReturn(WXE_DRV_PORT, caller);
rt.addAtom((char*)"wx_consts");
+ rt.addAtom("wxALWAYS_NATIVE_DOUBLE_BUFFER"); rt.addInt(wxALWAYS_NATIVE_DOUBLE_BUFFER);
+ rt.addTupleCount(2);
rt.addAtom("wxBYTE_ORDER"); rt.addInt(wxBYTE_ORDER);
rt.addTupleCount(2);
rt.addAtom("wxDEFAULT_CONTROL_BORDER"); rt.addInt(wxDEFAULT_CONTROL_BORDER);
@@ -32,6 +34,10 @@ void WxeApp::init_nonconsts(wxeMemEnv *memenv, ErlDrvTermData caller) {
rt.addTupleCount(2);
rt.addAtom("wxRETAINED"); rt.addInt(wxRETAINED);
rt.addTupleCount(2);
+ rt.addAtom("wxGAUGE_EMULATE_INDETERMINATE_MODE"); rt.addInt(wxGAUGE_EMULATE_INDETERMINATE_MODE);
+ rt.addTupleCount(2);
+ rt.addAtom("wxTR_DEFAULT_STYLE"); rt.addInt(wxTR_DEFAULT_STYLE);
+ rt.addTupleCount(2);
rt.addAtom("wxBETA_NUMBER"); rt.addInt(wxBETA_NUMBER);
rt.addTupleCount(2);
rt.addAtom("wxMAJOR_VERSION"); rt.addInt(wxMAJOR_VERSION);
@@ -130,7 +136,7 @@ void WxeApp::init_nonconsts(wxeMemEnv *memenv, ErlDrvTermData caller) {
rt.addTupleCount(2);
rt.addAtom("wxWHITE_PEN"); rt.addRef(getRef((void *)wxWHITE_PEN,memenv),"wxPen");
rt.addTupleCount(2);
- rt.endList(53);
+ rt.endList(56);
rt.addTupleCount(2);
rt.send();
}
diff --git a/lib/wx/c_src/gen/wxe_macros.h b/lib/wx/c_src/gen/wxe_macros.h
index cb5a4f3c41..415b7f0b29 100644
--- a/lib/wx/c_src/gen/wxe_macros.h
+++ b/lib/wx/c_src/gen/wxe_macros.h
@@ -62,6 +62,11 @@
#include <wx/filename.h>
+#ifndef wxICON_DEFAULT_BITMAP_TYPE
+ #define wxICON_DEFAULT_BITMAP_TYPE wxBITMAP_TYPE_ICO_RESOURCE
+#endif
+
+
#define wxEvtHandler_Connect 100
#define wxEvtHandler_Disconnect_2 101
#define wxEvtHandler_Disconnect_1 102
@@ -810,2511 +815,2511 @@
#define wxControlWithItems_Clear 882
#define wxControlWithItems_Delete 883
#define wxControlWithItems_FindString 884
-#define wxControlWithItems_getClientData 886
-#define wxControlWithItems_setClientData 888
-#define wxControlWithItems_GetCount 889
-#define wxControlWithItems_GetSelection 890
-#define wxControlWithItems_GetString 891
-#define wxControlWithItems_GetStringSelection 892
-#define wxControlWithItems_Insert_2 893
-#define wxControlWithItems_Insert_3 894
-#define wxControlWithItems_IsEmpty 895
-#define wxControlWithItems_Select 896
-#define wxControlWithItems_SetSelection 897
-#define wxControlWithItems_SetString 898
-#define wxControlWithItems_SetStringSelection 899
-#define wxMenu_new_2 902
-#define wxMenu_new_1 903
-#define wxMenu_destruct 905
-#define wxMenu_Append_3 906
-#define wxMenu_Append_1 907
-#define wxMenu_Append_4_0 908
-#define wxMenu_Append_4_1 909
-#define wxMenu_AppendCheckItem 910
-#define wxMenu_AppendRadioItem 911
-#define wxMenu_AppendSeparator 912
-#define wxMenu_Break 913
-#define wxMenu_Check 914
-#define wxMenu_Delete_1_0 915
-#define wxMenu_Delete_1_1 916
-#define wxMenu_Destroy_1_0 917
-#define wxMenu_Destroy_1_1 918
-#define wxMenu_Enable 919
-#define wxMenu_FindItem_1 920
-#define wxMenu_FindItem_2 921
-#define wxMenu_FindItemByPosition 922
-#define wxMenu_GetHelpString 923
-#define wxMenu_GetLabel 924
-#define wxMenu_GetMenuItemCount 925
-#define wxMenu_GetMenuItems 926
-#define wxMenu_GetTitle 928
-#define wxMenu_Insert_2 929
-#define wxMenu_Insert_3 930
-#define wxMenu_Insert_5_1 931
-#define wxMenu_Insert_5_0 932
-#define wxMenu_InsertCheckItem 933
-#define wxMenu_InsertRadioItem 934
-#define wxMenu_InsertSeparator 935
-#define wxMenu_IsChecked 936
-#define wxMenu_IsEnabled 937
-#define wxMenu_Prepend_1 938
-#define wxMenu_Prepend_2 939
-#define wxMenu_Prepend_4_1 940
-#define wxMenu_Prepend_4_0 941
-#define wxMenu_PrependCheckItem 942
-#define wxMenu_PrependRadioItem 943
-#define wxMenu_PrependSeparator 944
-#define wxMenu_Remove_1_0 945
-#define wxMenu_Remove_1_1 946
-#define wxMenu_SetHelpString 947
-#define wxMenu_SetLabel 948
-#define wxMenu_SetTitle 949
-#define wxMenuItem_new 950
-#define wxMenuItem_destruct 952
-#define wxMenuItem_Check 953
-#define wxMenuItem_Enable 954
-#define wxMenuItem_GetBitmap 955
-#define wxMenuItem_GetHelp 956
-#define wxMenuItem_GetId 957
-#define wxMenuItem_GetKind 958
-#define wxMenuItem_GetLabel 959
-#define wxMenuItem_GetLabelFromText 960
-#define wxMenuItem_GetMenu 961
-#define wxMenuItem_GetText 962
-#define wxMenuItem_GetSubMenu 963
-#define wxMenuItem_IsCheckable 964
-#define wxMenuItem_IsChecked 965
-#define wxMenuItem_IsEnabled 966
-#define wxMenuItem_IsSeparator 967
-#define wxMenuItem_IsSubMenu 968
-#define wxMenuItem_SetBitmap 969
-#define wxMenuItem_SetHelp 970
-#define wxMenuItem_SetMenu 971
-#define wxMenuItem_SetSubMenu 972
-#define wxMenuItem_SetText 973
-#define wxToolBar_AddControl 974
-#define wxToolBar_AddSeparator 975
-#define wxToolBar_AddTool_5 976
-#define wxToolBar_AddTool_4_0 977
-#define wxToolBar_AddTool_1 978
-#define wxToolBar_AddTool_4_1 979
-#define wxToolBar_AddTool_3 980
-#define wxToolBar_AddTool_6 981
-#define wxToolBar_AddCheckTool 982
-#define wxToolBar_AddRadioTool 983
-#define wxToolBar_DeleteTool 984
-#define wxToolBar_DeleteToolByPos 985
-#define wxToolBar_EnableTool 986
-#define wxToolBar_FindById 987
-#define wxToolBar_FindControl 988
-#define wxToolBar_FindToolForPosition 989
-#define wxToolBar_GetToolSize 990
-#define wxToolBar_GetToolBitmapSize 991
-#define wxToolBar_GetMargins 992
-#define wxToolBar_GetToolEnabled 993
-#define wxToolBar_GetToolLongHelp 994
-#define wxToolBar_GetToolPacking 995
-#define wxToolBar_GetToolPos 996
-#define wxToolBar_GetToolSeparation 997
-#define wxToolBar_GetToolShortHelp 998
-#define wxToolBar_GetToolState 999
-#define wxToolBar_InsertControl 1000
-#define wxToolBar_InsertSeparator 1001
-#define wxToolBar_InsertTool_5 1002
-#define wxToolBar_InsertTool_2 1003
-#define wxToolBar_InsertTool_4 1004
-#define wxToolBar_Realize 1005
-#define wxToolBar_RemoveTool 1006
-#define wxToolBar_SetMargins 1007
-#define wxToolBar_SetToolBitmapSize 1008
-#define wxToolBar_SetToolLongHelp 1009
-#define wxToolBar_SetToolPacking 1010
-#define wxToolBar_SetToolShortHelp 1011
-#define wxToolBar_SetToolSeparation 1012
-#define wxToolBar_ToggleTool 1013
-#define wxStatusBar_new_0 1015
-#define wxStatusBar_new_2 1016
-#define wxStatusBar_destruct 1018
-#define wxStatusBar_Create 1019
-#define wxStatusBar_GetFieldRect 1020
-#define wxStatusBar_GetFieldsCount 1021
-#define wxStatusBar_GetStatusText 1022
-#define wxStatusBar_PopStatusText 1023
-#define wxStatusBar_PushStatusText 1024
-#define wxStatusBar_SetFieldsCount 1025
-#define wxStatusBar_SetMinHeight 1026
-#define wxStatusBar_SetStatusText 1027
-#define wxStatusBar_SetStatusWidths 1028
-#define wxStatusBar_SetStatusStyles 1029
-#define wxBitmap_new_0 1030
-#define wxBitmap_new_3 1031
-#define wxBitmap_new_4 1032
-#define wxBitmap_new_2_0 1033
-#define wxBitmap_new_2_1 1034
-#define wxBitmap_destruct 1035
-#define wxBitmap_ConvertToImage 1036
-#define wxBitmap_CopyFromIcon 1037
-#define wxBitmap_Create 1038
-#define wxBitmap_GetDepth 1039
-#define wxBitmap_GetHeight 1040
-#define wxBitmap_GetPalette 1041
-#define wxBitmap_GetMask 1042
-#define wxBitmap_GetWidth 1043
-#define wxBitmap_GetSubBitmap 1044
-#define wxBitmap_LoadFile 1045
-#define wxBitmap_Ok 1046
-#define wxBitmap_SaveFile 1047
-#define wxBitmap_SetDepth 1048
-#define wxBitmap_SetHeight 1049
-#define wxBitmap_SetMask 1050
-#define wxBitmap_SetPalette 1051
-#define wxBitmap_SetWidth 1052
-#define wxIcon_new_0 1053
-#define wxIcon_new_2 1054
-#define wxIcon_new_1 1055
-#define wxIcon_CopyFromBitmap 1056
-#define wxIcon_destroy 1057
-#define wxIconBundle_new_0 1058
-#define wxIconBundle_new_2 1059
-#define wxIconBundle_new_1_0 1060
-#define wxIconBundle_new_1_1 1061
-#define wxIconBundle_destruct 1062
-#define wxIconBundle_AddIcon_2 1063
-#define wxIconBundle_AddIcon_1 1064
-#define wxIconBundle_GetIcon_1_1 1065
-#define wxIconBundle_GetIcon_1_0 1066
-#define wxCursor_new_0 1067
-#define wxCursor_new_1_0 1068
-#define wxCursor_new_1_1 1069
-#define wxCursor_new_4 1070
-#define wxCursor_destruct 1071
-#define wxCursor_Ok 1072
-#define wxMask_new_0 1073
-#define wxMask_new_2_1 1074
-#define wxMask_new_2_0 1075
-#define wxMask_new_1 1076
-#define wxMask_destruct 1077
-#define wxMask_Create_2_1 1078
-#define wxMask_Create_2_0 1079
-#define wxMask_Create_1 1080
-#define wxImage_new_0 1081
-#define wxImage_new_3_0 1082
-#define wxImage_new_4 1083
-#define wxImage_new_5 1084
-#define wxImage_new_2 1085
-#define wxImage_new_3_1 1086
-#define wxImage_Blur 1087
-#define wxImage_BlurHorizontal 1088
-#define wxImage_BlurVertical 1089
-#define wxImage_ConvertAlphaToMask 1090
-#define wxImage_ConvertToGreyscale 1091
-#define wxImage_ConvertToMono 1092
-#define wxImage_Copy 1093
-#define wxImage_Create_3 1094
-#define wxImage_Create_4 1095
-#define wxImage_Create_5 1096
-#define wxImage_Destroy 1097
-#define wxImage_FindFirstUnusedColour 1098
-#define wxImage_GetImageExtWildcard 1099
-#define wxImage_GetAlpha_2 1100
-#define wxImage_GetAlpha_0 1101
-#define wxImage_GetBlue 1102
-#define wxImage_GetData 1103
-#define wxImage_GetGreen 1104
-#define wxImage_GetImageCount 1105
-#define wxImage_GetHeight 1106
-#define wxImage_GetMaskBlue 1107
-#define wxImage_GetMaskGreen 1108
-#define wxImage_GetMaskRed 1109
-#define wxImage_GetOrFindMaskColour 1110
-#define wxImage_GetPalette 1111
-#define wxImage_GetRed 1112
-#define wxImage_GetSubImage 1113
-#define wxImage_GetWidth 1114
-#define wxImage_HasAlpha 1115
-#define wxImage_HasMask 1116
-#define wxImage_GetOption 1117
-#define wxImage_GetOptionInt 1118
-#define wxImage_HasOption 1119
-#define wxImage_InitAlpha 1120
-#define wxImage_InitStandardHandlers 1121
-#define wxImage_IsTransparent 1122
-#define wxImage_LoadFile_2 1123
-#define wxImage_LoadFile_3 1124
-#define wxImage_Ok 1125
-#define wxImage_RemoveHandler 1126
-#define wxImage_Mirror 1127
-#define wxImage_Replace 1128
-#define wxImage_Rescale 1129
-#define wxImage_Resize 1130
-#define wxImage_Rotate 1131
-#define wxImage_RotateHue 1132
-#define wxImage_Rotate90 1133
-#define wxImage_SaveFile_1 1134
-#define wxImage_SaveFile_2_0 1135
-#define wxImage_SaveFile_2_1 1136
-#define wxImage_Scale 1137
-#define wxImage_Size 1138
-#define wxImage_SetAlpha_3 1139
-#define wxImage_SetAlpha_2 1140
-#define wxImage_SetData_2 1141
-#define wxImage_SetData_4 1142
-#define wxImage_SetMask 1143
-#define wxImage_SetMaskColour 1144
-#define wxImage_SetMaskFromImage 1145
-#define wxImage_SetOption_2_1 1146
-#define wxImage_SetOption_2_0 1147
-#define wxImage_SetPalette 1148
-#define wxImage_SetRGB_5 1149
-#define wxImage_SetRGB_4 1150
-#define wxImage_destroy 1151
-#define wxBrush_new_0 1152
-#define wxBrush_new_2 1153
-#define wxBrush_new_1 1154
-#define wxBrush_destruct 1156
-#define wxBrush_GetColour 1157
-#define wxBrush_GetStipple 1158
-#define wxBrush_GetStyle 1159
-#define wxBrush_IsHatch 1160
-#define wxBrush_IsOk 1161
-#define wxBrush_SetColour_1 1162
-#define wxBrush_SetColour_3 1163
-#define wxBrush_SetStipple 1164
-#define wxBrush_SetStyle 1165
-#define wxPen_new_0 1166
-#define wxPen_new_2 1167
-#define wxPen_destruct 1168
-#define wxPen_GetCap 1169
-#define wxPen_GetColour 1170
-#define wxPen_GetJoin 1171
-#define wxPen_GetStyle 1172
-#define wxPen_GetWidth 1173
-#define wxPen_IsOk 1174
-#define wxPen_SetCap 1175
-#define wxPen_SetColour_1 1176
-#define wxPen_SetColour_3 1177
-#define wxPen_SetJoin 1178
-#define wxPen_SetStyle 1179
-#define wxPen_SetWidth 1180
-#define wxRegion_new_0 1181
-#define wxRegion_new_4 1182
-#define wxRegion_new_2 1183
-#define wxRegion_new_1_1 1184
-#define wxRegion_new_1_0 1186
-#define wxRegion_destruct 1188
-#define wxRegion_Clear 1189
-#define wxRegion_Contains_2 1190
-#define wxRegion_Contains_1_0 1191
-#define wxRegion_Contains_4 1192
-#define wxRegion_Contains_1_1 1193
-#define wxRegion_ConvertToBitmap 1194
-#define wxRegion_GetBox 1195
-#define wxRegion_Intersect_4 1196
-#define wxRegion_Intersect_1_1 1197
-#define wxRegion_Intersect_1_0 1198
-#define wxRegion_IsEmpty 1199
-#define wxRegion_Subtract_4 1200
-#define wxRegion_Subtract_1_1 1201
-#define wxRegion_Subtract_1_0 1202
-#define wxRegion_Offset_2 1203
-#define wxRegion_Offset_1 1204
-#define wxRegion_Union_4 1205
-#define wxRegion_Union_1_2 1206
-#define wxRegion_Union_1_1 1207
-#define wxRegion_Union_1_0 1208
-#define wxRegion_Union_3 1209
-#define wxRegion_Xor_4 1210
-#define wxRegion_Xor_1_1 1211
-#define wxRegion_Xor_1_0 1212
-#define wxAcceleratorTable_new_0 1213
-#define wxAcceleratorTable_new_2 1214
-#define wxAcceleratorTable_destruct 1215
-#define wxAcceleratorTable_Ok 1216
-#define wxAcceleratorEntry_new_1_0 1217
-#define wxAcceleratorEntry_new_1_1 1218
-#define wxAcceleratorEntry_GetCommand 1219
-#define wxAcceleratorEntry_GetFlags 1220
-#define wxAcceleratorEntry_GetKeyCode 1221
-#define wxAcceleratorEntry_Set 1222
-#define wxAcceleratorEntry_destroy 1223
-#define wxCaret_new_3 1228
-#define wxCaret_new_2 1229
-#define wxCaret_destruct 1231
-#define wxCaret_Create_3 1232
-#define wxCaret_Create_2 1233
-#define wxCaret_GetBlinkTime 1234
-#define wxCaret_GetPosition 1236
-#define wxCaret_GetSize 1238
-#define wxCaret_GetWindow 1239
-#define wxCaret_Hide 1240
-#define wxCaret_IsOk 1241
-#define wxCaret_IsVisible 1242
-#define wxCaret_Move_2 1243
-#define wxCaret_Move_1 1244
-#define wxCaret_SetBlinkTime 1245
-#define wxCaret_SetSize_2 1246
-#define wxCaret_SetSize_1 1247
-#define wxCaret_Show 1248
-#define wxSizer_Add_2_1 1249
-#define wxSizer_Add_2_0 1250
-#define wxSizer_Add_3 1251
-#define wxSizer_Add_2_3 1252
-#define wxSizer_Add_2_2 1253
-#define wxSizer_AddSpacer 1254
-#define wxSizer_AddStretchSpacer 1255
-#define wxSizer_CalcMin 1256
-#define wxSizer_Clear 1257
-#define wxSizer_Detach_1_2 1258
-#define wxSizer_Detach_1_1 1259
-#define wxSizer_Detach_1_0 1260
-#define wxSizer_Fit 1261
-#define wxSizer_FitInside 1262
-#define wxSizer_GetChildren 1263
-#define wxSizer_GetItem_2_1 1264
-#define wxSizer_GetItem_2_0 1265
-#define wxSizer_GetItem_1 1266
-#define wxSizer_GetSize 1267
-#define wxSizer_GetPosition 1268
-#define wxSizer_GetMinSize 1269
-#define wxSizer_Hide_2_0 1270
-#define wxSizer_Hide_2_1 1271
-#define wxSizer_Hide_1 1272
-#define wxSizer_Insert_3_1 1273
-#define wxSizer_Insert_3_0 1274
-#define wxSizer_Insert_4 1275
-#define wxSizer_Insert_3_3 1276
-#define wxSizer_Insert_3_2 1277
-#define wxSizer_Insert_2 1278
-#define wxSizer_InsertSpacer 1279
-#define wxSizer_InsertStretchSpacer 1280
-#define wxSizer_IsShown_1_2 1281
-#define wxSizer_IsShown_1_1 1282
-#define wxSizer_IsShown_1_0 1283
-#define wxSizer_Layout 1284
-#define wxSizer_Prepend_2_1 1285
-#define wxSizer_Prepend_2_0 1286
-#define wxSizer_Prepend_3 1287
-#define wxSizer_Prepend_2_3 1288
-#define wxSizer_Prepend_2_2 1289
-#define wxSizer_Prepend_1 1290
-#define wxSizer_PrependSpacer 1291
-#define wxSizer_PrependStretchSpacer 1292
-#define wxSizer_RecalcSizes 1293
-#define wxSizer_Remove_1_1 1294
-#define wxSizer_Remove_1_0 1295
-#define wxSizer_Replace_3_1 1296
-#define wxSizer_Replace_3_0 1297
-#define wxSizer_Replace_2 1298
-#define wxSizer_SetDimension 1299
-#define wxSizer_SetMinSize_2 1300
-#define wxSizer_SetMinSize_1 1301
-#define wxSizer_SetItemMinSize_3_2 1302
-#define wxSizer_SetItemMinSize_2_2 1303
-#define wxSizer_SetItemMinSize_3_1 1304
-#define wxSizer_SetItemMinSize_2_1 1305
-#define wxSizer_SetItemMinSize_3_0 1306
-#define wxSizer_SetItemMinSize_2_0 1307
-#define wxSizer_SetSizeHints 1308
-#define wxSizer_SetVirtualSizeHints 1309
-#define wxSizer_Show_2_2 1310
-#define wxSizer_Show_2_1 1311
-#define wxSizer_Show_2_0 1312
-#define wxSizer_Show_1 1313
-#define wxSizerFlags_new 1314
-#define wxSizerFlags_Align 1315
-#define wxSizerFlags_Border_2 1316
-#define wxSizerFlags_Border_1 1317
-#define wxSizerFlags_Center 1318
-#define wxSizerFlags_Centre 1319
-#define wxSizerFlags_Expand 1320
-#define wxSizerFlags_Left 1321
-#define wxSizerFlags_Proportion 1322
-#define wxSizerFlags_Right 1323
-#define wxSizerFlags_destroy 1324
-#define wxSizerItem_new_5_1 1325
-#define wxSizerItem_new_2_1 1326
-#define wxSizerItem_new_5_0 1327
-#define wxSizerItem_new_2_0 1328
-#define wxSizerItem_new_6 1329
-#define wxSizerItem_new_3 1330
-#define wxSizerItem_new_0 1331
-#define wxSizerItem_destruct 1332
-#define wxSizerItem_CalcMin 1333
-#define wxSizerItem_DeleteWindows 1334
-#define wxSizerItem_DetachSizer 1335
-#define wxSizerItem_GetBorder 1336
-#define wxSizerItem_GetFlag 1337
-#define wxSizerItem_GetMinSize 1338
-#define wxSizerItem_GetPosition 1339
-#define wxSizerItem_GetProportion 1340
-#define wxSizerItem_GetRatio 1341
-#define wxSizerItem_GetRect 1342
-#define wxSizerItem_GetSize 1343
-#define wxSizerItem_GetSizer 1344
-#define wxSizerItem_GetSpacer 1345
-#define wxSizerItem_GetUserData 1346
-#define wxSizerItem_GetWindow 1347
-#define wxSizerItem_IsSizer 1348
-#define wxSizerItem_IsShown 1349
-#define wxSizerItem_IsSpacer 1350
-#define wxSizerItem_IsWindow 1351
-#define wxSizerItem_SetBorder 1352
-#define wxSizerItem_SetDimension 1353
-#define wxSizerItem_SetFlag 1354
-#define wxSizerItem_SetInitSize 1355
-#define wxSizerItem_SetMinSize_1 1356
-#define wxSizerItem_SetMinSize_2 1357
-#define wxSizerItem_SetProportion 1358
-#define wxSizerItem_SetRatio_2 1359
-#define wxSizerItem_SetRatio_1_1 1360
-#define wxSizerItem_SetRatio_1_0 1361
-#define wxSizerItem_SetSizer 1362
-#define wxSizerItem_SetSpacer_1 1363
-#define wxSizerItem_SetSpacer_2 1364
-#define wxSizerItem_SetWindow 1365
-#define wxSizerItem_Show 1366
-#define wxBoxSizer_new 1367
-#define wxBoxSizer_GetOrientation 1368
-#define wxBoxSizer_destroy 1369
-#define wxStaticBoxSizer_new_2 1370
-#define wxStaticBoxSizer_new_3 1371
-#define wxStaticBoxSizer_GetStaticBox 1372
-#define wxStaticBoxSizer_destroy 1373
-#define wxGridSizer_new_4 1374
-#define wxGridSizer_new_2 1375
-#define wxGridSizer_GetCols 1376
-#define wxGridSizer_GetHGap 1377
-#define wxGridSizer_GetRows 1378
-#define wxGridSizer_GetVGap 1379
-#define wxGridSizer_SetCols 1380
-#define wxGridSizer_SetHGap 1381
-#define wxGridSizer_SetRows 1382
-#define wxGridSizer_SetVGap 1383
-#define wxGridSizer_destroy 1384
-#define wxFlexGridSizer_new_4 1385
-#define wxFlexGridSizer_new_2 1386
-#define wxFlexGridSizer_AddGrowableCol 1387
-#define wxFlexGridSizer_AddGrowableRow 1388
-#define wxFlexGridSizer_GetFlexibleDirection 1389
-#define wxFlexGridSizer_GetNonFlexibleGrowMode 1390
-#define wxFlexGridSizer_RemoveGrowableCol 1391
-#define wxFlexGridSizer_RemoveGrowableRow 1392
-#define wxFlexGridSizer_SetFlexibleDirection 1393
-#define wxFlexGridSizer_SetNonFlexibleGrowMode 1394
-#define wxFlexGridSizer_destroy 1395
-#define wxGridBagSizer_new 1396
-#define wxGridBagSizer_Add_3_2 1397
-#define wxGridBagSizer_Add_3_1 1398
-#define wxGridBagSizer_Add_4 1399
-#define wxGridBagSizer_Add_1_0 1400
-#define wxGridBagSizer_Add_2_1 1401
-#define wxGridBagSizer_Add_2_0 1402
-#define wxGridBagSizer_Add_3_0 1403
-#define wxGridBagSizer_Add_1_1 1404
-#define wxGridBagSizer_CalcMin 1405
-#define wxGridBagSizer_CheckForIntersection_2 1406
-#define wxGridBagSizer_CheckForIntersection_3 1407
-#define wxGridBagSizer_FindItem_1_1 1408
-#define wxGridBagSizer_FindItem_1_0 1409
-#define wxGridBagSizer_FindItemAtPoint 1410
-#define wxGridBagSizer_FindItemAtPosition 1411
-#define wxGridBagSizer_FindItemWithData 1412
-#define wxGridBagSizer_GetCellSize 1413
-#define wxGridBagSizer_GetEmptyCellSize 1414
-#define wxGridBagSizer_GetItemPosition_1_2 1415
-#define wxGridBagSizer_GetItemPosition_1_1 1416
-#define wxGridBagSizer_GetItemPosition_1_0 1417
-#define wxGridBagSizer_GetItemSpan_1_2 1418
-#define wxGridBagSizer_GetItemSpan_1_1 1419
-#define wxGridBagSizer_GetItemSpan_1_0 1420
-#define wxGridBagSizer_SetEmptyCellSize 1421
-#define wxGridBagSizer_SetItemPosition_2_2 1422
-#define wxGridBagSizer_SetItemPosition_2_1 1423
-#define wxGridBagSizer_SetItemPosition_2_0 1424
-#define wxGridBagSizer_SetItemSpan_2_2 1425
-#define wxGridBagSizer_SetItemSpan_2_1 1426
-#define wxGridBagSizer_SetItemSpan_2_0 1427
-#define wxGridBagSizer_destroy 1428
-#define wxStdDialogButtonSizer_new 1429
-#define wxStdDialogButtonSizer_AddButton 1430
-#define wxStdDialogButtonSizer_Realize 1431
-#define wxStdDialogButtonSizer_SetAffirmativeButton 1432
-#define wxStdDialogButtonSizer_SetCancelButton 1433
-#define wxStdDialogButtonSizer_SetNegativeButton 1434
-#define wxStdDialogButtonSizer_destroy 1435
-#define wxFont_new_0 1436
-#define wxFont_new_1 1437
-#define wxFont_new_5 1438
-#define wxFont_destruct 1440
-#define wxFont_IsFixedWidth 1441
-#define wxFont_GetDefaultEncoding 1442
-#define wxFont_GetFaceName 1443
-#define wxFont_GetFamily 1444
-#define wxFont_GetNativeFontInfoDesc 1445
-#define wxFont_GetNativeFontInfoUserDesc 1446
-#define wxFont_GetPointSize 1447
-#define wxFont_GetStyle 1448
-#define wxFont_GetUnderlined 1449
-#define wxFont_GetWeight 1450
-#define wxFont_Ok 1451
-#define wxFont_SetDefaultEncoding 1452
-#define wxFont_SetFaceName 1453
-#define wxFont_SetFamily 1454
-#define wxFont_SetPointSize 1455
-#define wxFont_SetStyle 1456
-#define wxFont_SetUnderlined 1457
-#define wxFont_SetWeight 1458
-#define wxToolTip_Enable 1459
-#define wxToolTip_SetDelay 1460
-#define wxToolTip_new 1461
-#define wxToolTip_SetTip 1462
-#define wxToolTip_GetTip 1463
-#define wxToolTip_GetWindow 1464
-#define wxToolTip_destroy 1465
-#define wxButton_new_3 1467
-#define wxButton_new_0 1468
-#define wxButton_destruct 1469
-#define wxButton_Create 1470
-#define wxButton_GetDefaultSize 1471
-#define wxButton_SetDefault 1472
-#define wxButton_SetLabel 1473
-#define wxBitmapButton_new_4 1475
-#define wxBitmapButton_new_0 1476
-#define wxBitmapButton_Create 1477
-#define wxBitmapButton_GetBitmapDisabled 1478
-#define wxBitmapButton_GetBitmapFocus 1480
-#define wxBitmapButton_GetBitmapLabel 1482
-#define wxBitmapButton_GetBitmapSelected 1484
-#define wxBitmapButton_SetBitmapDisabled 1486
-#define wxBitmapButton_SetBitmapFocus 1487
-#define wxBitmapButton_SetBitmapLabel 1488
-#define wxBitmapButton_SetBitmapSelected 1489
-#define wxBitmapButton_destroy 1490
-#define wxToggleButton_new_0 1491
-#define wxToggleButton_new_4 1492
-#define wxToggleButton_Create 1493
-#define wxToggleButton_GetValue 1494
-#define wxToggleButton_SetValue 1495
-#define wxToggleButton_destroy 1496
-#define wxCalendarCtrl_new_0 1497
-#define wxCalendarCtrl_new_3 1498
-#define wxCalendarCtrl_Create 1499
-#define wxCalendarCtrl_destruct 1500
-#define wxCalendarCtrl_SetDate 1501
-#define wxCalendarCtrl_GetDate 1502
-#define wxCalendarCtrl_EnableYearChange 1503
-#define wxCalendarCtrl_EnableMonthChange 1504
-#define wxCalendarCtrl_EnableHolidayDisplay 1505
-#define wxCalendarCtrl_SetHeaderColours 1506
-#define wxCalendarCtrl_GetHeaderColourFg 1507
-#define wxCalendarCtrl_GetHeaderColourBg 1508
-#define wxCalendarCtrl_SetHighlightColours 1509
-#define wxCalendarCtrl_GetHighlightColourFg 1510
-#define wxCalendarCtrl_GetHighlightColourBg 1511
-#define wxCalendarCtrl_SetHolidayColours 1512
-#define wxCalendarCtrl_GetHolidayColourFg 1513
-#define wxCalendarCtrl_GetHolidayColourBg 1514
-#define wxCalendarCtrl_GetAttr 1515
-#define wxCalendarCtrl_SetAttr 1516
-#define wxCalendarCtrl_SetHoliday 1517
-#define wxCalendarCtrl_ResetAttr 1518
-#define wxCalendarCtrl_HitTest 1519
-#define wxCalendarDateAttr_new_0 1520
-#define wxCalendarDateAttr_new_2_1 1521
-#define wxCalendarDateAttr_new_2_0 1522
-#define wxCalendarDateAttr_SetTextColour 1523
-#define wxCalendarDateAttr_SetBackgroundColour 1524
-#define wxCalendarDateAttr_SetBorderColour 1525
-#define wxCalendarDateAttr_SetFont 1526
-#define wxCalendarDateAttr_SetBorder 1527
-#define wxCalendarDateAttr_SetHoliday 1528
-#define wxCalendarDateAttr_HasTextColour 1529
-#define wxCalendarDateAttr_HasBackgroundColour 1530
-#define wxCalendarDateAttr_HasBorderColour 1531
-#define wxCalendarDateAttr_HasFont 1532
-#define wxCalendarDateAttr_HasBorder 1533
-#define wxCalendarDateAttr_IsHoliday 1534
-#define wxCalendarDateAttr_GetTextColour 1535
-#define wxCalendarDateAttr_GetBackgroundColour 1536
-#define wxCalendarDateAttr_GetBorderColour 1537
-#define wxCalendarDateAttr_GetFont 1538
-#define wxCalendarDateAttr_GetBorder 1539
-#define wxCalendarDateAttr_destroy 1540
-#define wxCheckBox_new_4 1542
-#define wxCheckBox_new_0 1543
-#define wxCheckBox_Create 1544
-#define wxCheckBox_GetValue 1545
-#define wxCheckBox_Get3StateValue 1546
-#define wxCheckBox_Is3rdStateAllowedForUser 1547
-#define wxCheckBox_Is3State 1548
-#define wxCheckBox_IsChecked 1549
-#define wxCheckBox_SetValue 1550
-#define wxCheckBox_Set3StateValue 1551
-#define wxCheckBox_destroy 1552
-#define wxCheckListBox_new_0 1553
-#define wxCheckListBox_new_3 1555
-#define wxCheckListBox_Check 1556
-#define wxCheckListBox_IsChecked 1557
-#define wxCheckListBox_destroy 1558
-#define wxChoice_new_3 1561
-#define wxChoice_new_0 1562
-#define wxChoice_destruct 1564
-#define wxChoice_Create 1566
-#define wxChoice_Delete 1567
-#define wxChoice_GetColumns 1568
-#define wxChoice_SetColumns 1569
-#define wxComboBox_new_0 1570
-#define wxComboBox_new_3 1572
-#define wxComboBox_destruct 1573
-#define wxComboBox_Create 1575
-#define wxComboBox_CanCopy 1576
-#define wxComboBox_CanCut 1577
-#define wxComboBox_CanPaste 1578
-#define wxComboBox_CanRedo 1579
-#define wxComboBox_CanUndo 1580
-#define wxComboBox_Copy 1581
-#define wxComboBox_Cut 1582
-#define wxComboBox_GetInsertionPoint 1583
-#define wxComboBox_GetLastPosition 1584
-#define wxComboBox_GetValue 1585
-#define wxComboBox_Paste 1586
-#define wxComboBox_Redo 1587
-#define wxComboBox_Replace 1588
-#define wxComboBox_Remove 1589
-#define wxComboBox_SetInsertionPoint 1590
-#define wxComboBox_SetInsertionPointEnd 1591
-#define wxComboBox_SetSelection_1 1592
-#define wxComboBox_SetSelection_2 1593
-#define wxComboBox_SetValue 1594
-#define wxComboBox_Undo 1595
-#define wxGauge_new_0 1596
-#define wxGauge_new_4 1597
-#define wxGauge_Create 1598
-#define wxGauge_GetBezelFace 1599
-#define wxGauge_GetRange 1600
-#define wxGauge_GetShadowWidth 1601
-#define wxGauge_GetValue 1602
-#define wxGauge_IsVertical 1603
-#define wxGauge_SetBezelFace 1604
-#define wxGauge_SetRange 1605
-#define wxGauge_SetShadowWidth 1606
-#define wxGauge_SetValue 1607
-#define wxGauge_Pulse 1608
-#define wxGauge_destroy 1609
-#define wxGenericDirCtrl_new_0 1610
-#define wxGenericDirCtrl_new_2 1611
-#define wxGenericDirCtrl_destruct 1612
-#define wxGenericDirCtrl_Create 1613
-#define wxGenericDirCtrl_Init 1614
-#define wxGenericDirCtrl_CollapseTree 1615
-#define wxGenericDirCtrl_ExpandPath 1616
-#define wxGenericDirCtrl_GetDefaultPath 1617
-#define wxGenericDirCtrl_GetPath 1618
-#define wxGenericDirCtrl_GetFilePath 1619
-#define wxGenericDirCtrl_GetFilter 1620
-#define wxGenericDirCtrl_GetFilterIndex 1621
-#define wxGenericDirCtrl_GetRootId 1622
-#define wxGenericDirCtrl_GetTreeCtrl 1623
-#define wxGenericDirCtrl_ReCreateTree 1624
-#define wxGenericDirCtrl_SetDefaultPath 1625
-#define wxGenericDirCtrl_SetFilter 1626
-#define wxGenericDirCtrl_SetFilterIndex 1627
-#define wxGenericDirCtrl_SetPath 1628
-#define wxStaticBox_new_4 1630
-#define wxStaticBox_new_0 1631
-#define wxStaticBox_Create 1632
-#define wxStaticBox_destroy 1633
-#define wxStaticLine_new_2 1635
-#define wxStaticLine_new_0 1636
-#define wxStaticLine_Create 1637
-#define wxStaticLine_IsVertical 1638
-#define wxStaticLine_GetDefaultSize 1639
-#define wxStaticLine_destroy 1640
-#define wxListBox_new_3 1643
-#define wxListBox_new_0 1644
-#define wxListBox_destruct 1646
-#define wxListBox_Create 1648
-#define wxListBox_Deselect 1649
-#define wxListBox_GetSelections 1650
-#define wxListBox_InsertItems 1651
-#define wxListBox_IsSelected 1652
-#define wxListBox_Set 1654
-#define wxListBox_HitTest 1655
-#define wxListBox_SetFirstItem_1_0 1656
-#define wxListBox_SetFirstItem_1_1 1657
-#define wxListCtrl_new_0 1658
-#define wxListCtrl_new_2 1659
-#define wxListCtrl_Arrange 1660
-#define wxListCtrl_AssignImageList 1661
-#define wxListCtrl_ClearAll 1662
-#define wxListCtrl_Create 1663
-#define wxListCtrl_DeleteAllItems 1664
-#define wxListCtrl_DeleteColumn 1665
-#define wxListCtrl_DeleteItem 1666
-#define wxListCtrl_EditLabel 1667
-#define wxListCtrl_EnsureVisible 1668
-#define wxListCtrl_FindItem_3_0 1669
-#define wxListCtrl_FindItem_3_1 1670
-#define wxListCtrl_GetColumn 1671
-#define wxListCtrl_GetColumnCount 1672
-#define wxListCtrl_GetColumnWidth 1673
-#define wxListCtrl_GetCountPerPage 1674
-#define wxListCtrl_GetEditControl 1675
-#define wxListCtrl_GetImageList 1676
-#define wxListCtrl_GetItem 1677
-#define wxListCtrl_GetItemBackgroundColour 1678
-#define wxListCtrl_GetItemCount 1679
-#define wxListCtrl_GetItemData 1680
-#define wxListCtrl_GetItemFont 1681
-#define wxListCtrl_GetItemPosition 1682
-#define wxListCtrl_GetItemRect 1683
-#define wxListCtrl_GetItemSpacing 1684
-#define wxListCtrl_GetItemState 1685
-#define wxListCtrl_GetItemText 1686
-#define wxListCtrl_GetItemTextColour 1687
-#define wxListCtrl_GetNextItem 1688
-#define wxListCtrl_GetSelectedItemCount 1689
-#define wxListCtrl_GetTextColour 1690
-#define wxListCtrl_GetTopItem 1691
-#define wxListCtrl_GetViewRect 1692
-#define wxListCtrl_HitTest 1693
-#define wxListCtrl_InsertColumn_2 1694
-#define wxListCtrl_InsertColumn_3 1695
-#define wxListCtrl_InsertItem_1 1696
-#define wxListCtrl_InsertItem_2_1 1697
-#define wxListCtrl_InsertItem_2_0 1698
-#define wxListCtrl_InsertItem_3 1699
-#define wxListCtrl_RefreshItem 1700
-#define wxListCtrl_RefreshItems 1701
-#define wxListCtrl_ScrollList 1702
-#define wxListCtrl_SetBackgroundColour 1703
-#define wxListCtrl_SetColumn 1704
-#define wxListCtrl_SetColumnWidth 1705
-#define wxListCtrl_SetImageList 1706
-#define wxListCtrl_SetItem_1 1707
-#define wxListCtrl_SetItem_4 1708
-#define wxListCtrl_SetItemBackgroundColour 1709
-#define wxListCtrl_SetItemCount 1710
-#define wxListCtrl_SetItemData 1711
-#define wxListCtrl_SetItemFont 1712
-#define wxListCtrl_SetItemImage 1713
-#define wxListCtrl_SetItemColumnImage 1714
-#define wxListCtrl_SetItemPosition 1715
-#define wxListCtrl_SetItemState 1716
-#define wxListCtrl_SetItemText 1717
-#define wxListCtrl_SetItemTextColour 1718
-#define wxListCtrl_SetSingleStyle 1719
-#define wxListCtrl_SetTextColour 1720
-#define wxListCtrl_SetWindowStyleFlag 1721
-#define wxListCtrl_SortItems 1722
-#define wxListCtrl_destroy 1723
-#define wxListView_ClearColumnImage 1724
-#define wxListView_Focus 1725
-#define wxListView_GetFirstSelected 1726
-#define wxListView_GetFocusedItem 1727
-#define wxListView_GetNextSelected 1728
-#define wxListView_IsSelected 1729
-#define wxListView_Select 1730
-#define wxListView_SetColumnImage 1731
-#define wxListItem_new_0 1732
-#define wxListItem_new_1 1733
-#define wxListItem_destruct 1734
-#define wxListItem_Clear 1735
-#define wxListItem_GetAlign 1736
-#define wxListItem_GetBackgroundColour 1737
-#define wxListItem_GetColumn 1738
-#define wxListItem_GetFont 1739
-#define wxListItem_GetId 1740
-#define wxListItem_GetImage 1741
-#define wxListItem_GetMask 1742
-#define wxListItem_GetState 1743
-#define wxListItem_GetText 1744
-#define wxListItem_GetTextColour 1745
-#define wxListItem_GetWidth 1746
-#define wxListItem_SetAlign 1747
-#define wxListItem_SetBackgroundColour 1748
-#define wxListItem_SetColumn 1749
-#define wxListItem_SetFont 1750
-#define wxListItem_SetId 1751
-#define wxListItem_SetImage 1752
-#define wxListItem_SetMask 1753
-#define wxListItem_SetState 1754
-#define wxListItem_SetStateMask 1755
-#define wxListItem_SetText 1756
-#define wxListItem_SetTextColour 1757
-#define wxListItem_SetWidth 1758
-#define wxImageList_new_0 1759
-#define wxImageList_new_3 1760
-#define wxImageList_Add_1 1761
-#define wxImageList_Add_2_0 1762
-#define wxImageList_Add_2_1 1763
-#define wxImageList_Create 1764
-#define wxImageList_Draw 1766
-#define wxImageList_GetBitmap 1767
-#define wxImageList_GetIcon 1768
-#define wxImageList_GetImageCount 1769
-#define wxImageList_GetSize 1770
-#define wxImageList_Remove 1771
-#define wxImageList_RemoveAll 1772
-#define wxImageList_Replace_2 1773
-#define wxImageList_Replace_3 1774
-#define wxImageList_destroy 1775
-#define wxTextAttr_new_0 1776
-#define wxTextAttr_new_2 1777
-#define wxTextAttr_GetAlignment 1778
-#define wxTextAttr_GetBackgroundColour 1779
-#define wxTextAttr_GetFont 1780
-#define wxTextAttr_GetLeftIndent 1781
-#define wxTextAttr_GetLeftSubIndent 1782
-#define wxTextAttr_GetRightIndent 1783
-#define wxTextAttr_GetTabs 1784
-#define wxTextAttr_GetTextColour 1785
-#define wxTextAttr_HasBackgroundColour 1786
-#define wxTextAttr_HasFont 1787
-#define wxTextAttr_HasTextColour 1788
-#define wxTextAttr_GetFlags 1789
-#define wxTextAttr_IsDefault 1790
-#define wxTextAttr_SetAlignment 1791
-#define wxTextAttr_SetBackgroundColour 1792
-#define wxTextAttr_SetFlags 1793
-#define wxTextAttr_SetFont 1794
-#define wxTextAttr_SetLeftIndent 1795
-#define wxTextAttr_SetRightIndent 1796
-#define wxTextAttr_SetTabs 1797
-#define wxTextAttr_SetTextColour 1798
-#define wxTextAttr_destroy 1799
-#define wxTextCtrl_new_3 1801
-#define wxTextCtrl_new_0 1802
-#define wxTextCtrl_destruct 1804
-#define wxTextCtrl_AppendText 1805
-#define wxTextCtrl_CanCopy 1806
-#define wxTextCtrl_CanCut 1807
-#define wxTextCtrl_CanPaste 1808
-#define wxTextCtrl_CanRedo 1809
-#define wxTextCtrl_CanUndo 1810
-#define wxTextCtrl_Clear 1811
-#define wxTextCtrl_Copy 1812
-#define wxTextCtrl_Create 1813
-#define wxTextCtrl_Cut 1814
-#define wxTextCtrl_DiscardEdits 1815
-#define wxTextCtrl_EmulateKeyPress 1816
-#define wxTextCtrl_GetDefaultStyle 1817
-#define wxTextCtrl_GetInsertionPoint 1818
-#define wxTextCtrl_GetLastPosition 1819
-#define wxTextCtrl_GetLineLength 1820
-#define wxTextCtrl_GetLineText 1821
-#define wxTextCtrl_GetNumberOfLines 1822
-#define wxTextCtrl_GetRange 1823
-#define wxTextCtrl_GetSelection 1824
-#define wxTextCtrl_GetStringSelection 1825
-#define wxTextCtrl_GetStyle 1826
-#define wxTextCtrl_GetValue 1827
-#define wxTextCtrl_IsEditable 1828
-#define wxTextCtrl_IsModified 1829
-#define wxTextCtrl_IsMultiLine 1830
-#define wxTextCtrl_IsSingleLine 1831
-#define wxTextCtrl_LoadFile 1832
-#define wxTextCtrl_MarkDirty 1833
-#define wxTextCtrl_Paste 1834
-#define wxTextCtrl_PositionToXY 1835
-#define wxTextCtrl_Redo 1836
-#define wxTextCtrl_Remove 1837
-#define wxTextCtrl_Replace 1838
-#define wxTextCtrl_SaveFile 1839
-#define wxTextCtrl_SetDefaultStyle 1840
-#define wxTextCtrl_SetEditable 1841
-#define wxTextCtrl_SetInsertionPoint 1842
-#define wxTextCtrl_SetInsertionPointEnd 1843
-#define wxTextCtrl_SetMaxLength 1845
-#define wxTextCtrl_SetSelection 1846
-#define wxTextCtrl_SetStyle 1847
-#define wxTextCtrl_SetValue 1848
-#define wxTextCtrl_ShowPosition 1849
-#define wxTextCtrl_Undo 1850
-#define wxTextCtrl_WriteText 1851
-#define wxTextCtrl_XYToPosition 1852
-#define wxNotebook_new_0 1855
-#define wxNotebook_new_3 1856
-#define wxNotebook_destruct 1857
-#define wxNotebook_AddPage 1858
-#define wxNotebook_AdvanceSelection 1859
-#define wxNotebook_AssignImageList 1860
-#define wxNotebook_Create 1861
-#define wxNotebook_DeleteAllPages 1862
-#define wxNotebook_DeletePage 1863
-#define wxNotebook_RemovePage 1864
-#define wxNotebook_GetCurrentPage 1865
-#define wxNotebook_GetImageList 1866
-#define wxNotebook_GetPage 1868
-#define wxNotebook_GetPageCount 1869
-#define wxNotebook_GetPageImage 1870
-#define wxNotebook_GetPageText 1871
-#define wxNotebook_GetRowCount 1872
-#define wxNotebook_GetSelection 1873
-#define wxNotebook_GetThemeBackgroundColour 1874
-#define wxNotebook_HitTest 1876
-#define wxNotebook_InsertPage 1878
-#define wxNotebook_SetImageList 1879
-#define wxNotebook_SetPadding 1880
-#define wxNotebook_SetPageSize 1881
-#define wxNotebook_SetPageImage 1882
-#define wxNotebook_SetPageText 1883
-#define wxNotebook_SetSelection 1884
-#define wxNotebook_ChangeSelection 1885
-#define wxChoicebook_new_0 1886
-#define wxChoicebook_new_3 1887
-#define wxChoicebook_AddPage 1888
-#define wxChoicebook_AdvanceSelection 1889
-#define wxChoicebook_AssignImageList 1890
-#define wxChoicebook_Create 1891
-#define wxChoicebook_DeleteAllPages 1892
-#define wxChoicebook_DeletePage 1893
-#define wxChoicebook_RemovePage 1894
-#define wxChoicebook_GetCurrentPage 1895
-#define wxChoicebook_GetImageList 1896
-#define wxChoicebook_GetPage 1898
-#define wxChoicebook_GetPageCount 1899
-#define wxChoicebook_GetPageImage 1900
-#define wxChoicebook_GetPageText 1901
-#define wxChoicebook_GetSelection 1902
-#define wxChoicebook_HitTest 1903
-#define wxChoicebook_InsertPage 1904
-#define wxChoicebook_SetImageList 1905
-#define wxChoicebook_SetPageSize 1906
-#define wxChoicebook_SetPageImage 1907
-#define wxChoicebook_SetPageText 1908
-#define wxChoicebook_SetSelection 1909
-#define wxChoicebook_ChangeSelection 1910
-#define wxChoicebook_destroy 1911
-#define wxToolbook_new_0 1912
-#define wxToolbook_new_3 1913
-#define wxToolbook_AddPage 1914
-#define wxToolbook_AdvanceSelection 1915
-#define wxToolbook_AssignImageList 1916
-#define wxToolbook_Create 1917
-#define wxToolbook_DeleteAllPages 1918
-#define wxToolbook_DeletePage 1919
-#define wxToolbook_RemovePage 1920
-#define wxToolbook_GetCurrentPage 1921
-#define wxToolbook_GetImageList 1922
-#define wxToolbook_GetPage 1924
-#define wxToolbook_GetPageCount 1925
-#define wxToolbook_GetPageImage 1926
-#define wxToolbook_GetPageText 1927
-#define wxToolbook_GetSelection 1928
-#define wxToolbook_HitTest 1930
-#define wxToolbook_InsertPage 1931
-#define wxToolbook_SetImageList 1932
-#define wxToolbook_SetPageSize 1933
-#define wxToolbook_SetPageImage 1934
-#define wxToolbook_SetPageText 1935
-#define wxToolbook_SetSelection 1936
-#define wxToolbook_ChangeSelection 1937
-#define wxToolbook_destroy 1938
-#define wxListbook_new_0 1939
-#define wxListbook_new_3 1940
-#define wxListbook_AddPage 1941
-#define wxListbook_AdvanceSelection 1942
-#define wxListbook_AssignImageList 1943
-#define wxListbook_Create 1944
-#define wxListbook_DeleteAllPages 1945
-#define wxListbook_DeletePage 1946
-#define wxListbook_RemovePage 1947
-#define wxListbook_GetCurrentPage 1948
-#define wxListbook_GetImageList 1949
-#define wxListbook_GetPage 1951
-#define wxListbook_GetPageCount 1952
-#define wxListbook_GetPageImage 1953
-#define wxListbook_GetPageText 1954
-#define wxListbook_GetSelection 1955
-#define wxListbook_HitTest 1957
-#define wxListbook_InsertPage 1958
-#define wxListbook_SetImageList 1959
-#define wxListbook_SetPageSize 1960
-#define wxListbook_SetPageImage 1961
-#define wxListbook_SetPageText 1962
-#define wxListbook_SetSelection 1963
-#define wxListbook_ChangeSelection 1964
-#define wxListbook_destroy 1965
-#define wxTreebook_new_0 1966
-#define wxTreebook_new_3 1967
-#define wxTreebook_AddPage 1968
-#define wxTreebook_AdvanceSelection 1969
-#define wxTreebook_AssignImageList 1970
-#define wxTreebook_Create 1971
-#define wxTreebook_DeleteAllPages 1972
-#define wxTreebook_DeletePage 1973
-#define wxTreebook_RemovePage 1974
-#define wxTreebook_GetCurrentPage 1975
-#define wxTreebook_GetImageList 1976
-#define wxTreebook_GetPage 1978
-#define wxTreebook_GetPageCount 1979
-#define wxTreebook_GetPageImage 1980
-#define wxTreebook_GetPageText 1981
-#define wxTreebook_GetSelection 1982
-#define wxTreebook_ExpandNode 1983
-#define wxTreebook_IsNodeExpanded 1984
-#define wxTreebook_HitTest 1986
-#define wxTreebook_InsertPage 1987
-#define wxTreebook_InsertSubPage 1988
-#define wxTreebook_SetImageList 1989
-#define wxTreebook_SetPageSize 1990
-#define wxTreebook_SetPageImage 1991
-#define wxTreebook_SetPageText 1992
-#define wxTreebook_SetSelection 1993
-#define wxTreebook_ChangeSelection 1994
-#define wxTreebook_destroy 1995
-#define wxTreeCtrl_new_2 1998
-#define wxTreeCtrl_new_0 1999
-#define wxTreeCtrl_destruct 2001
-#define wxTreeCtrl_AddRoot 2002
-#define wxTreeCtrl_AppendItem 2003
-#define wxTreeCtrl_AssignImageList 2004
-#define wxTreeCtrl_AssignStateImageList 2005
-#define wxTreeCtrl_Collapse 2006
-#define wxTreeCtrl_CollapseAndReset 2007
-#define wxTreeCtrl_Create 2008
-#define wxTreeCtrl_Delete 2009
-#define wxTreeCtrl_DeleteAllItems 2010
-#define wxTreeCtrl_DeleteChildren 2011
-#define wxTreeCtrl_EnsureVisible 2012
-#define wxTreeCtrl_Expand 2013
-#define wxTreeCtrl_GetBoundingRect 2014
-#define wxTreeCtrl_GetChildrenCount 2016
-#define wxTreeCtrl_GetCount 2017
-#define wxTreeCtrl_GetEditControl 2018
-#define wxTreeCtrl_GetFirstChild 2019
-#define wxTreeCtrl_GetNextChild 2020
-#define wxTreeCtrl_GetFirstVisibleItem 2021
-#define wxTreeCtrl_GetImageList 2022
-#define wxTreeCtrl_GetIndent 2023
-#define wxTreeCtrl_GetItemBackgroundColour 2024
-#define wxTreeCtrl_GetItemData 2025
-#define wxTreeCtrl_GetItemFont 2026
-#define wxTreeCtrl_GetItemImage_1 2027
-#define wxTreeCtrl_GetItemImage_2 2028
-#define wxTreeCtrl_GetItemText 2029
-#define wxTreeCtrl_GetItemTextColour 2030
-#define wxTreeCtrl_GetLastChild 2031
-#define wxTreeCtrl_GetNextSibling 2032
-#define wxTreeCtrl_GetNextVisible 2033
-#define wxTreeCtrl_GetItemParent 2034
-#define wxTreeCtrl_GetPrevSibling 2035
-#define wxTreeCtrl_GetPrevVisible 2036
-#define wxTreeCtrl_GetRootItem 2037
-#define wxTreeCtrl_GetSelection 2038
-#define wxTreeCtrl_GetSelections 2039
-#define wxTreeCtrl_GetStateImageList 2040
-#define wxTreeCtrl_HitTest 2041
-#define wxTreeCtrl_InsertItem 2043
-#define wxTreeCtrl_IsBold 2044
-#define wxTreeCtrl_IsExpanded 2045
-#define wxTreeCtrl_IsSelected 2046
-#define wxTreeCtrl_IsVisible 2047
-#define wxTreeCtrl_ItemHasChildren 2048
-#define wxTreeCtrl_PrependItem 2049
-#define wxTreeCtrl_ScrollTo 2050
-#define wxTreeCtrl_SelectItem_1 2051
-#define wxTreeCtrl_SelectItem_2 2052
-#define wxTreeCtrl_SetIndent 2053
-#define wxTreeCtrl_SetImageList 2054
-#define wxTreeCtrl_SetItemBackgroundColour 2055
-#define wxTreeCtrl_SetItemBold 2056
-#define wxTreeCtrl_SetItemData 2057
-#define wxTreeCtrl_SetItemDropHighlight 2058
-#define wxTreeCtrl_SetItemFont 2059
-#define wxTreeCtrl_SetItemHasChildren 2060
-#define wxTreeCtrl_SetItemImage_2 2061
-#define wxTreeCtrl_SetItemImage_3 2062
-#define wxTreeCtrl_SetItemText 2063
-#define wxTreeCtrl_SetItemTextColour 2064
-#define wxTreeCtrl_SetStateImageList 2065
-#define wxTreeCtrl_SetWindowStyle 2066
-#define wxTreeCtrl_SortChildren 2067
-#define wxTreeCtrl_Toggle 2068
-#define wxTreeCtrl_ToggleItemSelection 2069
-#define wxTreeCtrl_Unselect 2070
-#define wxTreeCtrl_UnselectAll 2071
-#define wxTreeCtrl_UnselectItem 2072
-#define wxScrollBar_new_0 2073
-#define wxScrollBar_new_3 2074
-#define wxScrollBar_destruct 2075
-#define wxScrollBar_Create 2076
-#define wxScrollBar_GetRange 2077
-#define wxScrollBar_GetPageSize 2078
-#define wxScrollBar_GetThumbPosition 2079
-#define wxScrollBar_GetThumbSize 2080
-#define wxScrollBar_SetThumbPosition 2081
-#define wxScrollBar_SetScrollbar 2082
-#define wxSpinButton_new_2 2084
-#define wxSpinButton_new_0 2085
-#define wxSpinButton_Create 2086
-#define wxSpinButton_GetMax 2087
-#define wxSpinButton_GetMin 2088
-#define wxSpinButton_GetValue 2089
-#define wxSpinButton_SetRange 2090
-#define wxSpinButton_SetValue 2091
-#define wxSpinButton_destroy 2092
-#define wxSpinCtrl_new_0 2093
-#define wxSpinCtrl_new_2 2094
-#define wxSpinCtrl_Create 2096
-#define wxSpinCtrl_SetValue_1_1 2099
-#define wxSpinCtrl_SetValue_1_0 2100
-#define wxSpinCtrl_GetValue 2102
-#define wxSpinCtrl_SetRange 2104
-#define wxSpinCtrl_SetSelection 2105
-#define wxSpinCtrl_GetMin 2107
-#define wxSpinCtrl_GetMax 2109
-#define wxSpinCtrl_destroy 2110
-#define wxStaticText_new_0 2111
-#define wxStaticText_new_4 2112
-#define wxStaticText_Create 2113
-#define wxStaticText_GetLabel 2114
-#define wxStaticText_SetLabel 2115
-#define wxStaticText_Wrap 2116
-#define wxStaticText_destroy 2117
-#define wxStaticBitmap_new_0 2118
-#define wxStaticBitmap_new_4 2119
-#define wxStaticBitmap_Create 2120
-#define wxStaticBitmap_GetBitmap 2121
-#define wxStaticBitmap_SetBitmap 2122
-#define wxStaticBitmap_destroy 2123
-#define wxRadioBox_new 2124
-#define wxRadioBox_destruct 2126
-#define wxRadioBox_Create 2127
-#define wxRadioBox_Enable_2 2128
-#define wxRadioBox_Enable_1 2129
-#define wxRadioBox_GetSelection 2130
-#define wxRadioBox_GetString 2131
-#define wxRadioBox_SetSelection 2132
-#define wxRadioBox_Show_2 2133
-#define wxRadioBox_Show_1 2134
-#define wxRadioBox_GetColumnCount 2135
-#define wxRadioBox_GetItemHelpText 2136
-#define wxRadioBox_GetItemToolTip 2137
-#define wxRadioBox_GetItemFromPoint 2139
-#define wxRadioBox_GetRowCount 2140
-#define wxRadioBox_IsItemEnabled 2141
-#define wxRadioBox_IsItemShown 2142
-#define wxRadioBox_SetItemHelpText 2143
-#define wxRadioBox_SetItemToolTip 2144
-#define wxRadioButton_new_0 2145
-#define wxRadioButton_new_4 2146
-#define wxRadioButton_Create 2147
-#define wxRadioButton_GetValue 2148
-#define wxRadioButton_SetValue 2149
-#define wxRadioButton_destroy 2150
-#define wxSlider_new_6 2152
-#define wxSlider_new_0 2153
-#define wxSlider_Create 2154
-#define wxSlider_GetLineSize 2155
-#define wxSlider_GetMax 2156
-#define wxSlider_GetMin 2157
-#define wxSlider_GetPageSize 2158
-#define wxSlider_GetThumbLength 2159
-#define wxSlider_GetValue 2160
-#define wxSlider_SetLineSize 2161
-#define wxSlider_SetPageSize 2162
-#define wxSlider_SetRange 2163
-#define wxSlider_SetThumbLength 2164
-#define wxSlider_SetValue 2165
-#define wxSlider_destroy 2166
-#define wxDialog_new_4 2168
-#define wxDialog_new_0 2169
-#define wxDialog_destruct 2171
-#define wxDialog_Create 2172
-#define wxDialog_CreateButtonSizer 2173
-#define wxDialog_CreateStdDialogButtonSizer 2174
-#define wxDialog_EndModal 2175
-#define wxDialog_GetAffirmativeId 2176
-#define wxDialog_GetReturnCode 2177
-#define wxDialog_IsModal 2178
-#define wxDialog_SetAffirmativeId 2179
-#define wxDialog_SetReturnCode 2180
-#define wxDialog_Show 2181
-#define wxDialog_ShowModal 2182
-#define wxColourDialog_new_0 2183
-#define wxColourDialog_new_2 2184
-#define wxColourDialog_destruct 2185
-#define wxColourDialog_Create 2186
-#define wxColourDialog_GetColourData 2187
-#define wxColourData_new_0 2188
-#define wxColourData_new_1 2189
-#define wxColourData_destruct 2190
-#define wxColourData_GetChooseFull 2191
-#define wxColourData_GetColour 2192
-#define wxColourData_GetCustomColour 2194
-#define wxColourData_SetChooseFull 2195
-#define wxColourData_SetColour 2196
-#define wxColourData_SetCustomColour 2197
-#define wxPalette_new_0 2198
-#define wxPalette_new_4 2199
-#define wxPalette_destruct 2201
-#define wxPalette_Create 2202
-#define wxPalette_GetColoursCount 2203
-#define wxPalette_GetPixel 2204
-#define wxPalette_GetRGB 2205
-#define wxPalette_IsOk 2206
-#define wxDirDialog_new 2210
-#define wxDirDialog_destruct 2211
-#define wxDirDialog_GetPath 2212
-#define wxDirDialog_GetMessage 2213
-#define wxDirDialog_SetMessage 2214
-#define wxDirDialog_SetPath 2215
-#define wxFileDialog_new 2219
-#define wxFileDialog_destruct 2220
-#define wxFileDialog_GetDirectory 2221
-#define wxFileDialog_GetFilename 2222
-#define wxFileDialog_GetFilenames 2223
-#define wxFileDialog_GetFilterIndex 2224
-#define wxFileDialog_GetMessage 2225
-#define wxFileDialog_GetPath 2226
-#define wxFileDialog_GetPaths 2227
-#define wxFileDialog_GetWildcard 2228
-#define wxFileDialog_SetDirectory 2229
-#define wxFileDialog_SetFilename 2230
-#define wxFileDialog_SetFilterIndex 2231
-#define wxFileDialog_SetMessage 2232
-#define wxFileDialog_SetPath 2233
-#define wxFileDialog_SetWildcard 2234
-#define wxPickerBase_SetInternalMargin 2235
-#define wxPickerBase_GetInternalMargin 2236
-#define wxPickerBase_SetTextCtrlProportion 2237
-#define wxPickerBase_SetPickerCtrlProportion 2238
-#define wxPickerBase_GetTextCtrlProportion 2239
-#define wxPickerBase_GetPickerCtrlProportion 2240
-#define wxPickerBase_HasTextCtrl 2241
-#define wxPickerBase_GetTextCtrl 2242
-#define wxPickerBase_IsTextCtrlGrowable 2243
-#define wxPickerBase_SetPickerCtrlGrowable 2244
-#define wxPickerBase_SetTextCtrlGrowable 2245
-#define wxPickerBase_IsPickerCtrlGrowable 2246
-#define wxFilePickerCtrl_new_0 2247
-#define wxFilePickerCtrl_new_3 2248
-#define wxFilePickerCtrl_Create 2249
-#define wxFilePickerCtrl_GetPath 2250
-#define wxFilePickerCtrl_SetPath 2251
-#define wxFilePickerCtrl_destroy 2252
-#define wxDirPickerCtrl_new_0 2253
-#define wxDirPickerCtrl_new_3 2254
-#define wxDirPickerCtrl_Create 2255
-#define wxDirPickerCtrl_GetPath 2256
-#define wxDirPickerCtrl_SetPath 2257
-#define wxDirPickerCtrl_destroy 2258
-#define wxColourPickerCtrl_new_0 2259
-#define wxColourPickerCtrl_new_3 2260
-#define wxColourPickerCtrl_Create 2261
-#define wxColourPickerCtrl_GetColour 2262
-#define wxColourPickerCtrl_SetColour_1_1 2263
-#define wxColourPickerCtrl_SetColour_1_0 2264
-#define wxColourPickerCtrl_destroy 2265
-#define wxDatePickerCtrl_new_0 2266
-#define wxDatePickerCtrl_new_3 2267
-#define wxDatePickerCtrl_GetRange 2268
-#define wxDatePickerCtrl_GetValue 2269
-#define wxDatePickerCtrl_SetRange 2270
-#define wxDatePickerCtrl_SetValue 2271
-#define wxDatePickerCtrl_destroy 2272
-#define wxFontPickerCtrl_new_0 2273
-#define wxFontPickerCtrl_new_3 2274
-#define wxFontPickerCtrl_Create 2275
-#define wxFontPickerCtrl_GetSelectedFont 2276
-#define wxFontPickerCtrl_SetSelectedFont 2277
-#define wxFontPickerCtrl_GetMaxPointSize 2278
-#define wxFontPickerCtrl_SetMaxPointSize 2279
-#define wxFontPickerCtrl_destroy 2280
-#define wxFindReplaceDialog_new_0 2283
-#define wxFindReplaceDialog_new_4 2284
-#define wxFindReplaceDialog_destruct 2285
-#define wxFindReplaceDialog_Create 2286
-#define wxFindReplaceDialog_GetData 2287
-#define wxFindReplaceData_new_0 2288
-#define wxFindReplaceData_new_1 2289
-#define wxFindReplaceData_GetFindString 2290
-#define wxFindReplaceData_GetReplaceString 2291
-#define wxFindReplaceData_GetFlags 2292
-#define wxFindReplaceData_SetFlags 2293
-#define wxFindReplaceData_SetFindString 2294
-#define wxFindReplaceData_SetReplaceString 2295
-#define wxFindReplaceData_destroy 2296
-#define wxMultiChoiceDialog_new_0 2297
-#define wxMultiChoiceDialog_new_5 2299
-#define wxMultiChoiceDialog_GetSelections 2300
-#define wxMultiChoiceDialog_SetSelections 2301
-#define wxMultiChoiceDialog_destroy 2302
-#define wxSingleChoiceDialog_new_0 2303
-#define wxSingleChoiceDialog_new_5 2305
-#define wxSingleChoiceDialog_GetSelection 2306
-#define wxSingleChoiceDialog_GetStringSelection 2307
-#define wxSingleChoiceDialog_SetSelection 2308
-#define wxSingleChoiceDialog_destroy 2309
-#define wxTextEntryDialog_new 2310
-#define wxTextEntryDialog_GetValue 2311
-#define wxTextEntryDialog_SetValue 2312
-#define wxTextEntryDialog_destroy 2313
-#define wxPasswordEntryDialog_new 2314
-#define wxPasswordEntryDialog_destroy 2315
-#define wxFontData_new_0 2316
-#define wxFontData_new_1 2317
-#define wxFontData_destruct 2318
-#define wxFontData_EnableEffects 2319
-#define wxFontData_GetAllowSymbols 2320
-#define wxFontData_GetColour 2321
-#define wxFontData_GetChosenFont 2322
-#define wxFontData_GetEnableEffects 2323
-#define wxFontData_GetInitialFont 2324
-#define wxFontData_GetShowHelp 2325
-#define wxFontData_SetAllowSymbols 2326
-#define wxFontData_SetChosenFont 2327
-#define wxFontData_SetColour 2328
-#define wxFontData_SetInitialFont 2329
-#define wxFontData_SetRange 2330
-#define wxFontData_SetShowHelp 2331
-#define wxFontDialog_new_0 2335
-#define wxFontDialog_new_2 2337
-#define wxFontDialog_Create 2339
-#define wxFontDialog_GetFontData 2340
-#define wxFontDialog_destroy 2342
-#define wxProgressDialog_new 2343
-#define wxProgressDialog_destruct 2344
-#define wxProgressDialog_Resume 2345
-#define wxProgressDialog_Update_2 2346
-#define wxProgressDialog_Update_0 2347
-#define wxMessageDialog_new 2348
-#define wxMessageDialog_destruct 2349
-#define wxPageSetupDialog_new 2350
-#define wxPageSetupDialog_destruct 2351
-#define wxPageSetupDialog_GetPageSetupData 2352
-#define wxPageSetupDialog_ShowModal 2353
-#define wxPageSetupDialogData_new_0 2354
-#define wxPageSetupDialogData_new_1_0 2355
-#define wxPageSetupDialogData_new_1_1 2356
-#define wxPageSetupDialogData_destruct 2357
-#define wxPageSetupDialogData_EnableHelp 2358
-#define wxPageSetupDialogData_EnableMargins 2359
-#define wxPageSetupDialogData_EnableOrientation 2360
-#define wxPageSetupDialogData_EnablePaper 2361
-#define wxPageSetupDialogData_EnablePrinter 2362
-#define wxPageSetupDialogData_GetDefaultMinMargins 2363
-#define wxPageSetupDialogData_GetEnableMargins 2364
-#define wxPageSetupDialogData_GetEnableOrientation 2365
-#define wxPageSetupDialogData_GetEnablePaper 2366
-#define wxPageSetupDialogData_GetEnablePrinter 2367
-#define wxPageSetupDialogData_GetEnableHelp 2368
-#define wxPageSetupDialogData_GetDefaultInfo 2369
-#define wxPageSetupDialogData_GetMarginTopLeft 2370
-#define wxPageSetupDialogData_GetMarginBottomRight 2371
-#define wxPageSetupDialogData_GetMinMarginTopLeft 2372
-#define wxPageSetupDialogData_GetMinMarginBottomRight 2373
-#define wxPageSetupDialogData_GetPaperId 2374
-#define wxPageSetupDialogData_GetPaperSize 2375
-#define wxPageSetupDialogData_GetPrintData 2377
-#define wxPageSetupDialogData_IsOk 2378
-#define wxPageSetupDialogData_SetDefaultInfo 2379
-#define wxPageSetupDialogData_SetDefaultMinMargins 2380
-#define wxPageSetupDialogData_SetMarginTopLeft 2381
-#define wxPageSetupDialogData_SetMarginBottomRight 2382
-#define wxPageSetupDialogData_SetMinMarginTopLeft 2383
-#define wxPageSetupDialogData_SetMinMarginBottomRight 2384
-#define wxPageSetupDialogData_SetPaperId 2385
-#define wxPageSetupDialogData_SetPaperSize_1_1 2386
-#define wxPageSetupDialogData_SetPaperSize_1_0 2387
-#define wxPageSetupDialogData_SetPrintData 2388
-#define wxPrintDialog_new_2_0 2389
-#define wxPrintDialog_new_2_1 2390
-#define wxPrintDialog_destruct 2391
-#define wxPrintDialog_GetPrintDialogData 2392
-#define wxPrintDialog_GetPrintDC 2393
-#define wxPrintDialogData_new_0 2394
-#define wxPrintDialogData_new_1_1 2395
-#define wxPrintDialogData_new_1_0 2396
-#define wxPrintDialogData_destruct 2397
-#define wxPrintDialogData_EnableHelp 2398
-#define wxPrintDialogData_EnablePageNumbers 2399
-#define wxPrintDialogData_EnablePrintToFile 2400
-#define wxPrintDialogData_EnableSelection 2401
-#define wxPrintDialogData_GetAllPages 2402
-#define wxPrintDialogData_GetCollate 2403
-#define wxPrintDialogData_GetFromPage 2404
-#define wxPrintDialogData_GetMaxPage 2405
-#define wxPrintDialogData_GetMinPage 2406
-#define wxPrintDialogData_GetNoCopies 2407
-#define wxPrintDialogData_GetPrintData 2408
-#define wxPrintDialogData_GetPrintToFile 2409
-#define wxPrintDialogData_GetSelection 2410
-#define wxPrintDialogData_GetToPage 2411
-#define wxPrintDialogData_IsOk 2412
-#define wxPrintDialogData_SetCollate 2413
-#define wxPrintDialogData_SetFromPage 2414
-#define wxPrintDialogData_SetMaxPage 2415
-#define wxPrintDialogData_SetMinPage 2416
-#define wxPrintDialogData_SetNoCopies 2417
-#define wxPrintDialogData_SetPrintData 2418
-#define wxPrintDialogData_SetPrintToFile 2419
-#define wxPrintDialogData_SetSelection 2420
-#define wxPrintDialogData_SetToPage 2421
-#define wxPrintData_new_0 2422
-#define wxPrintData_new_1 2423
-#define wxPrintData_destruct 2424
-#define wxPrintData_GetCollate 2425
-#define wxPrintData_GetBin 2426
-#define wxPrintData_GetColour 2427
-#define wxPrintData_GetDuplex 2428
-#define wxPrintData_GetNoCopies 2429
-#define wxPrintData_GetOrientation 2430
-#define wxPrintData_GetPaperId 2431
-#define wxPrintData_GetPrinterName 2432
-#define wxPrintData_GetQuality 2433
-#define wxPrintData_IsOk 2434
-#define wxPrintData_SetBin 2435
-#define wxPrintData_SetCollate 2436
-#define wxPrintData_SetColour 2437
-#define wxPrintData_SetDuplex 2438
-#define wxPrintData_SetNoCopies 2439
-#define wxPrintData_SetOrientation 2440
-#define wxPrintData_SetPaperId 2441
-#define wxPrintData_SetPrinterName 2442
-#define wxPrintData_SetQuality 2443
-#define wxPrintPreview_new_2 2446
-#define wxPrintPreview_new_3 2447
-#define wxPrintPreview_destruct 2449
-#define wxPrintPreview_GetCanvas 2450
-#define wxPrintPreview_GetCurrentPage 2451
-#define wxPrintPreview_GetFrame 2452
-#define wxPrintPreview_GetMaxPage 2453
-#define wxPrintPreview_GetMinPage 2454
-#define wxPrintPreview_GetPrintout 2455
-#define wxPrintPreview_GetPrintoutForPrinting 2456
-#define wxPrintPreview_IsOk 2457
-#define wxPrintPreview_PaintPage 2458
-#define wxPrintPreview_Print 2459
-#define wxPrintPreview_RenderPage 2460
-#define wxPrintPreview_SetCanvas 2461
-#define wxPrintPreview_SetCurrentPage 2462
-#define wxPrintPreview_SetFrame 2463
-#define wxPrintPreview_SetPrintout 2464
-#define wxPrintPreview_SetZoom 2465
-#define wxPreviewFrame_new 2466
-#define wxPreviewFrame_destruct 2467
-#define wxPreviewFrame_CreateControlBar 2468
-#define wxPreviewFrame_CreateCanvas 2469
-#define wxPreviewFrame_Initialize 2470
-#define wxPreviewFrame_OnCloseWindow 2471
-#define wxPreviewControlBar_new 2472
-#define wxPreviewControlBar_destruct 2473
-#define wxPreviewControlBar_CreateButtons 2474
-#define wxPreviewControlBar_GetPrintPreview 2475
-#define wxPreviewControlBar_GetZoomControl 2476
-#define wxPreviewControlBar_SetZoomControl 2477
-#define wxPrinter_new 2479
-#define wxPrinter_CreateAbortWindow 2480
-#define wxPrinter_GetAbort 2481
-#define wxPrinter_GetLastError 2482
-#define wxPrinter_GetPrintDialogData 2483
-#define wxPrinter_Print 2484
-#define wxPrinter_PrintDialog 2485
-#define wxPrinter_ReportError 2486
-#define wxPrinter_Setup 2487
-#define wxPrinter_destroy 2488
-#define wxXmlResource_new_1 2489
-#define wxXmlResource_new_2 2490
-#define wxXmlResource_destruct 2491
-#define wxXmlResource_AttachUnknownControl 2492
-#define wxXmlResource_ClearHandlers 2493
-#define wxXmlResource_CompareVersion 2494
-#define wxXmlResource_Get 2495
-#define wxXmlResource_GetFlags 2496
-#define wxXmlResource_GetVersion 2497
-#define wxXmlResource_GetXRCID 2498
-#define wxXmlResource_InitAllHandlers 2499
-#define wxXmlResource_Load 2500
-#define wxXmlResource_LoadBitmap 2501
-#define wxXmlResource_LoadDialog_2 2502
-#define wxXmlResource_LoadDialog_3 2503
-#define wxXmlResource_LoadFrame_2 2504
-#define wxXmlResource_LoadFrame_3 2505
-#define wxXmlResource_LoadIcon 2506
-#define wxXmlResource_LoadMenu 2507
-#define wxXmlResource_LoadMenuBar_2 2508
-#define wxXmlResource_LoadMenuBar_1 2509
-#define wxXmlResource_LoadPanel_2 2510
-#define wxXmlResource_LoadPanel_3 2511
-#define wxXmlResource_LoadToolBar 2512
-#define wxXmlResource_Set 2513
-#define wxXmlResource_SetFlags 2514
-#define wxXmlResource_Unload 2515
-#define wxXmlResource_xrcctrl 2516
-#define wxHtmlEasyPrinting_new 2517
-#define wxHtmlEasyPrinting_destruct 2518
-#define wxHtmlEasyPrinting_GetPrintData 2519
-#define wxHtmlEasyPrinting_GetPageSetupData 2520
-#define wxHtmlEasyPrinting_PreviewFile 2521
-#define wxHtmlEasyPrinting_PreviewText 2522
-#define wxHtmlEasyPrinting_PrintFile 2523
-#define wxHtmlEasyPrinting_PrintText 2524
-#define wxHtmlEasyPrinting_PageSetup 2525
-#define wxHtmlEasyPrinting_SetFonts 2526
-#define wxHtmlEasyPrinting_SetHeader 2527
-#define wxHtmlEasyPrinting_SetFooter 2528
-#define wxGLCanvas_new_2 2530
-#define wxGLCanvas_new_3_1 2531
-#define wxGLCanvas_new_3_0 2532
-#define wxGLCanvas_GetContext 2533
-#define wxGLCanvas_SetCurrent 2535
-#define wxGLCanvas_SwapBuffers 2536
-#define wxGLCanvas_destroy 2537
-#define wxAuiManager_new 2538
-#define wxAuiManager_destruct 2539
-#define wxAuiManager_AddPane_2_1 2540
-#define wxAuiManager_AddPane_3 2541
-#define wxAuiManager_AddPane_2_0 2542
-#define wxAuiManager_DetachPane 2543
-#define wxAuiManager_GetAllPanes 2544
-#define wxAuiManager_GetArtProvider 2545
-#define wxAuiManager_GetDockSizeConstraint 2546
-#define wxAuiManager_GetFlags 2547
-#define wxAuiManager_GetManagedWindow 2548
-#define wxAuiManager_GetManager 2549
-#define wxAuiManager_GetPane_1_1 2550
-#define wxAuiManager_GetPane_1_0 2551
-#define wxAuiManager_HideHint 2552
-#define wxAuiManager_InsertPane 2553
-#define wxAuiManager_LoadPaneInfo 2554
-#define wxAuiManager_LoadPerspective 2555
-#define wxAuiManager_SavePaneInfo 2556
-#define wxAuiManager_SavePerspective 2557
-#define wxAuiManager_SetArtProvider 2558
-#define wxAuiManager_SetDockSizeConstraint 2559
-#define wxAuiManager_SetFlags 2560
-#define wxAuiManager_SetManagedWindow 2561
-#define wxAuiManager_ShowHint 2562
-#define wxAuiManager_UnInit 2563
-#define wxAuiManager_Update 2564
-#define wxAuiPaneInfo_new_0 2565
-#define wxAuiPaneInfo_new_1 2566
-#define wxAuiPaneInfo_destruct 2567
-#define wxAuiPaneInfo_BestSize_1 2568
-#define wxAuiPaneInfo_BestSize_2 2569
-#define wxAuiPaneInfo_Bottom 2570
-#define wxAuiPaneInfo_BottomDockable 2571
-#define wxAuiPaneInfo_Caption 2572
-#define wxAuiPaneInfo_CaptionVisible 2573
-#define wxAuiPaneInfo_Centre 2574
-#define wxAuiPaneInfo_CentrePane 2575
-#define wxAuiPaneInfo_CloseButton 2576
-#define wxAuiPaneInfo_DefaultPane 2577
-#define wxAuiPaneInfo_DestroyOnClose 2578
-#define wxAuiPaneInfo_Direction 2579
-#define wxAuiPaneInfo_Dock 2580
-#define wxAuiPaneInfo_Dockable 2581
-#define wxAuiPaneInfo_Fixed 2582
-#define wxAuiPaneInfo_Float 2583
-#define wxAuiPaneInfo_Floatable 2584
-#define wxAuiPaneInfo_FloatingPosition_1 2585
-#define wxAuiPaneInfo_FloatingPosition_2 2586
-#define wxAuiPaneInfo_FloatingSize_1 2587
-#define wxAuiPaneInfo_FloatingSize_2 2588
-#define wxAuiPaneInfo_Gripper 2589
-#define wxAuiPaneInfo_GripperTop 2590
-#define wxAuiPaneInfo_HasBorder 2591
-#define wxAuiPaneInfo_HasCaption 2592
-#define wxAuiPaneInfo_HasCloseButton 2593
-#define wxAuiPaneInfo_HasFlag 2594
-#define wxAuiPaneInfo_HasGripper 2595
-#define wxAuiPaneInfo_HasGripperTop 2596
-#define wxAuiPaneInfo_HasMaximizeButton 2597
-#define wxAuiPaneInfo_HasMinimizeButton 2598
-#define wxAuiPaneInfo_HasPinButton 2599
-#define wxAuiPaneInfo_Hide 2600
-#define wxAuiPaneInfo_IsBottomDockable 2601
-#define wxAuiPaneInfo_IsDocked 2602
-#define wxAuiPaneInfo_IsFixed 2603
-#define wxAuiPaneInfo_IsFloatable 2604
-#define wxAuiPaneInfo_IsFloating 2605
-#define wxAuiPaneInfo_IsLeftDockable 2606
-#define wxAuiPaneInfo_IsMovable 2607
-#define wxAuiPaneInfo_IsOk 2608
-#define wxAuiPaneInfo_IsResizable 2609
-#define wxAuiPaneInfo_IsRightDockable 2610
-#define wxAuiPaneInfo_IsShown 2611
-#define wxAuiPaneInfo_IsToolbar 2612
-#define wxAuiPaneInfo_IsTopDockable 2613
-#define wxAuiPaneInfo_Layer 2614
-#define wxAuiPaneInfo_Left 2615
-#define wxAuiPaneInfo_LeftDockable 2616
-#define wxAuiPaneInfo_MaxSize_1 2617
-#define wxAuiPaneInfo_MaxSize_2 2618
-#define wxAuiPaneInfo_MaximizeButton 2619
-#define wxAuiPaneInfo_MinSize_1 2620
-#define wxAuiPaneInfo_MinSize_2 2621
-#define wxAuiPaneInfo_MinimizeButton 2622
-#define wxAuiPaneInfo_Movable 2623
-#define wxAuiPaneInfo_Name 2624
-#define wxAuiPaneInfo_PaneBorder 2625
-#define wxAuiPaneInfo_PinButton 2626
-#define wxAuiPaneInfo_Position 2627
-#define wxAuiPaneInfo_Resizable 2628
-#define wxAuiPaneInfo_Right 2629
-#define wxAuiPaneInfo_RightDockable 2630
-#define wxAuiPaneInfo_Row 2631
-#define wxAuiPaneInfo_SafeSet 2632
-#define wxAuiPaneInfo_SetFlag 2633
-#define wxAuiPaneInfo_Show 2634
-#define wxAuiPaneInfo_ToolbarPane 2635
-#define wxAuiPaneInfo_Top 2636
-#define wxAuiPaneInfo_TopDockable 2637
-#define wxAuiPaneInfo_Window 2638
-#define wxAuiNotebook_new_0 2639
-#define wxAuiNotebook_new_2 2640
-#define wxAuiNotebook_AddPage 2641
-#define wxAuiNotebook_Create 2642
-#define wxAuiNotebook_DeletePage 2643
-#define wxAuiNotebook_GetArtProvider 2644
-#define wxAuiNotebook_GetPage 2645
-#define wxAuiNotebook_GetPageBitmap 2646
-#define wxAuiNotebook_GetPageCount 2647
-#define wxAuiNotebook_GetPageIndex 2648
-#define wxAuiNotebook_GetPageText 2649
-#define wxAuiNotebook_GetSelection 2650
-#define wxAuiNotebook_InsertPage 2651
-#define wxAuiNotebook_RemovePage 2652
-#define wxAuiNotebook_SetArtProvider 2653
-#define wxAuiNotebook_SetFont 2654
-#define wxAuiNotebook_SetPageBitmap 2655
-#define wxAuiNotebook_SetPageText 2656
-#define wxAuiNotebook_SetSelection 2657
-#define wxAuiNotebook_SetTabCtrlHeight 2658
-#define wxAuiNotebook_SetUniformBitmapSize 2659
-#define wxAuiNotebook_destroy 2660
-#define wxMDIParentFrame_new_0 2661
-#define wxMDIParentFrame_new_4 2662
-#define wxMDIParentFrame_destruct 2663
-#define wxMDIParentFrame_ActivateNext 2664
-#define wxMDIParentFrame_ActivatePrevious 2665
-#define wxMDIParentFrame_ArrangeIcons 2666
-#define wxMDIParentFrame_Cascade 2667
-#define wxMDIParentFrame_Create 2668
-#define wxMDIParentFrame_GetActiveChild 2669
-#define wxMDIParentFrame_GetClientWindow 2670
-#define wxMDIParentFrame_Tile 2671
-#define wxMDIChildFrame_new_0 2672
-#define wxMDIChildFrame_new_4 2673
-#define wxMDIChildFrame_destruct 2674
-#define wxMDIChildFrame_Activate 2675
-#define wxMDIChildFrame_Create 2676
-#define wxMDIChildFrame_Maximize 2677
-#define wxMDIChildFrame_Restore 2678
-#define wxMDIClientWindow_new_0 2679
-#define wxMDIClientWindow_new_2 2680
-#define wxMDIClientWindow_destruct 2681
-#define wxMDIClientWindow_CreateClient 2682
-#define wxLayoutAlgorithm_new 2683
-#define wxLayoutAlgorithm_LayoutFrame 2684
-#define wxLayoutAlgorithm_LayoutMDIFrame 2685
-#define wxLayoutAlgorithm_LayoutWindow 2686
-#define wxLayoutAlgorithm_destroy 2687
-#define wxEvent_GetId 2688
-#define wxEvent_GetSkipped 2689
-#define wxEvent_GetTimestamp 2690
-#define wxEvent_IsCommandEvent 2691
-#define wxEvent_ResumePropagation 2692
-#define wxEvent_ShouldPropagate 2693
-#define wxEvent_Skip 2694
-#define wxEvent_StopPropagation 2695
-#define wxCommandEvent_getClientData 2696
-#define wxCommandEvent_GetExtraLong 2697
-#define wxCommandEvent_GetInt 2698
-#define wxCommandEvent_GetSelection 2699
-#define wxCommandEvent_GetString 2700
-#define wxCommandEvent_IsChecked 2701
-#define wxCommandEvent_IsSelection 2702
-#define wxCommandEvent_SetInt 2703
-#define wxCommandEvent_SetString 2704
-#define wxScrollEvent_GetOrientation 2705
-#define wxScrollEvent_GetPosition 2706
-#define wxScrollWinEvent_GetOrientation 2707
-#define wxScrollWinEvent_GetPosition 2708
-#define wxMouseEvent_AltDown 2709
-#define wxMouseEvent_Button 2710
-#define wxMouseEvent_ButtonDClick 2711
-#define wxMouseEvent_ButtonDown 2712
-#define wxMouseEvent_ButtonUp 2713
-#define wxMouseEvent_CmdDown 2714
-#define wxMouseEvent_ControlDown 2715
-#define wxMouseEvent_Dragging 2716
-#define wxMouseEvent_Entering 2717
-#define wxMouseEvent_GetButton 2718
-#define wxMouseEvent_GetPosition 2721
-#define wxMouseEvent_GetLogicalPosition 2722
-#define wxMouseEvent_GetLinesPerAction 2723
-#define wxMouseEvent_GetWheelRotation 2724
-#define wxMouseEvent_GetWheelDelta 2725
-#define wxMouseEvent_GetX 2726
-#define wxMouseEvent_GetY 2727
-#define wxMouseEvent_IsButton 2728
-#define wxMouseEvent_IsPageScroll 2729
-#define wxMouseEvent_Leaving 2730
-#define wxMouseEvent_LeftDClick 2731
-#define wxMouseEvent_LeftDown 2732
-#define wxMouseEvent_LeftIsDown 2733
-#define wxMouseEvent_LeftUp 2734
-#define wxMouseEvent_MetaDown 2735
-#define wxMouseEvent_MiddleDClick 2736
-#define wxMouseEvent_MiddleDown 2737
-#define wxMouseEvent_MiddleIsDown 2738
-#define wxMouseEvent_MiddleUp 2739
-#define wxMouseEvent_Moving 2740
-#define wxMouseEvent_RightDClick 2741
-#define wxMouseEvent_RightDown 2742
-#define wxMouseEvent_RightIsDown 2743
-#define wxMouseEvent_RightUp 2744
-#define wxMouseEvent_ShiftDown 2745
-#define wxSetCursorEvent_GetCursor 2746
-#define wxSetCursorEvent_GetX 2747
-#define wxSetCursorEvent_GetY 2748
-#define wxSetCursorEvent_HasCursor 2749
-#define wxSetCursorEvent_SetCursor 2750
-#define wxKeyEvent_AltDown 2751
-#define wxKeyEvent_CmdDown 2752
-#define wxKeyEvent_ControlDown 2753
-#define wxKeyEvent_GetKeyCode 2754
-#define wxKeyEvent_GetModifiers 2755
-#define wxKeyEvent_GetPosition 2758
-#define wxKeyEvent_GetRawKeyCode 2759
-#define wxKeyEvent_GetRawKeyFlags 2760
-#define wxKeyEvent_GetUnicodeKey 2761
-#define wxKeyEvent_GetX 2762
-#define wxKeyEvent_GetY 2763
-#define wxKeyEvent_HasModifiers 2764
-#define wxKeyEvent_MetaDown 2765
-#define wxKeyEvent_ShiftDown 2766
-#define wxSizeEvent_GetSize 2767
-#define wxMoveEvent_GetPosition 2768
-#define wxEraseEvent_GetDC 2769
-#define wxFocusEvent_GetWindow 2770
-#define wxChildFocusEvent_GetWindow 2771
-#define wxMenuEvent_GetMenu 2772
-#define wxMenuEvent_GetMenuId 2773
-#define wxMenuEvent_IsPopup 2774
-#define wxCloseEvent_CanVeto 2775
-#define wxCloseEvent_GetLoggingOff 2776
-#define wxCloseEvent_SetCanVeto 2777
-#define wxCloseEvent_SetLoggingOff 2778
-#define wxCloseEvent_Veto 2779
-#define wxShowEvent_SetShow 2780
-#define wxShowEvent_GetShow 2781
-#define wxIconizeEvent_Iconized 2782
-#define wxJoystickEvent_ButtonDown 2783
-#define wxJoystickEvent_ButtonIsDown 2784
-#define wxJoystickEvent_ButtonUp 2785
-#define wxJoystickEvent_GetButtonChange 2786
-#define wxJoystickEvent_GetButtonState 2787
-#define wxJoystickEvent_GetJoystick 2788
-#define wxJoystickEvent_GetPosition 2789
-#define wxJoystickEvent_GetZPosition 2790
-#define wxJoystickEvent_IsButton 2791
-#define wxJoystickEvent_IsMove 2792
-#define wxJoystickEvent_IsZMove 2793
-#define wxUpdateUIEvent_CanUpdate 2794
-#define wxUpdateUIEvent_Check 2795
-#define wxUpdateUIEvent_Enable 2796
-#define wxUpdateUIEvent_Show 2797
-#define wxUpdateUIEvent_GetChecked 2798
-#define wxUpdateUIEvent_GetEnabled 2799
-#define wxUpdateUIEvent_GetShown 2800
-#define wxUpdateUIEvent_GetSetChecked 2801
-#define wxUpdateUIEvent_GetSetEnabled 2802
-#define wxUpdateUIEvent_GetSetShown 2803
-#define wxUpdateUIEvent_GetSetText 2804
-#define wxUpdateUIEvent_GetText 2805
-#define wxUpdateUIEvent_GetMode 2806
-#define wxUpdateUIEvent_GetUpdateInterval 2807
-#define wxUpdateUIEvent_ResetUpdateTime 2808
-#define wxUpdateUIEvent_SetMode 2809
-#define wxUpdateUIEvent_SetText 2810
-#define wxUpdateUIEvent_SetUpdateInterval 2811
-#define wxMouseCaptureChangedEvent_GetCapturedWindow 2812
-#define wxPaletteChangedEvent_SetChangedWindow 2813
-#define wxPaletteChangedEvent_GetChangedWindow 2814
-#define wxQueryNewPaletteEvent_SetPaletteRealized 2815
-#define wxQueryNewPaletteEvent_GetPaletteRealized 2816
-#define wxNavigationKeyEvent_GetDirection 2817
-#define wxNavigationKeyEvent_SetDirection 2818
-#define wxNavigationKeyEvent_IsWindowChange 2819
-#define wxNavigationKeyEvent_SetWindowChange 2820
-#define wxNavigationKeyEvent_IsFromTab 2821
-#define wxNavigationKeyEvent_SetFromTab 2822
-#define wxNavigationKeyEvent_GetCurrentFocus 2823
-#define wxNavigationKeyEvent_SetCurrentFocus 2824
-#define wxHelpEvent_GetOrigin 2825
-#define wxHelpEvent_GetPosition 2826
-#define wxHelpEvent_SetOrigin 2827
-#define wxHelpEvent_SetPosition 2828
-#define wxContextMenuEvent_GetPosition 2829
-#define wxContextMenuEvent_SetPosition 2830
-#define wxIdleEvent_CanSend 2831
-#define wxIdleEvent_GetMode 2832
-#define wxIdleEvent_RequestMore 2833
-#define wxIdleEvent_MoreRequested 2834
-#define wxIdleEvent_SetMode 2835
-#define wxGridEvent_AltDown 2836
-#define wxGridEvent_ControlDown 2837
-#define wxGridEvent_GetCol 2838
-#define wxGridEvent_GetPosition 2839
-#define wxGridEvent_GetRow 2840
-#define wxGridEvent_MetaDown 2841
-#define wxGridEvent_Selecting 2842
-#define wxGridEvent_ShiftDown 2843
-#define wxNotifyEvent_Allow 2844
-#define wxNotifyEvent_IsAllowed 2845
-#define wxNotifyEvent_Veto 2846
-#define wxSashEvent_GetEdge 2847
-#define wxSashEvent_GetDragRect 2848
-#define wxSashEvent_GetDragStatus 2849
-#define wxListEvent_GetCacheFrom 2850
-#define wxListEvent_GetCacheTo 2851
-#define wxListEvent_GetKeyCode 2852
-#define wxListEvent_GetIndex 2853
-#define wxListEvent_GetColumn 2854
-#define wxListEvent_GetPoint 2855
-#define wxListEvent_GetLabel 2856
-#define wxListEvent_GetText 2857
-#define wxListEvent_GetImage 2858
-#define wxListEvent_GetData 2859
-#define wxListEvent_GetMask 2860
-#define wxListEvent_GetItem 2861
-#define wxListEvent_IsEditCancelled 2862
-#define wxDateEvent_GetDate 2863
-#define wxCalendarEvent_GetWeekDay 2864
-#define wxFileDirPickerEvent_GetPath 2865
-#define wxColourPickerEvent_GetColour 2866
-#define wxFontPickerEvent_GetFont 2867
-#define wxStyledTextEvent_GetPosition 2868
-#define wxStyledTextEvent_GetKey 2869
-#define wxStyledTextEvent_GetModifiers 2870
-#define wxStyledTextEvent_GetModificationType 2871
-#define wxStyledTextEvent_GetText 2872
-#define wxStyledTextEvent_GetLength 2873
-#define wxStyledTextEvent_GetLinesAdded 2874
-#define wxStyledTextEvent_GetLine 2875
-#define wxStyledTextEvent_GetFoldLevelNow 2876
-#define wxStyledTextEvent_GetFoldLevelPrev 2877
-#define wxStyledTextEvent_GetMargin 2878
-#define wxStyledTextEvent_GetMessage 2879
-#define wxStyledTextEvent_GetWParam 2880
-#define wxStyledTextEvent_GetLParam 2881
-#define wxStyledTextEvent_GetListType 2882
-#define wxStyledTextEvent_GetX 2883
-#define wxStyledTextEvent_GetY 2884
-#define wxStyledTextEvent_GetDragText 2885
-#define wxStyledTextEvent_GetDragAllowMove 2886
-#define wxStyledTextEvent_GetDragResult 2887
-#define wxStyledTextEvent_GetShift 2888
-#define wxStyledTextEvent_GetControl 2889
-#define wxStyledTextEvent_GetAlt 2890
-#define utils_wxGetKeyState 2891
-#define utils_wxGetMousePosition 2892
-#define utils_wxGetMouseState 2893
-#define utils_wxSetDetectableAutoRepeat 2894
-#define utils_wxBell 2895
-#define utils_wxFindMenuItemId 2896
-#define utils_wxGenericFindWindowAtPoint 2897
-#define utils_wxFindWindowAtPoint 2898
-#define utils_wxBeginBusyCursor 2899
-#define utils_wxEndBusyCursor 2900
-#define utils_wxIsBusy 2901
-#define utils_wxShutdown 2902
-#define utils_wxShell 2903
-#define utils_wxLaunchDefaultBrowser 2904
-#define utils_wxGetEmailAddress 2905
-#define utils_wxGetUserId 2906
-#define utils_wxGetHomeDir 2907
-#define utils_wxNewId 2908
-#define utils_wxRegisterId 2909
-#define utils_wxGetCurrentId 2910
-#define utils_wxGetOsDescription 2911
-#define utils_wxIsPlatformLittleEndian 2912
-#define utils_wxIsPlatform64Bit 2913
-#define wxPrintout_new 2914
-#define wxPrintout_destruct 2915
-#define wxPrintout_GetDC 2916
-#define wxPrintout_GetPageSizeMM 2917
-#define wxPrintout_GetPageSizePixels 2918
-#define wxPrintout_GetPaperRectPixels 2919
-#define wxPrintout_GetPPIPrinter 2920
-#define wxPrintout_GetPPIScreen 2921
-#define wxPrintout_GetTitle 2922
-#define wxPrintout_IsPreview 2923
-#define wxPrintout_FitThisSizeToPaper 2924
-#define wxPrintout_FitThisSizeToPage 2925
-#define wxPrintout_FitThisSizeToPageMargins 2926
-#define wxPrintout_MapScreenSizeToPaper 2927
-#define wxPrintout_MapScreenSizeToPage 2928
-#define wxPrintout_MapScreenSizeToPageMargins 2929
-#define wxPrintout_MapScreenSizeToDevice 2930
-#define wxPrintout_GetLogicalPaperRect 2931
-#define wxPrintout_GetLogicalPageRect 2932
-#define wxPrintout_GetLogicalPageMarginsRect 2933
-#define wxPrintout_SetLogicalOrigin 2934
-#define wxPrintout_OffsetLogicalOrigin 2935
-#define wxStyledTextCtrl_new_2 2936
-#define wxStyledTextCtrl_new_0 2937
-#define wxStyledTextCtrl_destruct 2938
-#define wxStyledTextCtrl_Create 2939
-#define wxStyledTextCtrl_AddText 2940
-#define wxStyledTextCtrl_AddStyledText 2941
-#define wxStyledTextCtrl_InsertText 2942
-#define wxStyledTextCtrl_ClearAll 2943
-#define wxStyledTextCtrl_ClearDocumentStyle 2944
-#define wxStyledTextCtrl_GetLength 2945
-#define wxStyledTextCtrl_GetCharAt 2946
-#define wxStyledTextCtrl_GetCurrentPos 2947
-#define wxStyledTextCtrl_GetAnchor 2948
-#define wxStyledTextCtrl_GetStyleAt 2949
-#define wxStyledTextCtrl_Redo 2950
-#define wxStyledTextCtrl_SetUndoCollection 2951
-#define wxStyledTextCtrl_SelectAll 2952
-#define wxStyledTextCtrl_SetSavePoint 2953
-#define wxStyledTextCtrl_GetStyledText 2954
-#define wxStyledTextCtrl_CanRedo 2955
-#define wxStyledTextCtrl_MarkerLineFromHandle 2956
-#define wxStyledTextCtrl_MarkerDeleteHandle 2957
-#define wxStyledTextCtrl_GetUndoCollection 2958
-#define wxStyledTextCtrl_GetViewWhiteSpace 2959
-#define wxStyledTextCtrl_SetViewWhiteSpace 2960
-#define wxStyledTextCtrl_PositionFromPoint 2961
-#define wxStyledTextCtrl_PositionFromPointClose 2962
-#define wxStyledTextCtrl_GotoLine 2963
-#define wxStyledTextCtrl_GotoPos 2964
-#define wxStyledTextCtrl_SetAnchor 2965
-#define wxStyledTextCtrl_GetCurLine 2966
-#define wxStyledTextCtrl_GetEndStyled 2967
-#define wxStyledTextCtrl_ConvertEOLs 2968
-#define wxStyledTextCtrl_GetEOLMode 2969
-#define wxStyledTextCtrl_SetEOLMode 2970
-#define wxStyledTextCtrl_StartStyling 2971
-#define wxStyledTextCtrl_SetStyling 2972
-#define wxStyledTextCtrl_GetBufferedDraw 2973
-#define wxStyledTextCtrl_SetBufferedDraw 2974
-#define wxStyledTextCtrl_SetTabWidth 2975
-#define wxStyledTextCtrl_GetTabWidth 2976
-#define wxStyledTextCtrl_SetCodePage 2977
-#define wxStyledTextCtrl_MarkerDefine 2978
-#define wxStyledTextCtrl_MarkerSetForeground 2979
-#define wxStyledTextCtrl_MarkerSetBackground 2980
-#define wxStyledTextCtrl_MarkerAdd 2981
-#define wxStyledTextCtrl_MarkerDelete 2982
-#define wxStyledTextCtrl_MarkerDeleteAll 2983
-#define wxStyledTextCtrl_MarkerGet 2984
-#define wxStyledTextCtrl_MarkerNext 2985
-#define wxStyledTextCtrl_MarkerPrevious 2986
-#define wxStyledTextCtrl_MarkerDefineBitmap 2987
-#define wxStyledTextCtrl_MarkerAddSet 2988
-#define wxStyledTextCtrl_MarkerSetAlpha 2989
-#define wxStyledTextCtrl_SetMarginType 2990
-#define wxStyledTextCtrl_GetMarginType 2991
-#define wxStyledTextCtrl_SetMarginWidth 2992
-#define wxStyledTextCtrl_GetMarginWidth 2993
-#define wxStyledTextCtrl_SetMarginMask 2994
-#define wxStyledTextCtrl_GetMarginMask 2995
-#define wxStyledTextCtrl_SetMarginSensitive 2996
-#define wxStyledTextCtrl_GetMarginSensitive 2997
-#define wxStyledTextCtrl_StyleClearAll 2998
-#define wxStyledTextCtrl_StyleSetForeground 2999
-#define wxStyledTextCtrl_StyleSetBackground 3000
-#define wxStyledTextCtrl_StyleSetBold 3001
-#define wxStyledTextCtrl_StyleSetItalic 3002
-#define wxStyledTextCtrl_StyleSetSize 3003
-#define wxStyledTextCtrl_StyleSetFaceName 3004
-#define wxStyledTextCtrl_StyleSetEOLFilled 3005
-#define wxStyledTextCtrl_StyleResetDefault 3006
-#define wxStyledTextCtrl_StyleSetUnderline 3007
-#define wxStyledTextCtrl_StyleSetCase 3008
-#define wxStyledTextCtrl_StyleSetHotSpot 3009
-#define wxStyledTextCtrl_SetSelForeground 3010
-#define wxStyledTextCtrl_SetSelBackground 3011
-#define wxStyledTextCtrl_GetSelAlpha 3012
-#define wxStyledTextCtrl_SetSelAlpha 3013
-#define wxStyledTextCtrl_SetCaretForeground 3014
-#define wxStyledTextCtrl_CmdKeyAssign 3015
-#define wxStyledTextCtrl_CmdKeyClear 3016
-#define wxStyledTextCtrl_CmdKeyClearAll 3017
-#define wxStyledTextCtrl_SetStyleBytes 3018
-#define wxStyledTextCtrl_StyleSetVisible 3019
-#define wxStyledTextCtrl_GetCaretPeriod 3020
-#define wxStyledTextCtrl_SetCaretPeriod 3021
-#define wxStyledTextCtrl_SetWordChars 3022
-#define wxStyledTextCtrl_BeginUndoAction 3023
-#define wxStyledTextCtrl_EndUndoAction 3024
-#define wxStyledTextCtrl_IndicatorSetStyle 3025
-#define wxStyledTextCtrl_IndicatorGetStyle 3026
-#define wxStyledTextCtrl_IndicatorSetForeground 3027
-#define wxStyledTextCtrl_IndicatorGetForeground 3028
-#define wxStyledTextCtrl_SetWhitespaceForeground 3029
-#define wxStyledTextCtrl_SetWhitespaceBackground 3030
-#define wxStyledTextCtrl_GetStyleBits 3031
-#define wxStyledTextCtrl_SetLineState 3032
-#define wxStyledTextCtrl_GetLineState 3033
-#define wxStyledTextCtrl_GetMaxLineState 3034
-#define wxStyledTextCtrl_GetCaretLineVisible 3035
-#define wxStyledTextCtrl_SetCaretLineVisible 3036
-#define wxStyledTextCtrl_GetCaretLineBackground 3037
-#define wxStyledTextCtrl_SetCaretLineBackground 3038
-#define wxStyledTextCtrl_AutoCompShow 3039
-#define wxStyledTextCtrl_AutoCompCancel 3040
-#define wxStyledTextCtrl_AutoCompActive 3041
-#define wxStyledTextCtrl_AutoCompPosStart 3042
-#define wxStyledTextCtrl_AutoCompComplete 3043
-#define wxStyledTextCtrl_AutoCompStops 3044
-#define wxStyledTextCtrl_AutoCompSetSeparator 3045
-#define wxStyledTextCtrl_AutoCompGetSeparator 3046
-#define wxStyledTextCtrl_AutoCompSelect 3047
-#define wxStyledTextCtrl_AutoCompSetCancelAtStart 3048
-#define wxStyledTextCtrl_AutoCompGetCancelAtStart 3049
-#define wxStyledTextCtrl_AutoCompSetFillUps 3050
-#define wxStyledTextCtrl_AutoCompSetChooseSingle 3051
-#define wxStyledTextCtrl_AutoCompGetChooseSingle 3052
-#define wxStyledTextCtrl_AutoCompSetIgnoreCase 3053
-#define wxStyledTextCtrl_AutoCompGetIgnoreCase 3054
-#define wxStyledTextCtrl_UserListShow 3055
-#define wxStyledTextCtrl_AutoCompSetAutoHide 3056
-#define wxStyledTextCtrl_AutoCompGetAutoHide 3057
-#define wxStyledTextCtrl_AutoCompSetDropRestOfWord 3058
-#define wxStyledTextCtrl_AutoCompGetDropRestOfWord 3059
-#define wxStyledTextCtrl_RegisterImage 3060
-#define wxStyledTextCtrl_ClearRegisteredImages 3061
-#define wxStyledTextCtrl_AutoCompGetTypeSeparator 3062
-#define wxStyledTextCtrl_AutoCompSetTypeSeparator 3063
-#define wxStyledTextCtrl_AutoCompSetMaxWidth 3064
-#define wxStyledTextCtrl_AutoCompGetMaxWidth 3065
-#define wxStyledTextCtrl_AutoCompSetMaxHeight 3066
-#define wxStyledTextCtrl_AutoCompGetMaxHeight 3067
-#define wxStyledTextCtrl_SetIndent 3068
-#define wxStyledTextCtrl_GetIndent 3069
-#define wxStyledTextCtrl_SetUseTabs 3070
-#define wxStyledTextCtrl_GetUseTabs 3071
-#define wxStyledTextCtrl_SetLineIndentation 3072
-#define wxStyledTextCtrl_GetLineIndentation 3073
-#define wxStyledTextCtrl_GetLineIndentPosition 3074
-#define wxStyledTextCtrl_GetColumn 3075
-#define wxStyledTextCtrl_SetUseHorizontalScrollBar 3076
-#define wxStyledTextCtrl_GetUseHorizontalScrollBar 3077
-#define wxStyledTextCtrl_SetIndentationGuides 3078
-#define wxStyledTextCtrl_GetIndentationGuides 3079
-#define wxStyledTextCtrl_SetHighlightGuide 3080
-#define wxStyledTextCtrl_GetHighlightGuide 3081
-#define wxStyledTextCtrl_GetLineEndPosition 3082
-#define wxStyledTextCtrl_GetCodePage 3083
-#define wxStyledTextCtrl_GetCaretForeground 3084
-#define wxStyledTextCtrl_GetReadOnly 3085
-#define wxStyledTextCtrl_SetCurrentPos 3086
-#define wxStyledTextCtrl_SetSelectionStart 3087
-#define wxStyledTextCtrl_GetSelectionStart 3088
-#define wxStyledTextCtrl_SetSelectionEnd 3089
-#define wxStyledTextCtrl_GetSelectionEnd 3090
-#define wxStyledTextCtrl_SetPrintMagnification 3091
-#define wxStyledTextCtrl_GetPrintMagnification 3092
-#define wxStyledTextCtrl_SetPrintColourMode 3093
-#define wxStyledTextCtrl_GetPrintColourMode 3094
-#define wxStyledTextCtrl_FindText 3095
-#define wxStyledTextCtrl_FormatRange 3096
-#define wxStyledTextCtrl_GetFirstVisibleLine 3097
-#define wxStyledTextCtrl_GetLine 3098
-#define wxStyledTextCtrl_GetLineCount 3099
-#define wxStyledTextCtrl_SetMarginLeft 3100
-#define wxStyledTextCtrl_GetMarginLeft 3101
-#define wxStyledTextCtrl_SetMarginRight 3102
-#define wxStyledTextCtrl_GetMarginRight 3103
-#define wxStyledTextCtrl_GetModify 3104
-#define wxStyledTextCtrl_SetSelection 3105
-#define wxStyledTextCtrl_GetSelectedText 3106
-#define wxStyledTextCtrl_GetTextRange 3107
-#define wxStyledTextCtrl_HideSelection 3108
-#define wxStyledTextCtrl_LineFromPosition 3109
-#define wxStyledTextCtrl_PositionFromLine 3110
-#define wxStyledTextCtrl_LineScroll 3111
-#define wxStyledTextCtrl_EnsureCaretVisible 3112
-#define wxStyledTextCtrl_ReplaceSelection 3113
-#define wxStyledTextCtrl_SetReadOnly 3114
-#define wxStyledTextCtrl_CanPaste 3115
-#define wxStyledTextCtrl_CanUndo 3116
-#define wxStyledTextCtrl_EmptyUndoBuffer 3117
-#define wxStyledTextCtrl_Undo 3118
-#define wxStyledTextCtrl_Cut 3119
-#define wxStyledTextCtrl_Copy 3120
-#define wxStyledTextCtrl_Paste 3121
-#define wxStyledTextCtrl_Clear 3122
-#define wxStyledTextCtrl_SetText 3123
-#define wxStyledTextCtrl_GetText 3124
-#define wxStyledTextCtrl_GetTextLength 3125
-#define wxStyledTextCtrl_GetOvertype 3126
-#define wxStyledTextCtrl_SetCaretWidth 3127
-#define wxStyledTextCtrl_GetCaretWidth 3128
-#define wxStyledTextCtrl_SetTargetStart 3129
-#define wxStyledTextCtrl_GetTargetStart 3130
-#define wxStyledTextCtrl_SetTargetEnd 3131
-#define wxStyledTextCtrl_GetTargetEnd 3132
-#define wxStyledTextCtrl_ReplaceTarget 3133
-#define wxStyledTextCtrl_SearchInTarget 3134
-#define wxStyledTextCtrl_SetSearchFlags 3135
-#define wxStyledTextCtrl_GetSearchFlags 3136
-#define wxStyledTextCtrl_CallTipShow 3137
-#define wxStyledTextCtrl_CallTipCancel 3138
-#define wxStyledTextCtrl_CallTipActive 3139
-#define wxStyledTextCtrl_CallTipPosAtStart 3140
-#define wxStyledTextCtrl_CallTipSetHighlight 3141
-#define wxStyledTextCtrl_CallTipSetBackground 3142
-#define wxStyledTextCtrl_CallTipSetForeground 3143
-#define wxStyledTextCtrl_CallTipSetForegroundHighlight 3144
-#define wxStyledTextCtrl_CallTipUseStyle 3145
-#define wxStyledTextCtrl_VisibleFromDocLine 3146
-#define wxStyledTextCtrl_DocLineFromVisible 3147
-#define wxStyledTextCtrl_WrapCount 3148
-#define wxStyledTextCtrl_SetFoldLevel 3149
-#define wxStyledTextCtrl_GetFoldLevel 3150
-#define wxStyledTextCtrl_GetLastChild 3151
-#define wxStyledTextCtrl_GetFoldParent 3152
-#define wxStyledTextCtrl_ShowLines 3153
-#define wxStyledTextCtrl_HideLines 3154
-#define wxStyledTextCtrl_GetLineVisible 3155
-#define wxStyledTextCtrl_SetFoldExpanded 3156
-#define wxStyledTextCtrl_GetFoldExpanded 3157
-#define wxStyledTextCtrl_ToggleFold 3158
-#define wxStyledTextCtrl_EnsureVisible 3159
-#define wxStyledTextCtrl_SetFoldFlags 3160
-#define wxStyledTextCtrl_EnsureVisibleEnforcePolicy 3161
-#define wxStyledTextCtrl_SetTabIndents 3162
-#define wxStyledTextCtrl_GetTabIndents 3163
-#define wxStyledTextCtrl_SetBackSpaceUnIndents 3164
-#define wxStyledTextCtrl_GetBackSpaceUnIndents 3165
-#define wxStyledTextCtrl_SetMouseDwellTime 3166
-#define wxStyledTextCtrl_GetMouseDwellTime 3167
-#define wxStyledTextCtrl_WordStartPosition 3168
-#define wxStyledTextCtrl_WordEndPosition 3169
-#define wxStyledTextCtrl_SetWrapMode 3170
-#define wxStyledTextCtrl_GetWrapMode 3171
-#define wxStyledTextCtrl_SetWrapVisualFlags 3172
-#define wxStyledTextCtrl_GetWrapVisualFlags 3173
-#define wxStyledTextCtrl_SetWrapVisualFlagsLocation 3174
-#define wxStyledTextCtrl_GetWrapVisualFlagsLocation 3175
-#define wxStyledTextCtrl_SetWrapStartIndent 3176
-#define wxStyledTextCtrl_GetWrapStartIndent 3177
-#define wxStyledTextCtrl_SetLayoutCache 3178
-#define wxStyledTextCtrl_GetLayoutCache 3179
-#define wxStyledTextCtrl_SetScrollWidth 3180
-#define wxStyledTextCtrl_GetScrollWidth 3181
-#define wxStyledTextCtrl_TextWidth 3182
-#define wxStyledTextCtrl_GetEndAtLastLine 3183
-#define wxStyledTextCtrl_TextHeight 3184
-#define wxStyledTextCtrl_SetUseVerticalScrollBar 3185
-#define wxStyledTextCtrl_GetUseVerticalScrollBar 3186
-#define wxStyledTextCtrl_AppendText 3187
-#define wxStyledTextCtrl_GetTwoPhaseDraw 3188
-#define wxStyledTextCtrl_SetTwoPhaseDraw 3189
-#define wxStyledTextCtrl_TargetFromSelection 3190
-#define wxStyledTextCtrl_LinesJoin 3191
-#define wxStyledTextCtrl_LinesSplit 3192
-#define wxStyledTextCtrl_SetFoldMarginColour 3193
-#define wxStyledTextCtrl_SetFoldMarginHiColour 3194
-#define wxStyledTextCtrl_LineDown 3195
-#define wxStyledTextCtrl_LineDownExtend 3196
-#define wxStyledTextCtrl_LineUp 3197
-#define wxStyledTextCtrl_LineUpExtend 3198
-#define wxStyledTextCtrl_CharLeft 3199
-#define wxStyledTextCtrl_CharLeftExtend 3200
-#define wxStyledTextCtrl_CharRight 3201
-#define wxStyledTextCtrl_CharRightExtend 3202
-#define wxStyledTextCtrl_WordLeft 3203
-#define wxStyledTextCtrl_WordLeftExtend 3204
-#define wxStyledTextCtrl_WordRight 3205
-#define wxStyledTextCtrl_WordRightExtend 3206
-#define wxStyledTextCtrl_Home 3207
-#define wxStyledTextCtrl_HomeExtend 3208
-#define wxStyledTextCtrl_LineEnd 3209
-#define wxStyledTextCtrl_LineEndExtend 3210
-#define wxStyledTextCtrl_DocumentStart 3211
-#define wxStyledTextCtrl_DocumentStartExtend 3212
-#define wxStyledTextCtrl_DocumentEnd 3213
-#define wxStyledTextCtrl_DocumentEndExtend 3214
-#define wxStyledTextCtrl_PageUp 3215
-#define wxStyledTextCtrl_PageUpExtend 3216
-#define wxStyledTextCtrl_PageDown 3217
-#define wxStyledTextCtrl_PageDownExtend 3218
-#define wxStyledTextCtrl_EditToggleOvertype 3219
-#define wxStyledTextCtrl_Cancel 3220
-#define wxStyledTextCtrl_DeleteBack 3221
-#define wxStyledTextCtrl_Tab 3222
-#define wxStyledTextCtrl_BackTab 3223
-#define wxStyledTextCtrl_NewLine 3224
-#define wxStyledTextCtrl_FormFeed 3225
-#define wxStyledTextCtrl_VCHome 3226
-#define wxStyledTextCtrl_VCHomeExtend 3227
-#define wxStyledTextCtrl_ZoomIn 3228
-#define wxStyledTextCtrl_ZoomOut 3229
-#define wxStyledTextCtrl_DelWordLeft 3230
-#define wxStyledTextCtrl_DelWordRight 3231
-#define wxStyledTextCtrl_LineCut 3232
-#define wxStyledTextCtrl_LineDelete 3233
-#define wxStyledTextCtrl_LineTranspose 3234
-#define wxStyledTextCtrl_LineDuplicate 3235
-#define wxStyledTextCtrl_LowerCase 3236
-#define wxStyledTextCtrl_UpperCase 3237
-#define wxStyledTextCtrl_LineScrollDown 3238
-#define wxStyledTextCtrl_LineScrollUp 3239
-#define wxStyledTextCtrl_DeleteBackNotLine 3240
-#define wxStyledTextCtrl_HomeDisplay 3241
-#define wxStyledTextCtrl_HomeDisplayExtend 3242
-#define wxStyledTextCtrl_LineEndDisplay 3243
-#define wxStyledTextCtrl_LineEndDisplayExtend 3244
-#define wxStyledTextCtrl_HomeWrapExtend 3245
-#define wxStyledTextCtrl_LineEndWrap 3246
-#define wxStyledTextCtrl_LineEndWrapExtend 3247
-#define wxStyledTextCtrl_VCHomeWrap 3248
-#define wxStyledTextCtrl_VCHomeWrapExtend 3249
-#define wxStyledTextCtrl_LineCopy 3250
-#define wxStyledTextCtrl_MoveCaretInsideView 3251
-#define wxStyledTextCtrl_LineLength 3252
-#define wxStyledTextCtrl_BraceHighlight 3253
-#define wxStyledTextCtrl_BraceBadLight 3254
-#define wxStyledTextCtrl_BraceMatch 3255
-#define wxStyledTextCtrl_GetViewEOL 3256
-#define wxStyledTextCtrl_SetViewEOL 3257
-#define wxStyledTextCtrl_SetModEventMask 3258
-#define wxStyledTextCtrl_GetEdgeColumn 3259
-#define wxStyledTextCtrl_SetEdgeColumn 3260
-#define wxStyledTextCtrl_GetEdgeMode 3261
-#define wxStyledTextCtrl_GetEdgeColour 3262
-#define wxStyledTextCtrl_SetEdgeColour 3263
-#define wxStyledTextCtrl_SearchAnchor 3264
-#define wxStyledTextCtrl_SearchNext 3265
-#define wxStyledTextCtrl_SearchPrev 3266
-#define wxStyledTextCtrl_LinesOnScreen 3267
-#define wxStyledTextCtrl_UsePopUp 3268
-#define wxStyledTextCtrl_SelectionIsRectangle 3269
-#define wxStyledTextCtrl_SetZoom 3270
-#define wxStyledTextCtrl_GetZoom 3271
-#define wxStyledTextCtrl_GetModEventMask 3272
-#define wxStyledTextCtrl_SetSTCFocus 3273
-#define wxStyledTextCtrl_GetSTCFocus 3274
-#define wxStyledTextCtrl_SetStatus 3275
-#define wxStyledTextCtrl_GetStatus 3276
-#define wxStyledTextCtrl_SetMouseDownCaptures 3277
-#define wxStyledTextCtrl_GetMouseDownCaptures 3278
-#define wxStyledTextCtrl_SetSTCCursor 3279
-#define wxStyledTextCtrl_GetSTCCursor 3280
-#define wxStyledTextCtrl_SetControlCharSymbol 3281
-#define wxStyledTextCtrl_GetControlCharSymbol 3282
-#define wxStyledTextCtrl_WordPartLeft 3283
-#define wxStyledTextCtrl_WordPartLeftExtend 3284
-#define wxStyledTextCtrl_WordPartRight 3285
-#define wxStyledTextCtrl_WordPartRightExtend 3286
-#define wxStyledTextCtrl_SetVisiblePolicy 3287
-#define wxStyledTextCtrl_DelLineLeft 3288
-#define wxStyledTextCtrl_DelLineRight 3289
-#define wxStyledTextCtrl_GetXOffset 3290
-#define wxStyledTextCtrl_ChooseCaretX 3291
-#define wxStyledTextCtrl_SetXCaretPolicy 3292
-#define wxStyledTextCtrl_SetYCaretPolicy 3293
-#define wxStyledTextCtrl_GetPrintWrapMode 3294
-#define wxStyledTextCtrl_SetHotspotActiveForeground 3295
-#define wxStyledTextCtrl_SetHotspotActiveBackground 3296
-#define wxStyledTextCtrl_SetHotspotActiveUnderline 3297
-#define wxStyledTextCtrl_SetHotspotSingleLine 3298
-#define wxStyledTextCtrl_ParaDownExtend 3299
-#define wxStyledTextCtrl_ParaUp 3300
-#define wxStyledTextCtrl_ParaUpExtend 3301
-#define wxStyledTextCtrl_PositionBefore 3302
-#define wxStyledTextCtrl_PositionAfter 3303
-#define wxStyledTextCtrl_CopyRange 3304
-#define wxStyledTextCtrl_CopyText 3305
-#define wxStyledTextCtrl_SetSelectionMode 3306
-#define wxStyledTextCtrl_GetSelectionMode 3307
-#define wxStyledTextCtrl_LineDownRectExtend 3308
-#define wxStyledTextCtrl_LineUpRectExtend 3309
-#define wxStyledTextCtrl_CharLeftRectExtend 3310
-#define wxStyledTextCtrl_CharRightRectExtend 3311
-#define wxStyledTextCtrl_HomeRectExtend 3312
-#define wxStyledTextCtrl_VCHomeRectExtend 3313
-#define wxStyledTextCtrl_LineEndRectExtend 3314
-#define wxStyledTextCtrl_PageUpRectExtend 3315
-#define wxStyledTextCtrl_PageDownRectExtend 3316
-#define wxStyledTextCtrl_StutteredPageUp 3317
-#define wxStyledTextCtrl_StutteredPageUpExtend 3318
-#define wxStyledTextCtrl_StutteredPageDown 3319
-#define wxStyledTextCtrl_StutteredPageDownExtend 3320
-#define wxStyledTextCtrl_WordLeftEnd 3321
-#define wxStyledTextCtrl_WordLeftEndExtend 3322
-#define wxStyledTextCtrl_WordRightEnd 3323
-#define wxStyledTextCtrl_WordRightEndExtend 3324
-#define wxStyledTextCtrl_SetWhitespaceChars 3325
-#define wxStyledTextCtrl_SetCharsDefault 3326
-#define wxStyledTextCtrl_AutoCompGetCurrent 3327
-#define wxStyledTextCtrl_Allocate 3328
-#define wxStyledTextCtrl_FindColumn 3329
-#define wxStyledTextCtrl_GetCaretSticky 3330
-#define wxStyledTextCtrl_SetCaretSticky 3331
-#define wxStyledTextCtrl_ToggleCaretSticky 3332
-#define wxStyledTextCtrl_SetPasteConvertEndings 3333
-#define wxStyledTextCtrl_GetPasteConvertEndings 3334
-#define wxStyledTextCtrl_SelectionDuplicate 3335
-#define wxStyledTextCtrl_SetCaretLineBackAlpha 3336
-#define wxStyledTextCtrl_GetCaretLineBackAlpha 3337
-#define wxStyledTextCtrl_StartRecord 3338
-#define wxStyledTextCtrl_StopRecord 3339
-#define wxStyledTextCtrl_SetLexer 3340
-#define wxStyledTextCtrl_GetLexer 3341
-#define wxStyledTextCtrl_Colourise 3342
-#define wxStyledTextCtrl_SetProperty 3343
-#define wxStyledTextCtrl_SetKeyWords 3344
-#define wxStyledTextCtrl_SetLexerLanguage 3345
-#define wxStyledTextCtrl_GetProperty 3346
-#define wxStyledTextCtrl_GetStyleBitsNeeded 3347
-#define wxStyledTextCtrl_GetCurrentLine 3348
-#define wxStyledTextCtrl_StyleSetSpec 3349
-#define wxStyledTextCtrl_StyleSetFont 3350
-#define wxStyledTextCtrl_StyleSetFontAttr 3351
-#define wxStyledTextCtrl_StyleSetCharacterSet 3352
-#define wxStyledTextCtrl_StyleSetFontEncoding 3353
-#define wxStyledTextCtrl_CmdKeyExecute 3354
-#define wxStyledTextCtrl_SetMargins 3355
-#define wxStyledTextCtrl_GetSelection 3356
-#define wxStyledTextCtrl_PointFromPosition 3357
-#define wxStyledTextCtrl_ScrollToLine 3358
-#define wxStyledTextCtrl_ScrollToColumn 3359
-#define wxStyledTextCtrl_SendMsg 3360
-#define wxStyledTextCtrl_SetVScrollBar 3361
-#define wxStyledTextCtrl_SetHScrollBar 3362
-#define wxStyledTextCtrl_GetLastKeydownProcessed 3363
-#define wxStyledTextCtrl_SetLastKeydownProcessed 3364
-#define wxStyledTextCtrl_SaveFile 3365
-#define wxStyledTextCtrl_LoadFile 3366
-#define wxStyledTextCtrl_DoDragOver 3367
-#define wxStyledTextCtrl_DoDropText 3368
-#define wxStyledTextCtrl_GetUseAntiAliasing 3369
-#define wxStyledTextCtrl_AddTextRaw 3370
-#define wxStyledTextCtrl_InsertTextRaw 3371
-#define wxStyledTextCtrl_GetCurLineRaw 3372
-#define wxStyledTextCtrl_GetLineRaw 3373
-#define wxStyledTextCtrl_GetSelectedTextRaw 3374
-#define wxStyledTextCtrl_GetTextRangeRaw 3375
-#define wxStyledTextCtrl_SetTextRaw 3376
-#define wxStyledTextCtrl_GetTextRaw 3377
-#define wxStyledTextCtrl_AppendTextRaw 3378
-#define wxArtProvider_GetBitmap 3379
-#define wxArtProvider_GetIcon 3380
-#define wxTreeEvent_GetKeyCode 3381
-#define wxTreeEvent_GetItem 3382
-#define wxTreeEvent_GetKeyEvent 3383
-#define wxTreeEvent_GetLabel 3384
-#define wxTreeEvent_GetOldItem 3385
-#define wxTreeEvent_GetPoint 3386
-#define wxTreeEvent_IsEditCancelled 3387
-#define wxTreeEvent_SetToolTip 3388
-#define wxNotebookEvent_GetOldSelection 3389
-#define wxNotebookEvent_GetSelection 3390
-#define wxNotebookEvent_SetOldSelection 3391
-#define wxNotebookEvent_SetSelection 3392
-#define wxFileDataObject_new 3393
-#define wxFileDataObject_AddFile 3394
-#define wxFileDataObject_GetFilenames 3395
-#define wxFileDataObject_destroy 3396
-#define wxTextDataObject_new 3397
-#define wxTextDataObject_GetTextLength 3398
-#define wxTextDataObject_GetText 3399
-#define wxTextDataObject_SetText 3400
-#define wxTextDataObject_destroy 3401
-#define wxBitmapDataObject_new_1_1 3402
-#define wxBitmapDataObject_new_1_0 3403
-#define wxBitmapDataObject_GetBitmap 3404
-#define wxBitmapDataObject_SetBitmap 3405
-#define wxBitmapDataObject_destroy 3406
-#define wxClipboard_new 3408
-#define wxClipboard_destruct 3409
-#define wxClipboard_AddData 3410
-#define wxClipboard_Clear 3411
-#define wxClipboard_Close 3412
-#define wxClipboard_Flush 3413
-#define wxClipboard_GetData 3414
-#define wxClipboard_IsOpened 3415
-#define wxClipboard_Open 3416
-#define wxClipboard_SetData 3417
-#define wxClipboard_UsePrimarySelection 3419
-#define wxClipboard_IsSupported 3420
-#define wxClipboard_Get 3421
-#define wxSpinEvent_GetPosition 3422
-#define wxSpinEvent_SetPosition 3423
-#define wxSplitterWindow_new_0 3424
-#define wxSplitterWindow_new_2 3425
-#define wxSplitterWindow_destruct 3426
-#define wxSplitterWindow_Create 3427
-#define wxSplitterWindow_GetMinimumPaneSize 3428
-#define wxSplitterWindow_GetSashGravity 3429
-#define wxSplitterWindow_GetSashPosition 3430
-#define wxSplitterWindow_GetSplitMode 3431
-#define wxSplitterWindow_GetWindow1 3432
-#define wxSplitterWindow_GetWindow2 3433
-#define wxSplitterWindow_Initialize 3434
-#define wxSplitterWindow_IsSplit 3435
-#define wxSplitterWindow_ReplaceWindow 3436
-#define wxSplitterWindow_SetSashGravity 3437
-#define wxSplitterWindow_SetSashPosition 3438
-#define wxSplitterWindow_SetSashSize 3439
-#define wxSplitterWindow_SetMinimumPaneSize 3440
-#define wxSplitterWindow_SetSplitMode 3441
-#define wxSplitterWindow_SplitHorizontally 3442
-#define wxSplitterWindow_SplitVertically 3443
-#define wxSplitterWindow_Unsplit 3444
-#define wxSplitterWindow_UpdateSize 3445
-#define wxSplitterEvent_GetSashPosition 3446
-#define wxSplitterEvent_GetX 3447
-#define wxSplitterEvent_GetY 3448
-#define wxSplitterEvent_GetWindowBeingRemoved 3449
-#define wxSplitterEvent_SetSashPosition 3450
-#define wxHtmlWindow_new_0 3451
-#define wxHtmlWindow_new_2 3452
-#define wxHtmlWindow_AppendToPage 3453
-#define wxHtmlWindow_GetOpenedAnchor 3454
-#define wxHtmlWindow_GetOpenedPage 3455
-#define wxHtmlWindow_GetOpenedPageTitle 3456
-#define wxHtmlWindow_GetRelatedFrame 3457
-#define wxHtmlWindow_HistoryBack 3458
-#define wxHtmlWindow_HistoryCanBack 3459
-#define wxHtmlWindow_HistoryCanForward 3460
-#define wxHtmlWindow_HistoryClear 3461
-#define wxHtmlWindow_HistoryForward 3462
-#define wxHtmlWindow_LoadFile 3463
-#define wxHtmlWindow_LoadPage 3464
-#define wxHtmlWindow_SelectAll 3465
-#define wxHtmlWindow_SelectionToText 3466
-#define wxHtmlWindow_SelectLine 3467
-#define wxHtmlWindow_SelectWord 3468
-#define wxHtmlWindow_SetBorders 3469
-#define wxHtmlWindow_SetFonts 3470
-#define wxHtmlWindow_SetPage 3471
-#define wxHtmlWindow_SetRelatedFrame 3472
-#define wxHtmlWindow_SetRelatedStatusBar 3473
-#define wxHtmlWindow_ToText 3474
-#define wxHtmlWindow_destroy 3475
-#define wxHtmlLinkEvent_GetLinkInfo 3476
-#define wxAuiNotebookEvent_SetSelection 3477
-#define wxAuiNotebookEvent_GetSelection 3478
-#define wxAuiNotebookEvent_SetOldSelection 3479
-#define wxAuiNotebookEvent_GetOldSelection 3480
-#define wxAuiNotebookEvent_SetDragSource 3481
-#define wxAuiNotebookEvent_GetDragSource 3482
-#define wxAuiManagerEvent_SetManager 3483
-#define wxAuiManagerEvent_GetManager 3484
-#define wxAuiManagerEvent_SetPane 3485
-#define wxAuiManagerEvent_GetPane 3486
-#define wxAuiManagerEvent_SetButton 3487
-#define wxAuiManagerEvent_GetButton 3488
-#define wxAuiManagerEvent_SetDC 3489
-#define wxAuiManagerEvent_GetDC 3490
-#define wxAuiManagerEvent_Veto 3491
-#define wxAuiManagerEvent_GetVeto 3492
-#define wxAuiManagerEvent_SetCanVeto 3493
-#define wxAuiManagerEvent_CanVeto 3494
-#define wxLogNull_new 3495
-#define wxLogNull_destroy 3496
+#define wxControlWithItems_getClientData 885
+#define wxControlWithItems_setClientData 886
+#define wxControlWithItems_GetCount 887
+#define wxControlWithItems_GetSelection 888
+#define wxControlWithItems_GetString 889
+#define wxControlWithItems_GetStringSelection 890
+#define wxControlWithItems_Insert_2 891
+#define wxControlWithItems_Insert_3 892
+#define wxControlWithItems_IsEmpty 893
+#define wxControlWithItems_Select 894
+#define wxControlWithItems_SetSelection 895
+#define wxControlWithItems_SetString 896
+#define wxControlWithItems_SetStringSelection 897
+#define wxMenu_new_2 900
+#define wxMenu_new_1 901
+#define wxMenu_destruct 903
+#define wxMenu_Append_3 904
+#define wxMenu_Append_1 905
+#define wxMenu_Append_4_0 906
+#define wxMenu_Append_4_1 907
+#define wxMenu_AppendCheckItem 908
+#define wxMenu_AppendRadioItem 909
+#define wxMenu_AppendSeparator 910
+#define wxMenu_Break 911
+#define wxMenu_Check 912
+#define wxMenu_Delete_1_0 913
+#define wxMenu_Delete_1_1 914
+#define wxMenu_Destroy_1_0 915
+#define wxMenu_Destroy_1_1 916
+#define wxMenu_Enable 917
+#define wxMenu_FindItem_1 918
+#define wxMenu_FindItem_2 919
+#define wxMenu_FindItemByPosition 920
+#define wxMenu_GetHelpString 921
+#define wxMenu_GetLabel 922
+#define wxMenu_GetMenuItemCount 923
+#define wxMenu_GetMenuItems 924
+#define wxMenu_GetTitle 926
+#define wxMenu_Insert_2 927
+#define wxMenu_Insert_3 928
+#define wxMenu_Insert_5_1 929
+#define wxMenu_Insert_5_0 930
+#define wxMenu_InsertCheckItem 931
+#define wxMenu_InsertRadioItem 932
+#define wxMenu_InsertSeparator 933
+#define wxMenu_IsChecked 934
+#define wxMenu_IsEnabled 935
+#define wxMenu_Prepend_1 936
+#define wxMenu_Prepend_2 937
+#define wxMenu_Prepend_4_1 938
+#define wxMenu_Prepend_4_0 939
+#define wxMenu_PrependCheckItem 940
+#define wxMenu_PrependRadioItem 941
+#define wxMenu_PrependSeparator 942
+#define wxMenu_Remove_1_0 943
+#define wxMenu_Remove_1_1 944
+#define wxMenu_SetHelpString 945
+#define wxMenu_SetLabel 946
+#define wxMenu_SetTitle 947
+#define wxMenuItem_new 948
+#define wxMenuItem_destruct 950
+#define wxMenuItem_Check 951
+#define wxMenuItem_Enable 952
+#define wxMenuItem_GetBitmap 953
+#define wxMenuItem_GetHelp 954
+#define wxMenuItem_GetId 955
+#define wxMenuItem_GetKind 956
+#define wxMenuItem_GetLabel 957
+#define wxMenuItem_GetLabelFromText 958
+#define wxMenuItem_GetMenu 959
+#define wxMenuItem_GetText 960
+#define wxMenuItem_GetSubMenu 961
+#define wxMenuItem_IsCheckable 962
+#define wxMenuItem_IsChecked 963
+#define wxMenuItem_IsEnabled 964
+#define wxMenuItem_IsSeparator 965
+#define wxMenuItem_IsSubMenu 966
+#define wxMenuItem_SetBitmap 967
+#define wxMenuItem_SetHelp 968
+#define wxMenuItem_SetMenu 969
+#define wxMenuItem_SetSubMenu 970
+#define wxMenuItem_SetText 971
+#define wxToolBar_AddControl 972
+#define wxToolBar_AddSeparator 973
+#define wxToolBar_AddTool_5 974
+#define wxToolBar_AddTool_4_0 975
+#define wxToolBar_AddTool_1 976
+#define wxToolBar_AddTool_4_1 977
+#define wxToolBar_AddTool_3 978
+#define wxToolBar_AddTool_6 979
+#define wxToolBar_AddCheckTool 980
+#define wxToolBar_AddRadioTool 981
+#define wxToolBar_DeleteTool 982
+#define wxToolBar_DeleteToolByPos 983
+#define wxToolBar_EnableTool 984
+#define wxToolBar_FindById 985
+#define wxToolBar_FindControl 986
+#define wxToolBar_FindToolForPosition 987
+#define wxToolBar_GetToolSize 988
+#define wxToolBar_GetToolBitmapSize 989
+#define wxToolBar_GetMargins 990
+#define wxToolBar_GetToolEnabled 991
+#define wxToolBar_GetToolLongHelp 992
+#define wxToolBar_GetToolPacking 993
+#define wxToolBar_GetToolPos 994
+#define wxToolBar_GetToolSeparation 995
+#define wxToolBar_GetToolShortHelp 996
+#define wxToolBar_GetToolState 997
+#define wxToolBar_InsertControl 998
+#define wxToolBar_InsertSeparator 999
+#define wxToolBar_InsertTool_5 1000
+#define wxToolBar_InsertTool_2 1001
+#define wxToolBar_InsertTool_4 1002
+#define wxToolBar_Realize 1003
+#define wxToolBar_RemoveTool 1004
+#define wxToolBar_SetMargins 1005
+#define wxToolBar_SetToolBitmapSize 1006
+#define wxToolBar_SetToolLongHelp 1007
+#define wxToolBar_SetToolPacking 1008
+#define wxToolBar_SetToolShortHelp 1009
+#define wxToolBar_SetToolSeparation 1010
+#define wxToolBar_ToggleTool 1011
+#define wxStatusBar_new_0 1013
+#define wxStatusBar_new_2 1014
+#define wxStatusBar_destruct 1016
+#define wxStatusBar_Create 1017
+#define wxStatusBar_GetFieldRect 1018
+#define wxStatusBar_GetFieldsCount 1019
+#define wxStatusBar_GetStatusText 1020
+#define wxStatusBar_PopStatusText 1021
+#define wxStatusBar_PushStatusText 1022
+#define wxStatusBar_SetFieldsCount 1023
+#define wxStatusBar_SetMinHeight 1024
+#define wxStatusBar_SetStatusText 1025
+#define wxStatusBar_SetStatusWidths 1026
+#define wxStatusBar_SetStatusStyles 1027
+#define wxBitmap_new_0 1028
+#define wxBitmap_new_3 1029
+#define wxBitmap_new_4 1030
+#define wxBitmap_new_2_0 1031
+#define wxBitmap_new_2_1 1032
+#define wxBitmap_destruct 1033
+#define wxBitmap_ConvertToImage 1034
+#define wxBitmap_CopyFromIcon 1035
+#define wxBitmap_Create 1036
+#define wxBitmap_GetDepth 1037
+#define wxBitmap_GetHeight 1038
+#define wxBitmap_GetPalette 1039
+#define wxBitmap_GetMask 1040
+#define wxBitmap_GetWidth 1041
+#define wxBitmap_GetSubBitmap 1042
+#define wxBitmap_LoadFile 1043
+#define wxBitmap_Ok 1044
+#define wxBitmap_SaveFile 1045
+#define wxBitmap_SetDepth 1046
+#define wxBitmap_SetHeight 1047
+#define wxBitmap_SetMask 1048
+#define wxBitmap_SetPalette 1049
+#define wxBitmap_SetWidth 1050
+#define wxIcon_new_0 1051
+#define wxIcon_new_2 1052
+#define wxIcon_new_1 1053
+#define wxIcon_CopyFromBitmap 1054
+#define wxIcon_destroy 1055
+#define wxIconBundle_new_0 1056
+#define wxIconBundle_new_2 1057
+#define wxIconBundle_new_1_0 1058
+#define wxIconBundle_new_1_1 1059
+#define wxIconBundle_destruct 1060
+#define wxIconBundle_AddIcon_2 1061
+#define wxIconBundle_AddIcon_1 1062
+#define wxIconBundle_GetIcon_1_1 1063
+#define wxIconBundle_GetIcon_1_0 1064
+#define wxCursor_new_0 1065
+#define wxCursor_new_1_0 1066
+#define wxCursor_new_1_1 1067
+#define wxCursor_new_4 1068
+#define wxCursor_destruct 1069
+#define wxCursor_Ok 1070
+#define wxMask_new_0 1071
+#define wxMask_new_2_1 1072
+#define wxMask_new_2_0 1073
+#define wxMask_new_1 1074
+#define wxMask_destruct 1075
+#define wxMask_Create_2_1 1076
+#define wxMask_Create_2_0 1077
+#define wxMask_Create_1 1078
+#define wxImage_new_0 1079
+#define wxImage_new_3_0 1080
+#define wxImage_new_4 1081
+#define wxImage_new_5 1082
+#define wxImage_new_2 1083
+#define wxImage_new_3_1 1084
+#define wxImage_Blur 1085
+#define wxImage_BlurHorizontal 1086
+#define wxImage_BlurVertical 1087
+#define wxImage_ConvertAlphaToMask 1088
+#define wxImage_ConvertToGreyscale 1089
+#define wxImage_ConvertToMono 1090
+#define wxImage_Copy 1091
+#define wxImage_Create_3 1092
+#define wxImage_Create_4 1093
+#define wxImage_Create_5 1094
+#define wxImage_Destroy 1095
+#define wxImage_FindFirstUnusedColour 1096
+#define wxImage_GetImageExtWildcard 1097
+#define wxImage_GetAlpha_2 1098
+#define wxImage_GetAlpha_0 1099
+#define wxImage_GetBlue 1100
+#define wxImage_GetData 1101
+#define wxImage_GetGreen 1102
+#define wxImage_GetImageCount 1103
+#define wxImage_GetHeight 1104
+#define wxImage_GetMaskBlue 1105
+#define wxImage_GetMaskGreen 1106
+#define wxImage_GetMaskRed 1107
+#define wxImage_GetOrFindMaskColour 1108
+#define wxImage_GetPalette 1109
+#define wxImage_GetRed 1110
+#define wxImage_GetSubImage 1111
+#define wxImage_GetWidth 1112
+#define wxImage_HasAlpha 1113
+#define wxImage_HasMask 1114
+#define wxImage_GetOption 1115
+#define wxImage_GetOptionInt 1116
+#define wxImage_HasOption 1117
+#define wxImage_InitAlpha 1118
+#define wxImage_InitStandardHandlers 1119
+#define wxImage_IsTransparent 1120
+#define wxImage_LoadFile_2 1121
+#define wxImage_LoadFile_3 1122
+#define wxImage_Ok 1123
+#define wxImage_RemoveHandler 1124
+#define wxImage_Mirror 1125
+#define wxImage_Replace 1126
+#define wxImage_Rescale 1127
+#define wxImage_Resize 1128
+#define wxImage_Rotate 1129
+#define wxImage_RotateHue 1130
+#define wxImage_Rotate90 1131
+#define wxImage_SaveFile_1 1132
+#define wxImage_SaveFile_2_0 1133
+#define wxImage_SaveFile_2_1 1134
+#define wxImage_Scale 1135
+#define wxImage_Size 1136
+#define wxImage_SetAlpha_3 1137
+#define wxImage_SetAlpha_2 1138
+#define wxImage_SetData_2 1139
+#define wxImage_SetData_4 1140
+#define wxImage_SetMask 1141
+#define wxImage_SetMaskColour 1142
+#define wxImage_SetMaskFromImage 1143
+#define wxImage_SetOption_2_1 1144
+#define wxImage_SetOption_2_0 1145
+#define wxImage_SetPalette 1146
+#define wxImage_SetRGB_5 1147
+#define wxImage_SetRGB_4 1148
+#define wxImage_destroy 1149
+#define wxBrush_new_0 1150
+#define wxBrush_new_2 1151
+#define wxBrush_new_1 1152
+#define wxBrush_destruct 1154
+#define wxBrush_GetColour 1155
+#define wxBrush_GetStipple 1156
+#define wxBrush_GetStyle 1157
+#define wxBrush_IsHatch 1158
+#define wxBrush_IsOk 1159
+#define wxBrush_SetColour_1 1160
+#define wxBrush_SetColour_3 1161
+#define wxBrush_SetStipple 1162
+#define wxBrush_SetStyle 1163
+#define wxPen_new_0 1164
+#define wxPen_new_2 1165
+#define wxPen_destruct 1166
+#define wxPen_GetCap 1167
+#define wxPen_GetColour 1168
+#define wxPen_GetJoin 1169
+#define wxPen_GetStyle 1170
+#define wxPen_GetWidth 1171
+#define wxPen_IsOk 1172
+#define wxPen_SetCap 1173
+#define wxPen_SetColour_1 1174
+#define wxPen_SetColour_3 1175
+#define wxPen_SetJoin 1176
+#define wxPen_SetStyle 1177
+#define wxPen_SetWidth 1178
+#define wxRegion_new_0 1179
+#define wxRegion_new_4 1180
+#define wxRegion_new_2 1181
+#define wxRegion_new_1_1 1182
+#define wxRegion_new_1_0 1184
+#define wxRegion_destruct 1186
+#define wxRegion_Clear 1187
+#define wxRegion_Contains_2 1188
+#define wxRegion_Contains_1_0 1189
+#define wxRegion_Contains_4 1190
+#define wxRegion_Contains_1_1 1191
+#define wxRegion_ConvertToBitmap 1192
+#define wxRegion_GetBox 1193
+#define wxRegion_Intersect_4 1194
+#define wxRegion_Intersect_1_1 1195
+#define wxRegion_Intersect_1_0 1196
+#define wxRegion_IsEmpty 1197
+#define wxRegion_Subtract_4 1198
+#define wxRegion_Subtract_1_1 1199
+#define wxRegion_Subtract_1_0 1200
+#define wxRegion_Offset_2 1201
+#define wxRegion_Offset_1 1202
+#define wxRegion_Union_4 1203
+#define wxRegion_Union_1_2 1204
+#define wxRegion_Union_1_1 1205
+#define wxRegion_Union_1_0 1206
+#define wxRegion_Union_3 1207
+#define wxRegion_Xor_4 1208
+#define wxRegion_Xor_1_1 1209
+#define wxRegion_Xor_1_0 1210
+#define wxAcceleratorTable_new_0 1211
+#define wxAcceleratorTable_new_2 1212
+#define wxAcceleratorTable_destruct 1213
+#define wxAcceleratorTable_Ok 1214
+#define wxAcceleratorEntry_new_1_0 1215
+#define wxAcceleratorEntry_new_1_1 1216
+#define wxAcceleratorEntry_GetCommand 1217
+#define wxAcceleratorEntry_GetFlags 1218
+#define wxAcceleratorEntry_GetKeyCode 1219
+#define wxAcceleratorEntry_Set 1220
+#define wxAcceleratorEntry_destroy 1221
+#define wxCaret_new_3 1226
+#define wxCaret_new_2 1227
+#define wxCaret_destruct 1229
+#define wxCaret_Create_3 1230
+#define wxCaret_Create_2 1231
+#define wxCaret_GetBlinkTime 1232
+#define wxCaret_GetPosition 1234
+#define wxCaret_GetSize 1236
+#define wxCaret_GetWindow 1237
+#define wxCaret_Hide 1238
+#define wxCaret_IsOk 1239
+#define wxCaret_IsVisible 1240
+#define wxCaret_Move_2 1241
+#define wxCaret_Move_1 1242
+#define wxCaret_SetBlinkTime 1243
+#define wxCaret_SetSize_2 1244
+#define wxCaret_SetSize_1 1245
+#define wxCaret_Show 1246
+#define wxSizer_Add_2_1 1247
+#define wxSizer_Add_2_0 1248
+#define wxSizer_Add_3 1249
+#define wxSizer_Add_2_3 1250
+#define wxSizer_Add_2_2 1251
+#define wxSizer_AddSpacer 1252
+#define wxSizer_AddStretchSpacer 1253
+#define wxSizer_CalcMin 1254
+#define wxSizer_Clear 1255
+#define wxSizer_Detach_1_2 1256
+#define wxSizer_Detach_1_1 1257
+#define wxSizer_Detach_1_0 1258
+#define wxSizer_Fit 1259
+#define wxSizer_FitInside 1260
+#define wxSizer_GetChildren 1261
+#define wxSizer_GetItem_2_1 1262
+#define wxSizer_GetItem_2_0 1263
+#define wxSizer_GetItem_1 1264
+#define wxSizer_GetSize 1265
+#define wxSizer_GetPosition 1266
+#define wxSizer_GetMinSize 1267
+#define wxSizer_Hide_2_0 1268
+#define wxSizer_Hide_2_1 1269
+#define wxSizer_Hide_1 1270
+#define wxSizer_Insert_3_1 1271
+#define wxSizer_Insert_3_0 1272
+#define wxSizer_Insert_4 1273
+#define wxSizer_Insert_3_3 1274
+#define wxSizer_Insert_3_2 1275
+#define wxSizer_Insert_2 1276
+#define wxSizer_InsertSpacer 1277
+#define wxSizer_InsertStretchSpacer 1278
+#define wxSizer_IsShown_1_2 1279
+#define wxSizer_IsShown_1_1 1280
+#define wxSizer_IsShown_1_0 1281
+#define wxSizer_Layout 1282
+#define wxSizer_Prepend_2_1 1283
+#define wxSizer_Prepend_2_0 1284
+#define wxSizer_Prepend_3 1285
+#define wxSizer_Prepend_2_3 1286
+#define wxSizer_Prepend_2_2 1287
+#define wxSizer_Prepend_1 1288
+#define wxSizer_PrependSpacer 1289
+#define wxSizer_PrependStretchSpacer 1290
+#define wxSizer_RecalcSizes 1291
+#define wxSizer_Remove_1_1 1292
+#define wxSizer_Remove_1_0 1293
+#define wxSizer_Replace_3_1 1294
+#define wxSizer_Replace_3_0 1295
+#define wxSizer_Replace_2 1296
+#define wxSizer_SetDimension 1297
+#define wxSizer_SetMinSize_2 1298
+#define wxSizer_SetMinSize_1 1299
+#define wxSizer_SetItemMinSize_3_2 1300
+#define wxSizer_SetItemMinSize_2_2 1301
+#define wxSizer_SetItemMinSize_3_1 1302
+#define wxSizer_SetItemMinSize_2_1 1303
+#define wxSizer_SetItemMinSize_3_0 1304
+#define wxSizer_SetItemMinSize_2_0 1305
+#define wxSizer_SetSizeHints 1306
+#define wxSizer_SetVirtualSizeHints 1307
+#define wxSizer_Show_2_2 1308
+#define wxSizer_Show_2_1 1309
+#define wxSizer_Show_2_0 1310
+#define wxSizer_Show_1 1311
+#define wxSizerFlags_new 1312
+#define wxSizerFlags_Align 1313
+#define wxSizerFlags_Border_2 1314
+#define wxSizerFlags_Border_1 1315
+#define wxSizerFlags_Center 1316
+#define wxSizerFlags_Centre 1317
+#define wxSizerFlags_Expand 1318
+#define wxSizerFlags_Left 1319
+#define wxSizerFlags_Proportion 1320
+#define wxSizerFlags_Right 1321
+#define wxSizerFlags_destroy 1322
+#define wxSizerItem_new_5_1 1323
+#define wxSizerItem_new_2_1 1324
+#define wxSizerItem_new_5_0 1325
+#define wxSizerItem_new_2_0 1326
+#define wxSizerItem_new_6 1327
+#define wxSizerItem_new_3 1328
+#define wxSizerItem_new_0 1329
+#define wxSizerItem_destruct 1330
+#define wxSizerItem_CalcMin 1331
+#define wxSizerItem_DeleteWindows 1332
+#define wxSizerItem_DetachSizer 1333
+#define wxSizerItem_GetBorder 1334
+#define wxSizerItem_GetFlag 1335
+#define wxSizerItem_GetMinSize 1336
+#define wxSizerItem_GetPosition 1337
+#define wxSizerItem_GetProportion 1338
+#define wxSizerItem_GetRatio 1339
+#define wxSizerItem_GetRect 1340
+#define wxSizerItem_GetSize 1341
+#define wxSizerItem_GetSizer 1342
+#define wxSizerItem_GetSpacer 1343
+#define wxSizerItem_GetUserData 1344
+#define wxSizerItem_GetWindow 1345
+#define wxSizerItem_IsSizer 1346
+#define wxSizerItem_IsShown 1347
+#define wxSizerItem_IsSpacer 1348
+#define wxSizerItem_IsWindow 1349
+#define wxSizerItem_SetBorder 1350
+#define wxSizerItem_SetDimension 1351
+#define wxSizerItem_SetFlag 1352
+#define wxSizerItem_SetInitSize 1353
+#define wxSizerItem_SetMinSize_1 1354
+#define wxSizerItem_SetMinSize_2 1355
+#define wxSizerItem_SetProportion 1356
+#define wxSizerItem_SetRatio_2 1357
+#define wxSizerItem_SetRatio_1_1 1358
+#define wxSizerItem_SetRatio_1_0 1359
+#define wxSizerItem_SetSizer 1360
+#define wxSizerItem_SetSpacer_1 1361
+#define wxSizerItem_SetSpacer_2 1362
+#define wxSizerItem_SetWindow 1363
+#define wxSizerItem_Show 1364
+#define wxBoxSizer_new 1365
+#define wxBoxSizer_GetOrientation 1366
+#define wxBoxSizer_destroy 1367
+#define wxStaticBoxSizer_new_2 1368
+#define wxStaticBoxSizer_new_3 1369
+#define wxStaticBoxSizer_GetStaticBox 1370
+#define wxStaticBoxSizer_destroy 1371
+#define wxGridSizer_new_4 1372
+#define wxGridSizer_new_2 1373
+#define wxGridSizer_GetCols 1374
+#define wxGridSizer_GetHGap 1375
+#define wxGridSizer_GetRows 1376
+#define wxGridSizer_GetVGap 1377
+#define wxGridSizer_SetCols 1378
+#define wxGridSizer_SetHGap 1379
+#define wxGridSizer_SetRows 1380
+#define wxGridSizer_SetVGap 1381
+#define wxGridSizer_destroy 1382
+#define wxFlexGridSizer_new_4 1383
+#define wxFlexGridSizer_new_2 1384
+#define wxFlexGridSizer_AddGrowableCol 1385
+#define wxFlexGridSizer_AddGrowableRow 1386
+#define wxFlexGridSizer_GetFlexibleDirection 1387
+#define wxFlexGridSizer_GetNonFlexibleGrowMode 1388
+#define wxFlexGridSizer_RemoveGrowableCol 1389
+#define wxFlexGridSizer_RemoveGrowableRow 1390
+#define wxFlexGridSizer_SetFlexibleDirection 1391
+#define wxFlexGridSizer_SetNonFlexibleGrowMode 1392
+#define wxFlexGridSizer_destroy 1393
+#define wxGridBagSizer_new 1394
+#define wxGridBagSizer_Add_3_2 1395
+#define wxGridBagSizer_Add_3_1 1396
+#define wxGridBagSizer_Add_4 1397
+#define wxGridBagSizer_Add_1_0 1398
+#define wxGridBagSizer_Add_2_1 1399
+#define wxGridBagSizer_Add_2_0 1400
+#define wxGridBagSizer_Add_3_0 1401
+#define wxGridBagSizer_Add_1_1 1402
+#define wxGridBagSizer_CalcMin 1403
+#define wxGridBagSizer_CheckForIntersection_2 1404
+#define wxGridBagSizer_CheckForIntersection_3 1405
+#define wxGridBagSizer_FindItem_1_1 1406
+#define wxGridBagSizer_FindItem_1_0 1407
+#define wxGridBagSizer_FindItemAtPoint 1408
+#define wxGridBagSizer_FindItemAtPosition 1409
+#define wxGridBagSizer_FindItemWithData 1410
+#define wxGridBagSizer_GetCellSize 1411
+#define wxGridBagSizer_GetEmptyCellSize 1412
+#define wxGridBagSizer_GetItemPosition_1_2 1413
+#define wxGridBagSizer_GetItemPosition_1_1 1414
+#define wxGridBagSizer_GetItemPosition_1_0 1415
+#define wxGridBagSizer_GetItemSpan_1_2 1416
+#define wxGridBagSizer_GetItemSpan_1_1 1417
+#define wxGridBagSizer_GetItemSpan_1_0 1418
+#define wxGridBagSizer_SetEmptyCellSize 1419
+#define wxGridBagSizer_SetItemPosition_2_2 1420
+#define wxGridBagSizer_SetItemPosition_2_1 1421
+#define wxGridBagSizer_SetItemPosition_2_0 1422
+#define wxGridBagSizer_SetItemSpan_2_2 1423
+#define wxGridBagSizer_SetItemSpan_2_1 1424
+#define wxGridBagSizer_SetItemSpan_2_0 1425
+#define wxGridBagSizer_destroy 1426
+#define wxStdDialogButtonSizer_new 1427
+#define wxStdDialogButtonSizer_AddButton 1428
+#define wxStdDialogButtonSizer_Realize 1429
+#define wxStdDialogButtonSizer_SetAffirmativeButton 1430
+#define wxStdDialogButtonSizer_SetCancelButton 1431
+#define wxStdDialogButtonSizer_SetNegativeButton 1432
+#define wxStdDialogButtonSizer_destroy 1433
+#define wxFont_new_0 1434
+#define wxFont_new_1 1435
+#define wxFont_new_5 1436
+#define wxFont_destruct 1438
+#define wxFont_IsFixedWidth 1439
+#define wxFont_GetDefaultEncoding 1440
+#define wxFont_GetFaceName 1441
+#define wxFont_GetFamily 1442
+#define wxFont_GetNativeFontInfoDesc 1443
+#define wxFont_GetNativeFontInfoUserDesc 1444
+#define wxFont_GetPointSize 1445
+#define wxFont_GetStyle 1446
+#define wxFont_GetUnderlined 1447
+#define wxFont_GetWeight 1448
+#define wxFont_Ok 1449
+#define wxFont_SetDefaultEncoding 1450
+#define wxFont_SetFaceName 1451
+#define wxFont_SetFamily 1452
+#define wxFont_SetPointSize 1453
+#define wxFont_SetStyle 1454
+#define wxFont_SetUnderlined 1455
+#define wxFont_SetWeight 1456
+#define wxToolTip_Enable 1457
+#define wxToolTip_SetDelay 1458
+#define wxToolTip_new 1459
+#define wxToolTip_SetTip 1460
+#define wxToolTip_GetTip 1461
+#define wxToolTip_GetWindow 1462
+#define wxToolTip_destroy 1463
+#define wxButton_new_3 1465
+#define wxButton_new_0 1466
+#define wxButton_destruct 1467
+#define wxButton_Create 1468
+#define wxButton_GetDefaultSize 1469
+#define wxButton_SetDefault 1470
+#define wxButton_SetLabel 1471
+#define wxBitmapButton_new_4 1473
+#define wxBitmapButton_new_0 1474
+#define wxBitmapButton_Create 1475
+#define wxBitmapButton_GetBitmapDisabled 1476
+#define wxBitmapButton_GetBitmapFocus 1478
+#define wxBitmapButton_GetBitmapLabel 1480
+#define wxBitmapButton_GetBitmapSelected 1482
+#define wxBitmapButton_SetBitmapDisabled 1484
+#define wxBitmapButton_SetBitmapFocus 1485
+#define wxBitmapButton_SetBitmapLabel 1486
+#define wxBitmapButton_SetBitmapSelected 1487
+#define wxBitmapButton_destroy 1488
+#define wxToggleButton_new_0 1489
+#define wxToggleButton_new_4 1490
+#define wxToggleButton_Create 1491
+#define wxToggleButton_GetValue 1492
+#define wxToggleButton_SetValue 1493
+#define wxToggleButton_destroy 1494
+#define wxCalendarCtrl_new_0 1495
+#define wxCalendarCtrl_new_3 1496
+#define wxCalendarCtrl_Create 1497
+#define wxCalendarCtrl_destruct 1498
+#define wxCalendarCtrl_SetDate 1499
+#define wxCalendarCtrl_GetDate 1500
+#define wxCalendarCtrl_EnableYearChange 1501
+#define wxCalendarCtrl_EnableMonthChange 1502
+#define wxCalendarCtrl_EnableHolidayDisplay 1503
+#define wxCalendarCtrl_SetHeaderColours 1504
+#define wxCalendarCtrl_GetHeaderColourFg 1505
+#define wxCalendarCtrl_GetHeaderColourBg 1506
+#define wxCalendarCtrl_SetHighlightColours 1507
+#define wxCalendarCtrl_GetHighlightColourFg 1508
+#define wxCalendarCtrl_GetHighlightColourBg 1509
+#define wxCalendarCtrl_SetHolidayColours 1510
+#define wxCalendarCtrl_GetHolidayColourFg 1511
+#define wxCalendarCtrl_GetHolidayColourBg 1512
+#define wxCalendarCtrl_GetAttr 1513
+#define wxCalendarCtrl_SetAttr 1514
+#define wxCalendarCtrl_SetHoliday 1515
+#define wxCalendarCtrl_ResetAttr 1516
+#define wxCalendarCtrl_HitTest 1517
+#define wxCalendarDateAttr_new_0 1518
+#define wxCalendarDateAttr_new_2_1 1519
+#define wxCalendarDateAttr_new_2_0 1520
+#define wxCalendarDateAttr_SetTextColour 1521
+#define wxCalendarDateAttr_SetBackgroundColour 1522
+#define wxCalendarDateAttr_SetBorderColour 1523
+#define wxCalendarDateAttr_SetFont 1524
+#define wxCalendarDateAttr_SetBorder 1525
+#define wxCalendarDateAttr_SetHoliday 1526
+#define wxCalendarDateAttr_HasTextColour 1527
+#define wxCalendarDateAttr_HasBackgroundColour 1528
+#define wxCalendarDateAttr_HasBorderColour 1529
+#define wxCalendarDateAttr_HasFont 1530
+#define wxCalendarDateAttr_HasBorder 1531
+#define wxCalendarDateAttr_IsHoliday 1532
+#define wxCalendarDateAttr_GetTextColour 1533
+#define wxCalendarDateAttr_GetBackgroundColour 1534
+#define wxCalendarDateAttr_GetBorderColour 1535
+#define wxCalendarDateAttr_GetFont 1536
+#define wxCalendarDateAttr_GetBorder 1537
+#define wxCalendarDateAttr_destroy 1538
+#define wxCheckBox_new_4 1540
+#define wxCheckBox_new_0 1541
+#define wxCheckBox_Create 1542
+#define wxCheckBox_GetValue 1543
+#define wxCheckBox_Get3StateValue 1544
+#define wxCheckBox_Is3rdStateAllowedForUser 1545
+#define wxCheckBox_Is3State 1546
+#define wxCheckBox_IsChecked 1547
+#define wxCheckBox_SetValue 1548
+#define wxCheckBox_Set3StateValue 1549
+#define wxCheckBox_destroy 1550
+#define wxCheckListBox_new_0 1551
+#define wxCheckListBox_new_3 1553
+#define wxCheckListBox_Check 1554
+#define wxCheckListBox_IsChecked 1555
+#define wxCheckListBox_destroy 1556
+#define wxChoice_new_3 1559
+#define wxChoice_new_0 1560
+#define wxChoice_destruct 1562
+#define wxChoice_Create 1564
+#define wxChoice_Delete 1565
+#define wxChoice_GetColumns 1566
+#define wxChoice_SetColumns 1567
+#define wxComboBox_new_0 1568
+#define wxComboBox_new_3 1570
+#define wxComboBox_destruct 1571
+#define wxComboBox_Create 1573
+#define wxComboBox_CanCopy 1574
+#define wxComboBox_CanCut 1575
+#define wxComboBox_CanPaste 1576
+#define wxComboBox_CanRedo 1577
+#define wxComboBox_CanUndo 1578
+#define wxComboBox_Copy 1579
+#define wxComboBox_Cut 1580
+#define wxComboBox_GetInsertionPoint 1581
+#define wxComboBox_GetLastPosition 1582
+#define wxComboBox_GetValue 1583
+#define wxComboBox_Paste 1584
+#define wxComboBox_Redo 1585
+#define wxComboBox_Replace 1586
+#define wxComboBox_Remove 1587
+#define wxComboBox_SetInsertionPoint 1588
+#define wxComboBox_SetInsertionPointEnd 1589
+#define wxComboBox_SetSelection_1 1590
+#define wxComboBox_SetSelection_2 1591
+#define wxComboBox_SetValue 1592
+#define wxComboBox_Undo 1593
+#define wxGauge_new_0 1594
+#define wxGauge_new_4 1595
+#define wxGauge_Create 1596
+#define wxGauge_GetBezelFace 1597
+#define wxGauge_GetRange 1598
+#define wxGauge_GetShadowWidth 1599
+#define wxGauge_GetValue 1600
+#define wxGauge_IsVertical 1601
+#define wxGauge_SetBezelFace 1602
+#define wxGauge_SetRange 1603
+#define wxGauge_SetShadowWidth 1604
+#define wxGauge_SetValue 1605
+#define wxGauge_Pulse 1606
+#define wxGauge_destroy 1607
+#define wxGenericDirCtrl_new_0 1608
+#define wxGenericDirCtrl_new_2 1609
+#define wxGenericDirCtrl_destruct 1610
+#define wxGenericDirCtrl_Create 1611
+#define wxGenericDirCtrl_Init 1612
+#define wxGenericDirCtrl_CollapseTree 1613
+#define wxGenericDirCtrl_ExpandPath 1614
+#define wxGenericDirCtrl_GetDefaultPath 1615
+#define wxGenericDirCtrl_GetPath 1616
+#define wxGenericDirCtrl_GetFilePath 1617
+#define wxGenericDirCtrl_GetFilter 1618
+#define wxGenericDirCtrl_GetFilterIndex 1619
+#define wxGenericDirCtrl_GetRootId 1620
+#define wxGenericDirCtrl_GetTreeCtrl 1621
+#define wxGenericDirCtrl_ReCreateTree 1622
+#define wxGenericDirCtrl_SetDefaultPath 1623
+#define wxGenericDirCtrl_SetFilter 1624
+#define wxGenericDirCtrl_SetFilterIndex 1625
+#define wxGenericDirCtrl_SetPath 1626
+#define wxStaticBox_new_4 1628
+#define wxStaticBox_new_0 1629
+#define wxStaticBox_Create 1630
+#define wxStaticBox_destroy 1631
+#define wxStaticLine_new_2 1633
+#define wxStaticLine_new_0 1634
+#define wxStaticLine_Create 1635
+#define wxStaticLine_IsVertical 1636
+#define wxStaticLine_GetDefaultSize 1637
+#define wxStaticLine_destroy 1638
+#define wxListBox_new_3 1641
+#define wxListBox_new_0 1642
+#define wxListBox_destruct 1644
+#define wxListBox_Create 1646
+#define wxListBox_Deselect 1647
+#define wxListBox_GetSelections 1648
+#define wxListBox_InsertItems 1649
+#define wxListBox_IsSelected 1650
+#define wxListBox_Set 1652
+#define wxListBox_HitTest 1653
+#define wxListBox_SetFirstItem_1_0 1654
+#define wxListBox_SetFirstItem_1_1 1655
+#define wxListCtrl_new_0 1656
+#define wxListCtrl_new_2 1657
+#define wxListCtrl_Arrange 1658
+#define wxListCtrl_AssignImageList 1659
+#define wxListCtrl_ClearAll 1660
+#define wxListCtrl_Create 1661
+#define wxListCtrl_DeleteAllItems 1662
+#define wxListCtrl_DeleteColumn 1663
+#define wxListCtrl_DeleteItem 1664
+#define wxListCtrl_EditLabel 1665
+#define wxListCtrl_EnsureVisible 1666
+#define wxListCtrl_FindItem_3_0 1667
+#define wxListCtrl_FindItem_3_1 1668
+#define wxListCtrl_GetColumn 1669
+#define wxListCtrl_GetColumnCount 1670
+#define wxListCtrl_GetColumnWidth 1671
+#define wxListCtrl_GetCountPerPage 1672
+#define wxListCtrl_GetEditControl 1673
+#define wxListCtrl_GetImageList 1674
+#define wxListCtrl_GetItem 1675
+#define wxListCtrl_GetItemBackgroundColour 1676
+#define wxListCtrl_GetItemCount 1677
+#define wxListCtrl_GetItemData 1678
+#define wxListCtrl_GetItemFont 1679
+#define wxListCtrl_GetItemPosition 1680
+#define wxListCtrl_GetItemRect 1681
+#define wxListCtrl_GetItemSpacing 1682
+#define wxListCtrl_GetItemState 1683
+#define wxListCtrl_GetItemText 1684
+#define wxListCtrl_GetItemTextColour 1685
+#define wxListCtrl_GetNextItem 1686
+#define wxListCtrl_GetSelectedItemCount 1687
+#define wxListCtrl_GetTextColour 1688
+#define wxListCtrl_GetTopItem 1689
+#define wxListCtrl_GetViewRect 1690
+#define wxListCtrl_HitTest 1691
+#define wxListCtrl_InsertColumn_2 1692
+#define wxListCtrl_InsertColumn_3 1693
+#define wxListCtrl_InsertItem_1 1694
+#define wxListCtrl_InsertItem_2_1 1695
+#define wxListCtrl_InsertItem_2_0 1696
+#define wxListCtrl_InsertItem_3 1697
+#define wxListCtrl_RefreshItem 1698
+#define wxListCtrl_RefreshItems 1699
+#define wxListCtrl_ScrollList 1700
+#define wxListCtrl_SetBackgroundColour 1701
+#define wxListCtrl_SetColumn 1702
+#define wxListCtrl_SetColumnWidth 1703
+#define wxListCtrl_SetImageList 1704
+#define wxListCtrl_SetItem_1 1705
+#define wxListCtrl_SetItem_4 1706
+#define wxListCtrl_SetItemBackgroundColour 1707
+#define wxListCtrl_SetItemCount 1708
+#define wxListCtrl_SetItemData 1709
+#define wxListCtrl_SetItemFont 1710
+#define wxListCtrl_SetItemImage 1711
+#define wxListCtrl_SetItemColumnImage 1712
+#define wxListCtrl_SetItemPosition 1713
+#define wxListCtrl_SetItemState 1714
+#define wxListCtrl_SetItemText 1715
+#define wxListCtrl_SetItemTextColour 1716
+#define wxListCtrl_SetSingleStyle 1717
+#define wxListCtrl_SetTextColour 1718
+#define wxListCtrl_SetWindowStyleFlag 1719
+#define wxListCtrl_SortItems 1720
+#define wxListCtrl_destroy 1721
+#define wxListView_ClearColumnImage 1722
+#define wxListView_Focus 1723
+#define wxListView_GetFirstSelected 1724
+#define wxListView_GetFocusedItem 1725
+#define wxListView_GetNextSelected 1726
+#define wxListView_IsSelected 1727
+#define wxListView_Select 1728
+#define wxListView_SetColumnImage 1729
+#define wxListItem_new_0 1730
+#define wxListItem_new_1 1731
+#define wxListItem_destruct 1732
+#define wxListItem_Clear 1733
+#define wxListItem_GetAlign 1734
+#define wxListItem_GetBackgroundColour 1735
+#define wxListItem_GetColumn 1736
+#define wxListItem_GetFont 1737
+#define wxListItem_GetId 1738
+#define wxListItem_GetImage 1739
+#define wxListItem_GetMask 1740
+#define wxListItem_GetState 1741
+#define wxListItem_GetText 1742
+#define wxListItem_GetTextColour 1743
+#define wxListItem_GetWidth 1744
+#define wxListItem_SetAlign 1745
+#define wxListItem_SetBackgroundColour 1746
+#define wxListItem_SetColumn 1747
+#define wxListItem_SetFont 1748
+#define wxListItem_SetId 1749
+#define wxListItem_SetImage 1750
+#define wxListItem_SetMask 1751
+#define wxListItem_SetState 1752
+#define wxListItem_SetStateMask 1753
+#define wxListItem_SetText 1754
+#define wxListItem_SetTextColour 1755
+#define wxListItem_SetWidth 1756
+#define wxImageList_new_0 1757
+#define wxImageList_new_3 1758
+#define wxImageList_Add_1 1759
+#define wxImageList_Add_2_0 1760
+#define wxImageList_Add_2_1 1761
+#define wxImageList_Create 1762
+#define wxImageList_Draw 1764
+#define wxImageList_GetBitmap 1765
+#define wxImageList_GetIcon 1766
+#define wxImageList_GetImageCount 1767
+#define wxImageList_GetSize 1768
+#define wxImageList_Remove 1769
+#define wxImageList_RemoveAll 1770
+#define wxImageList_Replace_2 1771
+#define wxImageList_Replace_3 1772
+#define wxImageList_destroy 1773
+#define wxTextAttr_new_0 1774
+#define wxTextAttr_new_2 1775
+#define wxTextAttr_GetAlignment 1776
+#define wxTextAttr_GetBackgroundColour 1777
+#define wxTextAttr_GetFont 1778
+#define wxTextAttr_GetLeftIndent 1779
+#define wxTextAttr_GetLeftSubIndent 1780
+#define wxTextAttr_GetRightIndent 1781
+#define wxTextAttr_GetTabs 1782
+#define wxTextAttr_GetTextColour 1783
+#define wxTextAttr_HasBackgroundColour 1784
+#define wxTextAttr_HasFont 1785
+#define wxTextAttr_HasTextColour 1786
+#define wxTextAttr_GetFlags 1787
+#define wxTextAttr_IsDefault 1788
+#define wxTextAttr_SetAlignment 1789
+#define wxTextAttr_SetBackgroundColour 1790
+#define wxTextAttr_SetFlags 1791
+#define wxTextAttr_SetFont 1792
+#define wxTextAttr_SetLeftIndent 1793
+#define wxTextAttr_SetRightIndent 1794
+#define wxTextAttr_SetTabs 1795
+#define wxTextAttr_SetTextColour 1796
+#define wxTextAttr_destroy 1797
+#define wxTextCtrl_new_3 1799
+#define wxTextCtrl_new_0 1800
+#define wxTextCtrl_destruct 1802
+#define wxTextCtrl_AppendText 1803
+#define wxTextCtrl_CanCopy 1804
+#define wxTextCtrl_CanCut 1805
+#define wxTextCtrl_CanPaste 1806
+#define wxTextCtrl_CanRedo 1807
+#define wxTextCtrl_CanUndo 1808
+#define wxTextCtrl_Clear 1809
+#define wxTextCtrl_Copy 1810
+#define wxTextCtrl_Create 1811
+#define wxTextCtrl_Cut 1812
+#define wxTextCtrl_DiscardEdits 1813
+#define wxTextCtrl_EmulateKeyPress 1814
+#define wxTextCtrl_GetDefaultStyle 1815
+#define wxTextCtrl_GetInsertionPoint 1816
+#define wxTextCtrl_GetLastPosition 1817
+#define wxTextCtrl_GetLineLength 1818
+#define wxTextCtrl_GetLineText 1819
+#define wxTextCtrl_GetNumberOfLines 1820
+#define wxTextCtrl_GetRange 1821
+#define wxTextCtrl_GetSelection 1822
+#define wxTextCtrl_GetStringSelection 1823
+#define wxTextCtrl_GetStyle 1824
+#define wxTextCtrl_GetValue 1825
+#define wxTextCtrl_IsEditable 1826
+#define wxTextCtrl_IsModified 1827
+#define wxTextCtrl_IsMultiLine 1828
+#define wxTextCtrl_IsSingleLine 1829
+#define wxTextCtrl_LoadFile 1830
+#define wxTextCtrl_MarkDirty 1831
+#define wxTextCtrl_Paste 1832
+#define wxTextCtrl_PositionToXY 1833
+#define wxTextCtrl_Redo 1834
+#define wxTextCtrl_Remove 1835
+#define wxTextCtrl_Replace 1836
+#define wxTextCtrl_SaveFile 1837
+#define wxTextCtrl_SetDefaultStyle 1838
+#define wxTextCtrl_SetEditable 1839
+#define wxTextCtrl_SetInsertionPoint 1840
+#define wxTextCtrl_SetInsertionPointEnd 1841
+#define wxTextCtrl_SetMaxLength 1843
+#define wxTextCtrl_SetSelection 1844
+#define wxTextCtrl_SetStyle 1845
+#define wxTextCtrl_SetValue 1846
+#define wxTextCtrl_ShowPosition 1847
+#define wxTextCtrl_Undo 1848
+#define wxTextCtrl_WriteText 1849
+#define wxTextCtrl_XYToPosition 1850
+#define wxNotebook_new_0 1853
+#define wxNotebook_new_3 1854
+#define wxNotebook_destruct 1855
+#define wxNotebook_AddPage 1856
+#define wxNotebook_AdvanceSelection 1857
+#define wxNotebook_AssignImageList 1858
+#define wxNotebook_Create 1859
+#define wxNotebook_DeleteAllPages 1860
+#define wxNotebook_DeletePage 1861
+#define wxNotebook_RemovePage 1862
+#define wxNotebook_GetCurrentPage 1863
+#define wxNotebook_GetImageList 1864
+#define wxNotebook_GetPage 1866
+#define wxNotebook_GetPageCount 1867
+#define wxNotebook_GetPageImage 1868
+#define wxNotebook_GetPageText 1869
+#define wxNotebook_GetRowCount 1870
+#define wxNotebook_GetSelection 1871
+#define wxNotebook_GetThemeBackgroundColour 1872
+#define wxNotebook_HitTest 1874
+#define wxNotebook_InsertPage 1876
+#define wxNotebook_SetImageList 1877
+#define wxNotebook_SetPadding 1878
+#define wxNotebook_SetPageSize 1879
+#define wxNotebook_SetPageImage 1880
+#define wxNotebook_SetPageText 1881
+#define wxNotebook_SetSelection 1882
+#define wxNotebook_ChangeSelection 1883
+#define wxChoicebook_new_0 1884
+#define wxChoicebook_new_3 1885
+#define wxChoicebook_AddPage 1886
+#define wxChoicebook_AdvanceSelection 1887
+#define wxChoicebook_AssignImageList 1888
+#define wxChoicebook_Create 1889
+#define wxChoicebook_DeleteAllPages 1890
+#define wxChoicebook_DeletePage 1891
+#define wxChoicebook_RemovePage 1892
+#define wxChoicebook_GetCurrentPage 1893
+#define wxChoicebook_GetImageList 1894
+#define wxChoicebook_GetPage 1896
+#define wxChoicebook_GetPageCount 1897
+#define wxChoicebook_GetPageImage 1898
+#define wxChoicebook_GetPageText 1899
+#define wxChoicebook_GetSelection 1900
+#define wxChoicebook_HitTest 1901
+#define wxChoicebook_InsertPage 1902
+#define wxChoicebook_SetImageList 1903
+#define wxChoicebook_SetPageSize 1904
+#define wxChoicebook_SetPageImage 1905
+#define wxChoicebook_SetPageText 1906
+#define wxChoicebook_SetSelection 1907
+#define wxChoicebook_ChangeSelection 1908
+#define wxChoicebook_destroy 1909
+#define wxToolbook_new_0 1910
+#define wxToolbook_new_3 1911
+#define wxToolbook_AddPage 1912
+#define wxToolbook_AdvanceSelection 1913
+#define wxToolbook_AssignImageList 1914
+#define wxToolbook_Create 1915
+#define wxToolbook_DeleteAllPages 1916
+#define wxToolbook_DeletePage 1917
+#define wxToolbook_RemovePage 1918
+#define wxToolbook_GetCurrentPage 1919
+#define wxToolbook_GetImageList 1920
+#define wxToolbook_GetPage 1922
+#define wxToolbook_GetPageCount 1923
+#define wxToolbook_GetPageImage 1924
+#define wxToolbook_GetPageText 1925
+#define wxToolbook_GetSelection 1926
+#define wxToolbook_HitTest 1928
+#define wxToolbook_InsertPage 1929
+#define wxToolbook_SetImageList 1930
+#define wxToolbook_SetPageSize 1931
+#define wxToolbook_SetPageImage 1932
+#define wxToolbook_SetPageText 1933
+#define wxToolbook_SetSelection 1934
+#define wxToolbook_ChangeSelection 1935
+#define wxToolbook_destroy 1936
+#define wxListbook_new_0 1937
+#define wxListbook_new_3 1938
+#define wxListbook_AddPage 1939
+#define wxListbook_AdvanceSelection 1940
+#define wxListbook_AssignImageList 1941
+#define wxListbook_Create 1942
+#define wxListbook_DeleteAllPages 1943
+#define wxListbook_DeletePage 1944
+#define wxListbook_RemovePage 1945
+#define wxListbook_GetCurrentPage 1946
+#define wxListbook_GetImageList 1947
+#define wxListbook_GetPage 1949
+#define wxListbook_GetPageCount 1950
+#define wxListbook_GetPageImage 1951
+#define wxListbook_GetPageText 1952
+#define wxListbook_GetSelection 1953
+#define wxListbook_HitTest 1955
+#define wxListbook_InsertPage 1956
+#define wxListbook_SetImageList 1957
+#define wxListbook_SetPageSize 1958
+#define wxListbook_SetPageImage 1959
+#define wxListbook_SetPageText 1960
+#define wxListbook_SetSelection 1961
+#define wxListbook_ChangeSelection 1962
+#define wxListbook_destroy 1963
+#define wxTreebook_new_0 1964
+#define wxTreebook_new_3 1965
+#define wxTreebook_AddPage 1966
+#define wxTreebook_AdvanceSelection 1967
+#define wxTreebook_AssignImageList 1968
+#define wxTreebook_Create 1969
+#define wxTreebook_DeleteAllPages 1970
+#define wxTreebook_DeletePage 1971
+#define wxTreebook_RemovePage 1972
+#define wxTreebook_GetCurrentPage 1973
+#define wxTreebook_GetImageList 1974
+#define wxTreebook_GetPage 1976
+#define wxTreebook_GetPageCount 1977
+#define wxTreebook_GetPageImage 1978
+#define wxTreebook_GetPageText 1979
+#define wxTreebook_GetSelection 1980
+#define wxTreebook_ExpandNode 1981
+#define wxTreebook_IsNodeExpanded 1982
+#define wxTreebook_HitTest 1984
+#define wxTreebook_InsertPage 1985
+#define wxTreebook_InsertSubPage 1986
+#define wxTreebook_SetImageList 1987
+#define wxTreebook_SetPageSize 1988
+#define wxTreebook_SetPageImage 1989
+#define wxTreebook_SetPageText 1990
+#define wxTreebook_SetSelection 1991
+#define wxTreebook_ChangeSelection 1992
+#define wxTreebook_destroy 1993
+#define wxTreeCtrl_new_2 1996
+#define wxTreeCtrl_new_0 1997
+#define wxTreeCtrl_destruct 1999
+#define wxTreeCtrl_AddRoot 2000
+#define wxTreeCtrl_AppendItem 2001
+#define wxTreeCtrl_AssignImageList 2002
+#define wxTreeCtrl_AssignStateImageList 2003
+#define wxTreeCtrl_Collapse 2004
+#define wxTreeCtrl_CollapseAndReset 2005
+#define wxTreeCtrl_Create 2006
+#define wxTreeCtrl_Delete 2007
+#define wxTreeCtrl_DeleteAllItems 2008
+#define wxTreeCtrl_DeleteChildren 2009
+#define wxTreeCtrl_EnsureVisible 2010
+#define wxTreeCtrl_Expand 2011
+#define wxTreeCtrl_GetBoundingRect 2012
+#define wxTreeCtrl_GetChildrenCount 2014
+#define wxTreeCtrl_GetCount 2015
+#define wxTreeCtrl_GetEditControl 2016
+#define wxTreeCtrl_GetFirstChild 2017
+#define wxTreeCtrl_GetNextChild 2018
+#define wxTreeCtrl_GetFirstVisibleItem 2019
+#define wxTreeCtrl_GetImageList 2020
+#define wxTreeCtrl_GetIndent 2021
+#define wxTreeCtrl_GetItemBackgroundColour 2022
+#define wxTreeCtrl_GetItemData 2023
+#define wxTreeCtrl_GetItemFont 2024
+#define wxTreeCtrl_GetItemImage_1 2025
+#define wxTreeCtrl_GetItemImage_2 2026
+#define wxTreeCtrl_GetItemText 2027
+#define wxTreeCtrl_GetItemTextColour 2028
+#define wxTreeCtrl_GetLastChild 2029
+#define wxTreeCtrl_GetNextSibling 2030
+#define wxTreeCtrl_GetNextVisible 2031
+#define wxTreeCtrl_GetItemParent 2032
+#define wxTreeCtrl_GetPrevSibling 2033
+#define wxTreeCtrl_GetPrevVisible 2034
+#define wxTreeCtrl_GetRootItem 2035
+#define wxTreeCtrl_GetSelection 2036
+#define wxTreeCtrl_GetSelections 2037
+#define wxTreeCtrl_GetStateImageList 2038
+#define wxTreeCtrl_HitTest 2039
+#define wxTreeCtrl_InsertItem 2041
+#define wxTreeCtrl_IsBold 2042
+#define wxTreeCtrl_IsExpanded 2043
+#define wxTreeCtrl_IsSelected 2044
+#define wxTreeCtrl_IsVisible 2045
+#define wxTreeCtrl_ItemHasChildren 2046
+#define wxTreeCtrl_PrependItem 2047
+#define wxTreeCtrl_ScrollTo 2048
+#define wxTreeCtrl_SelectItem_1 2049
+#define wxTreeCtrl_SelectItem_2 2050
+#define wxTreeCtrl_SetIndent 2051
+#define wxTreeCtrl_SetImageList 2052
+#define wxTreeCtrl_SetItemBackgroundColour 2053
+#define wxTreeCtrl_SetItemBold 2054
+#define wxTreeCtrl_SetItemData 2055
+#define wxTreeCtrl_SetItemDropHighlight 2056
+#define wxTreeCtrl_SetItemFont 2057
+#define wxTreeCtrl_SetItemHasChildren 2058
+#define wxTreeCtrl_SetItemImage_2 2059
+#define wxTreeCtrl_SetItemImage_3 2060
+#define wxTreeCtrl_SetItemText 2061
+#define wxTreeCtrl_SetItemTextColour 2062
+#define wxTreeCtrl_SetStateImageList 2063
+#define wxTreeCtrl_SetWindowStyle 2064
+#define wxTreeCtrl_SortChildren 2065
+#define wxTreeCtrl_Toggle 2066
+#define wxTreeCtrl_ToggleItemSelection 2067
+#define wxTreeCtrl_Unselect 2068
+#define wxTreeCtrl_UnselectAll 2069
+#define wxTreeCtrl_UnselectItem 2070
+#define wxScrollBar_new_0 2071
+#define wxScrollBar_new_3 2072
+#define wxScrollBar_destruct 2073
+#define wxScrollBar_Create 2074
+#define wxScrollBar_GetRange 2075
+#define wxScrollBar_GetPageSize 2076
+#define wxScrollBar_GetThumbPosition 2077
+#define wxScrollBar_GetThumbSize 2078
+#define wxScrollBar_SetThumbPosition 2079
+#define wxScrollBar_SetScrollbar 2080
+#define wxSpinButton_new_2 2082
+#define wxSpinButton_new_0 2083
+#define wxSpinButton_Create 2084
+#define wxSpinButton_GetMax 2085
+#define wxSpinButton_GetMin 2086
+#define wxSpinButton_GetValue 2087
+#define wxSpinButton_SetRange 2088
+#define wxSpinButton_SetValue 2089
+#define wxSpinButton_destroy 2090
+#define wxSpinCtrl_new_0 2091
+#define wxSpinCtrl_new_2 2092
+#define wxSpinCtrl_Create 2094
+#define wxSpinCtrl_SetValue_1_1 2097
+#define wxSpinCtrl_SetValue_1_0 2098
+#define wxSpinCtrl_GetValue 2100
+#define wxSpinCtrl_SetRange 2102
+#define wxSpinCtrl_SetSelection 2103
+#define wxSpinCtrl_GetMin 2105
+#define wxSpinCtrl_GetMax 2107
+#define wxSpinCtrl_destroy 2108
+#define wxStaticText_new_0 2109
+#define wxStaticText_new_4 2110
+#define wxStaticText_Create 2111
+#define wxStaticText_GetLabel 2112
+#define wxStaticText_SetLabel 2113
+#define wxStaticText_Wrap 2114
+#define wxStaticText_destroy 2115
+#define wxStaticBitmap_new_0 2116
+#define wxStaticBitmap_new_4 2117
+#define wxStaticBitmap_Create 2118
+#define wxStaticBitmap_GetBitmap 2119
+#define wxStaticBitmap_SetBitmap 2120
+#define wxStaticBitmap_destroy 2121
+#define wxRadioBox_new 2122
+#define wxRadioBox_destruct 2124
+#define wxRadioBox_Create 2125
+#define wxRadioBox_Enable_2 2126
+#define wxRadioBox_Enable_1 2127
+#define wxRadioBox_GetSelection 2128
+#define wxRadioBox_GetString 2129
+#define wxRadioBox_SetSelection 2130
+#define wxRadioBox_Show_2 2131
+#define wxRadioBox_Show_1 2132
+#define wxRadioBox_GetColumnCount 2133
+#define wxRadioBox_GetItemHelpText 2134
+#define wxRadioBox_GetItemToolTip 2135
+#define wxRadioBox_GetItemFromPoint 2137
+#define wxRadioBox_GetRowCount 2138
+#define wxRadioBox_IsItemEnabled 2139
+#define wxRadioBox_IsItemShown 2140
+#define wxRadioBox_SetItemHelpText 2141
+#define wxRadioBox_SetItemToolTip 2142
+#define wxRadioButton_new_0 2143
+#define wxRadioButton_new_4 2144
+#define wxRadioButton_Create 2145
+#define wxRadioButton_GetValue 2146
+#define wxRadioButton_SetValue 2147
+#define wxRadioButton_destroy 2148
+#define wxSlider_new_6 2150
+#define wxSlider_new_0 2151
+#define wxSlider_Create 2152
+#define wxSlider_GetLineSize 2153
+#define wxSlider_GetMax 2154
+#define wxSlider_GetMin 2155
+#define wxSlider_GetPageSize 2156
+#define wxSlider_GetThumbLength 2157
+#define wxSlider_GetValue 2158
+#define wxSlider_SetLineSize 2159
+#define wxSlider_SetPageSize 2160
+#define wxSlider_SetRange 2161
+#define wxSlider_SetThumbLength 2162
+#define wxSlider_SetValue 2163
+#define wxSlider_destroy 2164
+#define wxDialog_new_4 2166
+#define wxDialog_new_0 2167
+#define wxDialog_destruct 2169
+#define wxDialog_Create 2170
+#define wxDialog_CreateButtonSizer 2171
+#define wxDialog_CreateStdDialogButtonSizer 2172
+#define wxDialog_EndModal 2173
+#define wxDialog_GetAffirmativeId 2174
+#define wxDialog_GetReturnCode 2175
+#define wxDialog_IsModal 2176
+#define wxDialog_SetAffirmativeId 2177
+#define wxDialog_SetReturnCode 2178
+#define wxDialog_Show 2179
+#define wxDialog_ShowModal 2180
+#define wxColourDialog_new_0 2181
+#define wxColourDialog_new_2 2182
+#define wxColourDialog_destruct 2183
+#define wxColourDialog_Create 2184
+#define wxColourDialog_GetColourData 2185
+#define wxColourData_new_0 2186
+#define wxColourData_new_1 2187
+#define wxColourData_destruct 2188
+#define wxColourData_GetChooseFull 2189
+#define wxColourData_GetColour 2190
+#define wxColourData_GetCustomColour 2192
+#define wxColourData_SetChooseFull 2193
+#define wxColourData_SetColour 2194
+#define wxColourData_SetCustomColour 2195
+#define wxPalette_new_0 2196
+#define wxPalette_new_4 2197
+#define wxPalette_destruct 2199
+#define wxPalette_Create 2200
+#define wxPalette_GetColoursCount 2201
+#define wxPalette_GetPixel 2202
+#define wxPalette_GetRGB 2203
+#define wxPalette_IsOk 2204
+#define wxDirDialog_new 2208
+#define wxDirDialog_destruct 2209
+#define wxDirDialog_GetPath 2210
+#define wxDirDialog_GetMessage 2211
+#define wxDirDialog_SetMessage 2212
+#define wxDirDialog_SetPath 2213
+#define wxFileDialog_new 2217
+#define wxFileDialog_destruct 2218
+#define wxFileDialog_GetDirectory 2219
+#define wxFileDialog_GetFilename 2220
+#define wxFileDialog_GetFilenames 2221
+#define wxFileDialog_GetFilterIndex 2222
+#define wxFileDialog_GetMessage 2223
+#define wxFileDialog_GetPath 2224
+#define wxFileDialog_GetPaths 2225
+#define wxFileDialog_GetWildcard 2226
+#define wxFileDialog_SetDirectory 2227
+#define wxFileDialog_SetFilename 2228
+#define wxFileDialog_SetFilterIndex 2229
+#define wxFileDialog_SetMessage 2230
+#define wxFileDialog_SetPath 2231
+#define wxFileDialog_SetWildcard 2232
+#define wxPickerBase_SetInternalMargin 2233
+#define wxPickerBase_GetInternalMargin 2234
+#define wxPickerBase_SetTextCtrlProportion 2235
+#define wxPickerBase_SetPickerCtrlProportion 2236
+#define wxPickerBase_GetTextCtrlProportion 2237
+#define wxPickerBase_GetPickerCtrlProportion 2238
+#define wxPickerBase_HasTextCtrl 2239
+#define wxPickerBase_GetTextCtrl 2240
+#define wxPickerBase_IsTextCtrlGrowable 2241
+#define wxPickerBase_SetPickerCtrlGrowable 2242
+#define wxPickerBase_SetTextCtrlGrowable 2243
+#define wxPickerBase_IsPickerCtrlGrowable 2244
+#define wxFilePickerCtrl_new_0 2245
+#define wxFilePickerCtrl_new_3 2246
+#define wxFilePickerCtrl_Create 2247
+#define wxFilePickerCtrl_GetPath 2248
+#define wxFilePickerCtrl_SetPath 2249
+#define wxFilePickerCtrl_destroy 2250
+#define wxDirPickerCtrl_new_0 2251
+#define wxDirPickerCtrl_new_3 2252
+#define wxDirPickerCtrl_Create 2253
+#define wxDirPickerCtrl_GetPath 2254
+#define wxDirPickerCtrl_SetPath 2255
+#define wxDirPickerCtrl_destroy 2256
+#define wxColourPickerCtrl_new_0 2257
+#define wxColourPickerCtrl_new_3 2258
+#define wxColourPickerCtrl_Create 2259
+#define wxColourPickerCtrl_GetColour 2260
+#define wxColourPickerCtrl_SetColour_1_1 2261
+#define wxColourPickerCtrl_SetColour_1_0 2262
+#define wxColourPickerCtrl_destroy 2263
+#define wxDatePickerCtrl_new_0 2264
+#define wxDatePickerCtrl_new_3 2265
+#define wxDatePickerCtrl_GetRange 2266
+#define wxDatePickerCtrl_GetValue 2267
+#define wxDatePickerCtrl_SetRange 2268
+#define wxDatePickerCtrl_SetValue 2269
+#define wxDatePickerCtrl_destroy 2270
+#define wxFontPickerCtrl_new_0 2271
+#define wxFontPickerCtrl_new_3 2272
+#define wxFontPickerCtrl_Create 2273
+#define wxFontPickerCtrl_GetSelectedFont 2274
+#define wxFontPickerCtrl_SetSelectedFont 2275
+#define wxFontPickerCtrl_GetMaxPointSize 2276
+#define wxFontPickerCtrl_SetMaxPointSize 2277
+#define wxFontPickerCtrl_destroy 2278
+#define wxFindReplaceDialog_new_0 2281
+#define wxFindReplaceDialog_new_4 2282
+#define wxFindReplaceDialog_destruct 2283
+#define wxFindReplaceDialog_Create 2284
+#define wxFindReplaceDialog_GetData 2285
+#define wxFindReplaceData_new_0 2286
+#define wxFindReplaceData_new_1 2287
+#define wxFindReplaceData_GetFindString 2288
+#define wxFindReplaceData_GetReplaceString 2289
+#define wxFindReplaceData_GetFlags 2290
+#define wxFindReplaceData_SetFlags 2291
+#define wxFindReplaceData_SetFindString 2292
+#define wxFindReplaceData_SetReplaceString 2293
+#define wxFindReplaceData_destroy 2294
+#define wxMultiChoiceDialog_new_0 2295
+#define wxMultiChoiceDialog_new_5 2297
+#define wxMultiChoiceDialog_GetSelections 2298
+#define wxMultiChoiceDialog_SetSelections 2299
+#define wxMultiChoiceDialog_destroy 2300
+#define wxSingleChoiceDialog_new_0 2301
+#define wxSingleChoiceDialog_new_5 2303
+#define wxSingleChoiceDialog_GetSelection 2304
+#define wxSingleChoiceDialog_GetStringSelection 2305
+#define wxSingleChoiceDialog_SetSelection 2306
+#define wxSingleChoiceDialog_destroy 2307
+#define wxTextEntryDialog_new 2308
+#define wxTextEntryDialog_GetValue 2309
+#define wxTextEntryDialog_SetValue 2310
+#define wxTextEntryDialog_destroy 2311
+#define wxPasswordEntryDialog_new 2312
+#define wxPasswordEntryDialog_destroy 2313
+#define wxFontData_new_0 2314
+#define wxFontData_new_1 2315
+#define wxFontData_destruct 2316
+#define wxFontData_EnableEffects 2317
+#define wxFontData_GetAllowSymbols 2318
+#define wxFontData_GetColour 2319
+#define wxFontData_GetChosenFont 2320
+#define wxFontData_GetEnableEffects 2321
+#define wxFontData_GetInitialFont 2322
+#define wxFontData_GetShowHelp 2323
+#define wxFontData_SetAllowSymbols 2324
+#define wxFontData_SetChosenFont 2325
+#define wxFontData_SetColour 2326
+#define wxFontData_SetInitialFont 2327
+#define wxFontData_SetRange 2328
+#define wxFontData_SetShowHelp 2329
+#define wxFontDialog_new_0 2333
+#define wxFontDialog_new_2 2335
+#define wxFontDialog_Create 2337
+#define wxFontDialog_GetFontData 2338
+#define wxFontDialog_destroy 2340
+#define wxProgressDialog_new 2341
+#define wxProgressDialog_destruct 2342
+#define wxProgressDialog_Resume 2343
+#define wxProgressDialog_Update_2 2344
+#define wxProgressDialog_Update_0 2345
+#define wxMessageDialog_new 2346
+#define wxMessageDialog_destruct 2347
+#define wxPageSetupDialog_new 2348
+#define wxPageSetupDialog_destruct 2349
+#define wxPageSetupDialog_GetPageSetupData 2350
+#define wxPageSetupDialog_ShowModal 2351
+#define wxPageSetupDialogData_new_0 2352
+#define wxPageSetupDialogData_new_1_0 2353
+#define wxPageSetupDialogData_new_1_1 2354
+#define wxPageSetupDialogData_destruct 2355
+#define wxPageSetupDialogData_EnableHelp 2356
+#define wxPageSetupDialogData_EnableMargins 2357
+#define wxPageSetupDialogData_EnableOrientation 2358
+#define wxPageSetupDialogData_EnablePaper 2359
+#define wxPageSetupDialogData_EnablePrinter 2360
+#define wxPageSetupDialogData_GetDefaultMinMargins 2361
+#define wxPageSetupDialogData_GetEnableMargins 2362
+#define wxPageSetupDialogData_GetEnableOrientation 2363
+#define wxPageSetupDialogData_GetEnablePaper 2364
+#define wxPageSetupDialogData_GetEnablePrinter 2365
+#define wxPageSetupDialogData_GetEnableHelp 2366
+#define wxPageSetupDialogData_GetDefaultInfo 2367
+#define wxPageSetupDialogData_GetMarginTopLeft 2368
+#define wxPageSetupDialogData_GetMarginBottomRight 2369
+#define wxPageSetupDialogData_GetMinMarginTopLeft 2370
+#define wxPageSetupDialogData_GetMinMarginBottomRight 2371
+#define wxPageSetupDialogData_GetPaperId 2372
+#define wxPageSetupDialogData_GetPaperSize 2373
+#define wxPageSetupDialogData_GetPrintData 2375
+#define wxPageSetupDialogData_IsOk 2376
+#define wxPageSetupDialogData_SetDefaultInfo 2377
+#define wxPageSetupDialogData_SetDefaultMinMargins 2378
+#define wxPageSetupDialogData_SetMarginTopLeft 2379
+#define wxPageSetupDialogData_SetMarginBottomRight 2380
+#define wxPageSetupDialogData_SetMinMarginTopLeft 2381
+#define wxPageSetupDialogData_SetMinMarginBottomRight 2382
+#define wxPageSetupDialogData_SetPaperId 2383
+#define wxPageSetupDialogData_SetPaperSize_1_1 2384
+#define wxPageSetupDialogData_SetPaperSize_1_0 2385
+#define wxPageSetupDialogData_SetPrintData 2386
+#define wxPrintDialog_new_2_0 2387
+#define wxPrintDialog_new_2_1 2388
+#define wxPrintDialog_destruct 2389
+#define wxPrintDialog_GetPrintDialogData 2390
+#define wxPrintDialog_GetPrintDC 2391
+#define wxPrintDialogData_new_0 2392
+#define wxPrintDialogData_new_1_1 2393
+#define wxPrintDialogData_new_1_0 2394
+#define wxPrintDialogData_destruct 2395
+#define wxPrintDialogData_EnableHelp 2396
+#define wxPrintDialogData_EnablePageNumbers 2397
+#define wxPrintDialogData_EnablePrintToFile 2398
+#define wxPrintDialogData_EnableSelection 2399
+#define wxPrintDialogData_GetAllPages 2400
+#define wxPrintDialogData_GetCollate 2401
+#define wxPrintDialogData_GetFromPage 2402
+#define wxPrintDialogData_GetMaxPage 2403
+#define wxPrintDialogData_GetMinPage 2404
+#define wxPrintDialogData_GetNoCopies 2405
+#define wxPrintDialogData_GetPrintData 2406
+#define wxPrintDialogData_GetPrintToFile 2407
+#define wxPrintDialogData_GetSelection 2408
+#define wxPrintDialogData_GetToPage 2409
+#define wxPrintDialogData_IsOk 2410
+#define wxPrintDialogData_SetCollate 2411
+#define wxPrintDialogData_SetFromPage 2412
+#define wxPrintDialogData_SetMaxPage 2413
+#define wxPrintDialogData_SetMinPage 2414
+#define wxPrintDialogData_SetNoCopies 2415
+#define wxPrintDialogData_SetPrintData 2416
+#define wxPrintDialogData_SetPrintToFile 2417
+#define wxPrintDialogData_SetSelection 2418
+#define wxPrintDialogData_SetToPage 2419
+#define wxPrintData_new_0 2420
+#define wxPrintData_new_1 2421
+#define wxPrintData_destruct 2422
+#define wxPrintData_GetCollate 2423
+#define wxPrintData_GetBin 2424
+#define wxPrintData_GetColour 2425
+#define wxPrintData_GetDuplex 2426
+#define wxPrintData_GetNoCopies 2427
+#define wxPrintData_GetOrientation 2428
+#define wxPrintData_GetPaperId 2429
+#define wxPrintData_GetPrinterName 2430
+#define wxPrintData_GetQuality 2431
+#define wxPrintData_IsOk 2432
+#define wxPrintData_SetBin 2433
+#define wxPrintData_SetCollate 2434
+#define wxPrintData_SetColour 2435
+#define wxPrintData_SetDuplex 2436
+#define wxPrintData_SetNoCopies 2437
+#define wxPrintData_SetOrientation 2438
+#define wxPrintData_SetPaperId 2439
+#define wxPrintData_SetPrinterName 2440
+#define wxPrintData_SetQuality 2441
+#define wxPrintPreview_new_2 2444
+#define wxPrintPreview_new_3 2445
+#define wxPrintPreview_destruct 2447
+#define wxPrintPreview_GetCanvas 2448
+#define wxPrintPreview_GetCurrentPage 2449
+#define wxPrintPreview_GetFrame 2450
+#define wxPrintPreview_GetMaxPage 2451
+#define wxPrintPreview_GetMinPage 2452
+#define wxPrintPreview_GetPrintout 2453
+#define wxPrintPreview_GetPrintoutForPrinting 2454
+#define wxPrintPreview_IsOk 2455
+#define wxPrintPreview_PaintPage 2456
+#define wxPrintPreview_Print 2457
+#define wxPrintPreview_RenderPage 2458
+#define wxPrintPreview_SetCanvas 2459
+#define wxPrintPreview_SetCurrentPage 2460
+#define wxPrintPreview_SetFrame 2461
+#define wxPrintPreview_SetPrintout 2462
+#define wxPrintPreview_SetZoom 2463
+#define wxPreviewFrame_new 2464
+#define wxPreviewFrame_destruct 2465
+#define wxPreviewFrame_CreateControlBar 2466
+#define wxPreviewFrame_CreateCanvas 2467
+#define wxPreviewFrame_Initialize 2468
+#define wxPreviewFrame_OnCloseWindow 2469
+#define wxPreviewControlBar_new 2470
+#define wxPreviewControlBar_destruct 2471
+#define wxPreviewControlBar_CreateButtons 2472
+#define wxPreviewControlBar_GetPrintPreview 2473
+#define wxPreviewControlBar_GetZoomControl 2474
+#define wxPreviewControlBar_SetZoomControl 2475
+#define wxPrinter_new 2477
+#define wxPrinter_CreateAbortWindow 2478
+#define wxPrinter_GetAbort 2479
+#define wxPrinter_GetLastError 2480
+#define wxPrinter_GetPrintDialogData 2481
+#define wxPrinter_Print 2482
+#define wxPrinter_PrintDialog 2483
+#define wxPrinter_ReportError 2484
+#define wxPrinter_Setup 2485
+#define wxPrinter_destroy 2486
+#define wxXmlResource_new_1 2487
+#define wxXmlResource_new_2 2488
+#define wxXmlResource_destruct 2489
+#define wxXmlResource_AttachUnknownControl 2490
+#define wxXmlResource_ClearHandlers 2491
+#define wxXmlResource_CompareVersion 2492
+#define wxXmlResource_Get 2493
+#define wxXmlResource_GetFlags 2494
+#define wxXmlResource_GetVersion 2495
+#define wxXmlResource_GetXRCID 2496
+#define wxXmlResource_InitAllHandlers 2497
+#define wxXmlResource_Load 2498
+#define wxXmlResource_LoadBitmap 2499
+#define wxXmlResource_LoadDialog_2 2500
+#define wxXmlResource_LoadDialog_3 2501
+#define wxXmlResource_LoadFrame_2 2502
+#define wxXmlResource_LoadFrame_3 2503
+#define wxXmlResource_LoadIcon 2504
+#define wxXmlResource_LoadMenu 2505
+#define wxXmlResource_LoadMenuBar_2 2506
+#define wxXmlResource_LoadMenuBar_1 2507
+#define wxXmlResource_LoadPanel_2 2508
+#define wxXmlResource_LoadPanel_3 2509
+#define wxXmlResource_LoadToolBar 2510
+#define wxXmlResource_Set 2511
+#define wxXmlResource_SetFlags 2512
+#define wxXmlResource_Unload 2513
+#define wxXmlResource_xrcctrl 2514
+#define wxHtmlEasyPrinting_new 2515
+#define wxHtmlEasyPrinting_destruct 2516
+#define wxHtmlEasyPrinting_GetPrintData 2517
+#define wxHtmlEasyPrinting_GetPageSetupData 2518
+#define wxHtmlEasyPrinting_PreviewFile 2519
+#define wxHtmlEasyPrinting_PreviewText 2520
+#define wxHtmlEasyPrinting_PrintFile 2521
+#define wxHtmlEasyPrinting_PrintText 2522
+#define wxHtmlEasyPrinting_PageSetup 2523
+#define wxHtmlEasyPrinting_SetFonts 2524
+#define wxHtmlEasyPrinting_SetHeader 2525
+#define wxHtmlEasyPrinting_SetFooter 2526
+#define wxGLCanvas_new_2 2528
+#define wxGLCanvas_new_3_1 2529
+#define wxGLCanvas_new_3_0 2530
+#define wxGLCanvas_GetContext 2531
+#define wxGLCanvas_SetCurrent 2533
+#define wxGLCanvas_SwapBuffers 2534
+#define wxGLCanvas_destroy 2535
+#define wxAuiManager_new 2536
+#define wxAuiManager_destruct 2537
+#define wxAuiManager_AddPane_2_1 2538
+#define wxAuiManager_AddPane_3 2539
+#define wxAuiManager_AddPane_2_0 2540
+#define wxAuiManager_DetachPane 2541
+#define wxAuiManager_GetAllPanes 2542
+#define wxAuiManager_GetArtProvider 2543
+#define wxAuiManager_GetDockSizeConstraint 2544
+#define wxAuiManager_GetFlags 2545
+#define wxAuiManager_GetManagedWindow 2546
+#define wxAuiManager_GetManager 2547
+#define wxAuiManager_GetPane_1_1 2548
+#define wxAuiManager_GetPane_1_0 2549
+#define wxAuiManager_HideHint 2550
+#define wxAuiManager_InsertPane 2551
+#define wxAuiManager_LoadPaneInfo 2552
+#define wxAuiManager_LoadPerspective 2553
+#define wxAuiManager_SavePaneInfo 2554
+#define wxAuiManager_SavePerspective 2555
+#define wxAuiManager_SetArtProvider 2556
+#define wxAuiManager_SetDockSizeConstraint 2557
+#define wxAuiManager_SetFlags 2558
+#define wxAuiManager_SetManagedWindow 2559
+#define wxAuiManager_ShowHint 2560
+#define wxAuiManager_UnInit 2561
+#define wxAuiManager_Update 2562
+#define wxAuiPaneInfo_new_0 2563
+#define wxAuiPaneInfo_new_1 2564
+#define wxAuiPaneInfo_destruct 2565
+#define wxAuiPaneInfo_BestSize_1 2566
+#define wxAuiPaneInfo_BestSize_2 2567
+#define wxAuiPaneInfo_Bottom 2568
+#define wxAuiPaneInfo_BottomDockable 2569
+#define wxAuiPaneInfo_Caption 2570
+#define wxAuiPaneInfo_CaptionVisible 2571
+#define wxAuiPaneInfo_Centre 2572
+#define wxAuiPaneInfo_CentrePane 2573
+#define wxAuiPaneInfo_CloseButton 2574
+#define wxAuiPaneInfo_DefaultPane 2575
+#define wxAuiPaneInfo_DestroyOnClose 2576
+#define wxAuiPaneInfo_Direction 2577
+#define wxAuiPaneInfo_Dock 2578
+#define wxAuiPaneInfo_Dockable 2579
+#define wxAuiPaneInfo_Fixed 2580
+#define wxAuiPaneInfo_Float 2581
+#define wxAuiPaneInfo_Floatable 2582
+#define wxAuiPaneInfo_FloatingPosition_1 2583
+#define wxAuiPaneInfo_FloatingPosition_2 2584
+#define wxAuiPaneInfo_FloatingSize_1 2585
+#define wxAuiPaneInfo_FloatingSize_2 2586
+#define wxAuiPaneInfo_Gripper 2587
+#define wxAuiPaneInfo_GripperTop 2588
+#define wxAuiPaneInfo_HasBorder 2589
+#define wxAuiPaneInfo_HasCaption 2590
+#define wxAuiPaneInfo_HasCloseButton 2591
+#define wxAuiPaneInfo_HasFlag 2592
+#define wxAuiPaneInfo_HasGripper 2593
+#define wxAuiPaneInfo_HasGripperTop 2594
+#define wxAuiPaneInfo_HasMaximizeButton 2595
+#define wxAuiPaneInfo_HasMinimizeButton 2596
+#define wxAuiPaneInfo_HasPinButton 2597
+#define wxAuiPaneInfo_Hide 2598
+#define wxAuiPaneInfo_IsBottomDockable 2599
+#define wxAuiPaneInfo_IsDocked 2600
+#define wxAuiPaneInfo_IsFixed 2601
+#define wxAuiPaneInfo_IsFloatable 2602
+#define wxAuiPaneInfo_IsFloating 2603
+#define wxAuiPaneInfo_IsLeftDockable 2604
+#define wxAuiPaneInfo_IsMovable 2605
+#define wxAuiPaneInfo_IsOk 2606
+#define wxAuiPaneInfo_IsResizable 2607
+#define wxAuiPaneInfo_IsRightDockable 2608
+#define wxAuiPaneInfo_IsShown 2609
+#define wxAuiPaneInfo_IsToolbar 2610
+#define wxAuiPaneInfo_IsTopDockable 2611
+#define wxAuiPaneInfo_Layer 2612
+#define wxAuiPaneInfo_Left 2613
+#define wxAuiPaneInfo_LeftDockable 2614
+#define wxAuiPaneInfo_MaxSize_1 2615
+#define wxAuiPaneInfo_MaxSize_2 2616
+#define wxAuiPaneInfo_MaximizeButton 2617
+#define wxAuiPaneInfo_MinSize_1 2618
+#define wxAuiPaneInfo_MinSize_2 2619
+#define wxAuiPaneInfo_MinimizeButton 2620
+#define wxAuiPaneInfo_Movable 2621
+#define wxAuiPaneInfo_Name 2622
+#define wxAuiPaneInfo_PaneBorder 2623
+#define wxAuiPaneInfo_PinButton 2624
+#define wxAuiPaneInfo_Position 2625
+#define wxAuiPaneInfo_Resizable 2626
+#define wxAuiPaneInfo_Right 2627
+#define wxAuiPaneInfo_RightDockable 2628
+#define wxAuiPaneInfo_Row 2629
+#define wxAuiPaneInfo_SafeSet 2630
+#define wxAuiPaneInfo_SetFlag 2631
+#define wxAuiPaneInfo_Show 2632
+#define wxAuiPaneInfo_ToolbarPane 2633
+#define wxAuiPaneInfo_Top 2634
+#define wxAuiPaneInfo_TopDockable 2635
+#define wxAuiPaneInfo_Window 2636
+#define wxAuiNotebook_new_0 2637
+#define wxAuiNotebook_new_2 2638
+#define wxAuiNotebook_AddPage 2639
+#define wxAuiNotebook_Create 2640
+#define wxAuiNotebook_DeletePage 2641
+#define wxAuiNotebook_GetArtProvider 2642
+#define wxAuiNotebook_GetPage 2643
+#define wxAuiNotebook_GetPageBitmap 2644
+#define wxAuiNotebook_GetPageCount 2645
+#define wxAuiNotebook_GetPageIndex 2646
+#define wxAuiNotebook_GetPageText 2647
+#define wxAuiNotebook_GetSelection 2648
+#define wxAuiNotebook_InsertPage 2649
+#define wxAuiNotebook_RemovePage 2650
+#define wxAuiNotebook_SetArtProvider 2651
+#define wxAuiNotebook_SetFont 2652
+#define wxAuiNotebook_SetPageBitmap 2653
+#define wxAuiNotebook_SetPageText 2654
+#define wxAuiNotebook_SetSelection 2655
+#define wxAuiNotebook_SetTabCtrlHeight 2656
+#define wxAuiNotebook_SetUniformBitmapSize 2657
+#define wxAuiNotebook_destroy 2658
+#define wxMDIParentFrame_new_0 2659
+#define wxMDIParentFrame_new_4 2660
+#define wxMDIParentFrame_destruct 2661
+#define wxMDIParentFrame_ActivateNext 2662
+#define wxMDIParentFrame_ActivatePrevious 2663
+#define wxMDIParentFrame_ArrangeIcons 2664
+#define wxMDIParentFrame_Cascade 2665
+#define wxMDIParentFrame_Create 2666
+#define wxMDIParentFrame_GetActiveChild 2667
+#define wxMDIParentFrame_GetClientWindow 2668
+#define wxMDIParentFrame_Tile 2669
+#define wxMDIChildFrame_new_0 2670
+#define wxMDIChildFrame_new_4 2671
+#define wxMDIChildFrame_destruct 2672
+#define wxMDIChildFrame_Activate 2673
+#define wxMDIChildFrame_Create 2674
+#define wxMDIChildFrame_Maximize 2675
+#define wxMDIChildFrame_Restore 2676
+#define wxMDIClientWindow_new_0 2677
+#define wxMDIClientWindow_new_2 2678
+#define wxMDIClientWindow_destruct 2679
+#define wxMDIClientWindow_CreateClient 2680
+#define wxLayoutAlgorithm_new 2681
+#define wxLayoutAlgorithm_LayoutFrame 2682
+#define wxLayoutAlgorithm_LayoutMDIFrame 2683
+#define wxLayoutAlgorithm_LayoutWindow 2684
+#define wxLayoutAlgorithm_destroy 2685
+#define wxEvent_GetId 2686
+#define wxEvent_GetSkipped 2687
+#define wxEvent_GetTimestamp 2688
+#define wxEvent_IsCommandEvent 2689
+#define wxEvent_ResumePropagation 2690
+#define wxEvent_ShouldPropagate 2691
+#define wxEvent_Skip 2692
+#define wxEvent_StopPropagation 2693
+#define wxCommandEvent_getClientData 2694
+#define wxCommandEvent_GetExtraLong 2695
+#define wxCommandEvent_GetInt 2696
+#define wxCommandEvent_GetSelection 2697
+#define wxCommandEvent_GetString 2698
+#define wxCommandEvent_IsChecked 2699
+#define wxCommandEvent_IsSelection 2700
+#define wxCommandEvent_SetInt 2701
+#define wxCommandEvent_SetString 2702
+#define wxScrollEvent_GetOrientation 2703
+#define wxScrollEvent_GetPosition 2704
+#define wxScrollWinEvent_GetOrientation 2705
+#define wxScrollWinEvent_GetPosition 2706
+#define wxMouseEvent_AltDown 2707
+#define wxMouseEvent_Button 2708
+#define wxMouseEvent_ButtonDClick 2709
+#define wxMouseEvent_ButtonDown 2710
+#define wxMouseEvent_ButtonUp 2711
+#define wxMouseEvent_CmdDown 2712
+#define wxMouseEvent_ControlDown 2713
+#define wxMouseEvent_Dragging 2714
+#define wxMouseEvent_Entering 2715
+#define wxMouseEvent_GetButton 2716
+#define wxMouseEvent_GetPosition 2719
+#define wxMouseEvent_GetLogicalPosition 2720
+#define wxMouseEvent_GetLinesPerAction 2721
+#define wxMouseEvent_GetWheelRotation 2722
+#define wxMouseEvent_GetWheelDelta 2723
+#define wxMouseEvent_GetX 2724
+#define wxMouseEvent_GetY 2725
+#define wxMouseEvent_IsButton 2726
+#define wxMouseEvent_IsPageScroll 2727
+#define wxMouseEvent_Leaving 2728
+#define wxMouseEvent_LeftDClick 2729
+#define wxMouseEvent_LeftDown 2730
+#define wxMouseEvent_LeftIsDown 2731
+#define wxMouseEvent_LeftUp 2732
+#define wxMouseEvent_MetaDown 2733
+#define wxMouseEvent_MiddleDClick 2734
+#define wxMouseEvent_MiddleDown 2735
+#define wxMouseEvent_MiddleIsDown 2736
+#define wxMouseEvent_MiddleUp 2737
+#define wxMouseEvent_Moving 2738
+#define wxMouseEvent_RightDClick 2739
+#define wxMouseEvent_RightDown 2740
+#define wxMouseEvent_RightIsDown 2741
+#define wxMouseEvent_RightUp 2742
+#define wxMouseEvent_ShiftDown 2743
+#define wxSetCursorEvent_GetCursor 2744
+#define wxSetCursorEvent_GetX 2745
+#define wxSetCursorEvent_GetY 2746
+#define wxSetCursorEvent_HasCursor 2747
+#define wxSetCursorEvent_SetCursor 2748
+#define wxKeyEvent_AltDown 2749
+#define wxKeyEvent_CmdDown 2750
+#define wxKeyEvent_ControlDown 2751
+#define wxKeyEvent_GetKeyCode 2752
+#define wxKeyEvent_GetModifiers 2753
+#define wxKeyEvent_GetPosition 2756
+#define wxKeyEvent_GetRawKeyCode 2757
+#define wxKeyEvent_GetRawKeyFlags 2758
+#define wxKeyEvent_GetUnicodeKey 2759
+#define wxKeyEvent_GetX 2760
+#define wxKeyEvent_GetY 2761
+#define wxKeyEvent_HasModifiers 2762
+#define wxKeyEvent_MetaDown 2763
+#define wxKeyEvent_ShiftDown 2764
+#define wxSizeEvent_GetSize 2765
+#define wxMoveEvent_GetPosition 2766
+#define wxEraseEvent_GetDC 2767
+#define wxFocusEvent_GetWindow 2768
+#define wxChildFocusEvent_GetWindow 2769
+#define wxMenuEvent_GetMenu 2770
+#define wxMenuEvent_GetMenuId 2771
+#define wxMenuEvent_IsPopup 2772
+#define wxCloseEvent_CanVeto 2773
+#define wxCloseEvent_GetLoggingOff 2774
+#define wxCloseEvent_SetCanVeto 2775
+#define wxCloseEvent_SetLoggingOff 2776
+#define wxCloseEvent_Veto 2777
+#define wxShowEvent_SetShow 2778
+#define wxShowEvent_GetShow 2779
+#define wxIconizeEvent_Iconized 2780
+#define wxJoystickEvent_ButtonDown 2781
+#define wxJoystickEvent_ButtonIsDown 2782
+#define wxJoystickEvent_ButtonUp 2783
+#define wxJoystickEvent_GetButtonChange 2784
+#define wxJoystickEvent_GetButtonState 2785
+#define wxJoystickEvent_GetJoystick 2786
+#define wxJoystickEvent_GetPosition 2787
+#define wxJoystickEvent_GetZPosition 2788
+#define wxJoystickEvent_IsButton 2789
+#define wxJoystickEvent_IsMove 2790
+#define wxJoystickEvent_IsZMove 2791
+#define wxUpdateUIEvent_CanUpdate 2792
+#define wxUpdateUIEvent_Check 2793
+#define wxUpdateUIEvent_Enable 2794
+#define wxUpdateUIEvent_Show 2795
+#define wxUpdateUIEvent_GetChecked 2796
+#define wxUpdateUIEvent_GetEnabled 2797
+#define wxUpdateUIEvent_GetShown 2798
+#define wxUpdateUIEvent_GetSetChecked 2799
+#define wxUpdateUIEvent_GetSetEnabled 2800
+#define wxUpdateUIEvent_GetSetShown 2801
+#define wxUpdateUIEvent_GetSetText 2802
+#define wxUpdateUIEvent_GetText 2803
+#define wxUpdateUIEvent_GetMode 2804
+#define wxUpdateUIEvent_GetUpdateInterval 2805
+#define wxUpdateUIEvent_ResetUpdateTime 2806
+#define wxUpdateUIEvent_SetMode 2807
+#define wxUpdateUIEvent_SetText 2808
+#define wxUpdateUIEvent_SetUpdateInterval 2809
+#define wxMouseCaptureChangedEvent_GetCapturedWindow 2810
+#define wxPaletteChangedEvent_SetChangedWindow 2811
+#define wxPaletteChangedEvent_GetChangedWindow 2812
+#define wxQueryNewPaletteEvent_SetPaletteRealized 2813
+#define wxQueryNewPaletteEvent_GetPaletteRealized 2814
+#define wxNavigationKeyEvent_GetDirection 2815
+#define wxNavigationKeyEvent_SetDirection 2816
+#define wxNavigationKeyEvent_IsWindowChange 2817
+#define wxNavigationKeyEvent_SetWindowChange 2818
+#define wxNavigationKeyEvent_IsFromTab 2819
+#define wxNavigationKeyEvent_SetFromTab 2820
+#define wxNavigationKeyEvent_GetCurrentFocus 2821
+#define wxNavigationKeyEvent_SetCurrentFocus 2822
+#define wxHelpEvent_GetOrigin 2823
+#define wxHelpEvent_GetPosition 2824
+#define wxHelpEvent_SetOrigin 2825
+#define wxHelpEvent_SetPosition 2826
+#define wxContextMenuEvent_GetPosition 2827
+#define wxContextMenuEvent_SetPosition 2828
+#define wxIdleEvent_CanSend 2829
+#define wxIdleEvent_GetMode 2830
+#define wxIdleEvent_RequestMore 2831
+#define wxIdleEvent_MoreRequested 2832
+#define wxIdleEvent_SetMode 2833
+#define wxGridEvent_AltDown 2834
+#define wxGridEvent_ControlDown 2835
+#define wxGridEvent_GetCol 2836
+#define wxGridEvent_GetPosition 2837
+#define wxGridEvent_GetRow 2838
+#define wxGridEvent_MetaDown 2839
+#define wxGridEvent_Selecting 2840
+#define wxGridEvent_ShiftDown 2841
+#define wxNotifyEvent_Allow 2842
+#define wxNotifyEvent_IsAllowed 2843
+#define wxNotifyEvent_Veto 2844
+#define wxSashEvent_GetEdge 2845
+#define wxSashEvent_GetDragRect 2846
+#define wxSashEvent_GetDragStatus 2847
+#define wxListEvent_GetCacheFrom 2848
+#define wxListEvent_GetCacheTo 2849
+#define wxListEvent_GetKeyCode 2850
+#define wxListEvent_GetIndex 2851
+#define wxListEvent_GetColumn 2852
+#define wxListEvent_GetPoint 2853
+#define wxListEvent_GetLabel 2854
+#define wxListEvent_GetText 2855
+#define wxListEvent_GetImage 2856
+#define wxListEvent_GetData 2857
+#define wxListEvent_GetMask 2858
+#define wxListEvent_GetItem 2859
+#define wxListEvent_IsEditCancelled 2860
+#define wxDateEvent_GetDate 2861
+#define wxCalendarEvent_GetWeekDay 2862
+#define wxFileDirPickerEvent_GetPath 2863
+#define wxColourPickerEvent_GetColour 2864
+#define wxFontPickerEvent_GetFont 2865
+#define wxStyledTextEvent_GetPosition 2866
+#define wxStyledTextEvent_GetKey 2867
+#define wxStyledTextEvent_GetModifiers 2868
+#define wxStyledTextEvent_GetModificationType 2869
+#define wxStyledTextEvent_GetText 2870
+#define wxStyledTextEvent_GetLength 2871
+#define wxStyledTextEvent_GetLinesAdded 2872
+#define wxStyledTextEvent_GetLine 2873
+#define wxStyledTextEvent_GetFoldLevelNow 2874
+#define wxStyledTextEvent_GetFoldLevelPrev 2875
+#define wxStyledTextEvent_GetMargin 2876
+#define wxStyledTextEvent_GetMessage 2877
+#define wxStyledTextEvent_GetWParam 2878
+#define wxStyledTextEvent_GetLParam 2879
+#define wxStyledTextEvent_GetListType 2880
+#define wxStyledTextEvent_GetX 2881
+#define wxStyledTextEvent_GetY 2882
+#define wxStyledTextEvent_GetDragText 2883
+#define wxStyledTextEvent_GetDragAllowMove 2884
+#define wxStyledTextEvent_GetDragResult 2885
+#define wxStyledTextEvent_GetShift 2886
+#define wxStyledTextEvent_GetControl 2887
+#define wxStyledTextEvent_GetAlt 2888
+#define utils_wxGetKeyState 2889
+#define utils_wxGetMousePosition 2890
+#define utils_wxGetMouseState 2891
+#define utils_wxSetDetectableAutoRepeat 2892
+#define utils_wxBell 2893
+#define utils_wxFindMenuItemId 2894
+#define utils_wxGenericFindWindowAtPoint 2895
+#define utils_wxFindWindowAtPoint 2896
+#define utils_wxBeginBusyCursor 2897
+#define utils_wxEndBusyCursor 2898
+#define utils_wxIsBusy 2899
+#define utils_wxShutdown 2900
+#define utils_wxShell 2901
+#define utils_wxLaunchDefaultBrowser 2902
+#define utils_wxGetEmailAddress 2903
+#define utils_wxGetUserId 2904
+#define utils_wxGetHomeDir 2905
+#define utils_wxNewId 2906
+#define utils_wxRegisterId 2907
+#define utils_wxGetCurrentId 2908
+#define utils_wxGetOsDescription 2909
+#define utils_wxIsPlatformLittleEndian 2910
+#define utils_wxIsPlatform64Bit 2911
+#define wxPrintout_new 2912
+#define wxPrintout_destruct 2913
+#define wxPrintout_GetDC 2914
+#define wxPrintout_GetPageSizeMM 2915
+#define wxPrintout_GetPageSizePixels 2916
+#define wxPrintout_GetPaperRectPixels 2917
+#define wxPrintout_GetPPIPrinter 2918
+#define wxPrintout_GetPPIScreen 2919
+#define wxPrintout_GetTitle 2920
+#define wxPrintout_IsPreview 2921
+#define wxPrintout_FitThisSizeToPaper 2922
+#define wxPrintout_FitThisSizeToPage 2923
+#define wxPrintout_FitThisSizeToPageMargins 2924
+#define wxPrintout_MapScreenSizeToPaper 2925
+#define wxPrintout_MapScreenSizeToPage 2926
+#define wxPrintout_MapScreenSizeToPageMargins 2927
+#define wxPrintout_MapScreenSizeToDevice 2928
+#define wxPrintout_GetLogicalPaperRect 2929
+#define wxPrintout_GetLogicalPageRect 2930
+#define wxPrintout_GetLogicalPageMarginsRect 2931
+#define wxPrintout_SetLogicalOrigin 2932
+#define wxPrintout_OffsetLogicalOrigin 2933
+#define wxStyledTextCtrl_new_2 2934
+#define wxStyledTextCtrl_new_0 2935
+#define wxStyledTextCtrl_destruct 2936
+#define wxStyledTextCtrl_Create 2937
+#define wxStyledTextCtrl_AddText 2938
+#define wxStyledTextCtrl_AddStyledText 2939
+#define wxStyledTextCtrl_InsertText 2940
+#define wxStyledTextCtrl_ClearAll 2941
+#define wxStyledTextCtrl_ClearDocumentStyle 2942
+#define wxStyledTextCtrl_GetLength 2943
+#define wxStyledTextCtrl_GetCharAt 2944
+#define wxStyledTextCtrl_GetCurrentPos 2945
+#define wxStyledTextCtrl_GetAnchor 2946
+#define wxStyledTextCtrl_GetStyleAt 2947
+#define wxStyledTextCtrl_Redo 2948
+#define wxStyledTextCtrl_SetUndoCollection 2949
+#define wxStyledTextCtrl_SelectAll 2950
+#define wxStyledTextCtrl_SetSavePoint 2951
+#define wxStyledTextCtrl_GetStyledText 2952
+#define wxStyledTextCtrl_CanRedo 2953
+#define wxStyledTextCtrl_MarkerLineFromHandle 2954
+#define wxStyledTextCtrl_MarkerDeleteHandle 2955
+#define wxStyledTextCtrl_GetUndoCollection 2956
+#define wxStyledTextCtrl_GetViewWhiteSpace 2957
+#define wxStyledTextCtrl_SetViewWhiteSpace 2958
+#define wxStyledTextCtrl_PositionFromPoint 2959
+#define wxStyledTextCtrl_PositionFromPointClose 2960
+#define wxStyledTextCtrl_GotoLine 2961
+#define wxStyledTextCtrl_GotoPos 2962
+#define wxStyledTextCtrl_SetAnchor 2963
+#define wxStyledTextCtrl_GetCurLine 2964
+#define wxStyledTextCtrl_GetEndStyled 2965
+#define wxStyledTextCtrl_ConvertEOLs 2966
+#define wxStyledTextCtrl_GetEOLMode 2967
+#define wxStyledTextCtrl_SetEOLMode 2968
+#define wxStyledTextCtrl_StartStyling 2969
+#define wxStyledTextCtrl_SetStyling 2970
+#define wxStyledTextCtrl_GetBufferedDraw 2971
+#define wxStyledTextCtrl_SetBufferedDraw 2972
+#define wxStyledTextCtrl_SetTabWidth 2973
+#define wxStyledTextCtrl_GetTabWidth 2974
+#define wxStyledTextCtrl_SetCodePage 2975
+#define wxStyledTextCtrl_MarkerDefine 2976
+#define wxStyledTextCtrl_MarkerSetForeground 2977
+#define wxStyledTextCtrl_MarkerSetBackground 2978
+#define wxStyledTextCtrl_MarkerAdd 2979
+#define wxStyledTextCtrl_MarkerDelete 2980
+#define wxStyledTextCtrl_MarkerDeleteAll 2981
+#define wxStyledTextCtrl_MarkerGet 2982
+#define wxStyledTextCtrl_MarkerNext 2983
+#define wxStyledTextCtrl_MarkerPrevious 2984
+#define wxStyledTextCtrl_MarkerDefineBitmap 2985
+#define wxStyledTextCtrl_MarkerAddSet 2986
+#define wxStyledTextCtrl_MarkerSetAlpha 2987
+#define wxStyledTextCtrl_SetMarginType 2988
+#define wxStyledTextCtrl_GetMarginType 2989
+#define wxStyledTextCtrl_SetMarginWidth 2990
+#define wxStyledTextCtrl_GetMarginWidth 2991
+#define wxStyledTextCtrl_SetMarginMask 2992
+#define wxStyledTextCtrl_GetMarginMask 2993
+#define wxStyledTextCtrl_SetMarginSensitive 2994
+#define wxStyledTextCtrl_GetMarginSensitive 2995
+#define wxStyledTextCtrl_StyleClearAll 2996
+#define wxStyledTextCtrl_StyleSetForeground 2997
+#define wxStyledTextCtrl_StyleSetBackground 2998
+#define wxStyledTextCtrl_StyleSetBold 2999
+#define wxStyledTextCtrl_StyleSetItalic 3000
+#define wxStyledTextCtrl_StyleSetSize 3001
+#define wxStyledTextCtrl_StyleSetFaceName 3002
+#define wxStyledTextCtrl_StyleSetEOLFilled 3003
+#define wxStyledTextCtrl_StyleResetDefault 3004
+#define wxStyledTextCtrl_StyleSetUnderline 3005
+#define wxStyledTextCtrl_StyleSetCase 3006
+#define wxStyledTextCtrl_StyleSetHotSpot 3007
+#define wxStyledTextCtrl_SetSelForeground 3008
+#define wxStyledTextCtrl_SetSelBackground 3009
+#define wxStyledTextCtrl_GetSelAlpha 3010
+#define wxStyledTextCtrl_SetSelAlpha 3011
+#define wxStyledTextCtrl_SetCaretForeground 3012
+#define wxStyledTextCtrl_CmdKeyAssign 3013
+#define wxStyledTextCtrl_CmdKeyClear 3014
+#define wxStyledTextCtrl_CmdKeyClearAll 3015
+#define wxStyledTextCtrl_SetStyleBytes 3016
+#define wxStyledTextCtrl_StyleSetVisible 3017
+#define wxStyledTextCtrl_GetCaretPeriod 3018
+#define wxStyledTextCtrl_SetCaretPeriod 3019
+#define wxStyledTextCtrl_SetWordChars 3020
+#define wxStyledTextCtrl_BeginUndoAction 3021
+#define wxStyledTextCtrl_EndUndoAction 3022
+#define wxStyledTextCtrl_IndicatorSetStyle 3023
+#define wxStyledTextCtrl_IndicatorGetStyle 3024
+#define wxStyledTextCtrl_IndicatorSetForeground 3025
+#define wxStyledTextCtrl_IndicatorGetForeground 3026
+#define wxStyledTextCtrl_SetWhitespaceForeground 3027
+#define wxStyledTextCtrl_SetWhitespaceBackground 3028
+#define wxStyledTextCtrl_GetStyleBits 3029
+#define wxStyledTextCtrl_SetLineState 3030
+#define wxStyledTextCtrl_GetLineState 3031
+#define wxStyledTextCtrl_GetMaxLineState 3032
+#define wxStyledTextCtrl_GetCaretLineVisible 3033
+#define wxStyledTextCtrl_SetCaretLineVisible 3034
+#define wxStyledTextCtrl_GetCaretLineBackground 3035
+#define wxStyledTextCtrl_SetCaretLineBackground 3036
+#define wxStyledTextCtrl_AutoCompShow 3037
+#define wxStyledTextCtrl_AutoCompCancel 3038
+#define wxStyledTextCtrl_AutoCompActive 3039
+#define wxStyledTextCtrl_AutoCompPosStart 3040
+#define wxStyledTextCtrl_AutoCompComplete 3041
+#define wxStyledTextCtrl_AutoCompStops 3042
+#define wxStyledTextCtrl_AutoCompSetSeparator 3043
+#define wxStyledTextCtrl_AutoCompGetSeparator 3044
+#define wxStyledTextCtrl_AutoCompSelect 3045
+#define wxStyledTextCtrl_AutoCompSetCancelAtStart 3046
+#define wxStyledTextCtrl_AutoCompGetCancelAtStart 3047
+#define wxStyledTextCtrl_AutoCompSetFillUps 3048
+#define wxStyledTextCtrl_AutoCompSetChooseSingle 3049
+#define wxStyledTextCtrl_AutoCompGetChooseSingle 3050
+#define wxStyledTextCtrl_AutoCompSetIgnoreCase 3051
+#define wxStyledTextCtrl_AutoCompGetIgnoreCase 3052
+#define wxStyledTextCtrl_UserListShow 3053
+#define wxStyledTextCtrl_AutoCompSetAutoHide 3054
+#define wxStyledTextCtrl_AutoCompGetAutoHide 3055
+#define wxStyledTextCtrl_AutoCompSetDropRestOfWord 3056
+#define wxStyledTextCtrl_AutoCompGetDropRestOfWord 3057
+#define wxStyledTextCtrl_RegisterImage 3058
+#define wxStyledTextCtrl_ClearRegisteredImages 3059
+#define wxStyledTextCtrl_AutoCompGetTypeSeparator 3060
+#define wxStyledTextCtrl_AutoCompSetTypeSeparator 3061
+#define wxStyledTextCtrl_AutoCompSetMaxWidth 3062
+#define wxStyledTextCtrl_AutoCompGetMaxWidth 3063
+#define wxStyledTextCtrl_AutoCompSetMaxHeight 3064
+#define wxStyledTextCtrl_AutoCompGetMaxHeight 3065
+#define wxStyledTextCtrl_SetIndent 3066
+#define wxStyledTextCtrl_GetIndent 3067
+#define wxStyledTextCtrl_SetUseTabs 3068
+#define wxStyledTextCtrl_GetUseTabs 3069
+#define wxStyledTextCtrl_SetLineIndentation 3070
+#define wxStyledTextCtrl_GetLineIndentation 3071
+#define wxStyledTextCtrl_GetLineIndentPosition 3072
+#define wxStyledTextCtrl_GetColumn 3073
+#define wxStyledTextCtrl_SetUseHorizontalScrollBar 3074
+#define wxStyledTextCtrl_GetUseHorizontalScrollBar 3075
+#define wxStyledTextCtrl_SetIndentationGuides 3076
+#define wxStyledTextCtrl_GetIndentationGuides 3077
+#define wxStyledTextCtrl_SetHighlightGuide 3078
+#define wxStyledTextCtrl_GetHighlightGuide 3079
+#define wxStyledTextCtrl_GetLineEndPosition 3080
+#define wxStyledTextCtrl_GetCodePage 3081
+#define wxStyledTextCtrl_GetCaretForeground 3082
+#define wxStyledTextCtrl_GetReadOnly 3083
+#define wxStyledTextCtrl_SetCurrentPos 3084
+#define wxStyledTextCtrl_SetSelectionStart 3085
+#define wxStyledTextCtrl_GetSelectionStart 3086
+#define wxStyledTextCtrl_SetSelectionEnd 3087
+#define wxStyledTextCtrl_GetSelectionEnd 3088
+#define wxStyledTextCtrl_SetPrintMagnification 3089
+#define wxStyledTextCtrl_GetPrintMagnification 3090
+#define wxStyledTextCtrl_SetPrintColourMode 3091
+#define wxStyledTextCtrl_GetPrintColourMode 3092
+#define wxStyledTextCtrl_FindText 3093
+#define wxStyledTextCtrl_FormatRange 3094
+#define wxStyledTextCtrl_GetFirstVisibleLine 3095
+#define wxStyledTextCtrl_GetLine 3096
+#define wxStyledTextCtrl_GetLineCount 3097
+#define wxStyledTextCtrl_SetMarginLeft 3098
+#define wxStyledTextCtrl_GetMarginLeft 3099
+#define wxStyledTextCtrl_SetMarginRight 3100
+#define wxStyledTextCtrl_GetMarginRight 3101
+#define wxStyledTextCtrl_GetModify 3102
+#define wxStyledTextCtrl_SetSelection 3103
+#define wxStyledTextCtrl_GetSelectedText 3104
+#define wxStyledTextCtrl_GetTextRange 3105
+#define wxStyledTextCtrl_HideSelection 3106
+#define wxStyledTextCtrl_LineFromPosition 3107
+#define wxStyledTextCtrl_PositionFromLine 3108
+#define wxStyledTextCtrl_LineScroll 3109
+#define wxStyledTextCtrl_EnsureCaretVisible 3110
+#define wxStyledTextCtrl_ReplaceSelection 3111
+#define wxStyledTextCtrl_SetReadOnly 3112
+#define wxStyledTextCtrl_CanPaste 3113
+#define wxStyledTextCtrl_CanUndo 3114
+#define wxStyledTextCtrl_EmptyUndoBuffer 3115
+#define wxStyledTextCtrl_Undo 3116
+#define wxStyledTextCtrl_Cut 3117
+#define wxStyledTextCtrl_Copy 3118
+#define wxStyledTextCtrl_Paste 3119
+#define wxStyledTextCtrl_Clear 3120
+#define wxStyledTextCtrl_SetText 3121
+#define wxStyledTextCtrl_GetText 3122
+#define wxStyledTextCtrl_GetTextLength 3123
+#define wxStyledTextCtrl_GetOvertype 3124
+#define wxStyledTextCtrl_SetCaretWidth 3125
+#define wxStyledTextCtrl_GetCaretWidth 3126
+#define wxStyledTextCtrl_SetTargetStart 3127
+#define wxStyledTextCtrl_GetTargetStart 3128
+#define wxStyledTextCtrl_SetTargetEnd 3129
+#define wxStyledTextCtrl_GetTargetEnd 3130
+#define wxStyledTextCtrl_ReplaceTarget 3131
+#define wxStyledTextCtrl_SearchInTarget 3132
+#define wxStyledTextCtrl_SetSearchFlags 3133
+#define wxStyledTextCtrl_GetSearchFlags 3134
+#define wxStyledTextCtrl_CallTipShow 3135
+#define wxStyledTextCtrl_CallTipCancel 3136
+#define wxStyledTextCtrl_CallTipActive 3137
+#define wxStyledTextCtrl_CallTipPosAtStart 3138
+#define wxStyledTextCtrl_CallTipSetHighlight 3139
+#define wxStyledTextCtrl_CallTipSetBackground 3140
+#define wxStyledTextCtrl_CallTipSetForeground 3141
+#define wxStyledTextCtrl_CallTipSetForegroundHighlight 3142
+#define wxStyledTextCtrl_CallTipUseStyle 3143
+#define wxStyledTextCtrl_VisibleFromDocLine 3144
+#define wxStyledTextCtrl_DocLineFromVisible 3145
+#define wxStyledTextCtrl_WrapCount 3146
+#define wxStyledTextCtrl_SetFoldLevel 3147
+#define wxStyledTextCtrl_GetFoldLevel 3148
+#define wxStyledTextCtrl_GetLastChild 3149
+#define wxStyledTextCtrl_GetFoldParent 3150
+#define wxStyledTextCtrl_ShowLines 3151
+#define wxStyledTextCtrl_HideLines 3152
+#define wxStyledTextCtrl_GetLineVisible 3153
+#define wxStyledTextCtrl_SetFoldExpanded 3154
+#define wxStyledTextCtrl_GetFoldExpanded 3155
+#define wxStyledTextCtrl_ToggleFold 3156
+#define wxStyledTextCtrl_EnsureVisible 3157
+#define wxStyledTextCtrl_SetFoldFlags 3158
+#define wxStyledTextCtrl_EnsureVisibleEnforcePolicy 3159
+#define wxStyledTextCtrl_SetTabIndents 3160
+#define wxStyledTextCtrl_GetTabIndents 3161
+#define wxStyledTextCtrl_SetBackSpaceUnIndents 3162
+#define wxStyledTextCtrl_GetBackSpaceUnIndents 3163
+#define wxStyledTextCtrl_SetMouseDwellTime 3164
+#define wxStyledTextCtrl_GetMouseDwellTime 3165
+#define wxStyledTextCtrl_WordStartPosition 3166
+#define wxStyledTextCtrl_WordEndPosition 3167
+#define wxStyledTextCtrl_SetWrapMode 3168
+#define wxStyledTextCtrl_GetWrapMode 3169
+#define wxStyledTextCtrl_SetWrapVisualFlags 3170
+#define wxStyledTextCtrl_GetWrapVisualFlags 3171
+#define wxStyledTextCtrl_SetWrapVisualFlagsLocation 3172
+#define wxStyledTextCtrl_GetWrapVisualFlagsLocation 3173
+#define wxStyledTextCtrl_SetWrapStartIndent 3174
+#define wxStyledTextCtrl_GetWrapStartIndent 3175
+#define wxStyledTextCtrl_SetLayoutCache 3176
+#define wxStyledTextCtrl_GetLayoutCache 3177
+#define wxStyledTextCtrl_SetScrollWidth 3178
+#define wxStyledTextCtrl_GetScrollWidth 3179
+#define wxStyledTextCtrl_TextWidth 3180
+#define wxStyledTextCtrl_GetEndAtLastLine 3181
+#define wxStyledTextCtrl_TextHeight 3182
+#define wxStyledTextCtrl_SetUseVerticalScrollBar 3183
+#define wxStyledTextCtrl_GetUseVerticalScrollBar 3184
+#define wxStyledTextCtrl_AppendText 3185
+#define wxStyledTextCtrl_GetTwoPhaseDraw 3186
+#define wxStyledTextCtrl_SetTwoPhaseDraw 3187
+#define wxStyledTextCtrl_TargetFromSelection 3188
+#define wxStyledTextCtrl_LinesJoin 3189
+#define wxStyledTextCtrl_LinesSplit 3190
+#define wxStyledTextCtrl_SetFoldMarginColour 3191
+#define wxStyledTextCtrl_SetFoldMarginHiColour 3192
+#define wxStyledTextCtrl_LineDown 3193
+#define wxStyledTextCtrl_LineDownExtend 3194
+#define wxStyledTextCtrl_LineUp 3195
+#define wxStyledTextCtrl_LineUpExtend 3196
+#define wxStyledTextCtrl_CharLeft 3197
+#define wxStyledTextCtrl_CharLeftExtend 3198
+#define wxStyledTextCtrl_CharRight 3199
+#define wxStyledTextCtrl_CharRightExtend 3200
+#define wxStyledTextCtrl_WordLeft 3201
+#define wxStyledTextCtrl_WordLeftExtend 3202
+#define wxStyledTextCtrl_WordRight 3203
+#define wxStyledTextCtrl_WordRightExtend 3204
+#define wxStyledTextCtrl_Home 3205
+#define wxStyledTextCtrl_HomeExtend 3206
+#define wxStyledTextCtrl_LineEnd 3207
+#define wxStyledTextCtrl_LineEndExtend 3208
+#define wxStyledTextCtrl_DocumentStart 3209
+#define wxStyledTextCtrl_DocumentStartExtend 3210
+#define wxStyledTextCtrl_DocumentEnd 3211
+#define wxStyledTextCtrl_DocumentEndExtend 3212
+#define wxStyledTextCtrl_PageUp 3213
+#define wxStyledTextCtrl_PageUpExtend 3214
+#define wxStyledTextCtrl_PageDown 3215
+#define wxStyledTextCtrl_PageDownExtend 3216
+#define wxStyledTextCtrl_EditToggleOvertype 3217
+#define wxStyledTextCtrl_Cancel 3218
+#define wxStyledTextCtrl_DeleteBack 3219
+#define wxStyledTextCtrl_Tab 3220
+#define wxStyledTextCtrl_BackTab 3221
+#define wxStyledTextCtrl_NewLine 3222
+#define wxStyledTextCtrl_FormFeed 3223
+#define wxStyledTextCtrl_VCHome 3224
+#define wxStyledTextCtrl_VCHomeExtend 3225
+#define wxStyledTextCtrl_ZoomIn 3226
+#define wxStyledTextCtrl_ZoomOut 3227
+#define wxStyledTextCtrl_DelWordLeft 3228
+#define wxStyledTextCtrl_DelWordRight 3229
+#define wxStyledTextCtrl_LineCut 3230
+#define wxStyledTextCtrl_LineDelete 3231
+#define wxStyledTextCtrl_LineTranspose 3232
+#define wxStyledTextCtrl_LineDuplicate 3233
+#define wxStyledTextCtrl_LowerCase 3234
+#define wxStyledTextCtrl_UpperCase 3235
+#define wxStyledTextCtrl_LineScrollDown 3236
+#define wxStyledTextCtrl_LineScrollUp 3237
+#define wxStyledTextCtrl_DeleteBackNotLine 3238
+#define wxStyledTextCtrl_HomeDisplay 3239
+#define wxStyledTextCtrl_HomeDisplayExtend 3240
+#define wxStyledTextCtrl_LineEndDisplay 3241
+#define wxStyledTextCtrl_LineEndDisplayExtend 3242
+#define wxStyledTextCtrl_HomeWrapExtend 3243
+#define wxStyledTextCtrl_LineEndWrap 3244
+#define wxStyledTextCtrl_LineEndWrapExtend 3245
+#define wxStyledTextCtrl_VCHomeWrap 3246
+#define wxStyledTextCtrl_VCHomeWrapExtend 3247
+#define wxStyledTextCtrl_LineCopy 3248
+#define wxStyledTextCtrl_MoveCaretInsideView 3249
+#define wxStyledTextCtrl_LineLength 3250
+#define wxStyledTextCtrl_BraceHighlight 3251
+#define wxStyledTextCtrl_BraceBadLight 3252
+#define wxStyledTextCtrl_BraceMatch 3253
+#define wxStyledTextCtrl_GetViewEOL 3254
+#define wxStyledTextCtrl_SetViewEOL 3255
+#define wxStyledTextCtrl_SetModEventMask 3256
+#define wxStyledTextCtrl_GetEdgeColumn 3257
+#define wxStyledTextCtrl_SetEdgeColumn 3258
+#define wxStyledTextCtrl_GetEdgeMode 3259
+#define wxStyledTextCtrl_GetEdgeColour 3260
+#define wxStyledTextCtrl_SetEdgeColour 3261
+#define wxStyledTextCtrl_SearchAnchor 3262
+#define wxStyledTextCtrl_SearchNext 3263
+#define wxStyledTextCtrl_SearchPrev 3264
+#define wxStyledTextCtrl_LinesOnScreen 3265
+#define wxStyledTextCtrl_UsePopUp 3266
+#define wxStyledTextCtrl_SelectionIsRectangle 3267
+#define wxStyledTextCtrl_SetZoom 3268
+#define wxStyledTextCtrl_GetZoom 3269
+#define wxStyledTextCtrl_GetModEventMask 3270
+#define wxStyledTextCtrl_SetSTCFocus 3271
+#define wxStyledTextCtrl_GetSTCFocus 3272
+#define wxStyledTextCtrl_SetStatus 3273
+#define wxStyledTextCtrl_GetStatus 3274
+#define wxStyledTextCtrl_SetMouseDownCaptures 3275
+#define wxStyledTextCtrl_GetMouseDownCaptures 3276
+#define wxStyledTextCtrl_SetSTCCursor 3277
+#define wxStyledTextCtrl_GetSTCCursor 3278
+#define wxStyledTextCtrl_SetControlCharSymbol 3279
+#define wxStyledTextCtrl_GetControlCharSymbol 3280
+#define wxStyledTextCtrl_WordPartLeft 3281
+#define wxStyledTextCtrl_WordPartLeftExtend 3282
+#define wxStyledTextCtrl_WordPartRight 3283
+#define wxStyledTextCtrl_WordPartRightExtend 3284
+#define wxStyledTextCtrl_SetVisiblePolicy 3285
+#define wxStyledTextCtrl_DelLineLeft 3286
+#define wxStyledTextCtrl_DelLineRight 3287
+#define wxStyledTextCtrl_GetXOffset 3288
+#define wxStyledTextCtrl_ChooseCaretX 3289
+#define wxStyledTextCtrl_SetXCaretPolicy 3290
+#define wxStyledTextCtrl_SetYCaretPolicy 3291
+#define wxStyledTextCtrl_GetPrintWrapMode 3292
+#define wxStyledTextCtrl_SetHotspotActiveForeground 3293
+#define wxStyledTextCtrl_SetHotspotActiveBackground 3294
+#define wxStyledTextCtrl_SetHotspotActiveUnderline 3295
+#define wxStyledTextCtrl_SetHotspotSingleLine 3296
+#define wxStyledTextCtrl_ParaDownExtend 3297
+#define wxStyledTextCtrl_ParaUp 3298
+#define wxStyledTextCtrl_ParaUpExtend 3299
+#define wxStyledTextCtrl_PositionBefore 3300
+#define wxStyledTextCtrl_PositionAfter 3301
+#define wxStyledTextCtrl_CopyRange 3302
+#define wxStyledTextCtrl_CopyText 3303
+#define wxStyledTextCtrl_SetSelectionMode 3304
+#define wxStyledTextCtrl_GetSelectionMode 3305
+#define wxStyledTextCtrl_LineDownRectExtend 3306
+#define wxStyledTextCtrl_LineUpRectExtend 3307
+#define wxStyledTextCtrl_CharLeftRectExtend 3308
+#define wxStyledTextCtrl_CharRightRectExtend 3309
+#define wxStyledTextCtrl_HomeRectExtend 3310
+#define wxStyledTextCtrl_VCHomeRectExtend 3311
+#define wxStyledTextCtrl_LineEndRectExtend 3312
+#define wxStyledTextCtrl_PageUpRectExtend 3313
+#define wxStyledTextCtrl_PageDownRectExtend 3314
+#define wxStyledTextCtrl_StutteredPageUp 3315
+#define wxStyledTextCtrl_StutteredPageUpExtend 3316
+#define wxStyledTextCtrl_StutteredPageDown 3317
+#define wxStyledTextCtrl_StutteredPageDownExtend 3318
+#define wxStyledTextCtrl_WordLeftEnd 3319
+#define wxStyledTextCtrl_WordLeftEndExtend 3320
+#define wxStyledTextCtrl_WordRightEnd 3321
+#define wxStyledTextCtrl_WordRightEndExtend 3322
+#define wxStyledTextCtrl_SetWhitespaceChars 3323
+#define wxStyledTextCtrl_SetCharsDefault 3324
+#define wxStyledTextCtrl_AutoCompGetCurrent 3325
+#define wxStyledTextCtrl_Allocate 3326
+#define wxStyledTextCtrl_FindColumn 3327
+#define wxStyledTextCtrl_GetCaretSticky 3328
+#define wxStyledTextCtrl_SetCaretSticky 3329
+#define wxStyledTextCtrl_ToggleCaretSticky 3330
+#define wxStyledTextCtrl_SetPasteConvertEndings 3331
+#define wxStyledTextCtrl_GetPasteConvertEndings 3332
+#define wxStyledTextCtrl_SelectionDuplicate 3333
+#define wxStyledTextCtrl_SetCaretLineBackAlpha 3334
+#define wxStyledTextCtrl_GetCaretLineBackAlpha 3335
+#define wxStyledTextCtrl_StartRecord 3336
+#define wxStyledTextCtrl_StopRecord 3337
+#define wxStyledTextCtrl_SetLexer 3338
+#define wxStyledTextCtrl_GetLexer 3339
+#define wxStyledTextCtrl_Colourise 3340
+#define wxStyledTextCtrl_SetProperty 3341
+#define wxStyledTextCtrl_SetKeyWords 3342
+#define wxStyledTextCtrl_SetLexerLanguage 3343
+#define wxStyledTextCtrl_GetProperty 3344
+#define wxStyledTextCtrl_GetStyleBitsNeeded 3345
+#define wxStyledTextCtrl_GetCurrentLine 3346
+#define wxStyledTextCtrl_StyleSetSpec 3347
+#define wxStyledTextCtrl_StyleSetFont 3348
+#define wxStyledTextCtrl_StyleSetFontAttr 3349
+#define wxStyledTextCtrl_StyleSetCharacterSet 3350
+#define wxStyledTextCtrl_StyleSetFontEncoding 3351
+#define wxStyledTextCtrl_CmdKeyExecute 3352
+#define wxStyledTextCtrl_SetMargins 3353
+#define wxStyledTextCtrl_GetSelection 3354
+#define wxStyledTextCtrl_PointFromPosition 3355
+#define wxStyledTextCtrl_ScrollToLine 3356
+#define wxStyledTextCtrl_ScrollToColumn 3357
+#define wxStyledTextCtrl_SendMsg 3358
+#define wxStyledTextCtrl_SetVScrollBar 3359
+#define wxStyledTextCtrl_SetHScrollBar 3360
+#define wxStyledTextCtrl_GetLastKeydownProcessed 3361
+#define wxStyledTextCtrl_SetLastKeydownProcessed 3362
+#define wxStyledTextCtrl_SaveFile 3363
+#define wxStyledTextCtrl_LoadFile 3364
+#define wxStyledTextCtrl_DoDragOver 3365
+#define wxStyledTextCtrl_DoDropText 3366
+#define wxStyledTextCtrl_GetUseAntiAliasing 3367
+#define wxStyledTextCtrl_AddTextRaw 3368
+#define wxStyledTextCtrl_InsertTextRaw 3369
+#define wxStyledTextCtrl_GetCurLineRaw 3370
+#define wxStyledTextCtrl_GetLineRaw 3371
+#define wxStyledTextCtrl_GetSelectedTextRaw 3372
+#define wxStyledTextCtrl_GetTextRangeRaw 3373
+#define wxStyledTextCtrl_SetTextRaw 3374
+#define wxStyledTextCtrl_GetTextRaw 3375
+#define wxStyledTextCtrl_AppendTextRaw 3376
+#define wxArtProvider_GetBitmap 3377
+#define wxArtProvider_GetIcon 3378
+#define wxTreeEvent_GetKeyCode 3379
+#define wxTreeEvent_GetItem 3380
+#define wxTreeEvent_GetKeyEvent 3381
+#define wxTreeEvent_GetLabel 3382
+#define wxTreeEvent_GetOldItem 3383
+#define wxTreeEvent_GetPoint 3384
+#define wxTreeEvent_IsEditCancelled 3385
+#define wxTreeEvent_SetToolTip 3386
+#define wxNotebookEvent_GetOldSelection 3387
+#define wxNotebookEvent_GetSelection 3388
+#define wxNotebookEvent_SetOldSelection 3389
+#define wxNotebookEvent_SetSelection 3390
+#define wxFileDataObject_new 3391
+#define wxFileDataObject_AddFile 3392
+#define wxFileDataObject_GetFilenames 3393
+#define wxFileDataObject_destroy 3394
+#define wxTextDataObject_new 3395
+#define wxTextDataObject_GetTextLength 3396
+#define wxTextDataObject_GetText 3397
+#define wxTextDataObject_SetText 3398
+#define wxTextDataObject_destroy 3399
+#define wxBitmapDataObject_new_1_1 3400
+#define wxBitmapDataObject_new_1_0 3401
+#define wxBitmapDataObject_GetBitmap 3402
+#define wxBitmapDataObject_SetBitmap 3403
+#define wxBitmapDataObject_destroy 3404
+#define wxClipboard_new 3406
+#define wxClipboard_destruct 3407
+#define wxClipboard_AddData 3408
+#define wxClipboard_Clear 3409
+#define wxClipboard_Close 3410
+#define wxClipboard_Flush 3411
+#define wxClipboard_GetData 3412
+#define wxClipboard_IsOpened 3413
+#define wxClipboard_Open 3414
+#define wxClipboard_SetData 3415
+#define wxClipboard_UsePrimarySelection 3417
+#define wxClipboard_IsSupported 3418
+#define wxClipboard_Get 3419
+#define wxSpinEvent_GetPosition 3420
+#define wxSpinEvent_SetPosition 3421
+#define wxSplitterWindow_new_0 3422
+#define wxSplitterWindow_new_2 3423
+#define wxSplitterWindow_destruct 3424
+#define wxSplitterWindow_Create 3425
+#define wxSplitterWindow_GetMinimumPaneSize 3426
+#define wxSplitterWindow_GetSashGravity 3427
+#define wxSplitterWindow_GetSashPosition 3428
+#define wxSplitterWindow_GetSplitMode 3429
+#define wxSplitterWindow_GetWindow1 3430
+#define wxSplitterWindow_GetWindow2 3431
+#define wxSplitterWindow_Initialize 3432
+#define wxSplitterWindow_IsSplit 3433
+#define wxSplitterWindow_ReplaceWindow 3434
+#define wxSplitterWindow_SetSashGravity 3435
+#define wxSplitterWindow_SetSashPosition 3436
+#define wxSplitterWindow_SetSashSize 3437
+#define wxSplitterWindow_SetMinimumPaneSize 3438
+#define wxSplitterWindow_SetSplitMode 3439
+#define wxSplitterWindow_SplitHorizontally 3440
+#define wxSplitterWindow_SplitVertically 3441
+#define wxSplitterWindow_Unsplit 3442
+#define wxSplitterWindow_UpdateSize 3443
+#define wxSplitterEvent_GetSashPosition 3444
+#define wxSplitterEvent_GetX 3445
+#define wxSplitterEvent_GetY 3446
+#define wxSplitterEvent_GetWindowBeingRemoved 3447
+#define wxSplitterEvent_SetSashPosition 3448
+#define wxHtmlWindow_new_0 3449
+#define wxHtmlWindow_new_2 3450
+#define wxHtmlWindow_AppendToPage 3451
+#define wxHtmlWindow_GetOpenedAnchor 3452
+#define wxHtmlWindow_GetOpenedPage 3453
+#define wxHtmlWindow_GetOpenedPageTitle 3454
+#define wxHtmlWindow_GetRelatedFrame 3455
+#define wxHtmlWindow_HistoryBack 3456
+#define wxHtmlWindow_HistoryCanBack 3457
+#define wxHtmlWindow_HistoryCanForward 3458
+#define wxHtmlWindow_HistoryClear 3459
+#define wxHtmlWindow_HistoryForward 3460
+#define wxHtmlWindow_LoadFile 3461
+#define wxHtmlWindow_LoadPage 3462
+#define wxHtmlWindow_SelectAll 3463
+#define wxHtmlWindow_SelectionToText 3464
+#define wxHtmlWindow_SelectLine 3465
+#define wxHtmlWindow_SelectWord 3466
+#define wxHtmlWindow_SetBorders 3467
+#define wxHtmlWindow_SetFonts 3468
+#define wxHtmlWindow_SetPage 3469
+#define wxHtmlWindow_SetRelatedFrame 3470
+#define wxHtmlWindow_SetRelatedStatusBar 3471
+#define wxHtmlWindow_ToText 3472
+#define wxHtmlWindow_destroy 3473
+#define wxHtmlLinkEvent_GetLinkInfo 3474
+#define wxAuiNotebookEvent_SetSelection 3475
+#define wxAuiNotebookEvent_GetSelection 3476
+#define wxAuiNotebookEvent_SetOldSelection 3477
+#define wxAuiNotebookEvent_GetOldSelection 3478
+#define wxAuiNotebookEvent_SetDragSource 3479
+#define wxAuiNotebookEvent_GetDragSource 3480
+#define wxAuiManagerEvent_SetManager 3481
+#define wxAuiManagerEvent_GetManager 3482
+#define wxAuiManagerEvent_SetPane 3483
+#define wxAuiManagerEvent_GetPane 3484
+#define wxAuiManagerEvent_SetButton 3485
+#define wxAuiManagerEvent_GetButton 3486
+#define wxAuiManagerEvent_SetDC 3487
+#define wxAuiManagerEvent_GetDC 3488
+#define wxAuiManagerEvent_Veto 3489
+#define wxAuiManagerEvent_GetVeto 3490
+#define wxAuiManagerEvent_SetCanVeto 3491
+#define wxAuiManagerEvent_CanVeto 3492
+#define wxLogNull_new 3493
+#define wxLogNull_destroy 3494
diff --git a/lib/wx/include/wx.hrl b/lib/wx/include/wx.hrl
index 6fef625b14..8659b71985 100644
--- a/lib/wx/include/wx.hrl
+++ b/lib/wx/include/wx.hrl
@@ -325,16 +325,339 @@
-define(wxWHITE_PEN, wxe_util:get_const(wxWHITE_PEN)).
%% Enum and defines
-% From define::From bookctrl.h
--define(wxEVT_COMMAND_BOOKCTRL_PAGE_CHANGING, ?wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING).
--define(wxEVT_COMMAND_BOOKCTRL_PAGE_CHANGED, ?wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED).
+% From class wxAuiManager
+-define(wxAuiManager_actionNone, 0).
+-define(wxAuiManager_actionResize, 1).
+-define(wxAuiManager_actionClickButton, 2).
+-define(wxAuiManager_actionClickCaption, 3).
+-define(wxAuiManager_actionDragToolbarPane, 4).
+-define(wxAuiManager_actionDragFloatingPane, 5).
+% From class wxAuiPaneInfo::wxAuiPaneState
+-define(wxAuiPaneInfo_optionFloating, 1).
+-define(wxAuiPaneInfo_optionHidden, 2).
+-define(wxAuiPaneInfo_optionLeftDockable, 4).
+-define(wxAuiPaneInfo_optionRightDockable, 8).
+-define(wxAuiPaneInfo_optionTopDockable, 16).
+-define(wxAuiPaneInfo_optionBottomDockable, 32).
+-define(wxAuiPaneInfo_optionFloatable, 64).
+-define(wxAuiPaneInfo_optionMovable, 128).
+-define(wxAuiPaneInfo_optionResizable, 256).
+-define(wxAuiPaneInfo_optionPaneBorder, 512).
+-define(wxAuiPaneInfo_optionCaption, 1024).
+-define(wxAuiPaneInfo_optionGripper, 2048).
+-define(wxAuiPaneInfo_optionDestroyOnClose, 4096).
+-define(wxAuiPaneInfo_optionToolbar, 8192).
+-define(wxAuiPaneInfo_optionActive, 16384).
+-define(wxAuiPaneInfo_optionGripperTop, 32768).
+-define(wxAuiPaneInfo_optionMaximized, 65536).
+-define(wxAuiPaneInfo_optionDockFixed, 131072).
+-define(wxAuiPaneInfo_buttonClose, 2097152).
+-define(wxAuiPaneInfo_buttonMaximize, 4194304).
+-define(wxAuiPaneInfo_buttonMinimize, 8388608).
+-define(wxAuiPaneInfo_buttonPin, 16777216).
+-define(wxAuiPaneInfo_buttonCustom1, 67108864).
+-define(wxAuiPaneInfo_buttonCustom2, 134217728).
+-define(wxAuiPaneInfo_buttonCustom3, 268435456).
+-define(wxAuiPaneInfo_savedHiddenState, 1073741824).
+-define(wxAuiPaneInfo_actionPane, 2147483648).
+% From class wxBitmap::Representation
+-define(wxBitmap_Pixmap, 0).
+-define(wxBitmap_Pixbuf, 1).
+% From class wxChoicebook
+-define(wxChoicebook_SetSelection_SendEvent, 1).
+% From class wxDateTime::Calendar
+-define(wxDateTime_Gregorian, 0).
+-define(wxDateTime_Julian, 1).
+% From class wxDateTime::Country
+-define(wxDateTime_Country_Unknown, 0).
+-define(wxDateTime_Country_Default, 1).
+-define(wxDateTime_Country_WesternEurope_Start, 2).
+-define(wxDateTime_Country_EEC, ?Country_WesternEurope_Start).
+-define(wxDateTime_France, (?Country_WesternEurope_Start+1)).
+-define(wxDateTime_Germany, (?Country_WesternEurope_Start+2)).
+-define(wxDateTime_UK, (?Country_WesternEurope_Start+3)).
+-define(wxDateTime_Country_WesternEurope_End, ?UK).
+-define(wxDateTime_Russia, (?UK+1)).
+-define(wxDateTime_USA, (?UK+2)).
+% From class wxDateTime::GregorianAdoption
+-define(wxDateTime_Gr_Unknown, 0).
+-define(wxDateTime_Gr_Standard, 1).
+-define(wxDateTime_Gr_Alaska, 2).
+-define(wxDateTime_Gr_Albania, 3).
+-define(wxDateTime_Gr_Austria, ?Gr_Unknown).
+-define(wxDateTime_Gr_Austria_Brixen, (?Gr_Unknown+1)).
+-define(wxDateTime_Gr_Austria_Salzburg, ?Gr_Austria_Brixen).
+-define(wxDateTime_Gr_Austria_Tyrol, ?Gr_Austria_Brixen).
+-define(wxDateTime_Gr_Austria_Carinthia, (?Gr_Austria_Brixen+1)).
+-define(wxDateTime_Gr_Austria_Styria, ?Gr_Austria_Carinthia).
+-define(wxDateTime_Gr_Belgium, (?Gr_Austria_Carinthia+1)).
+-define(wxDateTime_Gr_Bulgaria, ?Gr_Unknown).
+-define(wxDateTime_Gr_Bulgaria_1, (?Gr_Unknown+1)).
+-define(wxDateTime_Gr_Bulgaria_2, (?Gr_Unknown+2)).
+-define(wxDateTime_Gr_Bulgaria_3, (?Gr_Unknown+3)).
+-define(wxDateTime_Gr_Canada, ?Gr_Unknown).
+-define(wxDateTime_Gr_China, ?Gr_Unknown).
+-define(wxDateTime_Gr_China_1, (?Gr_Unknown+1)).
+-define(wxDateTime_Gr_China_2, (?Gr_Unknown+2)).
+-define(wxDateTime_Gr_Czechoslovakia, (?Gr_Unknown+3)).
+-define(wxDateTime_Gr_Denmark, (?Gr_Unknown+4)).
+-define(wxDateTime_Gr_Egypt, (?Gr_Unknown+5)).
+-define(wxDateTime_Gr_Estonia, (?Gr_Unknown+6)).
+-define(wxDateTime_Gr_Finland, (?Gr_Unknown+7)).
+-define(wxDateTime_Gr_France, (?Gr_Unknown+8)).
+-define(wxDateTime_Gr_France_Alsace, (?Gr_Unknown+9)).
+-define(wxDateTime_Gr_France_Lorraine, (?Gr_Unknown+10)).
+-define(wxDateTime_Gr_France_Strasbourg, (?Gr_Unknown+11)).
+-define(wxDateTime_Gr_Germany, ?Gr_Unknown).
+-define(wxDateTime_Gr_Germany_Catholic, (?Gr_Unknown+1)).
+-define(wxDateTime_Gr_Germany_Prussia, (?Gr_Unknown+2)).
+-define(wxDateTime_Gr_Germany_Protestant, (?Gr_Unknown+3)).
+-define(wxDateTime_Gr_GreatBritain, (?Gr_Unknown+4)).
+-define(wxDateTime_Gr_Greece, (?Gr_Unknown+5)).
+-define(wxDateTime_Gr_Hungary, (?Gr_Unknown+6)).
+-define(wxDateTime_Gr_Ireland, ?Gr_GreatBritain).
+-define(wxDateTime_Gr_Italy, ?Gr_Standard).
+-define(wxDateTime_Gr_Japan, ?Gr_Unknown).
+-define(wxDateTime_Gr_Japan_1, (?Gr_Unknown+1)).
+-define(wxDateTime_Gr_Japan_2, (?Gr_Unknown+2)).
+-define(wxDateTime_Gr_Japan_3, (?Gr_Unknown+3)).
+-define(wxDateTime_Gr_Latvia, (?Gr_Unknown+4)).
+-define(wxDateTime_Gr_Lithuania, (?Gr_Unknown+5)).
+-define(wxDateTime_Gr_Luxemburg, (?Gr_Unknown+6)).
+-define(wxDateTime_Gr_Netherlands, ?Gr_Belgium).
+-define(wxDateTime_Gr_Netherlands_Groningen, (?Gr_Belgium+1)).
+-define(wxDateTime_Gr_Netherlands_Gelderland, (?Gr_Belgium+2)).
+-define(wxDateTime_Gr_Netherlands_Utrecht, (?Gr_Belgium+3)).
+-define(wxDateTime_Gr_Netherlands_Friesland, (?Gr_Belgium+4)).
+-define(wxDateTime_Gr_Norway, ?Gr_Denmark).
+-define(wxDateTime_Gr_Poland, ?Gr_Standard).
+-define(wxDateTime_Gr_Portugal, ?Gr_Standard).
+-define(wxDateTime_Gr_Romania, (?Gr_Standard+1)).
+-define(wxDateTime_Gr_Russia, (?Gr_Standard+2)).
+-define(wxDateTime_Gr_Scotland, ?Gr_GreatBritain).
+-define(wxDateTime_Gr_Spain, ?Gr_Standard).
+-define(wxDateTime_Gr_Sweden, ?Gr_Finland).
+-define(wxDateTime_Gr_Switzerland, ?Gr_Unknown).
+-define(wxDateTime_Gr_Switzerland_Catholic, (?Gr_Unknown+1)).
+-define(wxDateTime_Gr_Switzerland_Protestant, (?Gr_Unknown+2)).
+-define(wxDateTime_Gr_Turkey, (?Gr_Unknown+3)).
+-define(wxDateTime_Gr_USA, ?Gr_GreatBritain).
+-define(wxDateTime_Gr_Wales, ?Gr_GreatBritain).
+-define(wxDateTime_Gr_Yugoslavia, (?Gr_GreatBritain+1)).
+% From class wxDateTime::Month
+-define(wxDateTime_Jan, 0).
+-define(wxDateTime_Feb, 1).
+-define(wxDateTime_Mar, 2).
+-define(wxDateTime_Apr, 3).
+-define(wxDateTime_May, 4).
+-define(wxDateTime_Jun, 5).
+-define(wxDateTime_Jul, 6).
+-define(wxDateTime_Aug, 7).
+-define(wxDateTime_Sep, 8).
+-define(wxDateTime_Oct, 9).
+-define(wxDateTime_Nov, 10).
+-define(wxDateTime_Dec, 11).
+-define(wxDateTime_Inv_Month, 12).
+% From class wxDateTime::NameFlags
+-define(wxDateTime_Name_Full, 1).
+-define(wxDateTime_Name_Abbr, 2).
+% From class wxDateTime::TZ
+-define(wxDateTime_Local, 0).
+-define(wxDateTime_GMT_12, 1).
+-define(wxDateTime_GMT_11, 2).
+-define(wxDateTime_GMT_10, 3).
+-define(wxDateTime_GMT_9, 4).
+-define(wxDateTime_GMT_8, 5).
+-define(wxDateTime_GMT_7, 6).
+-define(wxDateTime_GMT_6, 7).
+-define(wxDateTime_GMT_5, 8).
+-define(wxDateTime_GMT_4, 9).
+-define(wxDateTime_GMT_3, 10).
+-define(wxDateTime_GMT_2, 11).
+-define(wxDateTime_GMT_1, 12).
+-define(wxDateTime_GMT0, 13).
+-define(wxDateTime_GMT1, 14).
+-define(wxDateTime_GMT2, 15).
+-define(wxDateTime_GMT3, 16).
+-define(wxDateTime_GMT4, 17).
+-define(wxDateTime_GMT5, 18).
+-define(wxDateTime_GMT6, 19).
+-define(wxDateTime_GMT7, 20).
+-define(wxDateTime_GMT8, 21).
+-define(wxDateTime_GMT9, 22).
+-define(wxDateTime_GMT10, 23).
+-define(wxDateTime_GMT11, 24).
+-define(wxDateTime_GMT12, 25).
+-define(wxDateTime_GMT13, 26).
+-define(wxDateTime_WET, ?GMT0).
+-define(wxDateTime_WEST, ?GMT1).
+-define(wxDateTime_CET, ?GMT1).
+-define(wxDateTime_CEST, ?GMT2).
+-define(wxDateTime_EET, ?GMT2).
+-define(wxDateTime_EEST, ?GMT3).
+-define(wxDateTime_MSK, ?GMT3).
+-define(wxDateTime_MSD, ?GMT4).
+-define(wxDateTime_AST, ?GMT_4).
+-define(wxDateTime_ADT, ?GMT_3).
+-define(wxDateTime_EST, ?GMT_5).
+-define(wxDateTime_EDT, ?GMT_4).
+-define(wxDateTime_CST, ?GMT_6).
+-define(wxDateTime_CDT, ?GMT_5).
+-define(wxDateTime_MST, ?GMT_7).
+-define(wxDateTime_MDT, ?GMT_6).
+-define(wxDateTime_PST, ?GMT_8).
+-define(wxDateTime_PDT, ?GMT_7).
+-define(wxDateTime_HST, ?GMT_10).
+-define(wxDateTime_AKST, ?GMT_9).
+-define(wxDateTime_AKDT, ?GMT_8).
+-define(wxDateTime_A_WST, ?GMT8).
+-define(wxDateTime_A_CST, ?GMT13+1).
+-define(wxDateTime_A_EST, ?GMT10).
+-define(wxDateTime_A_ESST, ?GMT11).
+-define(wxDateTime_NZST, ?GMT12).
+-define(wxDateTime_NZDT, ?GMT13).
+-define(wxDateTime_UTC, ?GMT0).
+% From class wxDateTime::WeekDay
+-define(wxDateTime_Sun, 0).
+-define(wxDateTime_Mon, 1).
+-define(wxDateTime_Tue, 2).
+-define(wxDateTime_Wed, 3).
+-define(wxDateTime_Thu, 4).
+-define(wxDateTime_Fri, 5).
+-define(wxDateTime_Sat, 6).
+-define(wxDateTime_Inv_WeekDay, 7).
+% From class wxDateTime::WeekFlags
+-define(wxDateTime_Default_First, 0).
+-define(wxDateTime_Monday_First, 1).
+-define(wxDateTime_Sunday_First, 2).
+% From class wxDateTime::Year
+-define(wxDateTime_Inv_Year, ?SHRT_MIN).
+% From class wxDialog
+-define(wxDialog_ButtonSizerFlags, (?wxOK bor ?wxCANCEL bor ?wxYES bor ?wxNO bor ?wxHELP bor ?wxNO_DEFAULT)).
+% From class wxGrid
+-define(wxGrid_wxGRID_CELLCTRL, 2000).
+-define(wxGrid_wxGRID_TOPCTRL, 2001).
+% From class wxGrid
+-define(wxGrid_wxGRID_TEXTCTRL, 2100).
+-define(wxGrid_wxGRID_CHECKBOX, 2101).
+-define(wxGrid_wxGRID_CHOICE, 2102).
+-define(wxGrid_wxGRID_COMBOBOX, 2103).
+% From class wxGrid::CursorMode
+-define(wxGrid_WXGRID_CURSOR_SELECT_CELL, 0).
+-define(wxGrid_WXGRID_CURSOR_RESIZE_ROW, 1).
+-define(wxGrid_WXGRID_CURSOR_RESIZE_COL, 2).
+-define(wxGrid_WXGRID_CURSOR_SELECT_ROW, 3).
+-define(wxGrid_WXGRID_CURSOR_SELECT_COL, 4).
+-define(wxGrid_WXGRID_CURSOR_MOVE_COL, 5).
+% From class wxGrid::wxGridSelectionModes
+-define(wxGrid_wxGridSelectCells, 0).
+-define(wxGrid_wxGridSelectRows, 1).
+-define(wxGrid_wxGridSelectColumns, 2).
+% From class wxGridCellAttr::wxAttrKind
+-define(wxGridCellAttr_Any, 0).
+-define(wxGridCellAttr_Default, 1).
+-define(wxGridCellAttr_Cell, 2).
+-define(wxGridCellAttr_Row, 3).
+-define(wxGridCellAttr_Col, 4).
+-define(wxGridCellAttr_Merged, 5).
+% From class wxGridCellAttr::wxAttrOverflowMode
+-define(wxGridCellAttr_UnsetOverflow, -1).
+-define(wxGridCellAttr_Overflow, 0).
+-define(wxGridCellAttr_SingleCell, 1).
+% From class wxGridCellAttr::wxAttrReadMode
+-define(wxGridCellAttr_Unset, -1).
+-define(wxGridCellAttr_ReadWrite, 0).
+-define(wxGridCellAttr_ReadOnly, 1).
+% From class wxHelpEvent::Origin
+-define(wxHelpEvent_Origin_Unknown, 0).
+-define(wxHelpEvent_Origin_Keyboard, 1).
+-define(wxHelpEvent_Origin_HelpButton, 2).
+% From class wxHtmlEasyPrinting::FontMode
+-define(wxHtmlEasyPrinting_FontMode_Explicit, 0).
+-define(wxHtmlEasyPrinting_FontMode_Standard, 1).
+% From class wxHtmlWindow::ClipboardType
+-define(wxHtmlWindow_Primary, 0).
+-define(wxHtmlWindow_Secondary, 1).
+% From class wxListbook
+-define(wxListbook_SetSelection_SendEvent, 1).
+% From class wxNavigationKeyEvent
+-define(wxNavigationKeyEvent_IsBackward, 0).
+-define(wxNavigationKeyEvent_IsForward, 1).
+-define(wxNavigationKeyEvent_WinChange, 2).
+-define(wxNavigationKeyEvent_FromTab, 4).
+% From class wxNotebook
+-define(wxNotebook_SetSelection_SendEvent, 1).
+% From class wxProgressDialog
+-define(wxProgressDialog_Uncancelable, -1).
+-define(wxProgressDialog_Canceled, 0).
+-define(wxProgressDialog_Continue, 1).
+-define(wxProgressDialog_Finished, 2).
+% From class wxSizerItem
+-define(wxSizerItem_Item_None, 0).
+-define(wxSizerItem_Item_Window, 1).
+-define(wxSizerItem_Item_Sizer, 2).
+-define(wxSizerItem_Item_Spacer, 3).
+-define(wxSizerItem_Item_Max, 4).
+% From class wxTextCtrl
+-define(wxTextCtrl_SetValue_SendEvent, 1).
+-define(wxTextCtrl_SetValue_SelectionOnly, 2).
+% From class wxToolbook
+-define(wxToolbook_SetSelection_SendEvent, 1).
+% From class wxTreebook
+-define(wxTreebook_SetSelection_SendEvent, 1).
+% From class wxWindow::MoveKind
+-define(wxWindow_MoveBefore, 0).
+-define(wxWindow_MoveAfter, 1).
+% From class wxWindowGTK::ScrollDir
+-define(wxWindowGTK_ScrollDir_Horz, 0).
+-define(wxWindowGTK_ScrollDir_Vert, 1).
+-define(wxWindowGTK_ScrollDir_Max, 2).
+% From class wxWindowGTK::ScrollUnit
+-define(wxWindowGTK_ScrollUnit_Line, 0).
+-define(wxWindowGTK_ScrollUnit_Page, 1).
+-define(wxWindowGTK_ScrollUnit_Max, 2).
+% From "accel.h"
+-define(wxACCEL_NORMAL, 0).
+-define(wxACCEL_ALT, 1).
+-define(wxACCEL_CTRL, 2).
+-define(wxACCEL_SHIFT, 4).
+-define(wxACCEL_CMD, ?wxACCEL_CTRL).
+% From "app.h"
+-define(wxPRINT_WINDOWS, 1).
+-define(wxPRINT_POSTSCRIPT, 2).
+% From "auibook.h": wxAuiNotebookOption
+-define(wxAUI_NB_TOP, 1).
+-define(wxAUI_NB_LEFT, 2).
+-define(wxAUI_NB_RIGHT, 4).
+-define(wxAUI_NB_BOTTOM, 8).
+-define(wxAUI_NB_TAB_SPLIT, 16).
+-define(wxAUI_NB_TAB_MOVE, 32).
+-define(wxAUI_NB_TAB_EXTERNAL_MOVE, 64).
+-define(wxAUI_NB_TAB_FIXED_WIDTH, 128).
+-define(wxAUI_NB_SCROLL_BUTTONS, 256).
+-define(wxAUI_NB_WINDOWLIST_BUTTON, 512).
+-define(wxAUI_NB_CLOSE_BUTTON, 1024).
+-define(wxAUI_NB_CLOSE_ON_ACTIVE_TAB, 2048).
+-define(wxAUI_NB_CLOSE_ON_ALL_TABS, 4096).
+-define(wxAUI_NB_MIDDLE_CLICK_CLOSE, 8192).
+-define(wxAUI_NB_DEFAULT_STYLE, (?wxAUI_NB_TOP bor ?wxAUI_NB_TAB_SPLIT bor ?wxAUI_NB_TAB_MOVE bor ?wxAUI_NB_SCROLL_BUTTONS bor ?wxAUI_NB_CLOSE_ON_ACTIVE_TAB bor ?wxAUI_NB_MIDDLE_CLICK_CLOSE)).
+% From "bookctrl.h"
+-define(wxBK_HITTEST_NOWHERE, 1).
+-define(wxBK_HITTEST_ONICON, 2).
+-define(wxBK_HITTEST_ONLABEL, 4).
+-define(wxBK_HITTEST_ONITEM, (?wxBK_HITTEST_ONICON bor ?wxBK_HITTEST_ONLABEL)).
+-define(wxBK_HITTEST_ONPAGE, 8).
+% From "bookctrl.h"
-define(wxBK_ALIGN_MASK, (?wxBK_TOP bor ?wxBK_BOTTOM bor ?wxBK_LEFT bor ?wxBK_RIGHT)).
-define(wxBK_RIGHT, 128).
-define(wxBK_LEFT, 64).
-define(wxBK_BOTTOM, 32).
-define(wxBK_TOP, 16).
-define(wxBK_DEFAULT, 0).
-% From define::From button.h
+% From "bugs.h": wxSashDragStatus
+-define(wxSASH_STATUS_OK, 0).
+-define(wxSASH_STATUS_OUT_OF_RANGE, 1).
+% From "button.h"
-define(wxBU_EXACTFIT, 1).
-define(wxBU_AUTODRAW, 4).
-define(wxBU_NOAUTODRAW, 0).
@@ -343,38 +666,258 @@
-define(wxBU_RIGHT, 256).
-define(wxBU_TOP, 128).
-define(wxBU_LEFT, 64).
-% From define::From checkbox.h
+% From "calctrl.h"
+-define(wxCAL_SUNDAY_FIRST, 0).
+-define(wxCAL_MONDAY_FIRST, 1).
+-define(wxCAL_SHOW_HOLIDAYS, 2).
+-define(wxCAL_NO_YEAR_CHANGE, 4).
+-define(wxCAL_NO_MONTH_CHANGE, 12).
+-define(wxCAL_SEQUENTIAL_MONTH_SELECTION, 16).
+-define(wxCAL_SHOW_SURROUNDING_WEEKS, 32).
+% From "calctrl.h": wxCalendarDateBorder
+-define(wxCAL_BORDER_NONE, 0).
+-define(wxCAL_BORDER_SQUARE, 1).
+-define(wxCAL_BORDER_ROUND, 2).
+% From "calctrl.h": wxCalendarHitTestResult
+-define(wxCAL_HITTEST_NOWHERE, 0).
+-define(wxCAL_HITTEST_HEADER, 1).
+-define(wxCAL_HITTEST_DAY, 2).
+-define(wxCAL_HITTEST_INCMONTH, 3).
+-define(wxCAL_HITTEST_DECMONTH, 4).
+-define(wxCAL_HITTEST_SURROUNDING_WEEK, 5).
+% From "checkbox.h"
-define(wxCHK_ALLOW_3RD_STATE_FOR_USER, 8192).
-define(wxCHK_3STATE, 4096).
-define(wxCHK_2STATE, 0).
-% From define::From choicdgg.h
+% From "checkbox.h": wxCheckBoxState
+-define(wxCHK_UNCHECKED, 0).
+-define(wxCHK_CHECKED, 1).
+-define(wxCHK_UNDETERMINED, 2).
+% From "choicdgg.h"
-define(wxCHOICEDLG_STYLE, (?wxDEFAULT_DIALOG_STYLE bor ?wxRESIZE_BORDER bor ?wxOK bor ?wxCANCEL bor ?wxCENTRE)).
-define(wxCHOICE_WIDTH, 200).
-define(wxCHOICE_HEIGHT, 150).
-% From define::From choicebk.h
+% From "choicebk.h"
-define(wxCHB_ALIGN_MASK, ?wxBK_ALIGN_MASK).
-define(wxCHB_RIGHT, ?wxBK_RIGHT).
-define(wxCHB_LEFT, ?wxBK_LEFT).
-define(wxCHB_BOTTOM, ?wxBK_BOTTOM).
-define(wxCHB_TOP, ?wxBK_TOP).
-define(wxCHB_DEFAULT, ?wxBK_DEFAULT).
-% From define::From clrpicker.h
+% From "clntdata.h": wxClientDataType
+-define(wxClientData_None, 0).
+-define(wxClientData_Object, 1).
+-define(wxClientData_Void, 2).
+% From "clrpicker.h"
-define(wxCLRP_DEFAULT_STYLE, 0).
-define(wxCLRP_USE_TEXTCTRL, ?wxPB_USE_TEXTCTRL).
-define(wxCLRP_SHOW_LABEL, 8).
-% From define::From colour.h
+% From "cmndata.h": wxPrintBin
+-define(wxPRINTBIN_DEFAULT, 0).
+-define(wxPRINTBIN_ONLYONE, 1).
+-define(wxPRINTBIN_LOWER, 2).
+-define(wxPRINTBIN_MIDDLE, 3).
+-define(wxPRINTBIN_MANUAL, 4).
+-define(wxPRINTBIN_ENVELOPE, 5).
+-define(wxPRINTBIN_ENVMANUAL, 6).
+-define(wxPRINTBIN_AUTO, 7).
+-define(wxPRINTBIN_TRACTOR, 8).
+-define(wxPRINTBIN_SMALLFMT, 9).
+-define(wxPRINTBIN_LARGEFMT, 10).
+-define(wxPRINTBIN_LARGECAPACITY, 11).
+-define(wxPRINTBIN_CASSETTE, 12).
+-define(wxPRINTBIN_FORMSOURCE, 13).
+-define(wxPRINTBIN_USER, 14).
+% From "colour.h"
-define(wxC2S_HTML_SYNTAX, 4).
-define(wxC2S_CSS_SYNTAX, 2).
-define(wxC2S_NAME, 1).
-% From define::From confbase.h
+% From "confbase.h"
-define(wxCONFIG_CASE_SENSITIVE, 0).
-% From define::From datetime.h
+% From "datectrl.h"
+-define(wxDP_DEFAULT, 0).
+-define(wxDP_SPIN, 1).
+-define(wxDP_DROPDOWN, 2).
+-define(wxDP_SHOWCENTURY, 4).
+-define(wxDP_ALLOWNONE, 8).
+% From "datetime.h"
-define(wxInvalidDateTime, ?wxDefaultDateTime).
-% From define::From dcbuffer.h
+% From "dcbuffer.h"
-define(wxBUFFER_CLIENT_AREA, 2).
-define(wxBUFFER_VIRTUAL_AREA, 1).
--define(wxALWAYS_NATIVE_DOUBLE_BUFFER, 0).
-% From define::From defs.h
+-define(wxALWAYS_NATIVE_DOUBLE_BUFFER, wxe_util:get_const(wxALWAYS_NATIVE_DOUBLE_BUFFER)).
+% From "defs.h"
+-define(wxDefaultCoord, -1).
+% From "defs.h"
+-define(wxID_NONE, -3).
+-define(wxID_SEPARATOR, -2).
+-define(wxID_ANY, -1).
+-define(wxID_LOWEST, 4999).
+-define(wxID_OPEN, 5000).
+-define(wxID_CLOSE, 5001).
+-define(wxID_NEW, 5002).
+-define(wxID_SAVE, 5003).
+-define(wxID_SAVEAS, 5004).
+-define(wxID_REVERT, 5005).
+-define(wxID_EXIT, 5006).
+-define(wxID_UNDO, 5007).
+-define(wxID_REDO, 5008).
+-define(wxID_HELP, 5009).
+-define(wxID_PRINT, 5010).
+-define(wxID_PRINT_SETUP, 5011).
+-define(wxID_PAGE_SETUP, 5012).
+-define(wxID_PREVIEW, 5013).
+-define(wxID_ABOUT, 5014).
+-define(wxID_HELP_CONTENTS, 5015).
+-define(wxID_HELP_INDEX, 5016).
+-define(wxID_HELP_SEARCH, 5017).
+-define(wxID_HELP_COMMANDS, 5018).
+-define(wxID_HELP_PROCEDURES, 5019).
+-define(wxID_HELP_CONTEXT, 5020).
+-define(wxID_CLOSE_ALL, 5021).
+-define(wxID_PREFERENCES, 5022).
+-define(wxID_EDIT, 5030).
+-define(wxID_CUT, 5031).
+-define(wxID_COPY, 5032).
+-define(wxID_PASTE, 5033).
+-define(wxID_CLEAR, 5034).
+-define(wxID_FIND, 5035).
+-define(wxID_DUPLICATE, 5036).
+-define(wxID_SELECTALL, 5037).
+-define(wxID_DELETE, 5038).
+-define(wxID_REPLACE, 5039).
+-define(wxID_REPLACE_ALL, 5040).
+-define(wxID_PROPERTIES, 5041).
+-define(wxID_VIEW_DETAILS, 5042).
+-define(wxID_VIEW_LARGEICONS, 5043).
+-define(wxID_VIEW_SMALLICONS, 5044).
+-define(wxID_VIEW_LIST, 5045).
+-define(wxID_VIEW_SORTDATE, 5046).
+-define(wxID_VIEW_SORTNAME, 5047).
+-define(wxID_VIEW_SORTSIZE, 5048).
+-define(wxID_VIEW_SORTTYPE, 5049).
+-define(wxID_FILE, 5050).
+-define(wxID_FILE1, 5051).
+-define(wxID_FILE2, 5052).
+-define(wxID_FILE3, 5053).
+-define(wxID_FILE4, 5054).
+-define(wxID_FILE5, 5055).
+-define(wxID_FILE6, 5056).
+-define(wxID_FILE7, 5057).
+-define(wxID_FILE8, 5058).
+-define(wxID_FILE9, 5059).
+-define(wxID_OK, 5100).
+-define(wxID_CANCEL, 5101).
+-define(wxID_APPLY, 5102).
+-define(wxID_YES, 5103).
+-define(wxID_NO, 5104).
+-define(wxID_STATIC, 5105).
+-define(wxID_FORWARD, 5106).
+-define(wxID_BACKWARD, 5107).
+-define(wxID_DEFAULT, 5108).
+-define(wxID_MORE, 5109).
+-define(wxID_SETUP, 5110).
+-define(wxID_RESET, 5111).
+-define(wxID_CONTEXT_HELP, 5112).
+-define(wxID_YESTOALL, 5113).
+-define(wxID_NOTOALL, 5114).
+-define(wxID_ABORT, 5115).
+-define(wxID_RETRY, 5116).
+-define(wxID_IGNORE, 5117).
+-define(wxID_ADD, 5118).
+-define(wxID_REMOVE, 5119).
+-define(wxID_UP, 5120).
+-define(wxID_DOWN, 5121).
+-define(wxID_HOME, 5122).
+-define(wxID_REFRESH, 5123).
+-define(wxID_STOP, 5124).
+-define(wxID_INDEX, 5125).
+-define(wxID_BOLD, 5126).
+-define(wxID_ITALIC, 5127).
+-define(wxID_JUSTIFY_CENTER, 5128).
+-define(wxID_JUSTIFY_FILL, 5129).
+-define(wxID_JUSTIFY_RIGHT, 5130).
+-define(wxID_JUSTIFY_LEFT, 5131).
+-define(wxID_UNDERLINE, 5132).
+-define(wxID_INDENT, 5133).
+-define(wxID_UNINDENT, 5134).
+-define(wxID_ZOOM_100, 5135).
+-define(wxID_ZOOM_FIT, 5136).
+-define(wxID_ZOOM_IN, 5137).
+-define(wxID_ZOOM_OUT, 5138).
+-define(wxID_UNDELETE, 5139).
+-define(wxID_REVERT_TO_SAVED, 5140).
+-define(wxID_SYSTEM_MENU, 5200).
+-define(wxID_CLOSE_FRAME, 5201).
+-define(wxID_MOVE_FRAME, 5202).
+-define(wxID_RESIZE_FRAME, 5203).
+-define(wxID_MAXIMIZE_FRAME, 5204).
+-define(wxID_ICONIZE_FRAME, 5205).
+-define(wxID_RESTORE_FRAME, 5206).
+-define(wxID_FILEDLGG, 5900).
+-define(wxID_HIGHEST, 5999).
+% From "defs.h"
+-define(wxDEFAULT, 70).
+-define(wxDECORATIVE, 71).
+-define(wxROMAN, 72).
+-define(wxSCRIPT, 73).
+-define(wxSWISS, 74).
+-define(wxMODERN, 75).
+-define(wxTELETYPE, 76).
+-define(wxVARIABLE, 80).
+-define(wxFIXED, 81).
+-define(wxNORMAL, 90).
+-define(wxLIGHT, 91).
+-define(wxBOLD, 92).
+-define(wxITALIC, 93).
+-define(wxSLANT, 94).
+-define(wxSOLID, 100).
+-define(wxDOT, 101).
+-define(wxLONG_DASH, 102).
+-define(wxSHORT_DASH, 103).
+-define(wxDOT_DASH, 104).
+-define(wxUSER_DASH, 105).
+-define(wxTRANSPARENT, 106).
+-define(wxSTIPPLE_MASK_OPAQUE, 107).
+-define(wxSTIPPLE_MASK, 108).
+-define(wxSTIPPLE, 110).
+-define(wxBDIAGONAL_HATCH, 111).
+-define(wxCROSSDIAG_HATCH, 112).
+-define(wxFDIAGONAL_HATCH, 113).
+-define(wxCROSS_HATCH, 114).
+-define(wxHORIZONTAL_HATCH, 115).
+-define(wxVERTICAL_HATCH, 116).
+-define(wxFIRST_HATCH, ?wxBDIAGONAL_HATCH).
+-define(wxLAST_HATCH, ?wxVERTICAL_HATCH).
+-define(wxJOIN_BEVEL, 120).
+-define(wxJOIN_MITER, 121).
+-define(wxJOIN_ROUND, 122).
+-define(wxCAP_ROUND, 130).
+-define(wxCAP_PROJECTING, 131).
+-define(wxCAP_BUTT, 132).
+% From "defs.h"
+-define(wxFLOOD_SURFACE, 1).
+-define(wxFLOOD_BORDER, 2).
+% From "defs.h"
+-define(wxODDEVEN_RULE, 1).
+-define(wxWINDING_RULE, 2).
+% From "defs.h"
+-define(wxTOOL_TOP, 1).
+-define(wxTOOL_BOTTOM, 2).
+-define(wxTOOL_LEFT, 3).
+-define(wxTOOL_RIGHT, 4).
+% From "defs.h"
+-define(wxMM_TEXT, 1).
+-define(wxMM_LOMETRIC, 2).
+-define(wxMM_HIMETRIC, 3).
+-define(wxMM_LOENGLISH, 4).
+-define(wxMM_HIENGLISH, 5).
+-define(wxMM_TWIPS, 6).
+-define(wxMM_ISOTROPIC, 7).
+-define(wxMM_ANISOTROPIC, 8).
+-define(wxMM_POINTS, 9).
+-define(wxMM_METRIC, 10).
+% From "defs.h"
-define(wxPRINT_QUALITY_DRAFT, -4).
-define(wxPRINT_QUALITY_LOW, -3).
-define(wxPRINT_QUALITY_MEDIUM, -2).
@@ -503,21 +1046,499 @@
-define(wxBIG_ENDIAN, 4321).
-define(wxHAS_INT64, wxe_util:get_const(wxHAS_INT64)).
-define(wxNOT_FOUND, -1).
-% From define::From dialog.h
+% From "defs.h": form_ops_t
+-define(wxCLEAR, 0).
+-define(wxROP_BLACK, ?wxCLEAR).
+-define(wxBLIT_BLACKNESS, ?wxCLEAR).
+-define(wxXOR, (?wxCLEAR+1)).
+-define(wxROP_XORPEN, ?wxXOR).
+-define(wxBLIT_SRCINVERT, ?wxXOR).
+-define(wxINVERT, (?wxXOR+1)).
+-define(wxROP_NOT, ?wxINVERT).
+-define(wxBLIT_DSTINVERT, ?wxINVERT).
+-define(wxOR_REVERSE, (?wxINVERT+1)).
+-define(wxROP_MERGEPENNOT, ?wxOR_REVERSE).
+-define(wxBLIT_00DD0228, ?wxOR_REVERSE).
+-define(wxAND_REVERSE, (?wxOR_REVERSE+1)).
+-define(wxROP_MASKPENNOT, ?wxAND_REVERSE).
+-define(wxBLIT_SRCERASE, ?wxAND_REVERSE).
+-define(wxCOPY, (?wxAND_REVERSE+1)).
+-define(wxROP_COPYPEN, ?wxCOPY).
+-define(wxBLIT_SRCCOPY, ?wxCOPY).
+-define(wxAND, (?wxCOPY+1)).
+-define(wxROP_MASKPEN, ?wxAND).
+-define(wxBLIT_SRCAND, ?wxAND).
+-define(wxAND_INVERT, (?wxAND+1)).
+-define(wxROP_MASKNOTPEN, ?wxAND_INVERT).
+-define(wxBLIT_00220326, ?wxAND_INVERT).
+-define(wxNO_OP, (?wxAND_INVERT+1)).
+-define(wxROP_NOP, ?wxNO_OP).
+-define(wxBLIT_00AA0029, ?wxNO_OP).
+-define(wxNOR, (?wxNO_OP+1)).
+-define(wxROP_NOTMERGEPEN, ?wxNOR).
+-define(wxBLIT_NOTSRCERASE, ?wxNOR).
+-define(wxEQUIV, (?wxNOR+1)).
+-define(wxROP_NOTXORPEN, ?wxEQUIV).
+-define(wxBLIT_00990066, ?wxEQUIV).
+-define(wxSRC_INVERT, (?wxEQUIV+1)).
+-define(wxROP_NOTCOPYPEN, ?wxSRC_INVERT).
+-define(wxBLIT_NOTSCRCOPY, ?wxSRC_INVERT).
+-define(wxOR_INVERT, (?wxSRC_INVERT+1)).
+-define(wxROP_MERGENOTPEN, ?wxOR_INVERT).
+-define(wxBLIT_MERGEPAINT, ?wxOR_INVERT).
+-define(wxNAND, (?wxOR_INVERT+1)).
+-define(wxROP_NOTMASKPEN, ?wxNAND).
+-define(wxBLIT_007700E6, ?wxNAND).
+-define(wxOR, (?wxNAND+1)).
+-define(wxROP_MERGEPEN, ?wxOR).
+-define(wxBLIT_SRCPAINT, ?wxOR).
+-define(wxSET, (?wxOR+1)).
+-define(wxROP_WHITE, ?wxSET).
+-define(wxBLIT_WHITENESS, ?wxSET).
+% From "defs.h": wxAlignment
+-define(wxALIGN_NOT, 0).
+-define(wxALIGN_CENTER_HORIZONTAL, 256).
+-define(wxALIGN_CENTRE_HORIZONTAL, ?wxALIGN_CENTER_HORIZONTAL).
+-define(wxALIGN_LEFT, ?wxALIGN_NOT).
+-define(wxALIGN_TOP, ?wxALIGN_NOT).
+-define(wxALIGN_RIGHT, 512).
+-define(wxALIGN_BOTTOM, 1024).
+-define(wxALIGN_CENTER_VERTICAL, 2048).
+-define(wxALIGN_CENTRE_VERTICAL, ?wxALIGN_CENTER_VERTICAL).
+-define(wxALIGN_CENTER, (?wxALIGN_CENTER_HORIZONTAL bor ?wxALIGN_CENTER_VERTICAL)).
+-define(wxALIGN_CENTRE, ?wxALIGN_CENTER).
+-define(wxALIGN_MASK, 3840).
+% From "defs.h": wxBackgroundStyle
+-define(wxBG_STYLE_SYSTEM, 0).
+-define(wxBG_STYLE_COLOUR, 1).
+-define(wxBG_STYLE_CUSTOM, 2).
+% From "defs.h": wxBorder
+-define(wxBORDER_DEFAULT, 0).
+-define(wxBORDER_NONE, 2097152).
+-define(wxBORDER_STATIC, 16777216).
+-define(wxBORDER_SIMPLE, 33554432).
+-define(wxBORDER_RAISED, 67108864).
+-define(wxBORDER_SUNKEN, 134217728).
+-define(wxBORDER_DOUBLE, 268435456).
+-define(wxBORDER_THEME, 268435456).
+-define(wxBORDER_MASK, 522190848).
+% From "defs.h": wxDataFormatId
+-define(wxDF_INVALID, 0).
+-define(wxDF_TEXT, 1).
+-define(wxDF_BITMAP, 2).
+-define(wxDF_METAFILE, 3).
+-define(wxDF_SYLK, 4).
+-define(wxDF_DIF, 5).
+-define(wxDF_TIFF, 6).
+-define(wxDF_OEMTEXT, 7).
+-define(wxDF_DIB, 8).
+-define(wxDF_PALETTE, 9).
+-define(wxDF_PENDATA, 10).
+-define(wxDF_RIFF, 11).
+-define(wxDF_WAVE, 12).
+-define(wxDF_UNICODETEXT, 13).
+-define(wxDF_ENHMETAFILE, 14).
+-define(wxDF_FILENAME, 15).
+-define(wxDF_LOCALE, 16).
+-define(wxDF_PRIVATE, 20).
+-define(wxDF_HTML, 30).
+-define(wxDF_MAX, 31).
+% From "defs.h": wxDirection
+-define(wxLEFT, 16).
+-define(wxRIGHT, 32).
+-define(wxUP, 64).
+-define(wxDOWN, 128).
+-define(wxTOP, ?wxUP).
+-define(wxBOTTOM, ?wxDOWN).
+-define(wxNORTH, ?wxUP).
+-define(wxSOUTH, ?wxDOWN).
+-define(wxWEST, ?wxLEFT).
+-define(wxEAST, ?wxRIGHT).
+-define(wxALL, (?wxUP bor ?wxDOWN bor ?wxRIGHT bor ?wxLEFT)).
+% From "defs.h": wxDuplexMode
+-define(wxDUPLEX_SIMPLEX, 0).
+-define(wxDUPLEX_HORIZONTAL, 1).
+-define(wxDUPLEX_VERTICAL, 2).
+% From "defs.h": wxGeometryCentre
+-define(wxCENTRE, 1).
+-define(wxCENTER, ?wxCENTRE).
+% From "defs.h": wxHitTest
+-define(wxHT_NOWHERE, 0).
+-define(wxHT_SCROLLBAR_FIRST, ?wxHT_NOWHERE).
+-define(wxHT_SCROLLBAR_ARROW_LINE_1, (?wxHT_NOWHERE+1)).
+-define(wxHT_SCROLLBAR_ARROW_LINE_2, (?wxHT_NOWHERE+2)).
+-define(wxHT_SCROLLBAR_ARROW_PAGE_1, (?wxHT_NOWHERE+3)).
+-define(wxHT_SCROLLBAR_ARROW_PAGE_2, (?wxHT_NOWHERE+4)).
+-define(wxHT_SCROLLBAR_THUMB, (?wxHT_NOWHERE+5)).
+-define(wxHT_SCROLLBAR_BAR_1, (?wxHT_NOWHERE+6)).
+-define(wxHT_SCROLLBAR_BAR_2, (?wxHT_NOWHERE+7)).
+-define(wxHT_SCROLLBAR_LAST, (?wxHT_NOWHERE+8)).
+-define(wxHT_WINDOW_OUTSIDE, (?wxHT_NOWHERE+9)).
+-define(wxHT_WINDOW_INSIDE, (?wxHT_NOWHERE+10)).
+-define(wxHT_WINDOW_VERT_SCROLLBAR, (?wxHT_NOWHERE+11)).
+-define(wxHT_WINDOW_HORZ_SCROLLBAR, (?wxHT_NOWHERE+12)).
+-define(wxHT_WINDOW_CORNER, (?wxHT_NOWHERE+13)).
+-define(wxHT_MAX, (?wxHT_NOWHERE+14)).
+% From "defs.h": wxItemKind
+-define(wxITEM_SEPARATOR, -1).
+-define(wxITEM_NORMAL, 0).
+-define(wxITEM_CHECK, 1).
+-define(wxITEM_RADIO, 2).
+-define(wxITEM_MAX, 3).
+% From "defs.h": wxKeyCode
+-define(WXK_BACK, 8).
+-define(WXK_TAB, 9).
+-define(WXK_RETURN, 13).
+-define(WXK_ESCAPE, 27).
+-define(WXK_SPACE, 32).
+-define(WXK_DELETE, 127).
+-define(WXK_START, 300).
+-define(WXK_LBUTTON, 301).
+-define(WXK_RBUTTON, 302).
+-define(WXK_CANCEL, 303).
+-define(WXK_MBUTTON, 304).
+-define(WXK_CLEAR, 305).
+-define(WXK_SHIFT, 306).
+-define(WXK_ALT, 307).
+-define(WXK_CONTROL, 308).
+-define(WXK_MENU, 309).
+-define(WXK_PAUSE, 310).
+-define(WXK_CAPITAL, 311).
+-define(WXK_END, 312).
+-define(WXK_HOME, 313).
+-define(WXK_LEFT, 314).
+-define(WXK_UP, 315).
+-define(WXK_RIGHT, 316).
+-define(WXK_DOWN, 317).
+-define(WXK_SELECT, 318).
+-define(WXK_PRINT, 319).
+-define(WXK_EXECUTE, 320).
+-define(WXK_SNAPSHOT, 321).
+-define(WXK_INSERT, 322).
+-define(WXK_HELP, 323).
+-define(WXK_NUMPAD0, 324).
+-define(WXK_NUMPAD1, 325).
+-define(WXK_NUMPAD2, 326).
+-define(WXK_NUMPAD3, 327).
+-define(WXK_NUMPAD4, 328).
+-define(WXK_NUMPAD5, 329).
+-define(WXK_NUMPAD6, 330).
+-define(WXK_NUMPAD7, 331).
+-define(WXK_NUMPAD8, 332).
+-define(WXK_NUMPAD9, 333).
+-define(WXK_MULTIPLY, 334).
+-define(WXK_ADD, 335).
+-define(WXK_SEPARATOR, 336).
+-define(WXK_SUBTRACT, 337).
+-define(WXK_DECIMAL, 338).
+-define(WXK_DIVIDE, 339).
+-define(WXK_F1, 340).
+-define(WXK_F2, 341).
+-define(WXK_F3, 342).
+-define(WXK_F4, 343).
+-define(WXK_F5, 344).
+-define(WXK_F6, 345).
+-define(WXK_F7, 346).
+-define(WXK_F8, 347).
+-define(WXK_F9, 348).
+-define(WXK_F10, 349).
+-define(WXK_F11, 350).
+-define(WXK_F12, 351).
+-define(WXK_F13, 352).
+-define(WXK_F14, 353).
+-define(WXK_F15, 354).
+-define(WXK_F16, 355).
+-define(WXK_F17, 356).
+-define(WXK_F18, 357).
+-define(WXK_F19, 358).
+-define(WXK_F20, 359).
+-define(WXK_F21, 360).
+-define(WXK_F22, 361).
+-define(WXK_F23, 362).
+-define(WXK_F24, 363).
+-define(WXK_NUMLOCK, 364).
+-define(WXK_SCROLL, 365).
+-define(WXK_PAGEUP, 366).
+-define(WXK_PAGEDOWN, 367).
+-define(WXK_NUMPAD_SPACE, 368).
+-define(WXK_NUMPAD_TAB, 369).
+-define(WXK_NUMPAD_ENTER, 370).
+-define(WXK_NUMPAD_F1, 371).
+-define(WXK_NUMPAD_F2, 372).
+-define(WXK_NUMPAD_F3, 373).
+-define(WXK_NUMPAD_F4, 374).
+-define(WXK_NUMPAD_HOME, 375).
+-define(WXK_NUMPAD_LEFT, 376).
+-define(WXK_NUMPAD_UP, 377).
+-define(WXK_NUMPAD_RIGHT, 378).
+-define(WXK_NUMPAD_DOWN, 379).
+-define(WXK_NUMPAD_PAGEUP, 380).
+-define(WXK_NUMPAD_PAGEDOWN, 381).
+-define(WXK_NUMPAD_END, 382).
+-define(WXK_NUMPAD_BEGIN, 383).
+-define(WXK_NUMPAD_INSERT, 384).
+-define(WXK_NUMPAD_DELETE, 385).
+-define(WXK_NUMPAD_EQUAL, 386).
+-define(WXK_NUMPAD_MULTIPLY, 387).
+-define(WXK_NUMPAD_ADD, 388).
+-define(WXK_NUMPAD_SEPARATOR, 389).
+-define(WXK_NUMPAD_SUBTRACT, 390).
+-define(WXK_NUMPAD_DECIMAL, 391).
+-define(WXK_NUMPAD_DIVIDE, 392).
+-define(WXK_WINDOWS_LEFT, 393).
+-define(WXK_WINDOWS_RIGHT, 394).
+-define(WXK_WINDOWS_MENU, 395).
+-define(WXK_COMMAND, 396).
+-define(WXK_SPECIAL1, 193).
+-define(WXK_SPECIAL2, 194).
+-define(WXK_SPECIAL3, 195).
+-define(WXK_SPECIAL4, 196).
+-define(WXK_SPECIAL5, 197).
+-define(WXK_SPECIAL6, 198).
+-define(WXK_SPECIAL7, 199).
+-define(WXK_SPECIAL8, 200).
+-define(WXK_SPECIAL9, 201).
+-define(WXK_SPECIAL10, 202).
+-define(WXK_SPECIAL11, 203).
+-define(WXK_SPECIAL12, 204).
+-define(WXK_SPECIAL13, 205).
+-define(WXK_SPECIAL14, 206).
+-define(WXK_SPECIAL15, 207).
+-define(WXK_SPECIAL16, 208).
+-define(WXK_SPECIAL17, 209).
+-define(WXK_SPECIAL18, 210).
+-define(WXK_SPECIAL19, 211).
+-define(WXK_SPECIAL20, 212).
+% From "defs.h": wxKeyModifier
+-define(wxMOD_NONE, 0).
+-define(wxMOD_ALT, 1).
+-define(wxMOD_CONTROL, 2).
+-define(wxMOD_ALTGR, (?wxMOD_ALT bor ?wxMOD_CONTROL)).
+-define(wxMOD_SHIFT, 4).
+-define(wxMOD_META, 8).
+-define(wxMOD_WIN, ?wxMOD_META).
+-define(wxMOD_CMD, wxe_util:get_const(wxMOD_CMD)).
+-define(wxMOD_ALL, 65535).
+% From "defs.h": wxNotificationOptions
+-define(wxNOTIFY_NONE, 0).
+-define(wxNOTIFY_ONCE, 1).
+-define(wxNOTIFY_REPEAT, 2).
+% From "defs.h": wxOrientation
+-define(wxHORIZONTAL, 4).
+-define(wxVERTICAL, 8).
+-define(wxBOTH, (?wxVERTICAL bor ?wxHORIZONTAL)).
+% From "defs.h": wxPaperSize
+-define(wxPAPER_NONE, 0).
+-define(wxPAPER_LETTER, 1).
+-define(wxPAPER_LEGAL, 2).
+-define(wxPAPER_A4, 3).
+-define(wxPAPER_CSHEET, 4).
+-define(wxPAPER_DSHEET, 5).
+-define(wxPAPER_ESHEET, 6).
+-define(wxPAPER_LETTERSMALL, 7).
+-define(wxPAPER_TABLOID, 8).
+-define(wxPAPER_LEDGER, 9).
+-define(wxPAPER_STATEMENT, 10).
+-define(wxPAPER_EXECUTIVE, 11).
+-define(wxPAPER_A3, 12).
+-define(wxPAPER_A4SMALL, 13).
+-define(wxPAPER_A5, 14).
+-define(wxPAPER_B4, 15).
+-define(wxPAPER_B5, 16).
+-define(wxPAPER_FOLIO, 17).
+-define(wxPAPER_QUARTO, 18).
+-define(wxPAPER_10X14, 19).
+-define(wxPAPER_11X17, 20).
+-define(wxPAPER_NOTE, 21).
+-define(wxPAPER_ENV_9, 22).
+-define(wxPAPER_ENV_10, 23).
+-define(wxPAPER_ENV_11, 24).
+-define(wxPAPER_ENV_12, 25).
+-define(wxPAPER_ENV_14, 26).
+-define(wxPAPER_ENV_DL, 27).
+-define(wxPAPER_ENV_C5, 28).
+-define(wxPAPER_ENV_C3, 29).
+-define(wxPAPER_ENV_C4, 30).
+-define(wxPAPER_ENV_C6, 31).
+-define(wxPAPER_ENV_C65, 32).
+-define(wxPAPER_ENV_B4, 33).
+-define(wxPAPER_ENV_B5, 34).
+-define(wxPAPER_ENV_B6, 35).
+-define(wxPAPER_ENV_ITALY, 36).
+-define(wxPAPER_ENV_MONARCH, 37).
+-define(wxPAPER_ENV_PERSONAL, 38).
+-define(wxPAPER_FANFOLD_US, 39).
+-define(wxPAPER_FANFOLD_STD_GERMAN, 40).
+-define(wxPAPER_FANFOLD_LGL_GERMAN, 41).
+-define(wxPAPER_ISO_B4, 42).
+-define(wxPAPER_JAPANESE_POSTCARD, 43).
+-define(wxPAPER_9X11, 44).
+-define(wxPAPER_10X11, 45).
+-define(wxPAPER_15X11, 46).
+-define(wxPAPER_ENV_INVITE, 47).
+-define(wxPAPER_LETTER_EXTRA, 48).
+-define(wxPAPER_LEGAL_EXTRA, 49).
+-define(wxPAPER_TABLOID_EXTRA, 50).
+-define(wxPAPER_A4_EXTRA, 51).
+-define(wxPAPER_LETTER_TRANSVERSE, 52).
+-define(wxPAPER_A4_TRANSVERSE, 53).
+-define(wxPAPER_LETTER_EXTRA_TRANSVERSE, 54).
+-define(wxPAPER_A_PLUS, 55).
+-define(wxPAPER_B_PLUS, 56).
+-define(wxPAPER_LETTER_PLUS, 57).
+-define(wxPAPER_A4_PLUS, 58).
+-define(wxPAPER_A5_TRANSVERSE, 59).
+-define(wxPAPER_B5_TRANSVERSE, 60).
+-define(wxPAPER_A3_EXTRA, 61).
+-define(wxPAPER_A5_EXTRA, 62).
+-define(wxPAPER_B5_EXTRA, 63).
+-define(wxPAPER_A2, 64).
+-define(wxPAPER_A3_TRANSVERSE, 65).
+-define(wxPAPER_A3_EXTRA_TRANSVERSE, 66).
+-define(wxPAPER_DBL_JAPANESE_POSTCARD, 67).
+-define(wxPAPER_A6, 68).
+-define(wxPAPER_JENV_KAKU2, 69).
+-define(wxPAPER_JENV_KAKU3, 70).
+-define(wxPAPER_JENV_CHOU3, 71).
+-define(wxPAPER_JENV_CHOU4, 72).
+-define(wxPAPER_LETTER_ROTATED, 73).
+-define(wxPAPER_A3_ROTATED, 74).
+-define(wxPAPER_A4_ROTATED, 75).
+-define(wxPAPER_A5_ROTATED, 76).
+-define(wxPAPER_B4_JIS_ROTATED, 77).
+-define(wxPAPER_B5_JIS_ROTATED, 78).
+-define(wxPAPER_JAPANESE_POSTCARD_ROTATED, 79).
+-define(wxPAPER_DBL_JAPANESE_POSTCARD_ROTATED, 80).
+-define(wxPAPER_A6_ROTATED, 81).
+-define(wxPAPER_JENV_KAKU2_ROTATED, 82).
+-define(wxPAPER_JENV_KAKU3_ROTATED, 83).
+-define(wxPAPER_JENV_CHOU3_ROTATED, 84).
+-define(wxPAPER_JENV_CHOU4_ROTATED, 85).
+-define(wxPAPER_B6_JIS, 86).
+-define(wxPAPER_B6_JIS_ROTATED, 87).
+-define(wxPAPER_12X11, 88).
+-define(wxPAPER_JENV_YOU4, 89).
+-define(wxPAPER_JENV_YOU4_ROTATED, 90).
+-define(wxPAPER_P16K, 91).
+-define(wxPAPER_P32K, 92).
+-define(wxPAPER_P32KBIG, 93).
+-define(wxPAPER_PENV_1, 94).
+-define(wxPAPER_PENV_2, 95).
+-define(wxPAPER_PENV_3, 96).
+-define(wxPAPER_PENV_4, 97).
+-define(wxPAPER_PENV_5, 98).
+-define(wxPAPER_PENV_6, 99).
+-define(wxPAPER_PENV_7, 100).
+-define(wxPAPER_PENV_8, 101).
+-define(wxPAPER_PENV_9, 102).
+-define(wxPAPER_PENV_10, 103).
+-define(wxPAPER_P16K_ROTATED, 104).
+-define(wxPAPER_P32K_ROTATED, 105).
+-define(wxPAPER_P32KBIG_ROTATED, 106).
+-define(wxPAPER_PENV_1_ROTATED, 107).
+-define(wxPAPER_PENV_2_ROTATED, 108).
+-define(wxPAPER_PENV_3_ROTATED, 109).
+-define(wxPAPER_PENV_4_ROTATED, 110).
+-define(wxPAPER_PENV_5_ROTATED, 111).
+-define(wxPAPER_PENV_6_ROTATED, 112).
+-define(wxPAPER_PENV_7_ROTATED, 113).
+-define(wxPAPER_PENV_8_ROTATED, 114).
+-define(wxPAPER_PENV_9_ROTATED, 115).
+-define(wxPAPER_PENV_10_ROTATED, 116).
+% From "defs.h": wxPrintMode
+-define(wxPRINT_MODE_NONE, 0).
+-define(wxPRINT_MODE_PREVIEW, 1).
+-define(wxPRINT_MODE_FILE, 2).
+-define(wxPRINT_MODE_PRINTER, 3).
+-define(wxPRINT_MODE_STREAM, 4).
+% From "defs.h": wxStretch
+-define(wxSTRETCH_NOT, 0).
+-define(wxSHRINK, 4096).
+-define(wxGROW, 8192).
+-define(wxEXPAND, ?wxGROW).
+-define(wxSHAPED, 16384).
+-define(wxFIXED_MINSIZE, 32768).
+-define(wxRESERVE_SPACE_EVEN_IF_HIDDEN, 2).
+-define(wxTILE, 49152).
+-define(wxADJUST_MINSIZE, 0).
+% From "defs.h": wxUpdateUI
+-define(wxUPDATE_UI_NONE, 0).
+-define(wxUPDATE_UI_RECURSE, 1).
+-define(wxUPDATE_UI_FROMIDLE, 2).
+% From "dialog.h"
-define(wxDEFAULT_DIALOG_STYLE, (?wxCAPTION bor ?wxSYSTEM_MENU bor ?wxCLOSE_BOX)).
-define(wxDIALOG_NO_PARENT, 1).
-% From define::From dirctrlg.h
+% From "dirctrlg.h"
+-define(wxDIRCTRL_DIR_ONLY, 16).
+-define(wxDIRCTRL_SELECT_FIRST, 32).
+-define(wxDIRCTRL_SHOW_FILTERS, 64).
+-define(wxDIRCTRL_3D_INTERNAL, 128).
+-define(wxDIRCTRL_EDIT_LABELS, 256).
+% From "dirctrlg.h"
-define(wxID_FILTERLISTCTRL, 7001).
-define(wxID_TREECTRL, 7000).
-% From define::From dirdlg.h
+% From "dirdlg.h"
-define(wxDD_DEFAULT_STYLE, (?wxDEFAULT_DIALOG_STYLE bor ?wxRESIZE_BORDER)).
-define(wxDD_NEW_DIR_BUTTON, 0).
-define(wxDD_DIR_MUST_EXIST, 512).
-define(wxDD_CHANGE_DIR, 256).
-% From define::From dirdlgg.h
-% From define::From filedlg.h
+% From "dirdlgg.h"
+% From "dnd.h"
+-define(wxDrag_CopyOnly, 0).
+-define(wxDrag_AllowMove, 1).
+-define(wxDrag_DefaultMove, 3).
+% From "dnd.h": wxDragResult
+-define(wxDragError, 0).
+-define(wxDragNone, 1).
+-define(wxDragCopy, 2).
+-define(wxDragMove, 3).
+-define(wxDragLink, 4).
+-define(wxDragCancel, 5).
+% From "event.h"
+-define(wxMOUSE_BTN_ANY, -1).
+-define(wxMOUSE_BTN_NONE, 0).
+-define(wxMOUSE_BTN_LEFT, 1).
+-define(wxMOUSE_BTN_MIDDLE, 2).
+-define(wxMOUSE_BTN_RIGHT, 3).
+% From "event.h"
+-define(wxJOYSTICK1, 0).
+-define(wxJOYSTICK2, 1).
+% From "event.h"
+-define(wxJOY_BUTTON_ANY, -1).
+-define(wxJOY_BUTTON1, 1).
+-define(wxJOY_BUTTON2, 2).
+-define(wxJOY_BUTTON3, 4).
+-define(wxJOY_BUTTON4, 8).
+% From "event.h"
+% From "event.h": Propagation_state
+-define(wxEVENT_PROPAGATE_NONE, 0).
+-define(wxEVENT_PROPAGATE_MAX, ?INT_MAX).
+% From "event.h": wxIdleMode
+-define(wxIDLE_PROCESS_ALL, 0).
+-define(wxIDLE_PROCESS_SPECIFIED, 1).
+% From "event.h": wxUpdateUIMode
+-define(wxUPDATE_UI_PROCESS_ALL, 0).
+-define(wxUPDATE_UI_PROCESS_SPECIFIED, 1).
+% From "fdrepdlg.h": wxFindReplaceDialogStyles
+-define(wxFR_REPLACEDIALOG, 1).
+-define(wxFR_NOUPDOWN, 2).
+-define(wxFR_NOMATCHCASE, 4).
+-define(wxFR_NOWHOLEWORD, 8).
+% From "fdrepdlg.h": wxFindReplaceFlags
+-define(wxFR_DOWN, 1).
+-define(wxFR_WHOLEWORD, 2).
+-define(wxFR_MATCHCASE, 4).
+% From "filedlg.h"
+-define(wxFD_OPEN, 1).
+-define(wxFD_SAVE, 2).
+-define(wxFD_OVERWRITE_PROMPT, 4).
+-define(wxFD_FILE_MUST_EXIST, 16).
+-define(wxFD_MULTIPLE, 32).
+-define(wxFD_CHANGE_DIR, 128).
+-define(wxFD_PREVIEW, 256).
+% From "filedlg.h"
-define(wxFD_DEFAULT_STYLE, ?wxFD_OPEN).
-% From define::From filepicker.h
+% From "filepicker.h"
-define(wxDIRP_DEFAULT_STYLE, ?wxDIRP_DIR_MUST_EXIST).
-define(wxDIRP_USE_TEXTCTRL, ?wxPB_USE_TEXTCTRL).
-define(wxFLP_DEFAULT_STYLE, (?wxFLP_OPEN bor ?wxFLP_FILE_MUST_EXIST)).
@@ -529,30 +1550,300 @@
-define(wxFLP_OVERWRITE_PROMPT, 4096).
-define(wxFLP_SAVE, 2048).
-define(wxFLP_OPEN, 1024).
-% From define::From fontpicker.h
+% From "font.h"
+-define(wxFONTFLAG_DEFAULT, 0).
+-define(wxFONTFLAG_ITALIC, 1).
+-define(wxFONTFLAG_SLANT, 2).
+-define(wxFONTFLAG_LIGHT, 4).
+-define(wxFONTFLAG_BOLD, 8).
+-define(wxFONTFLAG_ANTIALIASED, 16).
+-define(wxFONTFLAG_NOT_ANTIALIASED, 32).
+-define(wxFONTFLAG_UNDERLINED, 64).
+-define(wxFONTFLAG_STRIKETHROUGH, 128).
+-define(wxFONTFLAG_MASK, (?wxFONTFLAG_ITALIC bor ?wxFONTFLAG_SLANT bor ?wxFONTFLAG_LIGHT bor ?wxFONTFLAG_BOLD bor ?wxFONTFLAG_ANTIALIASED bor ?wxFONTFLAG_NOT_ANTIALIASED bor ?wxFONTFLAG_UNDERLINED bor ?wxFONTFLAG_STRIKETHROUGH)).
+% From "font.h": wxFontFamily
+-define(wxFONTFAMILY_DEFAULT, ?wxDEFAULT).
+-define(wxFONTFAMILY_DECORATIVE, ?wxDECORATIVE).
+-define(wxFONTFAMILY_ROMAN, ?wxROMAN).
+-define(wxFONTFAMILY_SCRIPT, ?wxSCRIPT).
+-define(wxFONTFAMILY_SWISS, ?wxSWISS).
+-define(wxFONTFAMILY_MODERN, ?wxMODERN).
+-define(wxFONTFAMILY_TELETYPE, ?wxTELETYPE).
+-define(wxFONTFAMILY_MAX, (?wxTELETYPE+1)).
+-define(wxFONTFAMILY_UNKNOWN, ?wxFONTFAMILY_MAX).
+% From "font.h": wxFontStyle
+-define(wxFONTSTYLE_NORMAL, ?wxNORMAL).
+-define(wxFONTSTYLE_ITALIC, ?wxITALIC).
+-define(wxFONTSTYLE_SLANT, ?wxSLANT).
+-define(wxFONTSTYLE_MAX, (?wxSLANT+1)).
+% From "font.h": wxFontWeight
+-define(wxFONTWEIGHT_NORMAL, ?wxNORMAL).
+-define(wxFONTWEIGHT_LIGHT, ?wxLIGHT).
+-define(wxFONTWEIGHT_BOLD, ?wxBOLD).
+-define(wxFONTWEIGHT_MAX, (?wxBOLD+1)).
+% From "fontenc.h": wxFontEncoding
+-define(wxFONTENCODING_SYSTEM, -1).
+-define(wxFONTENCODING_DEFAULT, 0).
+-define(wxFONTENCODING_ISO8859_1, 1).
+-define(wxFONTENCODING_ISO8859_2, 2).
+-define(wxFONTENCODING_ISO8859_3, 3).
+-define(wxFONTENCODING_ISO8859_4, 4).
+-define(wxFONTENCODING_ISO8859_5, 5).
+-define(wxFONTENCODING_ISO8859_6, 6).
+-define(wxFONTENCODING_ISO8859_7, 7).
+-define(wxFONTENCODING_ISO8859_8, 8).
+-define(wxFONTENCODING_ISO8859_9, 9).
+-define(wxFONTENCODING_ISO8859_10, 10).
+-define(wxFONTENCODING_ISO8859_11, 11).
+-define(wxFONTENCODING_ISO8859_12, 12).
+-define(wxFONTENCODING_ISO8859_13, 13).
+-define(wxFONTENCODING_ISO8859_14, 14).
+-define(wxFONTENCODING_ISO8859_15, 15).
+-define(wxFONTENCODING_ISO8859_MAX, 16).
+-define(wxFONTENCODING_KOI8, 17).
+-define(wxFONTENCODING_KOI8_U, 18).
+-define(wxFONTENCODING_ALTERNATIVE, 19).
+-define(wxFONTENCODING_BULGARIAN, 20).
+-define(wxFONTENCODING_CP437, 21).
+-define(wxFONTENCODING_CP850, 22).
+-define(wxFONTENCODING_CP852, 23).
+-define(wxFONTENCODING_CP855, 24).
+-define(wxFONTENCODING_CP866, 25).
+-define(wxFONTENCODING_CP874, 26).
+-define(wxFONTENCODING_CP932, 27).
+-define(wxFONTENCODING_CP936, 28).
+-define(wxFONTENCODING_CP949, 29).
+-define(wxFONTENCODING_CP950, 30).
+-define(wxFONTENCODING_CP1250, 31).
+-define(wxFONTENCODING_CP1251, 32).
+-define(wxFONTENCODING_CP1252, 33).
+-define(wxFONTENCODING_CP1253, 34).
+-define(wxFONTENCODING_CP1254, 35).
+-define(wxFONTENCODING_CP1255, 36).
+-define(wxFONTENCODING_CP1256, 37).
+-define(wxFONTENCODING_CP1257, 38).
+-define(wxFONTENCODING_CP12_MAX, 39).
+-define(wxFONTENCODING_UTF7, 40).
+-define(wxFONTENCODING_UTF8, 41).
+-define(wxFONTENCODING_EUC_JP, 42).
+-define(wxFONTENCODING_UTF16BE, 43).
+-define(wxFONTENCODING_UTF16LE, 44).
+-define(wxFONTENCODING_UTF32BE, 45).
+-define(wxFONTENCODING_UTF32LE, 46).
+-define(wxFONTENCODING_MACROMAN, 47).
+-define(wxFONTENCODING_MACJAPANESE, 48).
+-define(wxFONTENCODING_MACCHINESETRAD, 49).
+-define(wxFONTENCODING_MACKOREAN, 50).
+-define(wxFONTENCODING_MACARABIC, 51).
+-define(wxFONTENCODING_MACHEBREW, 52).
+-define(wxFONTENCODING_MACGREEK, 53).
+-define(wxFONTENCODING_MACCYRILLIC, 54).
+-define(wxFONTENCODING_MACDEVANAGARI, 55).
+-define(wxFONTENCODING_MACGURMUKHI, 56).
+-define(wxFONTENCODING_MACGUJARATI, 57).
+-define(wxFONTENCODING_MACORIYA, 58).
+-define(wxFONTENCODING_MACBENGALI, 59).
+-define(wxFONTENCODING_MACTAMIL, 60).
+-define(wxFONTENCODING_MACTELUGU, 61).
+-define(wxFONTENCODING_MACKANNADA, 62).
+-define(wxFONTENCODING_MACMALAJALAM, 63).
+-define(wxFONTENCODING_MACSINHALESE, 64).
+-define(wxFONTENCODING_MACBURMESE, 65).
+-define(wxFONTENCODING_MACKHMER, 66).
+-define(wxFONTENCODING_MACTHAI, 67).
+-define(wxFONTENCODING_MACLAOTIAN, 68).
+-define(wxFONTENCODING_MACGEORGIAN, 69).
+-define(wxFONTENCODING_MACARMENIAN, 70).
+-define(wxFONTENCODING_MACCHINESESIMP, 71).
+-define(wxFONTENCODING_MACTIBETAN, 72).
+-define(wxFONTENCODING_MACMONGOLIAN, 73).
+-define(wxFONTENCODING_MACETHIOPIC, 74).
+-define(wxFONTENCODING_MACCENTRALEUR, 75).
+-define(wxFONTENCODING_MACVIATNAMESE, 76).
+-define(wxFONTENCODING_MACARABICEXT, 77).
+-define(wxFONTENCODING_MACSYMBOL, 78).
+-define(wxFONTENCODING_MACDINGBATS, 79).
+-define(wxFONTENCODING_MACTURKISH, 80).
+-define(wxFONTENCODING_MACCROATIAN, 81).
+-define(wxFONTENCODING_MACICELANDIC, 82).
+-define(wxFONTENCODING_MACROMANIAN, 83).
+-define(wxFONTENCODING_MACCELTIC, 84).
+-define(wxFONTENCODING_MACGAELIC, 85).
+-define(wxFONTENCODING_MACKEYBOARD, 86).
+-define(wxFONTENCODING_MAX, 87).
+-define(wxFONTENCODING_MACMIN, ?wxFONTENCODING_MACROMAN).
+-define(wxFONTENCODING_MACMAX, ?wxFONTENCODING_MACKEYBOARD).
+-define(wxFONTENCODING_UTF16, wxe_util:get_const(wxFONTENCODING_UTF16)).
+-define(wxFONTENCODING_UTF32, wxe_util:get_const(wxFONTENCODING_UTF32)).
+-define(wxFONTENCODING_UNICODE, ?wxFONTENCODING_UTF32).
+-define(wxFONTENCODING_GB2312, ?wxFONTENCODING_CP936).
+-define(wxFONTENCODING_BIG5, ?wxFONTENCODING_CP950).
+-define(wxFONTENCODING_SHIFT_JIS, ?wxFONTENCODING_CP932).
+% From "fontpicker.h"
-define(wxFNTP_MAXPOINT_SIZE, 100).
-define(wxFNTP_DEFAULT_STYLE, (?wxFNTP_FONTDESC_AS_LABEL bor ?wxFNTP_USEFONT_FOR_LABEL)).
-define(wxFNTP_USE_TEXTCTRL, ?wxPB_USE_TEXTCTRL).
-define(wxFNTP_USEFONT_FOR_LABEL, 16).
-define(wxFNTP_FONTDESC_AS_LABEL, 8).
-% From define::From frame.h
+% From "frame.h"
-define(wxFRAME_SHAPED, 16).
-define(wxFRAME_FLOAT_ON_PARENT, 8).
-define(wxFRAME_TOOL_WINDOW, 4).
-define(wxFRAME_NO_TASKBAR, 2).
-% From define::From gauge.h
--define(wxGAUGE_EMULATE_INDETERMINATE_MODE, 1).
+% From "framemanager.h": wxAuiButtonId
+-define(wxAUI_BUTTON_CLOSE, 101).
+-define(wxAUI_BUTTON_MAXIMIZE_RESTORE, 102).
+-define(wxAUI_BUTTON_MINIMIZE, 103).
+-define(wxAUI_BUTTON_PIN, 104).
+-define(wxAUI_BUTTON_OPTIONS, 105).
+-define(wxAUI_BUTTON_WINDOWLIST, 106).
+-define(wxAUI_BUTTON_LEFT, 107).
+-define(wxAUI_BUTTON_RIGHT, 108).
+-define(wxAUI_BUTTON_UP, 109).
+-define(wxAUI_BUTTON_DOWN, 110).
+-define(wxAUI_BUTTON_CUSTOM1, 201).
+-define(wxAUI_BUTTON_CUSTOM2, 202).
+-define(wxAUI_BUTTON_CUSTOM3, 203).
+% From "framemanager.h": wxAuiManagerDock
+-define(wxAUI_DOCK_NONE, 0).
+-define(wxAUI_DOCK_TOP, 1).
+-define(wxAUI_DOCK_RIGHT, 2).
+-define(wxAUI_DOCK_BOTTOM, 3).
+-define(wxAUI_DOCK_LEFT, 4).
+-define(wxAUI_DOCK_CENTER, 5).
+-define(wxAUI_DOCK_CENTRE, ?wxAUI_DOCK_CENTER).
+% From "framemanager.h": wxAuiManagerOption
+-define(wxAUI_MGR_ALLOW_FLOATING, 1).
+-define(wxAUI_MGR_ALLOW_ACTIVE_PANE, 2).
+-define(wxAUI_MGR_TRANSPARENT_DRAG, 4).
+-define(wxAUI_MGR_TRANSPARENT_HINT, 8).
+-define(wxAUI_MGR_VENETIAN_BLINDS_HINT, 16).
+-define(wxAUI_MGR_RECTANGLE_HINT, 32).
+-define(wxAUI_MGR_HINT_FADE, 64).
+-define(wxAUI_MGR_NO_VENETIAN_BLINDS_FADE, 128).
+-define(wxAUI_MGR_LIVE_RESIZE, 256).
+-define(wxAUI_MGR_DEFAULT, (?wxAUI_MGR_ALLOW_FLOATING bor ?wxAUI_MGR_TRANSPARENT_HINT bor ?wxAUI_MGR_HINT_FADE bor ?wxAUI_MGR_NO_VENETIAN_BLINDS_FADE)).
+% From "framemanager.h": wxAuiPaneButtonState
+-define(wxAUI_BUTTON_STATE_NORMAL, 0).
+-define(wxAUI_BUTTON_STATE_HOVER, 2).
+-define(wxAUI_BUTTON_STATE_PRESSED, 4).
+-define(wxAUI_BUTTON_STATE_DISABLED, 8).
+-define(wxAUI_BUTTON_STATE_HIDDEN, 16).
+-define(wxAUI_BUTTON_STATE_CHECKED, 32).
+% From "framemanager.h": wxAuiPaneDockArtGradients
+-define(wxAUI_GRADIENT_NONE, 0).
+-define(wxAUI_GRADIENT_VERTICAL, 1).
+-define(wxAUI_GRADIENT_HORIZONTAL, 2).
+% From "framemanager.h": wxAuiPaneDockArtSetting
+-define(wxAUI_DOCKART_SASH_SIZE, 0).
+-define(wxAUI_DOCKART_CAPTION_SIZE, 1).
+-define(wxAUI_DOCKART_GRIPPER_SIZE, 2).
+-define(wxAUI_DOCKART_PANE_BORDER_SIZE, 3).
+-define(wxAUI_DOCKART_PANE_BUTTON_SIZE, 4).
+-define(wxAUI_DOCKART_BACKGROUND_COLOUR, 5).
+-define(wxAUI_DOCKART_SASH_COLOUR, 6).
+-define(wxAUI_DOCKART_ACTIVE_CAPTION_COLOUR, 7).
+-define(wxAUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR, 8).
+-define(wxAUI_DOCKART_INACTIVE_CAPTION_COLOUR, 9).
+-define(wxAUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR, 10).
+-define(wxAUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR, 11).
+-define(wxAUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR, 12).
+-define(wxAUI_DOCKART_BORDER_COLOUR, 13).
+-define(wxAUI_DOCKART_GRIPPER_COLOUR, 14).
+-define(wxAUI_DOCKART_CAPTION_FONT, 15).
+-define(wxAUI_DOCKART_GRADIENT_TYPE, 16).
+% From "framemanager.h": wxAuiPaneInsertLevel
+-define(wxAUI_INSERT_PANE, 0).
+-define(wxAUI_INSERT_ROW, 1).
+-define(wxAUI_INSERT_DOCK, 2).
+% From "gauge.h"
+-define(wxGAUGE_EMULATE_INDETERMINATE_MODE, wxe_util:get_const(wxGAUGE_EMULATE_INDETERMINATE_MODE)).
-define(wxGA_SMOOTH, 32).
-define(wxGA_VERTICAL, ?wxVERTICAL).
-define(wxGA_HORIZONTAL, ?wxHORIZONTAL).
-% From define::From gdicmn.h
+% From "gdicmn.h"
-define(wxGetDisplayDepth, ?wxDisplayDepth).
-% From define::From generic_2laywin.h
+% From "gdicmn.h": wxBitmapType
+-define(wxBITMAP_TYPE_INVALID, 0).
+-define(wxBITMAP_TYPE_BMP, 1).
+-define(wxBITMAP_TYPE_BMP_RESOURCE, 2).
+-define(wxBITMAP_TYPE_RESOURCE, ?wxBITMAP_TYPE_BMP_RESOURCE).
+-define(wxBITMAP_TYPE_ICO, (?wxBITMAP_TYPE_BMP_RESOURCE+1)).
+-define(wxBITMAP_TYPE_ICO_RESOURCE, (?wxBITMAP_TYPE_BMP_RESOURCE+2)).
+-define(wxBITMAP_TYPE_CUR, (?wxBITMAP_TYPE_BMP_RESOURCE+3)).
+-define(wxBITMAP_TYPE_CUR_RESOURCE, (?wxBITMAP_TYPE_BMP_RESOURCE+4)).
+-define(wxBITMAP_TYPE_XBM, (?wxBITMAP_TYPE_BMP_RESOURCE+5)).
+-define(wxBITMAP_TYPE_XBM_DATA, (?wxBITMAP_TYPE_BMP_RESOURCE+6)).
+-define(wxBITMAP_TYPE_XPM, (?wxBITMAP_TYPE_BMP_RESOURCE+7)).
+-define(wxBITMAP_TYPE_XPM_DATA, (?wxBITMAP_TYPE_BMP_RESOURCE+8)).
+-define(wxBITMAP_TYPE_TIF, (?wxBITMAP_TYPE_BMP_RESOURCE+9)).
+-define(wxBITMAP_TYPE_TIF_RESOURCE, (?wxBITMAP_TYPE_BMP_RESOURCE+10)).
+-define(wxBITMAP_TYPE_GIF, (?wxBITMAP_TYPE_BMP_RESOURCE+11)).
+-define(wxBITMAP_TYPE_GIF_RESOURCE, (?wxBITMAP_TYPE_BMP_RESOURCE+12)).
+-define(wxBITMAP_TYPE_PNG, (?wxBITMAP_TYPE_BMP_RESOURCE+13)).
+-define(wxBITMAP_TYPE_PNG_RESOURCE, (?wxBITMAP_TYPE_BMP_RESOURCE+14)).
+-define(wxBITMAP_TYPE_JPEG, (?wxBITMAP_TYPE_BMP_RESOURCE+15)).
+-define(wxBITMAP_TYPE_JPEG_RESOURCE, (?wxBITMAP_TYPE_BMP_RESOURCE+16)).
+-define(wxBITMAP_TYPE_PNM, (?wxBITMAP_TYPE_BMP_RESOURCE+17)).
+-define(wxBITMAP_TYPE_PNM_RESOURCE, (?wxBITMAP_TYPE_BMP_RESOURCE+18)).
+-define(wxBITMAP_TYPE_PCX, (?wxBITMAP_TYPE_BMP_RESOURCE+19)).
+-define(wxBITMAP_TYPE_PCX_RESOURCE, (?wxBITMAP_TYPE_BMP_RESOURCE+20)).
+-define(wxBITMAP_TYPE_PICT, (?wxBITMAP_TYPE_BMP_RESOURCE+21)).
+-define(wxBITMAP_TYPE_PICT_RESOURCE, (?wxBITMAP_TYPE_BMP_RESOURCE+22)).
+-define(wxBITMAP_TYPE_ICON, (?wxBITMAP_TYPE_BMP_RESOURCE+23)).
+-define(wxBITMAP_TYPE_ICON_RESOURCE, (?wxBITMAP_TYPE_BMP_RESOURCE+24)).
+-define(wxBITMAP_TYPE_ANI, (?wxBITMAP_TYPE_BMP_RESOURCE+25)).
+-define(wxBITMAP_TYPE_IFF, (?wxBITMAP_TYPE_BMP_RESOURCE+26)).
+-define(wxBITMAP_TYPE_TGA, (?wxBITMAP_TYPE_BMP_RESOURCE+27)).
+-define(wxBITMAP_TYPE_MACCURSOR, (?wxBITMAP_TYPE_BMP_RESOURCE+28)).
+-define(wxBITMAP_TYPE_MACCURSOR_RESOURCE, (?wxBITMAP_TYPE_BMP_RESOURCE+29)).
+-define(wxBITMAP_TYPE_ANY, 50).
+% From "gdicmn.h": wxStockCursor
+-define(wxCURSOR_NONE, 0).
+-define(wxCURSOR_ARROW, 1).
+-define(wxCURSOR_RIGHT_ARROW, 2).
+-define(wxCURSOR_BULLSEYE, 3).
+-define(wxCURSOR_CHAR, 4).
+-define(wxCURSOR_CROSS, 5).
+-define(wxCURSOR_HAND, 6).
+-define(wxCURSOR_IBEAM, 7).
+-define(wxCURSOR_LEFT_BUTTON, 8).
+-define(wxCURSOR_MAGNIFIER, 9).
+-define(wxCURSOR_MIDDLE_BUTTON, 10).
+-define(wxCURSOR_NO_ENTRY, 11).
+-define(wxCURSOR_PAINT_BRUSH, 12).
+-define(wxCURSOR_PENCIL, 13).
+-define(wxCURSOR_POINT_LEFT, 14).
+-define(wxCURSOR_POINT_RIGHT, 15).
+-define(wxCURSOR_QUESTION_ARROW, 16).
+-define(wxCURSOR_RIGHT_BUTTON, 17).
+-define(wxCURSOR_SIZENESW, 18).
+-define(wxCURSOR_SIZENS, 19).
+-define(wxCURSOR_SIZENWSE, 20).
+-define(wxCURSOR_SIZEWE, 21).
+-define(wxCURSOR_SIZING, 22).
+-define(wxCURSOR_SPRAYCAN, 23).
+-define(wxCURSOR_WAIT, 24).
+-define(wxCURSOR_WATCH, 25).
+-define(wxCURSOR_BLANK, 26).
+-define(wxCURSOR_DEFAULT, 27).
+-define(wxCURSOR_ARROWWAIT, 28).
+-define(wxCURSOR_MAX, 29).
+% From "generic_2laywin.h"
-define(wxLAYOUT_QUERY, 256).
-define(wxLAYOUT_MRU_LENGTH, 16).
-define(wxLAYOUT_LENGTH_X, 0).
-define(wxLAYOUT_LENGTH_Y, 8).
-% From define::From generic_2sashwin.h
+% From "generic_2laywin.h": wxLayoutAlignment
+-define(wxLAYOUT_NONE, 0).
+-define(wxLAYOUT_TOP, 1).
+-define(wxLAYOUT_LEFT, 2).
+-define(wxLAYOUT_RIGHT, 3).
+-define(wxLAYOUT_BOTTOM, 4).
+% From "generic_2laywin.h": wxLayoutOrientation
+-define(wxLAYOUT_HORIZONTAL, 0).
+-define(wxLAYOUT_VERTICAL, 1).
+% From "generic_2sashwin.h"
-define(wxSW_3D, (?wxSW_3DSASH bor ?wxSW_3DBORDER)).
-define(wxSW_3DBORDER, 128).
-define(wxSW_3DSASH, 64).
@@ -561,27 +1852,137 @@
-define(wxSASH_DRAG_LEFT_DOWN, 2).
-define(wxSASH_DRAG_DRAGGING, 1).
-define(wxSASH_DRAG_NONE, 0).
-% From define::From generic_2splash.h
+% From "generic_2sashwin.h": wxSashEdgePosition
+-define(wxSASH_TOP, 0).
+-define(wxSASH_RIGHT, 1).
+-define(wxSASH_BOTTOM, 2).
+-define(wxSASH_LEFT, 3).
+-define(wxSASH_NONE, 100).
+% From "generic_2splash.h"
-define(wxSPLASH_NO_TIMEOUT, 0).
-define(wxSPLASH_TIMEOUT, 4).
-define(wxSPLASH_NO_CENTRE, 0).
-define(wxSPLASH_CENTRE_ON_SCREEN, 2).
-define(wxSPLASH_CENTRE_ON_PARENT, 1).
-% From define::From hash.h
+% From "generic_2splitter.h"
+-define(wxSPLIT_DRAG_NONE, 0).
+-define(wxSPLIT_DRAG_DRAGGING, 1).
+-define(wxSPLIT_DRAG_LEFT_DOWN, 2).
+% From "generic_2splitter.h": wxSplitMode
+-define(wxSPLIT_HORIZONTAL, 1).
+-define(wxSPLIT_VERTICAL, 2).
+% From "glcanvas.h"
+-define(WX_GL_RGBA, 1).
+-define(WX_GL_BUFFER_SIZE, 2).
+-define(WX_GL_LEVEL, 3).
+-define(WX_GL_DOUBLEBUFFER, 4).
+-define(WX_GL_STEREO, 5).
+-define(WX_GL_AUX_BUFFERS, 6).
+-define(WX_GL_MIN_RED, 7).
+-define(WX_GL_MIN_GREEN, 8).
+-define(WX_GL_MIN_BLUE, 9).
+-define(WX_GL_MIN_ALPHA, 10).
+-define(WX_GL_DEPTH_SIZE, 11).
+-define(WX_GL_STENCIL_SIZE, 12).
+-define(WX_GL_MIN_ACCUM_RED, 13).
+-define(WX_GL_MIN_ACCUM_GREEN, 14).
+-define(WX_GL_MIN_ACCUM_BLUE, 15).
+-define(WX_GL_MIN_ACCUM_ALPHA, 16).
+% From "hash.h"
-define(wxHASH_SIZE_DEFAULT, 1000).
-% From define::From htmlwin.h
+% From "htmlwin.h"
-define(wxHW_DEFAULT_STYLE, ?wxHW_SCROLLBAR_AUTO).
-define(wxHW_NO_SELECTION, 8).
-define(wxHW_SCROLLBAR_AUTO, 4).
-define(wxHW_SCROLLBAR_NEVER, 2).
-% From define::From imaglist.h
+% From "htmlwin.h": wxHtmlOpeningStatus
+-define(wxHTML_OPEN, 0).
+-define(wxHTML_BLOCK, 1).
+-define(wxHTML_REDIRECT, 2).
+% From "htmprint.h"
+-define(wxPAGE_ODD, 0).
+-define(wxPAGE_EVEN, 1).
+-define(wxPAGE_ALL, 2).
+% From "imagbmp.h"
+-define(wxBMP_24BPP, 24).
+-define(wxBMP_8BPP, 8).
+-define(wxBMP_8BPP_GREY, 9).
+-define(wxBMP_8BPP_GRAY, ?wxBMP_8BPP_GREY).
+-define(wxBMP_8BPP_RED, 10).
+-define(wxBMP_8BPP_PALETTE, 11).
+-define(wxBMP_4BPP, 4).
+-define(wxBMP_1BPP, 1).
+-define(wxBMP_1BPP_BW, 2).
+% From "image.h"
+-define(wxIMAGE_RESOLUTION_INCHES, 1).
+-define(wxIMAGE_RESOLUTION_CM, 2).
+% From "image.h"
+-define(wxIMAGE_QUALITY_NORMAL, 0).
+-define(wxIMAGE_QUALITY_HIGH, 1).
+% From "imaglist.h"
+-define(wxIMAGE_LIST_NORMAL, 0).
+-define(wxIMAGE_LIST_SMALL, 1).
+-define(wxIMAGE_LIST_STATE, 2).
+% From "imaglist.h"
-define(wxIMAGELIST_DRAW_FOCUSED, 8).
-define(wxIMAGELIST_DRAW_SELECTED, 4).
-define(wxIMAGELIST_DRAW_TRANSPARENT, 2).
-define(wxIMAGELIST_DRAW_NORMAL, 1).
-% From define::From layout.h
+% From "intl.h": wxLayoutDirection
+-define(wxLayout_Default, 0).
+-define(wxLayout_LeftToRight, 1).
+-define(wxLayout_RightToLeft, 2).
+% From "layout.h"
-define(wxLAYOUT_DEFAULT_MARGIN, 0).
-% From define::From listbase.h
+% From "layout.h": wxEdge
+-define(wxLeft, 0).
+-define(wxTop, 1).
+-define(wxRight, 2).
+-define(wxBottom, 3).
+-define(wxWidth, 4).
+-define(wxHeight, 5).
+-define(wxCentre, 6).
+-define(wxCenter, ?wxCentre).
+-define(wxCentreX, (?wxCentre+1)).
+-define(wxCentreY, (?wxCentre+2)).
+% From "layout.h": wxRelationship
+-define(wxUnconstrained, 0).
+-define(wxAsIs, 1).
+-define(wxPercentOf, 2).
+-define(wxAbove, 3).
+-define(wxBelow, 4).
+-define(wxLeftOf, 5).
+-define(wxRightOf, 6).
+-define(wxSameAs, 7).
+-define(wxAbsolute, 8).
+% From "list.h": wxKeyType
+-define(wxKEY_NONE, 0).
+-define(wxKEY_INTEGER, 1).
+-define(wxKEY_STRING, 2).
+% From "listbase.h"
+-define(wxLIST_NEXT_ABOVE, 0).
+-define(wxLIST_NEXT_ALL, 1).
+-define(wxLIST_NEXT_BELOW, 2).
+-define(wxLIST_NEXT_LEFT, 3).
+-define(wxLIST_NEXT_RIGHT, 4).
+% From "listbase.h"
+-define(wxLIST_ALIGN_DEFAULT, 0).
+-define(wxLIST_ALIGN_LEFT, 1).
+-define(wxLIST_ALIGN_TOP, 2).
+-define(wxLIST_ALIGN_SNAP_TO_GRID, 3).
+% From "listbase.h"
+-define(wxLIST_AUTOSIZE, -1).
+-define(wxLIST_AUTOSIZE_USEHEADER, -2).
+% From "listbase.h"
+-define(wxLIST_RECT_BOUNDS, 0).
+-define(wxLIST_RECT_ICON, 1).
+-define(wxLIST_RECT_LABEL, 2).
+% From "listbase.h"
+-define(wxLIST_FIND_UP, 0).
+-define(wxLIST_FIND_DOWN, 1).
+-define(wxLIST_FIND_LEFT, 2).
+-define(wxLIST_FIND_RIGHT, 3).
+% From "listbase.h"
-define(wxLIST_HITTEST_ONITEM, (?wxLIST_HITTEST_ONITEMICON bor ?wxLIST_HITTEST_ONITEMLABEL bor ?wxLIST_HITTEST_ONITEMSTATEICON)).
-define(wxLIST_HITTEST_TORIGHT, 2048).
-define(wxLIST_HITTEST_TOLEFT, 1024).
@@ -629,20 +2030,31 @@
-define(wxLC_ICON, 4).
-define(wxLC_HRULES, 2).
-define(wxLC_VRULES, 1).
-% From define::From listbook.h
+% From "listbase.h": wxListColumnFormat
+-define(wxLIST_FORMAT_LEFT, 0).
+-define(wxLIST_FORMAT_RIGHT, 1).
+-define(wxLIST_FORMAT_CENTRE, 2).
+-define(wxLIST_FORMAT_CENTER, ?wxLIST_FORMAT_CENTRE).
+% From "listbook.h"
-define(wxLB_ALIGN_MASK, ?wxBK_ALIGN_MASK).
-define(wxLB_RIGHT, ?wxBK_RIGHT).
-define(wxLB_LEFT, ?wxBK_LEFT).
-define(wxLB_BOTTOM, ?wxBK_BOTTOM).
-define(wxLB_TOP, ?wxBK_TOP).
-define(wxLB_DEFAULT, ?wxBK_DEFAULT).
-% From define::From log.h
+% From "log.h"
-define(wxTRACE_OleCalls, ?wxEmptyString).
-define(wxTraceRefCount, 8).
-define(wxTraceResAlloc, 4).
-define(wxTraceMessages, 2).
-define(wxTraceMemAlloc, 1).
-% From define::From notebook.h
+% From "notebook.h"
+-define(wxNB_HITTEST_NOWHERE, ?wxBK_HITTEST_NOWHERE).
+-define(wxNB_HITTEST_ONICON, ?wxBK_HITTEST_ONICON).
+-define(wxNB_HITTEST_ONLABEL, ?wxBK_HITTEST_ONLABEL).
+-define(wxNB_HITTEST_ONITEM, ?wxBK_HITTEST_ONITEM).
+-define(wxNB_HITTEST_ONPAGE, ?wxBK_HITTEST_ONPAGE).
+% From "notebook.h"
-define(wxNB_FLAT, 2048).
-define(wxNB_NOPAGETHEME, 1024).
-define(wxNB_MULTILINE, 512).
@@ -652,9 +2064,9 @@
-define(wxNB_BOTTOM, ?wxBK_BOTTOM).
-define(wxNB_TOP, ?wxBK_TOP).
-define(wxNB_DEFAULT, ?wxBK_DEFAULT).
-% From define::From pickerbase.h
+% From "pickerbase.h"
-define(wxPB_USE_TEXTCTRL, 2).
-% From define::From prntbase.h
+% From "prntbase.h"
-define(wxID_PREVIEW_GOTO, 8).
-define(wxID_PREVIEW_LAST, 7).
-define(wxID_PREVIEW_FIRST, 6).
@@ -671,7 +2083,11 @@
-define(wxPREVIEW_NEXT, 4).
-define(wxPREVIEW_PREVIOUS, 2).
-define(wxPREVIEW_PRINT, 1).
-% From define::From progdlg.h
+% From "prntbase.h": wxPrinterError
+-define(wxPRINTER_NO_ERROR, 0).
+-define(wxPRINTER_CANCELLED, 1).
+-define(wxPRINTER_ERROR, 2).
+% From "progdlg.h"
-define(wxPD_CAN_SKIP, 128).
-define(wxPD_REMAINING_TIME, 64).
-define(wxPD_SMOOTH, 32).
@@ -680,9 +2096,121 @@
-define(wxPD_AUTO_HIDE, 4).
-define(wxPD_APP_MODAL, 2).
-define(wxPD_CAN_ABORT, 1).
-% From define::From scrolwin.h
+% From "region.h": wxRegionContain
+-define(wxOutRegion, 0).
+-define(wxPartRegion, 1).
+-define(wxInRegion, 2).
+% From "region.h": wxRegionOp
+-define(wxRGN_AND, 0).
+-define(wxRGN_COPY, 1).
+-define(wxRGN_DIFF, 2).
+-define(wxRGN_OR, 3).
+-define(wxRGN_XOR, 4).
+% From "scrolwin.h"
-define(wxScrolledWindowStyle, (?wxHSCROLL bor ?wxVSCROLL)).
-% From define::From slider.h
+% From "settings.h": wxSystemColour
+-define(wxSYS_COLOUR_SCROLLBAR, 0).
+-define(wxSYS_COLOUR_BACKGROUND, 1).
+-define(wxSYS_COLOUR_DESKTOP, ?wxSYS_COLOUR_BACKGROUND).
+-define(wxSYS_COLOUR_ACTIVECAPTION, (?wxSYS_COLOUR_BACKGROUND+1)).
+-define(wxSYS_COLOUR_INACTIVECAPTION, (?wxSYS_COLOUR_BACKGROUND+2)).
+-define(wxSYS_COLOUR_MENU, (?wxSYS_COLOUR_BACKGROUND+3)).
+-define(wxSYS_COLOUR_WINDOW, (?wxSYS_COLOUR_BACKGROUND+4)).
+-define(wxSYS_COLOUR_WINDOWFRAME, (?wxSYS_COLOUR_BACKGROUND+5)).
+-define(wxSYS_COLOUR_MENUTEXT, (?wxSYS_COLOUR_BACKGROUND+6)).
+-define(wxSYS_COLOUR_WINDOWTEXT, (?wxSYS_COLOUR_BACKGROUND+7)).
+-define(wxSYS_COLOUR_CAPTIONTEXT, (?wxSYS_COLOUR_BACKGROUND+8)).
+-define(wxSYS_COLOUR_ACTIVEBORDER, (?wxSYS_COLOUR_BACKGROUND+9)).
+-define(wxSYS_COLOUR_INACTIVEBORDER, (?wxSYS_COLOUR_BACKGROUND+10)).
+-define(wxSYS_COLOUR_APPWORKSPACE, (?wxSYS_COLOUR_BACKGROUND+11)).
+-define(wxSYS_COLOUR_HIGHLIGHT, (?wxSYS_COLOUR_BACKGROUND+12)).
+-define(wxSYS_COLOUR_HIGHLIGHTTEXT, (?wxSYS_COLOUR_BACKGROUND+13)).
+-define(wxSYS_COLOUR_BTNFACE, (?wxSYS_COLOUR_BACKGROUND+14)).
+-define(wxSYS_COLOUR_3DFACE, ?wxSYS_COLOUR_BTNFACE).
+-define(wxSYS_COLOUR_BTNSHADOW, (?wxSYS_COLOUR_BTNFACE+1)).
+-define(wxSYS_COLOUR_3DSHADOW, ?wxSYS_COLOUR_BTNSHADOW).
+-define(wxSYS_COLOUR_GRAYTEXT, (?wxSYS_COLOUR_BTNSHADOW+1)).
+-define(wxSYS_COLOUR_BTNTEXT, (?wxSYS_COLOUR_BTNSHADOW+2)).
+-define(wxSYS_COLOUR_INACTIVECAPTIONTEXT, (?wxSYS_COLOUR_BTNSHADOW+3)).
+-define(wxSYS_COLOUR_BTNHIGHLIGHT, (?wxSYS_COLOUR_BTNSHADOW+4)).
+-define(wxSYS_COLOUR_BTNHILIGHT, ?wxSYS_COLOUR_BTNHIGHLIGHT).
+-define(wxSYS_COLOUR_3DHIGHLIGHT, ?wxSYS_COLOUR_BTNHIGHLIGHT).
+-define(wxSYS_COLOUR_3DHILIGHT, ?wxSYS_COLOUR_BTNHIGHLIGHT).
+-define(wxSYS_COLOUR_3DDKSHADOW, (?wxSYS_COLOUR_BTNHIGHLIGHT+1)).
+-define(wxSYS_COLOUR_3DLIGHT, (?wxSYS_COLOUR_BTNHIGHLIGHT+2)).
+-define(wxSYS_COLOUR_INFOTEXT, (?wxSYS_COLOUR_BTNHIGHLIGHT+3)).
+-define(wxSYS_COLOUR_INFOBK, (?wxSYS_COLOUR_BTNHIGHLIGHT+4)).
+-define(wxSYS_COLOUR_LISTBOX, (?wxSYS_COLOUR_BTNHIGHLIGHT+5)).
+-define(wxSYS_COLOUR_HOTLIGHT, (?wxSYS_COLOUR_BTNHIGHLIGHT+6)).
+-define(wxSYS_COLOUR_GRADIENTACTIVECAPTION, (?wxSYS_COLOUR_BTNHIGHLIGHT+7)).
+-define(wxSYS_COLOUR_GRADIENTINACTIVECAPTION, (?wxSYS_COLOUR_BTNHIGHLIGHT+8)).
+-define(wxSYS_COLOUR_MENUHILIGHT, (?wxSYS_COLOUR_BTNHIGHLIGHT+9)).
+-define(wxSYS_COLOUR_MENUBAR, (?wxSYS_COLOUR_BTNHIGHLIGHT+10)).
+-define(wxSYS_COLOUR_LISTBOXTEXT, (?wxSYS_COLOUR_BTNHIGHLIGHT+11)).
+-define(wxSYS_COLOUR_MAX, (?wxSYS_COLOUR_BTNHIGHLIGHT+12)).
+% From "settings.h": wxSystemFeature
+-define(wxSYS_CAN_DRAW_FRAME_DECORATIONS, 1).
+-define(wxSYS_CAN_ICONIZE_FRAME, 2).
+-define(wxSYS_TABLET_PRESENT, 3).
+% From "settings.h": wxSystemFont
+-define(wxSYS_OEM_FIXED_FONT, 10).
+-define(wxSYS_ANSI_FIXED_FONT, 11).
+-define(wxSYS_ANSI_VAR_FONT, 12).
+-define(wxSYS_SYSTEM_FONT, 13).
+-define(wxSYS_DEVICE_DEFAULT_FONT, 14).
+-define(wxSYS_DEFAULT_PALETTE, 15).
+-define(wxSYS_SYSTEM_FIXED_FONT, 16).
+-define(wxSYS_DEFAULT_GUI_FONT, 17).
+-define(wxSYS_ICONTITLE_FONT, ?wxSYS_DEFAULT_GUI_FONT).
+% From "settings.h": wxSystemMetric
+-define(wxSYS_MOUSE_BUTTONS, 1).
+-define(wxSYS_BORDER_X, 2).
+-define(wxSYS_BORDER_Y, 3).
+-define(wxSYS_CURSOR_X, 4).
+-define(wxSYS_CURSOR_Y, 5).
+-define(wxSYS_DCLICK_X, 6).
+-define(wxSYS_DCLICK_Y, 7).
+-define(wxSYS_DRAG_X, 8).
+-define(wxSYS_DRAG_Y, 9).
+-define(wxSYS_EDGE_X, 10).
+-define(wxSYS_EDGE_Y, 11).
+-define(wxSYS_HSCROLL_ARROW_X, 12).
+-define(wxSYS_HSCROLL_ARROW_Y, 13).
+-define(wxSYS_HTHUMB_X, 14).
+-define(wxSYS_ICON_X, 15).
+-define(wxSYS_ICON_Y, 16).
+-define(wxSYS_ICONSPACING_X, 17).
+-define(wxSYS_ICONSPACING_Y, 18).
+-define(wxSYS_WINDOWMIN_X, 19).
+-define(wxSYS_WINDOWMIN_Y, 20).
+-define(wxSYS_SCREEN_X, 21).
+-define(wxSYS_SCREEN_Y, 22).
+-define(wxSYS_FRAMESIZE_X, 23).
+-define(wxSYS_FRAMESIZE_Y, 24).
+-define(wxSYS_SMALLICON_X, 25).
+-define(wxSYS_SMALLICON_Y, 26).
+-define(wxSYS_HSCROLL_Y, 27).
+-define(wxSYS_VSCROLL_X, 28).
+-define(wxSYS_VSCROLL_ARROW_X, 29).
+-define(wxSYS_VSCROLL_ARROW_Y, 30).
+-define(wxSYS_VTHUMB_Y, 31).
+-define(wxSYS_CAPTION_Y, 32).
+-define(wxSYS_MENU_Y, 33).
+-define(wxSYS_NETWORK_PRESENT, 34).
+-define(wxSYS_PENWINDOWS_PRESENT, 35).
+-define(wxSYS_SHOW_SOUNDS, 36).
+-define(wxSYS_SWAP_BUTTONS, 37).
+% From "settings.h": wxSystemScreenType
+-define(wxSYS_SCREEN_NONE, 0).
+-define(wxSYS_SCREEN_TINY, 1).
+-define(wxSYS_SCREEN_PDA, 2).
+-define(wxSYS_SCREEN_SMALL, 3).
+-define(wxSYS_SCREEN_DESKTOP, 4).
+% From "sizer.h": wxFlexSizerGrowMode
+-define(wxFLEX_GROWMODE_NONE, 0).
+-define(wxFLEX_GROWMODE_SPECIFIED, 1).
+-define(wxFLEX_GROWMODE_ALL, 2).
+% From "slider.h"
-define(wxSL_INVERSE, 4096).
-define(wxSL_SELRANGE, 2048).
-define(wxSL_BOTH, 1024).
@@ -695,7 +2223,7 @@
-define(wxSL_TICKS, 16).
-define(wxSL_VERTICAL, ?wxVERTICAL).
-define(wxSL_HORIZONTAL, ?wxHORIZONTAL).
-% From define::From splitter.h
+% From "splitter.h"
-define(wxSP_3D, (?wxSP_3DBORDER bor ?wxSP_3DSASH)).
-define(wxSP_BORDER, ?wxSP_3DBORDER).
-define(wxSP_NO_XP_THEME, 1024).
@@ -705,11 +2233,11 @@
-define(wxSP_PERMIT_UNSPLIT, 64).
-define(wxSP_NOSASH, 16).
-define(wxSP_NOBORDER, 0).
-% From define::From statusbr.h
+% From "statusbr.h"
-define(wxSB_RAISED, 2).
-define(wxSB_FLAT, 1).
-define(wxSB_NORMAL, 0).
-% From define::From stc.h
+% From "stc.h"
-define(wxSTC_CMD_WORDRIGHTENDEXTEND, 2442).
-define(wxSTC_CMD_WORDRIGHTEND, 2441).
-define(wxSTC_CMD_WORDLEFTENDEXTEND, 2440).
@@ -2045,7 +3573,11 @@
-define(wxSTC_START, 2000).
-define(wxSTC_INVALID_POSITION, -1).
-define(wxSTC_USE_POPUP, 1).
-% From define::From textctrl.h
+% From "tbarbase.h": wxToolBarToolStyle
+-define(wxTOOL_STYLE_BUTTON, 1).
+-define(wxTOOL_STYLE_SEPARATOR, 2).
+-define(wxTOOL_STYLE_CONTROL, 3).
+% From "textctrl.h"
-define(wxTEXT_ATTR_TABS, 1024).
-define(wxTEXT_ATTR_RIGHT_INDENT, 512).
-define(wxTEXT_ATTR_LEFT_INDENT, 256).
@@ -2080,11 +3612,51 @@
-define(wxTE_AUTO_SCROLL, 8).
-define(wxTE_NO_VSCROLL, 2).
-define(wxHAS_TEXT_WINDOW_STREAM, 0).
-% From define::From textdlgg.h
+% From "textctrl.h": wxTextAttrAlignment
+-define(wxTEXT_ALIGNMENT_DEFAULT, 0).
+-define(wxTEXT_ALIGNMENT_LEFT, 1).
+-define(wxTEXT_ALIGNMENT_CENTRE, 2).
+-define(wxTEXT_ALIGNMENT_CENTER, ?wxTEXT_ALIGNMENT_CENTRE).
+-define(wxTEXT_ALIGNMENT_RIGHT, (?wxTEXT_ALIGNMENT_CENTRE+1)).
+-define(wxTEXT_ALIGNMENT_JUSTIFIED, (?wxTEXT_ALIGNMENT_CENTRE+2)).
+% From "textctrl.h": wxTextCtrlHitTestResult
+-define(wxTE_HT_UNKNOWN, -2).
+-define(wxTE_HT_BEFORE, -1).
+-define(wxTE_HT_ON_TEXT, 0).
+-define(wxTE_HT_BELOW, 1).
+-define(wxTE_HT_BEYOND, 2).
+% From "textdlgg.h"
-define(wxTextEntryDialogStyle, (?wxOK bor ?wxCANCEL bor ?wxCENTRE bor ?wxWS_EX_VALIDATE_RECURSIVELY)).
-% From define::From toolbook.h
+% From "toolbar.h"
+-define(wxTB_HORIZONTAL, ?wxHORIZONTAL).
+-define(wxTB_TOP, ?wxTB_HORIZONTAL).
+-define(wxTB_VERTICAL, ?wxVERTICAL).
+-define(wxTB_LEFT, ?wxTB_VERTICAL).
+-define(wxTB_3DBUTTONS, 16).
+-define(wxTB_FLAT, 32).
+-define(wxTB_DOCKABLE, 64).
+-define(wxTB_NOICONS, 128).
+-define(wxTB_TEXT, 256).
+-define(wxTB_NODIVIDER, 512).
+-define(wxTB_NOALIGN, 1024).
+-define(wxTB_HORZ_LAYOUT, 2048).
+-define(wxTB_HORZ_TEXT, (?wxTB_HORZ_LAYOUT bor ?wxTB_TEXT)).
+-define(wxTB_NO_TOOLTIPS, 4096).
+-define(wxTB_BOTTOM, 8192).
+-define(wxTB_RIGHT, 16384).
+% From "toolbook.h"
-define(wxBK_BUTTONBAR, 256).
-% From define::From toplevel.h
+% From "toplevel.h"
+-define(wxFULLSCREEN_NOMENUBAR, 1).
+-define(wxFULLSCREEN_NOTOOLBAR, 2).
+-define(wxFULLSCREEN_NOSTATUSBAR, 4).
+-define(wxFULLSCREEN_NOBORDER, 8).
+-define(wxFULLSCREEN_NOCAPTION, 16).
+-define(wxFULLSCREEN_ALL, (?wxFULLSCREEN_NOMENUBAR bor ?wxFULLSCREEN_NOTOOLBAR bor ?wxFULLSCREEN_NOSTATUSBAR bor ?wxFULLSCREEN_NOBORDER bor ?wxFULLSCREEN_NOCAPTION)).
+% From "toplevel.h"
+-define(wxUSER_ATTENTION_INFO, 1).
+-define(wxUSER_ATTENTION_ERROR, 2).
+% From "toplevel.h"
-define(wxTOPLEVEL_EX_DIALOG, 8).
-define(wxDEFAULT_FRAME_STYLE, (?wxSYSTEM_MENU bor ?wxRESIZE_BORDER bor ?wxMINIMIZE_BOX bor ?wxMAXIMIZE_BOX bor ?wxCLOSE_BOX bor ?wxCAPTION bor ?wxCLIP_CHILDREN)).
-define(wxRESIZE_BORDER, 64).
@@ -2098,8 +3670,8 @@
-define(wxMINIMIZE, ?wxICONIZE).
-define(wxICONIZE, 16384).
-define(wxSTAY_ON_TOP, 32768).
-% From define::From treebase.h
--define(wxTR_DEFAULT_STYLE, (?wxTR_HAS_BUTTONS bor ?wxTR_LINES_AT_ROOT)).
+% From "treebase.h"
+-define(wxTR_DEFAULT_STYLE, wxe_util:get_const(wxTR_DEFAULT_STYLE)).
-define(wxTR_FULL_ROW_HIGHLIGHT, 8192).
-define(wxTR_HIDE_ROOT, 2048).
-define(wxTR_ROW_LINES, 1024).
@@ -2113,1416 +3685,37 @@
-define(wxTR_NO_LINES, 4).
-define(wxTR_HAS_BUTTONS, 1).
-define(wxTR_NO_BUTTONS, 0).
-% From define::From valtext.h
--define(wxFILTER_EXCLUDE_CHAR_LIST, 128).
--define(wxFILTER_INCLUDE_CHAR_LIST, 64).
--define(wxFILTER_EXCLUDE_LIST, 32).
--define(wxFILTER_INCLUDE_LIST, 16).
--define(wxFILTER_NUMERIC, 8).
--define(wxFILTER_ALPHANUMERIC, 4).
--define(wxFILTER_ALPHA, 2).
--define(wxFILTER_ASCII, 1).
--define(wxFILTER_NONE, 0).
-% From define::From version.h
--define(wxBETA_NUMBER, wxe_util:get_const(wxBETA_NUMBER)).
--define(wxSUBRELEASE_NUMBER, wxe_util:get_const(wxSUBRELEASE_NUMBER)).
--define(wxRELEASE_NUMBER, wxe_util:get_const(wxRELEASE_NUMBER)).
--define(wxMINOR_VERSION, wxe_util:get_const(wxMINOR_VERSION)).
--define(wxMAJOR_VERSION, wxe_util:get_const(wxMAJOR_VERSION)).
-% From class wxAuiManager
--define(wxAuiManager_actionNone, 0).
--define(wxAuiManager_actionResize, 1).
--define(wxAuiManager_actionClickButton, 2).
--define(wxAuiManager_actionClickCaption, 3).
--define(wxAuiManager_actionDragToolbarPane, 4).
--define(wxAuiManager_actionDragFloatingPane, 5).
-% From wxAuiPaneInfo::wxAuiPaneState
--define(wxAuiPaneInfo_optionFloating, 1).
--define(wxAuiPaneInfo_optionHidden, 2).
--define(wxAuiPaneInfo_optionLeftDockable, 4).
--define(wxAuiPaneInfo_optionRightDockable, 8).
--define(wxAuiPaneInfo_optionTopDockable, 16).
--define(wxAuiPaneInfo_optionBottomDockable, 32).
--define(wxAuiPaneInfo_optionFloatable, 64).
--define(wxAuiPaneInfo_optionMovable, 128).
--define(wxAuiPaneInfo_optionResizable, 256).
--define(wxAuiPaneInfo_optionPaneBorder, 512).
--define(wxAuiPaneInfo_optionCaption, 1024).
--define(wxAuiPaneInfo_optionGripper, 2048).
--define(wxAuiPaneInfo_optionDestroyOnClose, 4096).
--define(wxAuiPaneInfo_optionToolbar, 8192).
--define(wxAuiPaneInfo_optionActive, 16384).
--define(wxAuiPaneInfo_optionGripperTop, 32768).
--define(wxAuiPaneInfo_optionMaximized, 65536).
--define(wxAuiPaneInfo_optionDockFixed, 131072).
--define(wxAuiPaneInfo_buttonClose, 2097152).
--define(wxAuiPaneInfo_buttonMaximize, 4194304).
--define(wxAuiPaneInfo_buttonMinimize, 8388608).
--define(wxAuiPaneInfo_buttonPin, 16777216).
--define(wxAuiPaneInfo_buttonCustom1, 67108864).
--define(wxAuiPaneInfo_buttonCustom2, 134217728).
--define(wxAuiPaneInfo_buttonCustom3, 268435456).
--define(wxAuiPaneInfo_savedHiddenState, 1073741824).
--define(wxAuiPaneInfo_actionPane, 2147483648).
-% From wxBitmap::Representation
--define(wxBitmap_Pixmap, 0).
--define(wxBitmap_Pixbuf, 1).
-% From class wxChoicebook
--define(wxChoicebook_SetSelection_SendEvent, 1).
-% From wxDateTime::Calendar
--define(wxDateTime_Gregorian, 0).
--define(wxDateTime_Julian, 1).
-% From wxDateTime::Country
--define(wxDateTime_Country_Unknown, 0).
--define(wxDateTime_Country_Default, 1).
--define(wxDateTime_Country_WesternEurope_Start, 2).
--define(wxDateTime_Country_EEC, ?Country_WesternEurope_Start).
--define(wxDateTime_France, (?Country_WesternEurope_Start+1)).
--define(wxDateTime_Germany, (?Country_WesternEurope_Start+2)).
--define(wxDateTime_UK, (?Country_WesternEurope_Start+3)).
--define(wxDateTime_Country_WesternEurope_End, ?UK).
--define(wxDateTime_Russia, (?UK+1)).
--define(wxDateTime_USA, (?UK+2)).
-% From wxDateTime::GregorianAdoption
--define(wxDateTime_Gr_Unknown, 0).
--define(wxDateTime_Gr_Standard, 1).
--define(wxDateTime_Gr_Alaska, 2).
--define(wxDateTime_Gr_Albania, 3).
--define(wxDateTime_Gr_Austria, ?Gr_Unknown).
--define(wxDateTime_Gr_Austria_Brixen, (?Gr_Unknown+1)).
--define(wxDateTime_Gr_Austria_Salzburg, ?Gr_Austria_Brixen).
--define(wxDateTime_Gr_Austria_Tyrol, ?Gr_Austria_Brixen).
--define(wxDateTime_Gr_Austria_Carinthia, (?Gr_Austria_Brixen+1)).
--define(wxDateTime_Gr_Austria_Styria, ?Gr_Austria_Carinthia).
--define(wxDateTime_Gr_Belgium, (?Gr_Austria_Carinthia+1)).
--define(wxDateTime_Gr_Bulgaria, ?Gr_Unknown).
--define(wxDateTime_Gr_Bulgaria_1, (?Gr_Unknown+1)).
--define(wxDateTime_Gr_Bulgaria_2, (?Gr_Unknown+2)).
--define(wxDateTime_Gr_Bulgaria_3, (?Gr_Unknown+3)).
--define(wxDateTime_Gr_Canada, ?Gr_Unknown).
--define(wxDateTime_Gr_China, ?Gr_Unknown).
--define(wxDateTime_Gr_China_1, (?Gr_Unknown+1)).
--define(wxDateTime_Gr_China_2, (?Gr_Unknown+2)).
--define(wxDateTime_Gr_Czechoslovakia, (?Gr_Unknown+3)).
--define(wxDateTime_Gr_Denmark, (?Gr_Unknown+4)).
--define(wxDateTime_Gr_Egypt, (?Gr_Unknown+5)).
--define(wxDateTime_Gr_Estonia, (?Gr_Unknown+6)).
--define(wxDateTime_Gr_Finland, (?Gr_Unknown+7)).
--define(wxDateTime_Gr_France, (?Gr_Unknown+8)).
--define(wxDateTime_Gr_France_Alsace, (?Gr_Unknown+9)).
--define(wxDateTime_Gr_France_Lorraine, (?Gr_Unknown+10)).
--define(wxDateTime_Gr_France_Strasbourg, (?Gr_Unknown+11)).
--define(wxDateTime_Gr_Germany, ?Gr_Unknown).
--define(wxDateTime_Gr_Germany_Catholic, (?Gr_Unknown+1)).
--define(wxDateTime_Gr_Germany_Prussia, (?Gr_Unknown+2)).
--define(wxDateTime_Gr_Germany_Protestant, (?Gr_Unknown+3)).
--define(wxDateTime_Gr_GreatBritain, (?Gr_Unknown+4)).
--define(wxDateTime_Gr_Greece, (?Gr_Unknown+5)).
--define(wxDateTime_Gr_Hungary, (?Gr_Unknown+6)).
--define(wxDateTime_Gr_Ireland, ?Gr_GreatBritain).
--define(wxDateTime_Gr_Italy, ?Gr_Standard).
--define(wxDateTime_Gr_Japan, ?Gr_Unknown).
--define(wxDateTime_Gr_Japan_1, (?Gr_Unknown+1)).
--define(wxDateTime_Gr_Japan_2, (?Gr_Unknown+2)).
--define(wxDateTime_Gr_Japan_3, (?Gr_Unknown+3)).
--define(wxDateTime_Gr_Latvia, (?Gr_Unknown+4)).
--define(wxDateTime_Gr_Lithuania, (?Gr_Unknown+5)).
--define(wxDateTime_Gr_Luxemburg, (?Gr_Unknown+6)).
--define(wxDateTime_Gr_Netherlands, ?Gr_Belgium).
--define(wxDateTime_Gr_Netherlands_Groningen, (?Gr_Belgium+1)).
--define(wxDateTime_Gr_Netherlands_Gelderland, (?Gr_Belgium+2)).
--define(wxDateTime_Gr_Netherlands_Utrecht, (?Gr_Belgium+3)).
--define(wxDateTime_Gr_Netherlands_Friesland, (?Gr_Belgium+4)).
--define(wxDateTime_Gr_Norway, ?Gr_Denmark).
--define(wxDateTime_Gr_Poland, ?Gr_Standard).
--define(wxDateTime_Gr_Portugal, ?Gr_Standard).
--define(wxDateTime_Gr_Romania, (?Gr_Standard+1)).
--define(wxDateTime_Gr_Russia, (?Gr_Standard+2)).
--define(wxDateTime_Gr_Scotland, ?Gr_GreatBritain).
--define(wxDateTime_Gr_Spain, ?Gr_Standard).
--define(wxDateTime_Gr_Sweden, ?Gr_Finland).
--define(wxDateTime_Gr_Switzerland, ?Gr_Unknown).
--define(wxDateTime_Gr_Switzerland_Catholic, (?Gr_Unknown+1)).
--define(wxDateTime_Gr_Switzerland_Protestant, (?Gr_Unknown+2)).
--define(wxDateTime_Gr_Turkey, (?Gr_Unknown+3)).
--define(wxDateTime_Gr_USA, ?Gr_GreatBritain).
--define(wxDateTime_Gr_Wales, ?Gr_GreatBritain).
--define(wxDateTime_Gr_Yugoslavia, (?Gr_GreatBritain+1)).
-% From wxDateTime::Month
--define(wxDateTime_Jan, 0).
--define(wxDateTime_Feb, 1).
--define(wxDateTime_Mar, 2).
--define(wxDateTime_Apr, 3).
--define(wxDateTime_May, 4).
--define(wxDateTime_Jun, 5).
--define(wxDateTime_Jul, 6).
--define(wxDateTime_Aug, 7).
--define(wxDateTime_Sep, 8).
--define(wxDateTime_Oct, 9).
--define(wxDateTime_Nov, 10).
--define(wxDateTime_Dec, 11).
--define(wxDateTime_Inv_Month, 12).
-% From wxDateTime::NameFlags
--define(wxDateTime_Name_Full, 1).
--define(wxDateTime_Name_Abbr, 2).
-% From wxDateTime::TZ
--define(wxDateTime_Local, 0).
--define(wxDateTime_GMT_12, 1).
--define(wxDateTime_GMT_11, 2).
--define(wxDateTime_GMT_10, 3).
--define(wxDateTime_GMT_9, 4).
--define(wxDateTime_GMT_8, 5).
--define(wxDateTime_GMT_7, 6).
--define(wxDateTime_GMT_6, 7).
--define(wxDateTime_GMT_5, 8).
--define(wxDateTime_GMT_4, 9).
--define(wxDateTime_GMT_3, 10).
--define(wxDateTime_GMT_2, 11).
--define(wxDateTime_GMT_1, 12).
--define(wxDateTime_GMT0, 13).
--define(wxDateTime_GMT1, 14).
--define(wxDateTime_GMT2, 15).
--define(wxDateTime_GMT3, 16).
--define(wxDateTime_GMT4, 17).
--define(wxDateTime_GMT5, 18).
--define(wxDateTime_GMT6, 19).
--define(wxDateTime_GMT7, 20).
--define(wxDateTime_GMT8, 21).
--define(wxDateTime_GMT9, 22).
--define(wxDateTime_GMT10, 23).
--define(wxDateTime_GMT11, 24).
--define(wxDateTime_GMT12, 25).
--define(wxDateTime_GMT13, 26).
--define(wxDateTime_WET, ?GMT0).
--define(wxDateTime_WEST, ?GMT1).
--define(wxDateTime_CET, ?GMT1).
--define(wxDateTime_CEST, ?GMT2).
--define(wxDateTime_EET, ?GMT2).
--define(wxDateTime_EEST, ?GMT3).
--define(wxDateTime_MSK, ?GMT3).
--define(wxDateTime_MSD, ?GMT4).
--define(wxDateTime_AST, ?GMT_4).
--define(wxDateTime_ADT, ?GMT_3).
--define(wxDateTime_EST, ?GMT_5).
--define(wxDateTime_EDT, ?GMT_4).
--define(wxDateTime_CST, ?GMT_6).
--define(wxDateTime_CDT, ?GMT_5).
--define(wxDateTime_MST, ?GMT_7).
--define(wxDateTime_MDT, ?GMT_6).
--define(wxDateTime_PST, ?GMT_8).
--define(wxDateTime_PDT, ?GMT_7).
--define(wxDateTime_HST, ?GMT_10).
--define(wxDateTime_AKST, ?GMT_9).
--define(wxDateTime_AKDT, ?GMT_8).
--define(wxDateTime_A_WST, ?GMT8).
--define(wxDateTime_A_CST, ?GMT13+1).
--define(wxDateTime_A_EST, ?GMT10).
--define(wxDateTime_A_ESST, ?GMT11).
--define(wxDateTime_NZST, ?GMT12).
--define(wxDateTime_NZDT, ?GMT13).
--define(wxDateTime_UTC, ?GMT0).
-% From wxDateTime::WeekDay
--define(wxDateTime_Sun, 0).
--define(wxDateTime_Mon, 1).
--define(wxDateTime_Tue, 2).
--define(wxDateTime_Wed, 3).
--define(wxDateTime_Thu, 4).
--define(wxDateTime_Fri, 5).
--define(wxDateTime_Sat, 6).
--define(wxDateTime_Inv_WeekDay, 7).
-% From wxDateTime::WeekFlags
--define(wxDateTime_Default_First, 0).
--define(wxDateTime_Monday_First, 1).
--define(wxDateTime_Sunday_First, 2).
-% From wxDateTime::Year
--define(wxDateTime_Inv_Year, ?SHRT_MIN).
-% From class wxDialog
--define(wxDialog_ButtonSizerFlags, (?wxOK bor ?wxCANCEL bor ?wxYES bor ?wxNO bor ?wxHELP bor ?wxNO_DEFAULT)).
-% From class wxGrid
--define(wxGrid_wxGRID_CELLCTRL, 2000).
--define(wxGrid_wxGRID_TOPCTRL, 2001).
-% From class wxGrid
--define(wxGrid_wxGRID_TEXTCTRL, 2100).
--define(wxGrid_wxGRID_CHECKBOX, 2101).
--define(wxGrid_wxGRID_CHOICE, 2102).
--define(wxGrid_wxGRID_COMBOBOX, 2103).
-% From wxGrid::CursorMode
--define(wxGrid_WXGRID_CURSOR_SELECT_CELL, 0).
--define(wxGrid_WXGRID_CURSOR_RESIZE_ROW, 1).
--define(wxGrid_WXGRID_CURSOR_RESIZE_COL, 2).
--define(wxGrid_WXGRID_CURSOR_SELECT_ROW, 3).
--define(wxGrid_WXGRID_CURSOR_SELECT_COL, 4).
--define(wxGrid_WXGRID_CURSOR_MOVE_COL, 5).
-% From wxGrid::wxGridSelectionModes
--define(wxGrid_wxGridSelectCells, 0).
--define(wxGrid_wxGridSelectRows, 1).
--define(wxGrid_wxGridSelectColumns, 2).
-% From wxGridCellAttr::wxAttrKind
--define(wxGridCellAttr_Any, 0).
--define(wxGridCellAttr_Default, 1).
--define(wxGridCellAttr_Cell, 2).
--define(wxGridCellAttr_Row, 3).
--define(wxGridCellAttr_Col, 4).
--define(wxGridCellAttr_Merged, 5).
-% From wxGridCellAttr::wxAttrOverflowMode
--define(wxGridCellAttr_UnsetOverflow, -1).
--define(wxGridCellAttr_Overflow, 0).
--define(wxGridCellAttr_SingleCell, 1).
-% From wxGridCellAttr::wxAttrReadMode
--define(wxGridCellAttr_Unset, -1).
--define(wxGridCellAttr_ReadWrite, 0).
--define(wxGridCellAttr_ReadOnly, 1).
-% From wxHelpEvent::Origin
--define(wxHelpEvent_Origin_Unknown, 0).
--define(wxHelpEvent_Origin_Keyboard, 1).
--define(wxHelpEvent_Origin_HelpButton, 2).
-% From wxHtmlEasyPrinting::FontMode
--define(wxHtmlEasyPrinting_FontMode_Explicit, 0).
--define(wxHtmlEasyPrinting_FontMode_Standard, 1).
-% From wxHtmlWindow::ClipboardType
--define(wxHtmlWindow_Primary, 0).
--define(wxHtmlWindow_Secondary, 1).
-% From class wxListbook
--define(wxListbook_SetSelection_SendEvent, 1).
-% From class wxNavigationKeyEvent
--define(wxNavigationKeyEvent_IsBackward, 0).
--define(wxNavigationKeyEvent_IsForward, 1).
--define(wxNavigationKeyEvent_WinChange, 2).
--define(wxNavigationKeyEvent_FromTab, 4).
-% From class wxNotebook
--define(wxNotebook_SetSelection_SendEvent, 1).
-% From class wxProgressDialog
--define(wxProgressDialog_Uncancelable, -1).
--define(wxProgressDialog_Canceled, 0).
--define(wxProgressDialog_Continue, 1).
--define(wxProgressDialog_Finished, 2).
-% From class wxSizerItem
--define(wxSizerItem_Item_None, 0).
--define(wxSizerItem_Item_Window, 1).
--define(wxSizerItem_Item_Sizer, 2).
--define(wxSizerItem_Item_Spacer, 3).
--define(wxSizerItem_Item_Max, 4).
-% From class wxTextCtrl
--define(wxTextCtrl_SetValue_SendEvent, 1).
--define(wxTextCtrl_SetValue_SelectionOnly, 2).
-% From class wxToolbook
--define(wxToolbook_SetSelection_SendEvent, 1).
-% From class wxTreebook
--define(wxTreebook_SetSelection_SendEvent, 1).
-% From wxWindow::MoveKind
--define(wxWindow_MoveBefore, 0).
--define(wxWindow_MoveAfter, 1).
-% From wxWindowGTK::ScrollDir
--define(wxWindowGTK_ScrollDir_Horz, 0).
--define(wxWindowGTK_ScrollDir_Vert, 1).
--define(wxWindowGTK_ScrollDir_Max, 2).
-% From wxWindowGTK::ScrollUnit
--define(wxWindowGTK_ScrollUnit_Line, 0).
--define(wxWindowGTK_ScrollUnit_Page, 1).
--define(wxWindowGTK_ScrollUnit_Max, 2).
--define(wxACCEL_NORMAL, 0).
--define(wxACCEL_ALT, 1).
--define(wxACCEL_CTRL, 2).
--define(wxACCEL_SHIFT, 4).
--define(wxACCEL_CMD, ?wxACCEL_CTRL).
--define(wxPRINT_WINDOWS, 1).
--define(wxPRINT_POSTSCRIPT, 2).
--define(wxBK_HITTEST_NOWHERE, 1).
--define(wxBK_HITTEST_ONICON, 2).
--define(wxBK_HITTEST_ONLABEL, 4).
--define(wxBK_HITTEST_ONITEM, (?wxBK_HITTEST_ONICON bor ?wxBK_HITTEST_ONLABEL)).
--define(wxBK_HITTEST_ONPAGE, 8).
--define(wxCAL_SUNDAY_FIRST, 0).
--define(wxCAL_MONDAY_FIRST, 1).
--define(wxCAL_SHOW_HOLIDAYS, 2).
--define(wxCAL_NO_YEAR_CHANGE, 4).
--define(wxCAL_NO_MONTH_CHANGE, 12).
--define(wxCAL_SEQUENTIAL_MONTH_SELECTION, 16).
--define(wxCAL_SHOW_SURROUNDING_WEEKS, 32).
--define(wxDP_DEFAULT, 0).
--define(wxDP_SPIN, 1).
--define(wxDP_DROPDOWN, 2).
--define(wxDP_SHOWCENTURY, 4).
--define(wxDP_ALLOWNONE, 8).
--define(wxDefaultCoord, -1).
--define(wxDIRCTRL_DIR_ONLY, 16).
--define(wxDIRCTRL_SELECT_FIRST, 32).
--define(wxDIRCTRL_SHOW_FILTERS, 64).
--define(wxDIRCTRL_3D_INTERNAL, 128).
--define(wxDIRCTRL_EDIT_LABELS, 256).
--define(wxDrag_CopyOnly, 0).
--define(wxDrag_AllowMove, 1).
--define(wxDrag_DefaultMove, 3).
--define(wxMOUSE_BTN_ANY, -1).
--define(wxMOUSE_BTN_NONE, 0).
--define(wxMOUSE_BTN_LEFT, 1).
--define(wxMOUSE_BTN_MIDDLE, 2).
--define(wxMOUSE_BTN_RIGHT, 3).
--define(wxFD_OPEN, 1).
--define(wxFD_SAVE, 2).
--define(wxFD_OVERWRITE_PROMPT, 4).
--define(wxFD_FILE_MUST_EXIST, 16).
--define(wxFD_MULTIPLE, 32).
--define(wxFD_CHANGE_DIR, 128).
--define(wxFD_PREVIEW, 256).
--define(wxFONTFLAG_DEFAULT, 0).
--define(wxFONTFLAG_ITALIC, 1).
--define(wxFONTFLAG_SLANT, 2).
--define(wxFONTFLAG_LIGHT, 4).
--define(wxFONTFLAG_BOLD, 8).
--define(wxFONTFLAG_ANTIALIASED, 16).
--define(wxFONTFLAG_NOT_ANTIALIASED, 32).
--define(wxFONTFLAG_UNDERLINED, 64).
--define(wxFONTFLAG_STRIKETHROUGH, 128).
--define(wxFONTFLAG_MASK, (?wxFONTFLAG_ITALIC bor ?wxFONTFLAG_SLANT bor ?wxFONTFLAG_LIGHT bor ?wxFONTFLAG_BOLD bor ?wxFONTFLAG_ANTIALIASED bor ?wxFONTFLAG_NOT_ANTIALIASED bor ?wxFONTFLAG_UNDERLINED bor ?wxFONTFLAG_STRIKETHROUGH)).
--define(wxSPLIT_DRAG_NONE, 0).
--define(wxSPLIT_DRAG_DRAGGING, 1).
--define(wxSPLIT_DRAG_LEFT_DOWN, 2).
--define(WX_GL_RGBA, 1).
--define(WX_GL_BUFFER_SIZE, 2).
--define(WX_GL_LEVEL, 3).
--define(WX_GL_DOUBLEBUFFER, 4).
--define(WX_GL_STEREO, 5).
--define(WX_GL_AUX_BUFFERS, 6).
--define(WX_GL_MIN_RED, 7).
--define(WX_GL_MIN_GREEN, 8).
--define(WX_GL_MIN_BLUE, 9).
--define(WX_GL_MIN_ALPHA, 10).
--define(WX_GL_DEPTH_SIZE, 11).
--define(WX_GL_STENCIL_SIZE, 12).
--define(WX_GL_MIN_ACCUM_RED, 13).
--define(WX_GL_MIN_ACCUM_GREEN, 14).
--define(WX_GL_MIN_ACCUM_BLUE, 15).
--define(WX_GL_MIN_ACCUM_ALPHA, 16).
--define(wxPAGE_ODD, 0).
--define(wxPAGE_EVEN, 1).
--define(wxPAGE_ALL, 2).
--define(wxBMP_24BPP, 24).
--define(wxBMP_8BPP, 8).
--define(wxBMP_8BPP_GREY, 9).
--define(wxBMP_8BPP_GRAY, ?wxBMP_8BPP_GREY).
--define(wxBMP_8BPP_RED, 10).
--define(wxBMP_8BPP_PALETTE, 11).
--define(wxBMP_4BPP, 4).
--define(wxBMP_1BPP, 1).
--define(wxBMP_1BPP_BW, 2).
--define(wxIMAGE_RESOLUTION_INCHES, 1).
--define(wxIMAGE_RESOLUTION_CM, 2).
--define(wxIMAGE_LIST_NORMAL, 0).
--define(wxIMAGE_LIST_SMALL, 1).
--define(wxIMAGE_LIST_STATE, 2).
--define(wxLIST_NEXT_ABOVE, 0).
--define(wxLIST_NEXT_ALL, 1).
--define(wxLIST_NEXT_BELOW, 2).
--define(wxLIST_NEXT_LEFT, 3).
--define(wxLIST_NEXT_RIGHT, 4).
--define(wxNB_HITTEST_NOWHERE, ?wxBK_HITTEST_NOWHERE).
--define(wxNB_HITTEST_ONICON, ?wxBK_HITTEST_ONICON).
--define(wxNB_HITTEST_ONLABEL, ?wxBK_HITTEST_ONLABEL).
--define(wxNB_HITTEST_ONITEM, ?wxBK_HITTEST_ONITEM).
--define(wxNB_HITTEST_ONPAGE, ?wxBK_HITTEST_ONPAGE).
--define(wxTB_HORIZONTAL, ?wxHORIZONTAL).
--define(wxTB_TOP, ?wxTB_HORIZONTAL).
--define(wxTB_VERTICAL, ?wxVERTICAL).
--define(wxTB_LEFT, ?wxTB_VERTICAL).
--define(wxTB_3DBUTTONS, 16).
--define(wxTB_FLAT, 32).
--define(wxTB_DOCKABLE, 64).
--define(wxTB_NOICONS, 128).
--define(wxTB_TEXT, 256).
--define(wxTB_NODIVIDER, 512).
--define(wxTB_NOALIGN, 1024).
--define(wxTB_HORZ_LAYOUT, 2048).
--define(wxTB_HORZ_TEXT, (?wxTB_HORZ_LAYOUT bor ?wxTB_TEXT)).
--define(wxTB_NO_TOOLTIPS, 4096).
--define(wxTB_BOTTOM, 8192).
--define(wxTB_RIGHT, 16384).
--define(wxFULLSCREEN_NOMENUBAR, 1).
--define(wxFULLSCREEN_NOTOOLBAR, 2).
--define(wxFULLSCREEN_NOSTATUSBAR, 4).
--define(wxFULLSCREEN_NOBORDER, 8).
--define(wxFULLSCREEN_NOCAPTION, 16).
--define(wxFULLSCREEN_ALL, (?wxFULLSCREEN_NOMENUBAR bor ?wxFULLSCREEN_NOTOOLBAR bor ?wxFULLSCREEN_NOSTATUSBAR bor ?wxFULLSCREEN_NOBORDER bor ?wxFULLSCREEN_NOCAPTION)).
+% From "treebase.h": wxTreeItemIcon
+-define(wxTreeItemIcon_Normal, 0).
+-define(wxTreeItemIcon_Selected, 1).
+-define(wxTreeItemIcon_Expanded, 2).
+-define(wxTreeItemIcon_SelectedExpanded, 3).
+-define(wxTreeItemIcon_Max, 4).
+% From "utils.h"
-define(wxEXEC_ASYNC, 0).
-define(wxEXEC_SYNC, 1).
-define(wxEXEC_NOHIDE, 2).
-define(wxEXEC_MAKE_GROUP_LEADER, 4).
-define(wxEXEC_NODISABLE, 8).
--define(wxID_NONE, -3).
--define(wxID_SEPARATOR, -2).
--define(wxID_ANY, -1).
--define(wxID_LOWEST, 4999).
--define(wxID_OPEN, 5000).
--define(wxID_CLOSE, 5001).
--define(wxID_NEW, 5002).
--define(wxID_SAVE, 5003).
--define(wxID_SAVEAS, 5004).
--define(wxID_REVERT, 5005).
--define(wxID_EXIT, 5006).
--define(wxID_UNDO, 5007).
--define(wxID_REDO, 5008).
--define(wxID_HELP, 5009).
--define(wxID_PRINT, 5010).
--define(wxID_PRINT_SETUP, 5011).
--define(wxID_PAGE_SETUP, 5012).
--define(wxID_PREVIEW, 5013).
--define(wxID_ABOUT, 5014).
--define(wxID_HELP_CONTENTS, 5015).
--define(wxID_HELP_INDEX, 5016).
--define(wxID_HELP_SEARCH, 5017).
--define(wxID_HELP_COMMANDS, 5018).
--define(wxID_HELP_PROCEDURES, 5019).
--define(wxID_HELP_CONTEXT, 5020).
--define(wxID_CLOSE_ALL, 5021).
--define(wxID_PREFERENCES, 5022).
--define(wxID_EDIT, 5030).
--define(wxID_CUT, 5031).
--define(wxID_COPY, 5032).
--define(wxID_PASTE, 5033).
--define(wxID_CLEAR, 5034).
--define(wxID_FIND, 5035).
--define(wxID_DUPLICATE, 5036).
--define(wxID_SELECTALL, 5037).
--define(wxID_DELETE, 5038).
--define(wxID_REPLACE, 5039).
--define(wxID_REPLACE_ALL, 5040).
--define(wxID_PROPERTIES, 5041).
--define(wxID_VIEW_DETAILS, 5042).
--define(wxID_VIEW_LARGEICONS, 5043).
--define(wxID_VIEW_SMALLICONS, 5044).
--define(wxID_VIEW_LIST, 5045).
--define(wxID_VIEW_SORTDATE, 5046).
--define(wxID_VIEW_SORTNAME, 5047).
--define(wxID_VIEW_SORTSIZE, 5048).
--define(wxID_VIEW_SORTTYPE, 5049).
--define(wxID_FILE, 5050).
--define(wxID_FILE1, 5051).
--define(wxID_FILE2, 5052).
--define(wxID_FILE3, 5053).
--define(wxID_FILE4, 5054).
--define(wxID_FILE5, 5055).
--define(wxID_FILE6, 5056).
--define(wxID_FILE7, 5057).
--define(wxID_FILE8, 5058).
--define(wxID_FILE9, 5059).
--define(wxID_OK, 5100).
--define(wxID_CANCEL, 5101).
--define(wxID_APPLY, 5102).
--define(wxID_YES, 5103).
--define(wxID_NO, 5104).
--define(wxID_STATIC, 5105).
--define(wxID_FORWARD, 5106).
--define(wxID_BACKWARD, 5107).
--define(wxID_DEFAULT, 5108).
--define(wxID_MORE, 5109).
--define(wxID_SETUP, 5110).
--define(wxID_RESET, 5111).
--define(wxID_CONTEXT_HELP, 5112).
--define(wxID_YESTOALL, 5113).
--define(wxID_NOTOALL, 5114).
--define(wxID_ABORT, 5115).
--define(wxID_RETRY, 5116).
--define(wxID_IGNORE, 5117).
--define(wxID_ADD, 5118).
--define(wxID_REMOVE, 5119).
--define(wxID_UP, 5120).
--define(wxID_DOWN, 5121).
--define(wxID_HOME, 5122).
--define(wxID_REFRESH, 5123).
--define(wxID_STOP, 5124).
--define(wxID_INDEX, 5125).
--define(wxID_BOLD, 5126).
--define(wxID_ITALIC, 5127).
--define(wxID_JUSTIFY_CENTER, 5128).
--define(wxID_JUSTIFY_FILL, 5129).
--define(wxID_JUSTIFY_RIGHT, 5130).
--define(wxID_JUSTIFY_LEFT, 5131).
--define(wxID_UNDERLINE, 5132).
--define(wxID_INDENT, 5133).
--define(wxID_UNINDENT, 5134).
--define(wxID_ZOOM_100, 5135).
--define(wxID_ZOOM_FIT, 5136).
--define(wxID_ZOOM_IN, 5137).
--define(wxID_ZOOM_OUT, 5138).
--define(wxID_UNDELETE, 5139).
--define(wxID_REVERT_TO_SAVED, 5140).
--define(wxID_SYSTEM_MENU, 5200).
--define(wxID_CLOSE_FRAME, 5201).
--define(wxID_MOVE_FRAME, 5202).
--define(wxID_RESIZE_FRAME, 5203).
--define(wxID_MAXIMIZE_FRAME, 5204).
--define(wxID_ICONIZE_FRAME, 5205).
--define(wxID_RESTORE_FRAME, 5206).
--define(wxID_FILEDLGG, 5900).
--define(wxID_HIGHEST, 5999).
--define(wxJOYSTICK1, 0).
--define(wxJOYSTICK2, 1).
--define(wxIMAGE_QUALITY_NORMAL, 0).
--define(wxIMAGE_QUALITY_HIGH, 1).
--define(wxLIST_ALIGN_DEFAULT, 0).
--define(wxLIST_ALIGN_LEFT, 1).
--define(wxLIST_ALIGN_TOP, 2).
--define(wxLIST_ALIGN_SNAP_TO_GRID, 3).
--define(wxUSER_ATTENTION_INFO, 1).
--define(wxUSER_ATTENTION_ERROR, 2).
+% From "utils.h"
-define(wxBROWSER_NEW_WINDOW, 1).
--define(wxDEFAULT, 70).
--define(wxDECORATIVE, 71).
--define(wxROMAN, 72).
--define(wxSCRIPT, 73).
--define(wxSWISS, 74).
--define(wxMODERN, 75).
--define(wxTELETYPE, 76).
--define(wxVARIABLE, 80).
--define(wxFIXED, 81).
--define(wxNORMAL, 90).
--define(wxLIGHT, 91).
--define(wxBOLD, 92).
--define(wxITALIC, 93).
--define(wxSLANT, 94).
--define(wxSOLID, 100).
--define(wxDOT, 101).
--define(wxLONG_DASH, 102).
--define(wxSHORT_DASH, 103).
--define(wxDOT_DASH, 104).
--define(wxUSER_DASH, 105).
--define(wxTRANSPARENT, 106).
--define(wxSTIPPLE_MASK_OPAQUE, 107).
--define(wxSTIPPLE_MASK, 108).
--define(wxSTIPPLE, 110).
--define(wxBDIAGONAL_HATCH, 111).
--define(wxCROSSDIAG_HATCH, 112).
--define(wxFDIAGONAL_HATCH, 113).
--define(wxCROSS_HATCH, 114).
--define(wxHORIZONTAL_HATCH, 115).
--define(wxVERTICAL_HATCH, 116).
--define(wxFIRST_HATCH, ?wxBDIAGONAL_HATCH).
--define(wxLAST_HATCH, ?wxVERTICAL_HATCH).
--define(wxJOIN_BEVEL, 120).
--define(wxJOIN_MITER, 121).
--define(wxJOIN_ROUND, 122).
--define(wxCAP_ROUND, 130).
--define(wxCAP_PROJECTING, 131).
--define(wxCAP_BUTT, 132).
--define(wxJOY_BUTTON_ANY, -1).
--define(wxJOY_BUTTON1, 1).
--define(wxJOY_BUTTON2, 2).
--define(wxJOY_BUTTON3, 4).
--define(wxJOY_BUTTON4, 8).
--define(wxLIST_AUTOSIZE, -1).
--define(wxLIST_AUTOSIZE_USEHEADER, -2).
+% From "utils.h"
-define(wxStrip_Mnemonics, 1).
-define(wxStrip_Accel, 2).
-define(wxStrip_All, (?wxStrip_Mnemonics bor ?wxStrip_Accel)).
--define(wxFLOOD_SURFACE, 1).
--define(wxFLOOD_BORDER, 2).
--define(wxLIST_RECT_BOUNDS, 0).
--define(wxLIST_RECT_ICON, 1).
--define(wxLIST_RECT_LABEL, 2).
--define(wxODDEVEN_RULE, 1).
--define(wxWINDING_RULE, 2).
--define(wxLIST_FIND_UP, 0).
--define(wxLIST_FIND_DOWN, 1).
--define(wxLIST_FIND_LEFT, 2).
--define(wxLIST_FIND_RIGHT, 3).
--define(wxTOOL_TOP, 1).
--define(wxTOOL_BOTTOM, 2).
--define(wxTOOL_LEFT, 3).
--define(wxTOOL_RIGHT, 4).
--define(wxMM_TEXT, 1).
--define(wxMM_LOMETRIC, 2).
--define(wxMM_HIMETRIC, 3).
--define(wxMM_LOENGLISH, 4).
--define(wxMM_HIENGLISH, 5).
--define(wxMM_TWIPS, 6).
--define(wxMM_ISOTROPIC, 7).
--define(wxMM_ANISOTROPIC, 8).
--define(wxMM_POINTS, 9).
--define(wxMM_METRIC, 10).
-% Type Propagation_state
--define(wxEVENT_PROPAGATE_NONE, 0).
--define(wxEVENT_PROPAGATE_MAX, ?INT_MAX).
-% Type form_ops_t
--define(wxCLEAR, 0).
--define(wxROP_BLACK, ?wxCLEAR).
--define(wxBLIT_BLACKNESS, ?wxCLEAR).
--define(wxXOR, (?wxCLEAR+1)).
--define(wxROP_XORPEN, ?wxXOR).
--define(wxBLIT_SRCINVERT, ?wxXOR).
--define(wxINVERT, (?wxXOR+1)).
--define(wxROP_NOT, ?wxINVERT).
--define(wxBLIT_DSTINVERT, ?wxINVERT).
--define(wxOR_REVERSE, (?wxINVERT+1)).
--define(wxROP_MERGEPENNOT, ?wxOR_REVERSE).
--define(wxBLIT_00DD0228, ?wxOR_REVERSE).
--define(wxAND_REVERSE, (?wxOR_REVERSE+1)).
--define(wxROP_MASKPENNOT, ?wxAND_REVERSE).
--define(wxBLIT_SRCERASE, ?wxAND_REVERSE).
--define(wxCOPY, (?wxAND_REVERSE+1)).
--define(wxROP_COPYPEN, ?wxCOPY).
--define(wxBLIT_SRCCOPY, ?wxCOPY).
--define(wxAND, (?wxCOPY+1)).
--define(wxROP_MASKPEN, ?wxAND).
--define(wxBLIT_SRCAND, ?wxAND).
--define(wxAND_INVERT, (?wxAND+1)).
--define(wxROP_MASKNOTPEN, ?wxAND_INVERT).
--define(wxBLIT_00220326, ?wxAND_INVERT).
--define(wxNO_OP, (?wxAND_INVERT+1)).
--define(wxROP_NOP, ?wxNO_OP).
--define(wxBLIT_00AA0029, ?wxNO_OP).
--define(wxNOR, (?wxNO_OP+1)).
--define(wxROP_NOTMERGEPEN, ?wxNOR).
--define(wxBLIT_NOTSRCERASE, ?wxNOR).
--define(wxEQUIV, (?wxNOR+1)).
--define(wxROP_NOTXORPEN, ?wxEQUIV).
--define(wxBLIT_00990066, ?wxEQUIV).
--define(wxSRC_INVERT, (?wxEQUIV+1)).
--define(wxROP_NOTCOPYPEN, ?wxSRC_INVERT).
--define(wxBLIT_NOTSCRCOPY, ?wxSRC_INVERT).
--define(wxOR_INVERT, (?wxSRC_INVERT+1)).
--define(wxROP_MERGENOTPEN, ?wxOR_INVERT).
--define(wxBLIT_MERGEPAINT, ?wxOR_INVERT).
--define(wxNAND, (?wxOR_INVERT+1)).
--define(wxROP_NOTMASKPEN, ?wxNAND).
--define(wxBLIT_007700E6, ?wxNAND).
--define(wxOR, (?wxNAND+1)).
--define(wxROP_MERGEPEN, ?wxOR).
--define(wxBLIT_SRCPAINT, ?wxOR).
--define(wxSET, (?wxOR+1)).
--define(wxROP_WHITE, ?wxSET).
--define(wxBLIT_WHITENESS, ?wxSET).
-% Type wxAlignment
--define(wxALIGN_NOT, 0).
--define(wxALIGN_CENTER_HORIZONTAL, 256).
--define(wxALIGN_CENTRE_HORIZONTAL, ?wxALIGN_CENTER_HORIZONTAL).
--define(wxALIGN_LEFT, ?wxALIGN_NOT).
--define(wxALIGN_TOP, ?wxALIGN_NOT).
--define(wxALIGN_RIGHT, 512).
--define(wxALIGN_BOTTOM, 1024).
--define(wxALIGN_CENTER_VERTICAL, 2048).
--define(wxALIGN_CENTRE_VERTICAL, ?wxALIGN_CENTER_VERTICAL).
--define(wxALIGN_CENTER, (?wxALIGN_CENTER_HORIZONTAL bor ?wxALIGN_CENTER_VERTICAL)).
--define(wxALIGN_CENTRE, ?wxALIGN_CENTER).
--define(wxALIGN_MASK, 3840).
-% Type wxAuiButtonId
--define(wxAUI_BUTTON_CLOSE, 101).
--define(wxAUI_BUTTON_MAXIMIZE_RESTORE, 102).
--define(wxAUI_BUTTON_MINIMIZE, 103).
--define(wxAUI_BUTTON_PIN, 104).
--define(wxAUI_BUTTON_OPTIONS, 105).
--define(wxAUI_BUTTON_WINDOWLIST, 106).
--define(wxAUI_BUTTON_LEFT, 107).
--define(wxAUI_BUTTON_RIGHT, 108).
--define(wxAUI_BUTTON_UP, 109).
--define(wxAUI_BUTTON_DOWN, 110).
--define(wxAUI_BUTTON_CUSTOM1, 201).
--define(wxAUI_BUTTON_CUSTOM2, 202).
--define(wxAUI_BUTTON_CUSTOM3, 203).
-% Type wxAuiManagerDock
--define(wxAUI_DOCK_NONE, 0).
--define(wxAUI_DOCK_TOP, 1).
--define(wxAUI_DOCK_RIGHT, 2).
--define(wxAUI_DOCK_BOTTOM, 3).
--define(wxAUI_DOCK_LEFT, 4).
--define(wxAUI_DOCK_CENTER, 5).
--define(wxAUI_DOCK_CENTRE, ?wxAUI_DOCK_CENTER).
-% Type wxAuiManagerOption
--define(wxAUI_MGR_ALLOW_FLOATING, 1).
--define(wxAUI_MGR_ALLOW_ACTIVE_PANE, 2).
--define(wxAUI_MGR_TRANSPARENT_DRAG, 4).
--define(wxAUI_MGR_TRANSPARENT_HINT, 8).
--define(wxAUI_MGR_VENETIAN_BLINDS_HINT, 16).
--define(wxAUI_MGR_RECTANGLE_HINT, 32).
--define(wxAUI_MGR_HINT_FADE, 64).
--define(wxAUI_MGR_NO_VENETIAN_BLINDS_FADE, 128).
--define(wxAUI_MGR_LIVE_RESIZE, 256).
--define(wxAUI_MGR_DEFAULT, (?wxAUI_MGR_ALLOW_FLOATING bor ?wxAUI_MGR_TRANSPARENT_HINT bor ?wxAUI_MGR_HINT_FADE bor ?wxAUI_MGR_NO_VENETIAN_BLINDS_FADE)).
-% Type wxAuiNotebookOption
--define(wxAUI_NB_TOP, 1).
--define(wxAUI_NB_LEFT, 2).
--define(wxAUI_NB_RIGHT, 4).
--define(wxAUI_NB_BOTTOM, 8).
--define(wxAUI_NB_TAB_SPLIT, 16).
--define(wxAUI_NB_TAB_MOVE, 32).
--define(wxAUI_NB_TAB_EXTERNAL_MOVE, 64).
--define(wxAUI_NB_TAB_FIXED_WIDTH, 128).
--define(wxAUI_NB_SCROLL_BUTTONS, 256).
--define(wxAUI_NB_WINDOWLIST_BUTTON, 512).
--define(wxAUI_NB_CLOSE_BUTTON, 1024).
--define(wxAUI_NB_CLOSE_ON_ACTIVE_TAB, 2048).
--define(wxAUI_NB_CLOSE_ON_ALL_TABS, 4096).
--define(wxAUI_NB_MIDDLE_CLICK_CLOSE, 8192).
--define(wxAUI_NB_DEFAULT_STYLE, (?wxAUI_NB_TOP bor ?wxAUI_NB_TAB_SPLIT bor ?wxAUI_NB_TAB_MOVE bor ?wxAUI_NB_SCROLL_BUTTONS bor ?wxAUI_NB_CLOSE_ON_ACTIVE_TAB bor ?wxAUI_NB_MIDDLE_CLICK_CLOSE)).
-% Type wxAuiPaneButtonState
--define(wxAUI_BUTTON_STATE_NORMAL, 0).
--define(wxAUI_BUTTON_STATE_HOVER, 2).
--define(wxAUI_BUTTON_STATE_PRESSED, 4).
--define(wxAUI_BUTTON_STATE_DISABLED, 8).
--define(wxAUI_BUTTON_STATE_HIDDEN, 16).
--define(wxAUI_BUTTON_STATE_CHECKED, 32).
-% Type wxAuiPaneDockArtGradients
--define(wxAUI_GRADIENT_NONE, 0).
--define(wxAUI_GRADIENT_VERTICAL, 1).
--define(wxAUI_GRADIENT_HORIZONTAL, 2).
-% Type wxAuiPaneDockArtSetting
--define(wxAUI_DOCKART_SASH_SIZE, 0).
--define(wxAUI_DOCKART_CAPTION_SIZE, 1).
--define(wxAUI_DOCKART_GRIPPER_SIZE, 2).
--define(wxAUI_DOCKART_PANE_BORDER_SIZE, 3).
--define(wxAUI_DOCKART_PANE_BUTTON_SIZE, 4).
--define(wxAUI_DOCKART_BACKGROUND_COLOUR, 5).
--define(wxAUI_DOCKART_SASH_COLOUR, 6).
--define(wxAUI_DOCKART_ACTIVE_CAPTION_COLOUR, 7).
--define(wxAUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR, 8).
--define(wxAUI_DOCKART_INACTIVE_CAPTION_COLOUR, 9).
--define(wxAUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR, 10).
--define(wxAUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR, 11).
--define(wxAUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR, 12).
--define(wxAUI_DOCKART_BORDER_COLOUR, 13).
--define(wxAUI_DOCKART_GRIPPER_COLOUR, 14).
--define(wxAUI_DOCKART_CAPTION_FONT, 15).
--define(wxAUI_DOCKART_GRADIENT_TYPE, 16).
-% Type wxAuiPaneInsertLevel
--define(wxAUI_INSERT_PANE, 0).
--define(wxAUI_INSERT_ROW, 1).
--define(wxAUI_INSERT_DOCK, 2).
-% Type wxBackgroundStyle
--define(wxBG_STYLE_SYSTEM, 0).
--define(wxBG_STYLE_COLOUR, 1).
--define(wxBG_STYLE_CUSTOM, 2).
-% Type wxBitmapType
--define(wxBITMAP_TYPE_INVALID, 0).
--define(wxBITMAP_TYPE_BMP, 1).
--define(wxBITMAP_TYPE_BMP_RESOURCE, 2).
--define(wxBITMAP_TYPE_RESOURCE, ?wxBITMAP_TYPE_BMP_RESOURCE).
--define(wxBITMAP_TYPE_ICO, (?wxBITMAP_TYPE_BMP_RESOURCE+1)).
--define(wxBITMAP_TYPE_ICO_RESOURCE, (?wxBITMAP_TYPE_BMP_RESOURCE+2)).
--define(wxBITMAP_TYPE_CUR, (?wxBITMAP_TYPE_BMP_RESOURCE+3)).
--define(wxBITMAP_TYPE_CUR_RESOURCE, (?wxBITMAP_TYPE_BMP_RESOURCE+4)).
--define(wxBITMAP_TYPE_XBM, (?wxBITMAP_TYPE_BMP_RESOURCE+5)).
--define(wxBITMAP_TYPE_XBM_DATA, (?wxBITMAP_TYPE_BMP_RESOURCE+6)).
--define(wxBITMAP_TYPE_XPM, (?wxBITMAP_TYPE_BMP_RESOURCE+7)).
--define(wxBITMAP_TYPE_XPM_DATA, (?wxBITMAP_TYPE_BMP_RESOURCE+8)).
--define(wxBITMAP_TYPE_TIF, (?wxBITMAP_TYPE_BMP_RESOURCE+9)).
--define(wxBITMAP_TYPE_TIF_RESOURCE, (?wxBITMAP_TYPE_BMP_RESOURCE+10)).
--define(wxBITMAP_TYPE_GIF, (?wxBITMAP_TYPE_BMP_RESOURCE+11)).
--define(wxBITMAP_TYPE_GIF_RESOURCE, (?wxBITMAP_TYPE_BMP_RESOURCE+12)).
--define(wxBITMAP_TYPE_PNG, (?wxBITMAP_TYPE_BMP_RESOURCE+13)).
--define(wxBITMAP_TYPE_PNG_RESOURCE, (?wxBITMAP_TYPE_BMP_RESOURCE+14)).
--define(wxBITMAP_TYPE_JPEG, (?wxBITMAP_TYPE_BMP_RESOURCE+15)).
--define(wxBITMAP_TYPE_JPEG_RESOURCE, (?wxBITMAP_TYPE_BMP_RESOURCE+16)).
--define(wxBITMAP_TYPE_PNM, (?wxBITMAP_TYPE_BMP_RESOURCE+17)).
--define(wxBITMAP_TYPE_PNM_RESOURCE, (?wxBITMAP_TYPE_BMP_RESOURCE+18)).
--define(wxBITMAP_TYPE_PCX, (?wxBITMAP_TYPE_BMP_RESOURCE+19)).
--define(wxBITMAP_TYPE_PCX_RESOURCE, (?wxBITMAP_TYPE_BMP_RESOURCE+20)).
--define(wxBITMAP_TYPE_PICT, (?wxBITMAP_TYPE_BMP_RESOURCE+21)).
--define(wxBITMAP_TYPE_PICT_RESOURCE, (?wxBITMAP_TYPE_BMP_RESOURCE+22)).
--define(wxBITMAP_TYPE_ICON, (?wxBITMAP_TYPE_BMP_RESOURCE+23)).
--define(wxBITMAP_TYPE_ICON_RESOURCE, (?wxBITMAP_TYPE_BMP_RESOURCE+24)).
--define(wxBITMAP_TYPE_ANI, (?wxBITMAP_TYPE_BMP_RESOURCE+25)).
--define(wxBITMAP_TYPE_IFF, (?wxBITMAP_TYPE_BMP_RESOURCE+26)).
--define(wxBITMAP_TYPE_TGA, (?wxBITMAP_TYPE_BMP_RESOURCE+27)).
--define(wxBITMAP_TYPE_MACCURSOR, (?wxBITMAP_TYPE_BMP_RESOURCE+28)).
--define(wxBITMAP_TYPE_MACCURSOR_RESOURCE, (?wxBITMAP_TYPE_BMP_RESOURCE+29)).
--define(wxBITMAP_TYPE_ANY, 50).
-% Type wxBorder
--define(wxBORDER_DEFAULT, 0).
--define(wxBORDER_NONE, 2097152).
--define(wxBORDER_STATIC, 16777216).
--define(wxBORDER_SIMPLE, 33554432).
--define(wxBORDER_RAISED, 67108864).
--define(wxBORDER_SUNKEN, 134217728).
--define(wxBORDER_DOUBLE, 268435456).
--define(wxBORDER_THEME, 268435456).
--define(wxBORDER_MASK, 522190848).
-% Type wxCalendarDateBorder
--define(wxCAL_BORDER_NONE, 0).
--define(wxCAL_BORDER_SQUARE, 1).
--define(wxCAL_BORDER_ROUND, 2).
-% Type wxCalendarHitTestResult
--define(wxCAL_HITTEST_NOWHERE, 0).
--define(wxCAL_HITTEST_HEADER, 1).
--define(wxCAL_HITTEST_DAY, 2).
--define(wxCAL_HITTEST_INCMONTH, 3).
--define(wxCAL_HITTEST_DECMONTH, 4).
--define(wxCAL_HITTEST_SURROUNDING_WEEK, 5).
-% Type wxCheckBoxState
--define(wxCHK_UNCHECKED, 0).
--define(wxCHK_CHECKED, 1).
--define(wxCHK_UNDETERMINED, 2).
-% Type wxClientDataType
--define(wxClientData_None, 0).
--define(wxClientData_Object, 1).
--define(wxClientData_Void, 2).
-% Type wxDataFormatId
--define(wxDF_INVALID, 0).
--define(wxDF_TEXT, 1).
--define(wxDF_BITMAP, 2).
--define(wxDF_METAFILE, 3).
--define(wxDF_SYLK, 4).
--define(wxDF_DIF, 5).
--define(wxDF_TIFF, 6).
--define(wxDF_OEMTEXT, 7).
--define(wxDF_DIB, 8).
--define(wxDF_PALETTE, 9).
--define(wxDF_PENDATA, 10).
--define(wxDF_RIFF, 11).
--define(wxDF_WAVE, 12).
--define(wxDF_UNICODETEXT, 13).
--define(wxDF_ENHMETAFILE, 14).
--define(wxDF_FILENAME, 15).
--define(wxDF_LOCALE, 16).
--define(wxDF_PRIVATE, 20).
--define(wxDF_HTML, 30).
--define(wxDF_MAX, 31).
-% Type wxDirection
--define(wxLEFT, 16).
--define(wxRIGHT, 32).
--define(wxUP, 64).
--define(wxDOWN, 128).
--define(wxTOP, ?wxUP).
--define(wxBOTTOM, ?wxDOWN).
--define(wxNORTH, ?wxUP).
--define(wxSOUTH, ?wxDOWN).
--define(wxWEST, ?wxLEFT).
--define(wxEAST, ?wxRIGHT).
--define(wxALL, (?wxUP bor ?wxDOWN bor ?wxRIGHT bor ?wxLEFT)).
-% Type wxDragResult
--define(wxDragError, 0).
--define(wxDragNone, 1).
--define(wxDragCopy, 2).
--define(wxDragMove, 3).
--define(wxDragLink, 4).
--define(wxDragCancel, 5).
-% Type wxDuplexMode
--define(wxDUPLEX_SIMPLEX, 0).
--define(wxDUPLEX_HORIZONTAL, 1).
--define(wxDUPLEX_VERTICAL, 2).
-% Type wxEdge
--define(wxLeft, 0).
--define(wxTop, 1).
--define(wxRight, 2).
--define(wxBottom, 3).
--define(wxWidth, 4).
--define(wxHeight, 5).
--define(wxCentre, 6).
--define(wxCenter, ?wxCentre).
--define(wxCentreX, (?wxCentre+1)).
--define(wxCentreY, (?wxCentre+2)).
-% Type wxFindReplaceDialogStyles
--define(wxFR_REPLACEDIALOG, 1).
--define(wxFR_NOUPDOWN, 2).
--define(wxFR_NOMATCHCASE, 4).
--define(wxFR_NOWHOLEWORD, 8).
-% Type wxFindReplaceFlags
--define(wxFR_DOWN, 1).
--define(wxFR_WHOLEWORD, 2).
--define(wxFR_MATCHCASE, 4).
-% Type wxFlexSizerGrowMode
--define(wxFLEX_GROWMODE_NONE, 0).
--define(wxFLEX_GROWMODE_SPECIFIED, 1).
--define(wxFLEX_GROWMODE_ALL, 2).
-% Type wxFontEncoding
--define(wxFONTENCODING_SYSTEM, -1).
--define(wxFONTENCODING_DEFAULT, 0).
--define(wxFONTENCODING_ISO8859_1, 1).
--define(wxFONTENCODING_ISO8859_2, 2).
--define(wxFONTENCODING_ISO8859_3, 3).
--define(wxFONTENCODING_ISO8859_4, 4).
--define(wxFONTENCODING_ISO8859_5, 5).
--define(wxFONTENCODING_ISO8859_6, 6).
--define(wxFONTENCODING_ISO8859_7, 7).
--define(wxFONTENCODING_ISO8859_8, 8).
--define(wxFONTENCODING_ISO8859_9, 9).
--define(wxFONTENCODING_ISO8859_10, 10).
--define(wxFONTENCODING_ISO8859_11, 11).
--define(wxFONTENCODING_ISO8859_12, 12).
--define(wxFONTENCODING_ISO8859_13, 13).
--define(wxFONTENCODING_ISO8859_14, 14).
--define(wxFONTENCODING_ISO8859_15, 15).
--define(wxFONTENCODING_ISO8859_MAX, 16).
--define(wxFONTENCODING_KOI8, 17).
--define(wxFONTENCODING_KOI8_U, 18).
--define(wxFONTENCODING_ALTERNATIVE, 19).
--define(wxFONTENCODING_BULGARIAN, 20).
--define(wxFONTENCODING_CP437, 21).
--define(wxFONTENCODING_CP850, 22).
--define(wxFONTENCODING_CP852, 23).
--define(wxFONTENCODING_CP855, 24).
--define(wxFONTENCODING_CP866, 25).
--define(wxFONTENCODING_CP874, 26).
--define(wxFONTENCODING_CP932, 27).
--define(wxFONTENCODING_CP936, 28).
--define(wxFONTENCODING_CP949, 29).
--define(wxFONTENCODING_CP950, 30).
--define(wxFONTENCODING_CP1250, 31).
--define(wxFONTENCODING_CP1251, 32).
--define(wxFONTENCODING_CP1252, 33).
--define(wxFONTENCODING_CP1253, 34).
--define(wxFONTENCODING_CP1254, 35).
--define(wxFONTENCODING_CP1255, 36).
--define(wxFONTENCODING_CP1256, 37).
--define(wxFONTENCODING_CP1257, 38).
--define(wxFONTENCODING_CP12_MAX, 39).
--define(wxFONTENCODING_UTF7, 40).
--define(wxFONTENCODING_UTF8, 41).
--define(wxFONTENCODING_EUC_JP, 42).
--define(wxFONTENCODING_UTF16BE, 43).
--define(wxFONTENCODING_UTF16LE, 44).
--define(wxFONTENCODING_UTF32BE, 45).
--define(wxFONTENCODING_UTF32LE, 46).
--define(wxFONTENCODING_MACROMAN, 47).
--define(wxFONTENCODING_MACJAPANESE, 48).
--define(wxFONTENCODING_MACCHINESETRAD, 49).
--define(wxFONTENCODING_MACKOREAN, 50).
--define(wxFONTENCODING_MACARABIC, 51).
--define(wxFONTENCODING_MACHEBREW, 52).
--define(wxFONTENCODING_MACGREEK, 53).
--define(wxFONTENCODING_MACCYRILLIC, 54).
--define(wxFONTENCODING_MACDEVANAGARI, 55).
--define(wxFONTENCODING_MACGURMUKHI, 56).
--define(wxFONTENCODING_MACGUJARATI, 57).
--define(wxFONTENCODING_MACORIYA, 58).
--define(wxFONTENCODING_MACBENGALI, 59).
--define(wxFONTENCODING_MACTAMIL, 60).
--define(wxFONTENCODING_MACTELUGU, 61).
--define(wxFONTENCODING_MACKANNADA, 62).
--define(wxFONTENCODING_MACMALAJALAM, 63).
--define(wxFONTENCODING_MACSINHALESE, 64).
--define(wxFONTENCODING_MACBURMESE, 65).
--define(wxFONTENCODING_MACKHMER, 66).
--define(wxFONTENCODING_MACTHAI, 67).
--define(wxFONTENCODING_MACLAOTIAN, 68).
--define(wxFONTENCODING_MACGEORGIAN, 69).
--define(wxFONTENCODING_MACARMENIAN, 70).
--define(wxFONTENCODING_MACCHINESESIMP, 71).
--define(wxFONTENCODING_MACTIBETAN, 72).
--define(wxFONTENCODING_MACMONGOLIAN, 73).
--define(wxFONTENCODING_MACETHIOPIC, 74).
--define(wxFONTENCODING_MACCENTRALEUR, 75).
--define(wxFONTENCODING_MACVIATNAMESE, 76).
--define(wxFONTENCODING_MACARABICEXT, 77).
--define(wxFONTENCODING_MACSYMBOL, 78).
--define(wxFONTENCODING_MACDINGBATS, 79).
--define(wxFONTENCODING_MACTURKISH, 80).
--define(wxFONTENCODING_MACCROATIAN, 81).
--define(wxFONTENCODING_MACICELANDIC, 82).
--define(wxFONTENCODING_MACROMANIAN, 83).
--define(wxFONTENCODING_MACCELTIC, 84).
--define(wxFONTENCODING_MACGAELIC, 85).
--define(wxFONTENCODING_MACKEYBOARD, 86).
--define(wxFONTENCODING_MAX, 87).
--define(wxFONTENCODING_MACMIN, ?wxFONTENCODING_MACROMAN).
--define(wxFONTENCODING_MACMAX, ?wxFONTENCODING_MACKEYBOARD).
--define(wxFONTENCODING_UTF16, wxe_util:get_const(wxFONTENCODING_UTF16)).
--define(wxFONTENCODING_UTF32, wxe_util:get_const(wxFONTENCODING_UTF32)).
--define(wxFONTENCODING_UNICODE, ?wxFONTENCODING_UTF32).
--define(wxFONTENCODING_GB2312, ?wxFONTENCODING_CP936).
--define(wxFONTENCODING_BIG5, ?wxFONTENCODING_CP950).
--define(wxFONTENCODING_SHIFT_JIS, ?wxFONTENCODING_CP932).
-% Type wxFontFamily
--define(wxFONTFAMILY_DEFAULT, ?wxDEFAULT).
--define(wxFONTFAMILY_DECORATIVE, ?wxDECORATIVE).
--define(wxFONTFAMILY_ROMAN, ?wxROMAN).
--define(wxFONTFAMILY_SCRIPT, ?wxSCRIPT).
--define(wxFONTFAMILY_SWISS, ?wxSWISS).
--define(wxFONTFAMILY_MODERN, ?wxMODERN).
--define(wxFONTFAMILY_TELETYPE, ?wxTELETYPE).
--define(wxFONTFAMILY_MAX, (?wxTELETYPE+1)).
--define(wxFONTFAMILY_UNKNOWN, ?wxFONTFAMILY_MAX).
-% Type wxFontStyle
--define(wxFONTSTYLE_NORMAL, ?wxNORMAL).
--define(wxFONTSTYLE_ITALIC, ?wxITALIC).
--define(wxFONTSTYLE_SLANT, ?wxSLANT).
--define(wxFONTSTYLE_MAX, (?wxSLANT+1)).
-% Type wxFontWeight
--define(wxFONTWEIGHT_NORMAL, ?wxNORMAL).
--define(wxFONTWEIGHT_LIGHT, ?wxLIGHT).
--define(wxFONTWEIGHT_BOLD, ?wxBOLD).
--define(wxFONTWEIGHT_MAX, (?wxBOLD+1)).
-% Type wxGeometryCentre
--define(wxCENTRE, 1).
--define(wxCENTER, ?wxCENTRE).
-% Type wxHitTest
--define(wxHT_NOWHERE, 0).
--define(wxHT_SCROLLBAR_FIRST, ?wxHT_NOWHERE).
--define(wxHT_SCROLLBAR_ARROW_LINE_1, (?wxHT_NOWHERE+1)).
--define(wxHT_SCROLLBAR_ARROW_LINE_2, (?wxHT_NOWHERE+2)).
--define(wxHT_SCROLLBAR_ARROW_PAGE_1, (?wxHT_NOWHERE+3)).
--define(wxHT_SCROLLBAR_ARROW_PAGE_2, (?wxHT_NOWHERE+4)).
--define(wxHT_SCROLLBAR_THUMB, (?wxHT_NOWHERE+5)).
--define(wxHT_SCROLLBAR_BAR_1, (?wxHT_NOWHERE+6)).
--define(wxHT_SCROLLBAR_BAR_2, (?wxHT_NOWHERE+7)).
--define(wxHT_SCROLLBAR_LAST, (?wxHT_NOWHERE+8)).
--define(wxHT_WINDOW_OUTSIDE, (?wxHT_NOWHERE+9)).
--define(wxHT_WINDOW_INSIDE, (?wxHT_NOWHERE+10)).
--define(wxHT_WINDOW_VERT_SCROLLBAR, (?wxHT_NOWHERE+11)).
--define(wxHT_WINDOW_HORZ_SCROLLBAR, (?wxHT_NOWHERE+12)).
--define(wxHT_WINDOW_CORNER, (?wxHT_NOWHERE+13)).
--define(wxHT_MAX, (?wxHT_NOWHERE+14)).
-% Type wxHtmlOpeningStatus
--define(wxHTML_OPEN, 0).
--define(wxHTML_BLOCK, 1).
--define(wxHTML_REDIRECT, 2).
-% Type wxIdleMode
--define(wxIDLE_PROCESS_ALL, 0).
--define(wxIDLE_PROCESS_SPECIFIED, 1).
-% Type wxItemKind
--define(wxITEM_SEPARATOR, -1).
--define(wxITEM_NORMAL, 0).
--define(wxITEM_CHECK, 1).
--define(wxITEM_RADIO, 2).
--define(wxITEM_MAX, 3).
-% Type wxKeyCode
--define(WXK_BACK, 8).
--define(WXK_TAB, 9).
--define(WXK_RETURN, 13).
--define(WXK_ESCAPE, 27).
--define(WXK_SPACE, 32).
--define(WXK_DELETE, 127).
--define(WXK_START, 300).
--define(WXK_LBUTTON, 301).
--define(WXK_RBUTTON, 302).
--define(WXK_CANCEL, 303).
--define(WXK_MBUTTON, 304).
--define(WXK_CLEAR, 305).
--define(WXK_SHIFT, 306).
--define(WXK_ALT, 307).
--define(WXK_CONTROL, 308).
--define(WXK_MENU, 309).
--define(WXK_PAUSE, 310).
--define(WXK_CAPITAL, 311).
--define(WXK_END, 312).
--define(WXK_HOME, 313).
--define(WXK_LEFT, 314).
--define(WXK_UP, 315).
--define(WXK_RIGHT, 316).
--define(WXK_DOWN, 317).
--define(WXK_SELECT, 318).
--define(WXK_PRINT, 319).
--define(WXK_EXECUTE, 320).
--define(WXK_SNAPSHOT, 321).
--define(WXK_INSERT, 322).
--define(WXK_HELP, 323).
--define(WXK_NUMPAD0, 324).
--define(WXK_NUMPAD1, 325).
--define(WXK_NUMPAD2, 326).
--define(WXK_NUMPAD3, 327).
--define(WXK_NUMPAD4, 328).
--define(WXK_NUMPAD5, 329).
--define(WXK_NUMPAD6, 330).
--define(WXK_NUMPAD7, 331).
--define(WXK_NUMPAD8, 332).
--define(WXK_NUMPAD9, 333).
--define(WXK_MULTIPLY, 334).
--define(WXK_ADD, 335).
--define(WXK_SEPARATOR, 336).
--define(WXK_SUBTRACT, 337).
--define(WXK_DECIMAL, 338).
--define(WXK_DIVIDE, 339).
--define(WXK_F1, 340).
--define(WXK_F2, 341).
--define(WXK_F3, 342).
--define(WXK_F4, 343).
--define(WXK_F5, 344).
--define(WXK_F6, 345).
--define(WXK_F7, 346).
--define(WXK_F8, 347).
--define(WXK_F9, 348).
--define(WXK_F10, 349).
--define(WXK_F11, 350).
--define(WXK_F12, 351).
--define(WXK_F13, 352).
--define(WXK_F14, 353).
--define(WXK_F15, 354).
--define(WXK_F16, 355).
--define(WXK_F17, 356).
--define(WXK_F18, 357).
--define(WXK_F19, 358).
--define(WXK_F20, 359).
--define(WXK_F21, 360).
--define(WXK_F22, 361).
--define(WXK_F23, 362).
--define(WXK_F24, 363).
--define(WXK_NUMLOCK, 364).
--define(WXK_SCROLL, 365).
--define(WXK_PAGEUP, 366).
--define(WXK_PAGEDOWN, 367).
--define(WXK_NUMPAD_SPACE, 368).
--define(WXK_NUMPAD_TAB, 369).
--define(WXK_NUMPAD_ENTER, 370).
--define(WXK_NUMPAD_F1, 371).
--define(WXK_NUMPAD_F2, 372).
--define(WXK_NUMPAD_F3, 373).
--define(WXK_NUMPAD_F4, 374).
--define(WXK_NUMPAD_HOME, 375).
--define(WXK_NUMPAD_LEFT, 376).
--define(WXK_NUMPAD_UP, 377).
--define(WXK_NUMPAD_RIGHT, 378).
--define(WXK_NUMPAD_DOWN, 379).
--define(WXK_NUMPAD_PAGEUP, 380).
--define(WXK_NUMPAD_PAGEDOWN, 381).
--define(WXK_NUMPAD_END, 382).
--define(WXK_NUMPAD_BEGIN, 383).
--define(WXK_NUMPAD_INSERT, 384).
--define(WXK_NUMPAD_DELETE, 385).
--define(WXK_NUMPAD_EQUAL, 386).
--define(WXK_NUMPAD_MULTIPLY, 387).
--define(WXK_NUMPAD_ADD, 388).
--define(WXK_NUMPAD_SEPARATOR, 389).
--define(WXK_NUMPAD_SUBTRACT, 390).
--define(WXK_NUMPAD_DECIMAL, 391).
--define(WXK_NUMPAD_DIVIDE, 392).
--define(WXK_WINDOWS_LEFT, 393).
--define(WXK_WINDOWS_RIGHT, 394).
--define(WXK_WINDOWS_MENU, 395).
--define(WXK_COMMAND, 396).
--define(WXK_SPECIAL1, 193).
--define(WXK_SPECIAL2, 194).
--define(WXK_SPECIAL3, 195).
--define(WXK_SPECIAL4, 196).
--define(WXK_SPECIAL5, 197).
--define(WXK_SPECIAL6, 198).
--define(WXK_SPECIAL7, 199).
--define(WXK_SPECIAL8, 200).
--define(WXK_SPECIAL9, 201).
--define(WXK_SPECIAL10, 202).
--define(WXK_SPECIAL11, 203).
--define(WXK_SPECIAL12, 204).
--define(WXK_SPECIAL13, 205).
--define(WXK_SPECIAL14, 206).
--define(WXK_SPECIAL15, 207).
--define(WXK_SPECIAL16, 208).
--define(WXK_SPECIAL17, 209).
--define(WXK_SPECIAL18, 210).
--define(WXK_SPECIAL19, 211).
--define(WXK_SPECIAL20, 212).
-% Type wxKeyModifier
--define(wxMOD_NONE, 0).
--define(wxMOD_ALT, 1).
--define(wxMOD_CONTROL, 2).
--define(wxMOD_ALTGR, (?wxMOD_ALT bor ?wxMOD_CONTROL)).
--define(wxMOD_SHIFT, 4).
--define(wxMOD_META, 8).
--define(wxMOD_WIN, ?wxMOD_META).
--define(wxMOD_CMD, wxe_util:get_const(wxMOD_CMD)).
--define(wxMOD_ALL, 65535).
-% Type wxKeyType
--define(wxKEY_NONE, 0).
--define(wxKEY_INTEGER, 1).
--define(wxKEY_STRING, 2).
-% Type wxKillError
+% From "utils.h": wxKillError
-define(wxKILL_OK, 0).
-define(wxKILL_BAD_SIGNAL, 1).
-define(wxKILL_ACCESS_DENIED, 2).
-define(wxKILL_NO_PROCESS, 3).
-define(wxKILL_ERROR, 4).
-% Type wxKillFlags
+% From "utils.h": wxKillFlags
-define(wxKILL_NOCHILDREN, 0).
-define(wxKILL_CHILDREN, 1).
-% Type wxLayoutAlignment
--define(wxLAYOUT_NONE, 0).
--define(wxLAYOUT_TOP, 1).
--define(wxLAYOUT_LEFT, 2).
--define(wxLAYOUT_RIGHT, 3).
--define(wxLAYOUT_BOTTOM, 4).
-% Type wxLayoutDirection
--define(wxLayout_Default, 0).
--define(wxLayout_LeftToRight, 1).
--define(wxLayout_RightToLeft, 2).
-% Type wxLayoutOrientation
--define(wxLAYOUT_HORIZONTAL, 0).
--define(wxLAYOUT_VERTICAL, 1).
-% Type wxListColumnFormat
--define(wxLIST_FORMAT_LEFT, 0).
--define(wxLIST_FORMAT_RIGHT, 1).
--define(wxLIST_FORMAT_CENTRE, 2).
--define(wxLIST_FORMAT_CENTER, ?wxLIST_FORMAT_CENTRE).
-% Type wxNotificationOptions
--define(wxNOTIFY_NONE, 0).
--define(wxNOTIFY_ONCE, 1).
--define(wxNOTIFY_REPEAT, 2).
-% Type wxOrientation
--define(wxHORIZONTAL, 4).
--define(wxVERTICAL, 8).
--define(wxBOTH, (?wxVERTICAL bor ?wxHORIZONTAL)).
-% Type wxPaperSize
--define(wxPAPER_NONE, 0).
--define(wxPAPER_LETTER, 1).
--define(wxPAPER_LEGAL, 2).
--define(wxPAPER_A4, 3).
--define(wxPAPER_CSHEET, 4).
--define(wxPAPER_DSHEET, 5).
--define(wxPAPER_ESHEET, 6).
--define(wxPAPER_LETTERSMALL, 7).
--define(wxPAPER_TABLOID, 8).
--define(wxPAPER_LEDGER, 9).
--define(wxPAPER_STATEMENT, 10).
--define(wxPAPER_EXECUTIVE, 11).
--define(wxPAPER_A3, 12).
--define(wxPAPER_A4SMALL, 13).
--define(wxPAPER_A5, 14).
--define(wxPAPER_B4, 15).
--define(wxPAPER_B5, 16).
--define(wxPAPER_FOLIO, 17).
--define(wxPAPER_QUARTO, 18).
--define(wxPAPER_10X14, 19).
--define(wxPAPER_11X17, 20).
--define(wxPAPER_NOTE, 21).
--define(wxPAPER_ENV_9, 22).
--define(wxPAPER_ENV_10, 23).
--define(wxPAPER_ENV_11, 24).
--define(wxPAPER_ENV_12, 25).
--define(wxPAPER_ENV_14, 26).
--define(wxPAPER_ENV_DL, 27).
--define(wxPAPER_ENV_C5, 28).
--define(wxPAPER_ENV_C3, 29).
--define(wxPAPER_ENV_C4, 30).
--define(wxPAPER_ENV_C6, 31).
--define(wxPAPER_ENV_C65, 32).
--define(wxPAPER_ENV_B4, 33).
--define(wxPAPER_ENV_B5, 34).
--define(wxPAPER_ENV_B6, 35).
--define(wxPAPER_ENV_ITALY, 36).
--define(wxPAPER_ENV_MONARCH, 37).
--define(wxPAPER_ENV_PERSONAL, 38).
--define(wxPAPER_FANFOLD_US, 39).
--define(wxPAPER_FANFOLD_STD_GERMAN, 40).
--define(wxPAPER_FANFOLD_LGL_GERMAN, 41).
--define(wxPAPER_ISO_B4, 42).
--define(wxPAPER_JAPANESE_POSTCARD, 43).
--define(wxPAPER_9X11, 44).
--define(wxPAPER_10X11, 45).
--define(wxPAPER_15X11, 46).
--define(wxPAPER_ENV_INVITE, 47).
--define(wxPAPER_LETTER_EXTRA, 48).
--define(wxPAPER_LEGAL_EXTRA, 49).
--define(wxPAPER_TABLOID_EXTRA, 50).
--define(wxPAPER_A4_EXTRA, 51).
--define(wxPAPER_LETTER_TRANSVERSE, 52).
--define(wxPAPER_A4_TRANSVERSE, 53).
--define(wxPAPER_LETTER_EXTRA_TRANSVERSE, 54).
--define(wxPAPER_A_PLUS, 55).
--define(wxPAPER_B_PLUS, 56).
--define(wxPAPER_LETTER_PLUS, 57).
--define(wxPAPER_A4_PLUS, 58).
--define(wxPAPER_A5_TRANSVERSE, 59).
--define(wxPAPER_B5_TRANSVERSE, 60).
--define(wxPAPER_A3_EXTRA, 61).
--define(wxPAPER_A5_EXTRA, 62).
--define(wxPAPER_B5_EXTRA, 63).
--define(wxPAPER_A2, 64).
--define(wxPAPER_A3_TRANSVERSE, 65).
--define(wxPAPER_A3_EXTRA_TRANSVERSE, 66).
--define(wxPAPER_DBL_JAPANESE_POSTCARD, 67).
--define(wxPAPER_A6, 68).
--define(wxPAPER_JENV_KAKU2, 69).
--define(wxPAPER_JENV_KAKU3, 70).
--define(wxPAPER_JENV_CHOU3, 71).
--define(wxPAPER_JENV_CHOU4, 72).
--define(wxPAPER_LETTER_ROTATED, 73).
--define(wxPAPER_A3_ROTATED, 74).
--define(wxPAPER_A4_ROTATED, 75).
--define(wxPAPER_A5_ROTATED, 76).
--define(wxPAPER_B4_JIS_ROTATED, 77).
--define(wxPAPER_B5_JIS_ROTATED, 78).
--define(wxPAPER_JAPANESE_POSTCARD_ROTATED, 79).
--define(wxPAPER_DBL_JAPANESE_POSTCARD_ROTATED, 80).
--define(wxPAPER_A6_ROTATED, 81).
--define(wxPAPER_JENV_KAKU2_ROTATED, 82).
--define(wxPAPER_JENV_KAKU3_ROTATED, 83).
--define(wxPAPER_JENV_CHOU3_ROTATED, 84).
--define(wxPAPER_JENV_CHOU4_ROTATED, 85).
--define(wxPAPER_B6_JIS, 86).
--define(wxPAPER_B6_JIS_ROTATED, 87).
--define(wxPAPER_12X11, 88).
--define(wxPAPER_JENV_YOU4, 89).
--define(wxPAPER_JENV_YOU4_ROTATED, 90).
--define(wxPAPER_P16K, 91).
--define(wxPAPER_P32K, 92).
--define(wxPAPER_P32KBIG, 93).
--define(wxPAPER_PENV_1, 94).
--define(wxPAPER_PENV_2, 95).
--define(wxPAPER_PENV_3, 96).
--define(wxPAPER_PENV_4, 97).
--define(wxPAPER_PENV_5, 98).
--define(wxPAPER_PENV_6, 99).
--define(wxPAPER_PENV_7, 100).
--define(wxPAPER_PENV_8, 101).
--define(wxPAPER_PENV_9, 102).
--define(wxPAPER_PENV_10, 103).
--define(wxPAPER_P16K_ROTATED, 104).
--define(wxPAPER_P32K_ROTATED, 105).
--define(wxPAPER_P32KBIG_ROTATED, 106).
--define(wxPAPER_PENV_1_ROTATED, 107).
--define(wxPAPER_PENV_2_ROTATED, 108).
--define(wxPAPER_PENV_3_ROTATED, 109).
--define(wxPAPER_PENV_4_ROTATED, 110).
--define(wxPAPER_PENV_5_ROTATED, 111).
--define(wxPAPER_PENV_6_ROTATED, 112).
--define(wxPAPER_PENV_7_ROTATED, 113).
--define(wxPAPER_PENV_8_ROTATED, 114).
--define(wxPAPER_PENV_9_ROTATED, 115).
--define(wxPAPER_PENV_10_ROTATED, 116).
-% Type wxPrintBin
--define(wxPRINTBIN_DEFAULT, 0).
--define(wxPRINTBIN_ONLYONE, 1).
--define(wxPRINTBIN_LOWER, 2).
--define(wxPRINTBIN_MIDDLE, 3).
--define(wxPRINTBIN_MANUAL, 4).
--define(wxPRINTBIN_ENVELOPE, 5).
--define(wxPRINTBIN_ENVMANUAL, 6).
--define(wxPRINTBIN_AUTO, 7).
--define(wxPRINTBIN_TRACTOR, 8).
--define(wxPRINTBIN_SMALLFMT, 9).
--define(wxPRINTBIN_LARGEFMT, 10).
--define(wxPRINTBIN_LARGECAPACITY, 11).
--define(wxPRINTBIN_CASSETTE, 12).
--define(wxPRINTBIN_FORMSOURCE, 13).
--define(wxPRINTBIN_USER, 14).
-% Type wxPrintMode
--define(wxPRINT_MODE_NONE, 0).
--define(wxPRINT_MODE_PREVIEW, 1).
--define(wxPRINT_MODE_FILE, 2).
--define(wxPRINT_MODE_PRINTER, 3).
--define(wxPRINT_MODE_STREAM, 4).
-% Type wxPrinterError
--define(wxPRINTER_NO_ERROR, 0).
--define(wxPRINTER_CANCELLED, 1).
--define(wxPRINTER_ERROR, 2).
-% Type wxRegionContain
--define(wxOutRegion, 0).
--define(wxPartRegion, 1).
--define(wxInRegion, 2).
-% Type wxRegionOp
--define(wxRGN_AND, 0).
--define(wxRGN_COPY, 1).
--define(wxRGN_DIFF, 2).
--define(wxRGN_OR, 3).
--define(wxRGN_XOR, 4).
-% Type wxRelationship
--define(wxUnconstrained, 0).
--define(wxAsIs, 1).
--define(wxPercentOf, 2).
--define(wxAbove, 3).
--define(wxBelow, 4).
--define(wxLeftOf, 5).
--define(wxRightOf, 6).
--define(wxSameAs, 7).
--define(wxAbsolute, 8).
-% Type wxSashDragStatus
--define(wxSASH_STATUS_OK, 0).
--define(wxSASH_STATUS_OUT_OF_RANGE, 1).
-% Type wxSashEdgePosition
--define(wxSASH_TOP, 0).
--define(wxSASH_RIGHT, 1).
--define(wxSASH_BOTTOM, 2).
--define(wxSASH_LEFT, 3).
--define(wxSASH_NONE, 100).
-% Type wxShutdownFlags
+% From "utils.h": wxShutdownFlags
-define(wxSHUTDOWN_POWEROFF, 0).
-define(wxSHUTDOWN_REBOOT, 1).
-% Type wxSignal
+% From "utils.h": wxSignal
-define(wxSIGNONE, 0).
-define(wxSIGHUP, 1).
-define(wxSIGINT, 2).
@@ -3540,185 +3733,29 @@
-define(wxSIGPIPE, (?wxSIGABRT+7)).
-define(wxSIGALRM, (?wxSIGABRT+8)).
-define(wxSIGTERM, (?wxSIGABRT+9)).
-% Type wxSplitMode
--define(wxSPLIT_HORIZONTAL, 1).
--define(wxSPLIT_VERTICAL, 2).
-% Type wxStockCursor
--define(wxCURSOR_NONE, 0).
--define(wxCURSOR_ARROW, 1).
--define(wxCURSOR_RIGHT_ARROW, 2).
--define(wxCURSOR_BULLSEYE, 3).
--define(wxCURSOR_CHAR, 4).
--define(wxCURSOR_CROSS, 5).
--define(wxCURSOR_HAND, 6).
--define(wxCURSOR_IBEAM, 7).
--define(wxCURSOR_LEFT_BUTTON, 8).
--define(wxCURSOR_MAGNIFIER, 9).
--define(wxCURSOR_MIDDLE_BUTTON, 10).
--define(wxCURSOR_NO_ENTRY, 11).
--define(wxCURSOR_PAINT_BRUSH, 12).
--define(wxCURSOR_PENCIL, 13).
--define(wxCURSOR_POINT_LEFT, 14).
--define(wxCURSOR_POINT_RIGHT, 15).
--define(wxCURSOR_QUESTION_ARROW, 16).
--define(wxCURSOR_RIGHT_BUTTON, 17).
--define(wxCURSOR_SIZENESW, 18).
--define(wxCURSOR_SIZENS, 19).
--define(wxCURSOR_SIZENWSE, 20).
--define(wxCURSOR_SIZEWE, 21).
--define(wxCURSOR_SIZING, 22).
--define(wxCURSOR_SPRAYCAN, 23).
--define(wxCURSOR_WAIT, 24).
--define(wxCURSOR_WATCH, 25).
--define(wxCURSOR_BLANK, 26).
--define(wxCURSOR_DEFAULT, 27).
--define(wxCURSOR_ARROWWAIT, 28).
--define(wxCURSOR_MAX, 29).
-% Type wxStretch
--define(wxSTRETCH_NOT, 0).
--define(wxSHRINK, 4096).
--define(wxGROW, 8192).
--define(wxEXPAND, ?wxGROW).
--define(wxSHAPED, 16384).
--define(wxFIXED_MINSIZE, 32768).
--define(wxRESERVE_SPACE_EVEN_IF_HIDDEN, 2).
--define(wxTILE, 49152).
--define(wxADJUST_MINSIZE, 0).
-% Type wxSystemColour
--define(wxSYS_COLOUR_SCROLLBAR, 0).
--define(wxSYS_COLOUR_BACKGROUND, 1).
--define(wxSYS_COLOUR_DESKTOP, ?wxSYS_COLOUR_BACKGROUND).
--define(wxSYS_COLOUR_ACTIVECAPTION, (?wxSYS_COLOUR_BACKGROUND+1)).
--define(wxSYS_COLOUR_INACTIVECAPTION, (?wxSYS_COLOUR_BACKGROUND+2)).
--define(wxSYS_COLOUR_MENU, (?wxSYS_COLOUR_BACKGROUND+3)).
--define(wxSYS_COLOUR_WINDOW, (?wxSYS_COLOUR_BACKGROUND+4)).
--define(wxSYS_COLOUR_WINDOWFRAME, (?wxSYS_COLOUR_BACKGROUND+5)).
--define(wxSYS_COLOUR_MENUTEXT, (?wxSYS_COLOUR_BACKGROUND+6)).
--define(wxSYS_COLOUR_WINDOWTEXT, (?wxSYS_COLOUR_BACKGROUND+7)).
--define(wxSYS_COLOUR_CAPTIONTEXT, (?wxSYS_COLOUR_BACKGROUND+8)).
--define(wxSYS_COLOUR_ACTIVEBORDER, (?wxSYS_COLOUR_BACKGROUND+9)).
--define(wxSYS_COLOUR_INACTIVEBORDER, (?wxSYS_COLOUR_BACKGROUND+10)).
--define(wxSYS_COLOUR_APPWORKSPACE, (?wxSYS_COLOUR_BACKGROUND+11)).
--define(wxSYS_COLOUR_HIGHLIGHT, (?wxSYS_COLOUR_BACKGROUND+12)).
--define(wxSYS_COLOUR_HIGHLIGHTTEXT, (?wxSYS_COLOUR_BACKGROUND+13)).
--define(wxSYS_COLOUR_BTNFACE, (?wxSYS_COLOUR_BACKGROUND+14)).
--define(wxSYS_COLOUR_3DFACE, ?wxSYS_COLOUR_BTNFACE).
--define(wxSYS_COLOUR_BTNSHADOW, (?wxSYS_COLOUR_BTNFACE+1)).
--define(wxSYS_COLOUR_3DSHADOW, ?wxSYS_COLOUR_BTNSHADOW).
--define(wxSYS_COLOUR_GRAYTEXT, (?wxSYS_COLOUR_BTNSHADOW+1)).
--define(wxSYS_COLOUR_BTNTEXT, (?wxSYS_COLOUR_BTNSHADOW+2)).
--define(wxSYS_COLOUR_INACTIVECAPTIONTEXT, (?wxSYS_COLOUR_BTNSHADOW+3)).
--define(wxSYS_COLOUR_BTNHIGHLIGHT, (?wxSYS_COLOUR_BTNSHADOW+4)).
--define(wxSYS_COLOUR_BTNHILIGHT, ?wxSYS_COLOUR_BTNHIGHLIGHT).
--define(wxSYS_COLOUR_3DHIGHLIGHT, ?wxSYS_COLOUR_BTNHIGHLIGHT).
--define(wxSYS_COLOUR_3DHILIGHT, ?wxSYS_COLOUR_BTNHIGHLIGHT).
--define(wxSYS_COLOUR_3DDKSHADOW, (?wxSYS_COLOUR_BTNHIGHLIGHT+1)).
--define(wxSYS_COLOUR_3DLIGHT, (?wxSYS_COLOUR_BTNHIGHLIGHT+2)).
--define(wxSYS_COLOUR_INFOTEXT, (?wxSYS_COLOUR_BTNHIGHLIGHT+3)).
--define(wxSYS_COLOUR_INFOBK, (?wxSYS_COLOUR_BTNHIGHLIGHT+4)).
--define(wxSYS_COLOUR_LISTBOX, (?wxSYS_COLOUR_BTNHIGHLIGHT+5)).
--define(wxSYS_COLOUR_HOTLIGHT, (?wxSYS_COLOUR_BTNHIGHLIGHT+6)).
--define(wxSYS_COLOUR_GRADIENTACTIVECAPTION, (?wxSYS_COLOUR_BTNHIGHLIGHT+7)).
--define(wxSYS_COLOUR_GRADIENTINACTIVECAPTION, (?wxSYS_COLOUR_BTNHIGHLIGHT+8)).
--define(wxSYS_COLOUR_MENUHILIGHT, (?wxSYS_COLOUR_BTNHIGHLIGHT+9)).
--define(wxSYS_COLOUR_MENUBAR, (?wxSYS_COLOUR_BTNHIGHLIGHT+10)).
--define(wxSYS_COLOUR_LISTBOXTEXT, (?wxSYS_COLOUR_BTNHIGHLIGHT+11)).
--define(wxSYS_COLOUR_MAX, (?wxSYS_COLOUR_BTNHIGHLIGHT+12)).
-% Type wxSystemFeature
--define(wxSYS_CAN_DRAW_FRAME_DECORATIONS, 1).
--define(wxSYS_CAN_ICONIZE_FRAME, 2).
--define(wxSYS_TABLET_PRESENT, 3).
-% Type wxSystemFont
--define(wxSYS_OEM_FIXED_FONT, 10).
--define(wxSYS_ANSI_FIXED_FONT, 11).
--define(wxSYS_ANSI_VAR_FONT, 12).
--define(wxSYS_SYSTEM_FONT, 13).
--define(wxSYS_DEVICE_DEFAULT_FONT, 14).
--define(wxSYS_DEFAULT_PALETTE, 15).
--define(wxSYS_SYSTEM_FIXED_FONT, 16).
--define(wxSYS_DEFAULT_GUI_FONT, 17).
--define(wxSYS_ICONTITLE_FONT, ?wxSYS_DEFAULT_GUI_FONT).
-% Type wxSystemMetric
--define(wxSYS_MOUSE_BUTTONS, 1).
--define(wxSYS_BORDER_X, 2).
--define(wxSYS_BORDER_Y, 3).
--define(wxSYS_CURSOR_X, 4).
--define(wxSYS_CURSOR_Y, 5).
--define(wxSYS_DCLICK_X, 6).
--define(wxSYS_DCLICK_Y, 7).
--define(wxSYS_DRAG_X, 8).
--define(wxSYS_DRAG_Y, 9).
--define(wxSYS_EDGE_X, 10).
--define(wxSYS_EDGE_Y, 11).
--define(wxSYS_HSCROLL_ARROW_X, 12).
--define(wxSYS_HSCROLL_ARROW_Y, 13).
--define(wxSYS_HTHUMB_X, 14).
--define(wxSYS_ICON_X, 15).
--define(wxSYS_ICON_Y, 16).
--define(wxSYS_ICONSPACING_X, 17).
--define(wxSYS_ICONSPACING_Y, 18).
--define(wxSYS_WINDOWMIN_X, 19).
--define(wxSYS_WINDOWMIN_Y, 20).
--define(wxSYS_SCREEN_X, 21).
--define(wxSYS_SCREEN_Y, 22).
--define(wxSYS_FRAMESIZE_X, 23).
--define(wxSYS_FRAMESIZE_Y, 24).
--define(wxSYS_SMALLICON_X, 25).
--define(wxSYS_SMALLICON_Y, 26).
--define(wxSYS_HSCROLL_Y, 27).
--define(wxSYS_VSCROLL_X, 28).
--define(wxSYS_VSCROLL_ARROW_X, 29).
--define(wxSYS_VSCROLL_ARROW_Y, 30).
--define(wxSYS_VTHUMB_Y, 31).
--define(wxSYS_CAPTION_Y, 32).
--define(wxSYS_MENU_Y, 33).
--define(wxSYS_NETWORK_PRESENT, 34).
--define(wxSYS_PENWINDOWS_PRESENT, 35).
--define(wxSYS_SHOW_SOUNDS, 36).
--define(wxSYS_SWAP_BUTTONS, 37).
-% Type wxSystemScreenType
--define(wxSYS_SCREEN_NONE, 0).
--define(wxSYS_SCREEN_TINY, 1).
--define(wxSYS_SCREEN_PDA, 2).
--define(wxSYS_SCREEN_SMALL, 3).
--define(wxSYS_SCREEN_DESKTOP, 4).
-% Type wxTextAttrAlignment
--define(wxTEXT_ALIGNMENT_DEFAULT, 0).
--define(wxTEXT_ALIGNMENT_LEFT, 1).
--define(wxTEXT_ALIGNMENT_CENTRE, 2).
--define(wxTEXT_ALIGNMENT_CENTER, ?wxTEXT_ALIGNMENT_CENTRE).
--define(wxTEXT_ALIGNMENT_RIGHT, (?wxTEXT_ALIGNMENT_CENTRE+1)).
--define(wxTEXT_ALIGNMENT_JUSTIFIED, (?wxTEXT_ALIGNMENT_CENTRE+2)).
-% Type wxTextCtrlHitTestResult
--define(wxTE_HT_UNKNOWN, -2).
--define(wxTE_HT_BEFORE, -1).
--define(wxTE_HT_ON_TEXT, 0).
--define(wxTE_HT_BELOW, 1).
--define(wxTE_HT_BEYOND, 2).
-% Type wxToolBarToolStyle
--define(wxTOOL_STYLE_BUTTON, 1).
--define(wxTOOL_STYLE_SEPARATOR, 2).
--define(wxTOOL_STYLE_CONTROL, 3).
-% Type wxTreeItemIcon
--define(wxTreeItemIcon_Normal, 0).
--define(wxTreeItemIcon_Selected, 1).
--define(wxTreeItemIcon_Expanded, 2).
--define(wxTreeItemIcon_SelectedExpanded, 3).
--define(wxTreeItemIcon_Max, 4).
-% Type wxUpdateUI
--define(wxUPDATE_UI_NONE, 0).
--define(wxUPDATE_UI_RECURSE, 1).
--define(wxUPDATE_UI_FROMIDLE, 2).
-% Type wxUpdateUIMode
--define(wxUPDATE_UI_PROCESS_ALL, 0).
--define(wxUPDATE_UI_PROCESS_SPECIFIED, 1).
-% Type wxWindowVariant
+% From "valtext.h"
+-define(wxFILTER_EXCLUDE_CHAR_LIST, 128).
+-define(wxFILTER_INCLUDE_CHAR_LIST, 64).
+-define(wxFILTER_EXCLUDE_LIST, 32).
+-define(wxFILTER_INCLUDE_LIST, 16).
+-define(wxFILTER_NUMERIC, 8).
+-define(wxFILTER_ALPHANUMERIC, 4).
+-define(wxFILTER_ALPHA, 2).
+-define(wxFILTER_ASCII, 1).
+-define(wxFILTER_NONE, 0).
+% From "version.h"
+-define(wxBETA_NUMBER, wxe_util:get_const(wxBETA_NUMBER)).
+-define(wxSUBRELEASE_NUMBER, wxe_util:get_const(wxSUBRELEASE_NUMBER)).
+-define(wxRELEASE_NUMBER, wxe_util:get_const(wxRELEASE_NUMBER)).
+-define(wxMINOR_VERSION, wxe_util:get_const(wxMINOR_VERSION)).
+-define(wxMAJOR_VERSION, wxe_util:get_const(wxMAJOR_VERSION)).
+% From "window.h": wxWindowVariant
-define(wxWINDOW_VARIANT_NORMAL, 0).
-define(wxWINDOW_VARIANT_SMALL, 1).
-define(wxWINDOW_VARIANT_MINI, 2).
-define(wxWINDOW_VARIANT_LARGE, 3).
-define(wxWINDOW_VARIANT_MAX, 4).
-% Type wxXmlResourceFlags
+% From "xmlres.h": wxXmlResourceFlags
-define(wxXRC_USE_LOCALE, 1).
-define(wxXRC_NO_SUBCLASSING, 2).
-define(wxXRC_NO_RELOADING, 4).
diff --git a/lib/wx/src/Makefile b/lib/wx/src/Makefile
index 6c636bb51f..a9fd468959 100644
--- a/lib/wx/src/Makefile
+++ b/lib/wx/src/Makefile
@@ -1,19 +1,19 @@
#
# %CopyrightBegin%
-#
-# Copyright Ericsson AB 2008-2009. All Rights Reserved.
-#
+#
+# Copyright Ericsson AB 2008-2010. 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%
#
@@ -44,6 +44,8 @@ GEN_FILES = $(wildcard gen/wx*.erl) \
gen/glu.erl \
gen/gl.erl
+GEN_MODS = $(GEN_FILES:gen/%.erl= %,\n )
+
GEN_HRL = \
$(EGEN)/gl_debug.hrl \
$(EGEN)/wxe_debug.hrl \
@@ -56,15 +58,25 @@ EXT_HRL = $(ERLINC)/wx.hrl \
TARGET_FILES = $(ErlMods:%=$(EBIN)/%.beam) $(GEN_FILES:gen/%.erl=$(EBIN)/%.beam)
HEADER_FILES = $(HRL_FILES) $(GEN_HRL) $(EXT_HRL)
+APP_FILE = wx.app
+APP_SRC = $(APP_FILE).src
+APP_TARGET = $(EBIN)/$(APP_FILE)
+
+APPUP_FILE = wx.appup
+APPUP_SRC = $(APPUP_FILE).src
+APPUP_TARGET = $(EBIN)/$(APPUP_FILE)
+
# Targets
-debug opt: $(TARGET_FILES)
+debug opt: $(TARGET_FILES) $(APP_TARGET) $(APPUP_TARGET)
clean:
rm -f $(TARGET_FILES)
+ rm -f $(APP_TARGET) $(APPUP_TARGET)
rm -f *~
complete_clean:
rm -f $(TARGET_FILES)
+ rm -f $(APP_TARGET) $(APPUP_TARGET)
rm -f $(GEN_FILES)
rm -f $(GenHrl)
rm -f *~
@@ -75,6 +87,17 @@ docs:
archive: opt
(cd ../..; zip -0 wx/$(ARCHIVE) wx wx/ebin wx/ebin/*)
+# ----------------------------------------------------
+# Special Build Targets
+# ----------------------------------------------------
+
+$(APP_TARGET): $(APP_SRC) ../vsn.mk Makefile
+ sed -e 's;%GEN_MODS%;$(GEN_MODS);' $< > [email protected]
+ sed -e 's;%VSN%;$(VSN);' [email protected] > $@
+
+$(APPUP_TARGET): $(APPUP_SRC) ../vsn.mk Makefile
+ sed -e 's;%VSN%;$(VSN);' $< > $@
# Rules
$(EBIN)/%.beam: $(ESRC)/%.erl $(HEADER_FILES)
@@ -97,6 +120,7 @@ release_spec: opt
$(INSTALL_DATA) $(EXT_HRL) $(RELSYSDIR)/include
$(INSTALL_DIR) $(RELSYSDIR)/ebin
$(INSTALL_DATA) $(TARGET_FILES) $(RELSYSDIR)/ebin
+ $(INSTALL_DATA) $(APP_TARGET) $(APPUP_TARGET) $(RELSYSDIR)/ebin
# $(INSTALL_DATA) ../$(ARCHIVE) $(RELEASE_PATH)/lib
release_docs_spec:
diff --git a/lib/wx/src/gen/gl.erl b/lib/wx/src/gen/gl.erl
index d789f1b72f..62d0ff6aed 100644
--- a/lib/wx/src/gen/gl.erl
+++ b/lib/wx/src/gen/gl.erl
@@ -20,15 +20,15 @@
%% This file is generated DO NOT EDIT
-%% @doc Standard OpenGL api.
+%% @doc Standard OpenGL api.
%% See <a href="http://www.opengl.org/sdk/docs/man/">www.opengl.org</a>
%%
-%% Booleans are represented by integers 0 and 1.
+%% Booleans are represented by integers 0 and 1.
%% @type wx_mem(). see wx.erl on memory allocation functions
%% @type enum(). An integer defined in gl.hrl
%% @type offset(). An integer which is an offset in an array
-%% @type clamp(). A float clamped between 0.0 - 1.0
+%% @type clamp(). A float clamped between 0.0 - 1.0
-module(gl).
-compile(inline).
@@ -216,7 +216,7 @@
stencilClearTagEXT/2]).
-%% API
+%% API
%% @spec (Op::enum(),Value::float()) -> ok
%% @doc See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glAccum.xml">external</a> documentation.
diff --git a/lib/wx/src/gen/gl_debug.hrl b/lib/wx/src/gen/gl_debug.hrl
index 68225197cf..0b8086f24e 100644
--- a/lib/wx/src/gen/gl_debug.hrl
+++ b/lib/wx/src/gen/gl_debug.hrl
@@ -17,7 +17,7 @@
%% %CopyrightEnd%
%% This file is generated DO NOT EDIT
-gldebug_table() ->
+gldebug_table() ->
[
{5037, {gl, accum, 0}},
{5038, {gl, alphaFunc, 0}},
diff --git a/lib/wx/src/gen/glu.erl b/lib/wx/src/gen/glu.erl
index ae4bac4e06..d410c4663d 100644
--- a/lib/wx/src/gen/glu.erl
+++ b/lib/wx/src/gen/glu.erl
@@ -20,15 +20,15 @@
%% This file is generated DO NOT EDIT
-%% @doc A part of the standard OpenGL Utility api.
+%% @doc A part of the standard OpenGL Utility api.
%% See <a href="http://www.opengl.org/sdk/docs/man/">www.opengl.org</a>
%%
-%% Booleans are represented by integers 0 and 1.
+%% Booleans are represented by integers 0 and 1.
%% @type wx_mem(). see wx.erl on memory allocation functions
%% @type enum(). An integer defined in gl.hrl
%% @type offset(). An integer which is an offset in an array
-%% @type clamp(). A float clamped between 0.0 - 1.0
+%% @type clamp(). A float clamped between 0.0 - 1.0
-module(glu).
-compile(inline).
@@ -60,7 +60,7 @@
scaleImage/9,sphere/4,unProject/6,unProject4/9]).
-%% API
+%% API
%% @spec (Vec3, [Vec3]) -> {Triangles, VertexPos}
%% Vec3 = {float(),float(),float()}
@@ -69,8 +69,8 @@
%% @doc General purpose polygon triangulation.
%% The first argument is the normal and the second a list of
%% vertex positions. Returned is a list of indecies of the vertices
-%% and a binary (64bit native float) containing an array of
-%% vertex positions, it starts with the vertices in Vs and
+%% and a binary (64bit native float) containing an array of
+%% vertex positions, it starts with the vertices in Vs and
%% may contain newly created vertices in the end.
tesselate({Nx,Ny,Nz}, Vs) ->
wxe_util:call(5000, <<(length(Vs)):32/native,0:32,
diff --git a/lib/wx/src/gen/wxe_debug.hrl b/lib/wx/src/gen/wxe_debug.hrl
index 68a3b4ccd8..a3416b75c8 100644
--- a/lib/wx/src/gen/wxe_debug.hrl
+++ b/lib/wx/src/gen/wxe_debug.hrl
@@ -770,2512 +770,2512 @@ wxdebug_table() ->
{882, {wxControlWithItems, clear, 0}},
{883, {wxControlWithItems, delete, 1}},
{884, {wxControlWithItems, findString, 2}},
- {886, {wxControlWithItems, getClientData, 1}},
- {888, {wxControlWithItems, setClientData, 2}},
- {889, {wxControlWithItems, getCount, 0}},
- {890, {wxControlWithItems, getSelection, 0}},
- {891, {wxControlWithItems, getString, 1}},
- {892, {wxControlWithItems, getStringSelection, 0}},
- {893, {wxControlWithItems, insert_2, 2}},
- {894, {wxControlWithItems, insert_3, 3}},
- {895, {wxControlWithItems, isEmpty, 0}},
- {896, {wxControlWithItems, select, 1}},
- {897, {wxControlWithItems, setSelection, 1}},
- {898, {wxControlWithItems, setString, 2}},
- {899, {wxControlWithItems, setStringSelection, 1}},
- {902, {wxMenu, new_2, 2}},
- {903, {wxMenu, new_1, 1}},
- {905, {wxMenu, destruct, 0}},
- {906, {wxMenu, append_3, 3}},
- {907, {wxMenu, append_1, 1}},
- {908, {wxMenu, append_4_0, 4}},
- {909, {wxMenu, append_4_1, 4}},
- {910, {wxMenu, appendCheckItem, 3}},
- {911, {wxMenu, appendRadioItem, 3}},
- {912, {wxMenu, appendSeparator, 0}},
- {913, {wxMenu, break, 0}},
- {914, {wxMenu, check, 2}},
- {915, {wxMenu, delete_1_0, 1}},
- {916, {wxMenu, delete_1_1, 1}},
- {917, {wxMenu, destroy_1_0, 1}},
- {918, {wxMenu, destroy_1_1, 1}},
- {919, {wxMenu, enable, 2}},
- {920, {wxMenu, findItem_1, 1}},
- {921, {wxMenu, findItem_2, 2}},
- {922, {wxMenu, findItemByPosition, 1}},
- {923, {wxMenu, getHelpString, 1}},
- {924, {wxMenu, getLabel, 1}},
- {925, {wxMenu, getMenuItemCount, 0}},
- {926, {wxMenu, getMenuItems, 0}},
- {928, {wxMenu, getTitle, 0}},
- {929, {wxMenu, insert_2, 2}},
- {930, {wxMenu, insert_3, 3}},
- {931, {wxMenu, insert_5_1, 5}},
- {932, {wxMenu, insert_5_0, 5}},
- {933, {wxMenu, insertCheckItem, 4}},
- {934, {wxMenu, insertRadioItem, 4}},
- {935, {wxMenu, insertSeparator, 1}},
- {936, {wxMenu, isChecked, 1}},
- {937, {wxMenu, isEnabled, 1}},
- {938, {wxMenu, prepend_1, 1}},
- {939, {wxMenu, prepend_2, 2}},
- {940, {wxMenu, prepend_4_1, 4}},
- {941, {wxMenu, prepend_4_0, 4}},
- {942, {wxMenu, prependCheckItem, 3}},
- {943, {wxMenu, prependRadioItem, 3}},
- {944, {wxMenu, prependSeparator, 0}},
- {945, {wxMenu, remove_1_0, 1}},
- {946, {wxMenu, remove_1_1, 1}},
- {947, {wxMenu, setHelpString, 2}},
- {948, {wxMenu, setLabel, 2}},
- {949, {wxMenu, setTitle, 1}},
- {950, {wxMenuItem, new, 1}},
- {952, {wxMenuItem, destruct, 0}},
- {953, {wxMenuItem, check, 1}},
- {954, {wxMenuItem, enable, 1}},
- {955, {wxMenuItem, getBitmap, 0}},
- {956, {wxMenuItem, getHelp, 0}},
- {957, {wxMenuItem, getId, 0}},
- {958, {wxMenuItem, getKind, 0}},
- {959, {wxMenuItem, getLabel, 0}},
- {960, {wxMenuItem, getLabelFromText, 1}},
- {961, {wxMenuItem, getMenu, 0}},
- {962, {wxMenuItem, getText, 0}},
- {963, {wxMenuItem, getSubMenu, 0}},
- {964, {wxMenuItem, isCheckable, 0}},
- {965, {wxMenuItem, isChecked, 0}},
- {966, {wxMenuItem, isEnabled, 0}},
- {967, {wxMenuItem, isSeparator, 0}},
- {968, {wxMenuItem, isSubMenu, 0}},
- {969, {wxMenuItem, setBitmap, 1}},
- {970, {wxMenuItem, setHelp, 1}},
- {971, {wxMenuItem, setMenu, 1}},
- {972, {wxMenuItem, setSubMenu, 1}},
- {973, {wxMenuItem, setText, 1}},
- {974, {wxToolBar, addControl, 1}},
- {975, {wxToolBar, addSeparator, 0}},
- {976, {wxToolBar, addTool_5, 5}},
- {977, {wxToolBar, addTool_4_0, 4}},
- {978, {wxToolBar, addTool_1, 1}},
- {979, {wxToolBar, addTool_4_1, 4}},
- {980, {wxToolBar, addTool_3, 3}},
- {981, {wxToolBar, addTool_6, 6}},
- {982, {wxToolBar, addCheckTool, 4}},
- {983, {wxToolBar, addRadioTool, 4}},
- {984, {wxToolBar, deleteTool, 1}},
- {985, {wxToolBar, deleteToolByPos, 1}},
- {986, {wxToolBar, enableTool, 2}},
- {987, {wxToolBar, findById, 1}},
- {988, {wxToolBar, findControl, 1}},
- {989, {wxToolBar, findToolForPosition, 2}},
- {990, {wxToolBar, getToolSize, 0}},
- {991, {wxToolBar, getToolBitmapSize, 0}},
- {992, {wxToolBar, getMargins, 0}},
- {993, {wxToolBar, getToolEnabled, 1}},
- {994, {wxToolBar, getToolLongHelp, 1}},
- {995, {wxToolBar, getToolPacking, 0}},
- {996, {wxToolBar, getToolPos, 1}},
- {997, {wxToolBar, getToolSeparation, 0}},
- {998, {wxToolBar, getToolShortHelp, 1}},
- {999, {wxToolBar, getToolState, 1}},
- {1000, {wxToolBar, insertControl, 2}},
- {1001, {wxToolBar, insertSeparator, 1}},
- {1002, {wxToolBar, insertTool_5, 5}},
- {1003, {wxToolBar, insertTool_2, 2}},
- {1004, {wxToolBar, insertTool_4, 4}},
- {1005, {wxToolBar, realize, 0}},
- {1006, {wxToolBar, removeTool, 1}},
- {1007, {wxToolBar, setMargins, 2}},
- {1008, {wxToolBar, setToolBitmapSize, 1}},
- {1009, {wxToolBar, setToolLongHelp, 2}},
- {1010, {wxToolBar, setToolPacking, 1}},
- {1011, {wxToolBar, setToolShortHelp, 2}},
- {1012, {wxToolBar, setToolSeparation, 1}},
- {1013, {wxToolBar, toggleTool, 2}},
- {1015, {wxStatusBar, new_0, 0}},
- {1016, {wxStatusBar, new_2, 2}},
- {1018, {wxStatusBar, destruct, 0}},
- {1019, {wxStatusBar, create, 2}},
- {1020, {wxStatusBar, getFieldRect, 2}},
- {1021, {wxStatusBar, getFieldsCount, 0}},
- {1022, {wxStatusBar, getStatusText, 1}},
- {1023, {wxStatusBar, popStatusText, 1}},
- {1024, {wxStatusBar, pushStatusText, 2}},
- {1025, {wxStatusBar, setFieldsCount, 2}},
- {1026, {wxStatusBar, setMinHeight, 1}},
- {1027, {wxStatusBar, setStatusText, 2}},
- {1028, {wxStatusBar, setStatusWidths, 2}},
- {1029, {wxStatusBar, setStatusStyles, 2}},
- {1030, {wxBitmap, new_0, 0}},
- {1031, {wxBitmap, new_3, 3}},
- {1032, {wxBitmap, new_4, 4}},
- {1033, {wxBitmap, new_2_0, 2}},
- {1034, {wxBitmap, new_2_1, 2}},
- {1035, {wxBitmap, destruct, 0}},
- {1036, {wxBitmap, convertToImage, 0}},
- {1037, {wxBitmap, copyFromIcon, 1}},
- {1038, {wxBitmap, create, 3}},
- {1039, {wxBitmap, getDepth, 0}},
- {1040, {wxBitmap, getHeight, 0}},
- {1041, {wxBitmap, getPalette, 0}},
- {1042, {wxBitmap, getMask, 0}},
- {1043, {wxBitmap, getWidth, 0}},
- {1044, {wxBitmap, getSubBitmap, 1}},
- {1045, {wxBitmap, loadFile, 2}},
- {1046, {wxBitmap, ok, 0}},
- {1047, {wxBitmap, saveFile, 3}},
- {1048, {wxBitmap, setDepth, 1}},
- {1049, {wxBitmap, setHeight, 1}},
- {1050, {wxBitmap, setMask, 1}},
- {1051, {wxBitmap, setPalette, 1}},
- {1052, {wxBitmap, setWidth, 1}},
- {1053, {wxIcon, new_0, 0}},
- {1054, {wxIcon, new_2, 2}},
- {1055, {wxIcon, new_1, 1}},
- {1056, {wxIcon, copyFromBitmap, 1}},
- {1057, {wxIcon, 'Destroy', undefined}},
- {1058, {wxIconBundle, new_0, 0}},
- {1059, {wxIconBundle, new_2, 2}},
- {1060, {wxIconBundle, new_1_0, 1}},
- {1061, {wxIconBundle, new_1_1, 1}},
- {1062, {wxIconBundle, destruct, 0}},
- {1063, {wxIconBundle, addIcon_2, 2}},
- {1064, {wxIconBundle, addIcon_1, 1}},
- {1065, {wxIconBundle, getIcon_1_1, 1}},
- {1066, {wxIconBundle, getIcon_1_0, 1}},
- {1067, {wxCursor, new_0, 0}},
- {1068, {wxCursor, new_1_0, 1}},
- {1069, {wxCursor, new_1_1, 1}},
- {1070, {wxCursor, new_4, 4}},
- {1071, {wxCursor, destruct, 0}},
- {1072, {wxCursor, ok, 0}},
- {1073, {wxMask, new_0, 0}},
- {1074, {wxMask, new_2_1, 2}},
- {1075, {wxMask, new_2_0, 2}},
- {1076, {wxMask, new_1, 1}},
- {1077, {wxMask, destruct, 0}},
- {1078, {wxMask, create_2_1, 2}},
- {1079, {wxMask, create_2_0, 2}},
- {1080, {wxMask, create_1, 1}},
- {1081, {wxImage, new_0, 0}},
- {1082, {wxImage, new_3_0, 3}},
- {1083, {wxImage, new_4, 4}},
- {1084, {wxImage, new_5, 5}},
- {1085, {wxImage, new_2, 2}},
- {1086, {wxImage, new_3_1, 3}},
- {1087, {wxImage, blur, 1}},
- {1088, {wxImage, blurHorizontal, 1}},
- {1089, {wxImage, blurVertical, 1}},
- {1090, {wxImage, convertAlphaToMask, 1}},
- {1091, {wxImage, convertToGreyscale, 1}},
- {1092, {wxImage, convertToMono, 3}},
- {1093, {wxImage, copy, 0}},
- {1094, {wxImage, create_3, 3}},
- {1095, {wxImage, create_4, 4}},
- {1096, {wxImage, create_5, 5}},
- {1097, {wxImage, 'Destroy', 0}},
- {1098, {wxImage, findFirstUnusedColour, 4}},
- {1099, {wxImage, getImageExtWildcard, 0}},
- {1100, {wxImage, getAlpha_2, 2}},
- {1101, {wxImage, getAlpha_0, 0}},
- {1102, {wxImage, getBlue, 2}},
- {1103, {wxImage, getData, 0}},
- {1104, {wxImage, getGreen, 2}},
- {1105, {wxImage, getImageCount, 2}},
- {1106, {wxImage, getHeight, 0}},
- {1107, {wxImage, getMaskBlue, 0}},
- {1108, {wxImage, getMaskGreen, 0}},
- {1109, {wxImage, getMaskRed, 0}},
- {1110, {wxImage, getOrFindMaskColour, 3}},
- {1111, {wxImage, getPalette, 0}},
- {1112, {wxImage, getRed, 2}},
- {1113, {wxImage, getSubImage, 1}},
- {1114, {wxImage, getWidth, 0}},
- {1115, {wxImage, hasAlpha, 0}},
- {1116, {wxImage, hasMask, 0}},
- {1117, {wxImage, getOption, 1}},
- {1118, {wxImage, getOptionInt, 1}},
- {1119, {wxImage, hasOption, 1}},
- {1120, {wxImage, initAlpha, 0}},
- {1121, {wxImage, initStandardHandlers, 0}},
- {1122, {wxImage, isTransparent, 3}},
- {1123, {wxImage, loadFile_2, 2}},
- {1124, {wxImage, loadFile_3, 3}},
- {1125, {wxImage, ok, 0}},
- {1126, {wxImage, removeHandler, 1}},
- {1127, {wxImage, mirror, 1}},
- {1128, {wxImage, replace, 6}},
- {1129, {wxImage, rescale, 3}},
- {1130, {wxImage, resize, 3}},
- {1131, {wxImage, rotate, 3}},
- {1132, {wxImage, rotateHue, 1}},
- {1133, {wxImage, rotate90, 1}},
- {1134, {wxImage, saveFile_1, 1}},
- {1135, {wxImage, saveFile_2_0, 2}},
- {1136, {wxImage, saveFile_2_1, 2}},
- {1137, {wxImage, scale, 3}},
- {1138, {wxImage, size, 3}},
- {1139, {wxImage, setAlpha_3, 3}},
- {1140, {wxImage, setAlpha_2, 2}},
- {1141, {wxImage, setData_2, 2}},
- {1142, {wxImage, setData_4, 4}},
- {1143, {wxImage, setMask, 1}},
- {1144, {wxImage, setMaskColour, 3}},
- {1145, {wxImage, setMaskFromImage, 4}},
- {1146, {wxImage, setOption_2_1, 2}},
- {1147, {wxImage, setOption_2_0, 2}},
- {1148, {wxImage, setPalette, 1}},
- {1149, {wxImage, setRGB_5, 5}},
- {1150, {wxImage, setRGB_4, 4}},
- {1151, {wxImage, 'Destroy', undefined}},
- {1152, {wxBrush, new_0, 0}},
- {1153, {wxBrush, new_2, 2}},
- {1154, {wxBrush, new_1, 1}},
- {1156, {wxBrush, destruct, 0}},
- {1157, {wxBrush, getColour, 0}},
- {1158, {wxBrush, getStipple, 0}},
- {1159, {wxBrush, getStyle, 0}},
- {1160, {wxBrush, isHatch, 0}},
- {1161, {wxBrush, isOk, 0}},
- {1162, {wxBrush, setColour_1, 1}},
- {1163, {wxBrush, setColour_3, 3}},
- {1164, {wxBrush, setStipple, 1}},
- {1165, {wxBrush, setStyle, 1}},
- {1166, {wxPen, new_0, 0}},
- {1167, {wxPen, new_2, 2}},
- {1168, {wxPen, destruct, 0}},
- {1169, {wxPen, getCap, 0}},
- {1170, {wxPen, getColour, 0}},
- {1171, {wxPen, getJoin, 0}},
- {1172, {wxPen, getStyle, 0}},
- {1173, {wxPen, getWidth, 0}},
- {1174, {wxPen, isOk, 0}},
- {1175, {wxPen, setCap, 1}},
- {1176, {wxPen, setColour_1, 1}},
- {1177, {wxPen, setColour_3, 3}},
- {1178, {wxPen, setJoin, 1}},
- {1179, {wxPen, setStyle, 1}},
- {1180, {wxPen, setWidth, 1}},
- {1181, {wxRegion, new_0, 0}},
- {1182, {wxRegion, new_4, 4}},
- {1183, {wxRegion, new_2, 2}},
- {1184, {wxRegion, new_1_1, 1}},
- {1186, {wxRegion, new_1_0, 1}},
- {1188, {wxRegion, destruct, 0}},
- {1189, {wxRegion, clear, 0}},
- {1190, {wxRegion, contains_2, 2}},
- {1191, {wxRegion, contains_1_0, 1}},
- {1192, {wxRegion, contains_4, 4}},
- {1193, {wxRegion, contains_1_1, 1}},
- {1194, {wxRegion, convertToBitmap, 0}},
- {1195, {wxRegion, getBox, 0}},
- {1196, {wxRegion, intersect_4, 4}},
- {1197, {wxRegion, intersect_1_1, 1}},
- {1198, {wxRegion, intersect_1_0, 1}},
- {1199, {wxRegion, isEmpty, 0}},
- {1200, {wxRegion, subtract_4, 4}},
- {1201, {wxRegion, subtract_1_1, 1}},
- {1202, {wxRegion, subtract_1_0, 1}},
- {1203, {wxRegion, offset_2, 2}},
- {1204, {wxRegion, offset_1, 1}},
- {1205, {wxRegion, union_4, 4}},
- {1206, {wxRegion, union_1_2, 1}},
- {1207, {wxRegion, union_1_1, 1}},
- {1208, {wxRegion, union_1_0, 1}},
- {1209, {wxRegion, union_3, 3}},
- {1210, {wxRegion, xor_4, 4}},
- {1211, {wxRegion, xor_1_1, 1}},
- {1212, {wxRegion, xor_1_0, 1}},
- {1213, {wxAcceleratorTable, new_0, 0}},
- {1214, {wxAcceleratorTable, new_2, 2}},
- {1215, {wxAcceleratorTable, destruct, 0}},
- {1216, {wxAcceleratorTable, ok, 0}},
- {1217, {wxAcceleratorEntry, new_1_0, 1}},
- {1218, {wxAcceleratorEntry, new_1_1, 1}},
- {1219, {wxAcceleratorEntry, getCommand, 0}},
- {1220, {wxAcceleratorEntry, getFlags, 0}},
- {1221, {wxAcceleratorEntry, getKeyCode, 0}},
- {1222, {wxAcceleratorEntry, set, 4}},
- {1223, {wxAcceleratorEntry, 'Destroy', undefined}},
- {1228, {wxCaret, new_3, 3}},
- {1229, {wxCaret, new_2, 2}},
- {1231, {wxCaret, destruct, 0}},
- {1232, {wxCaret, create_3, 3}},
- {1233, {wxCaret, create_2, 2}},
- {1234, {wxCaret, getBlinkTime, 0}},
- {1236, {wxCaret, getPosition, 0}},
- {1238, {wxCaret, getSize, 0}},
- {1239, {wxCaret, getWindow, 0}},
- {1240, {wxCaret, hide, 0}},
- {1241, {wxCaret, isOk, 0}},
- {1242, {wxCaret, isVisible, 0}},
- {1243, {wxCaret, move_2, 2}},
- {1244, {wxCaret, move_1, 1}},
- {1245, {wxCaret, setBlinkTime, 1}},
- {1246, {wxCaret, setSize_2, 2}},
- {1247, {wxCaret, setSize_1, 1}},
- {1248, {wxCaret, show, 1}},
- {1249, {wxSizer, add_2_1, 2}},
- {1250, {wxSizer, add_2_0, 2}},
- {1251, {wxSizer, add_3, 3}},
- {1252, {wxSizer, add_2_3, 2}},
- {1253, {wxSizer, add_2_2, 2}},
- {1254, {wxSizer, addSpacer, 1}},
- {1255, {wxSizer, addStretchSpacer, 1}},
- {1256, {wxSizer, calcMin, 0}},
- {1257, {wxSizer, clear, 1}},
- {1258, {wxSizer, detach_1_2, 1}},
- {1259, {wxSizer, detach_1_1, 1}},
- {1260, {wxSizer, detach_1_0, 1}},
- {1261, {wxSizer, fit, 1}},
- {1262, {wxSizer, fitInside, 1}},
- {1263, {wxSizer, getChildren, 0}},
- {1264, {wxSizer, getItem_2_1, 2}},
- {1265, {wxSizer, getItem_2_0, 2}},
- {1266, {wxSizer, getItem_1, 1}},
- {1267, {wxSizer, getSize, 0}},
- {1268, {wxSizer, getPosition, 0}},
- {1269, {wxSizer, getMinSize, 0}},
- {1270, {wxSizer, hide_2_0, 2}},
- {1271, {wxSizer, hide_2_1, 2}},
- {1272, {wxSizer, hide_1, 1}},
- {1273, {wxSizer, insert_3_1, 3}},
- {1274, {wxSizer, insert_3_0, 3}},
- {1275, {wxSizer, insert_4, 4}},
- {1276, {wxSizer, insert_3_3, 3}},
- {1277, {wxSizer, insert_3_2, 3}},
- {1278, {wxSizer, insert_2, 2}},
- {1279, {wxSizer, insertSpacer, 2}},
- {1280, {wxSizer, insertStretchSpacer, 2}},
- {1281, {wxSizer, isShown_1_2, 1}},
- {1282, {wxSizer, isShown_1_1, 1}},
- {1283, {wxSizer, isShown_1_0, 1}},
- {1284, {wxSizer, layout, 0}},
- {1285, {wxSizer, prepend_2_1, 2}},
- {1286, {wxSizer, prepend_2_0, 2}},
- {1287, {wxSizer, prepend_3, 3}},
- {1288, {wxSizer, prepend_2_3, 2}},
- {1289, {wxSizer, prepend_2_2, 2}},
- {1290, {wxSizer, prepend_1, 1}},
- {1291, {wxSizer, prependSpacer, 1}},
- {1292, {wxSizer, prependStretchSpacer, 1}},
- {1293, {wxSizer, recalcSizes, 0}},
- {1294, {wxSizer, remove_1_1, 1}},
- {1295, {wxSizer, remove_1_0, 1}},
- {1296, {wxSizer, replace_3_1, 3}},
- {1297, {wxSizer, replace_3_0, 3}},
- {1298, {wxSizer, replace_2, 2}},
- {1299, {wxSizer, setDimension, 4}},
- {1300, {wxSizer, setMinSize_2, 2}},
- {1301, {wxSizer, setMinSize_1, 1}},
- {1302, {wxSizer, setItemMinSize_3_2, 3}},
- {1303, {wxSizer, setItemMinSize_2_2, 2}},
- {1304, {wxSizer, setItemMinSize_3_1, 3}},
- {1305, {wxSizer, setItemMinSize_2_1, 2}},
- {1306, {wxSizer, setItemMinSize_3_0, 3}},
- {1307, {wxSizer, setItemMinSize_2_0, 2}},
- {1308, {wxSizer, setSizeHints, 1}},
- {1309, {wxSizer, setVirtualSizeHints, 1}},
- {1310, {wxSizer, show_2_2, 2}},
- {1311, {wxSizer, show_2_1, 2}},
- {1312, {wxSizer, show_2_0, 2}},
- {1313, {wxSizer, show_1, 1}},
- {1314, {wxSizerFlags, new, 1}},
- {1315, {wxSizerFlags, align, 1}},
- {1316, {wxSizerFlags, border_2, 2}},
- {1317, {wxSizerFlags, border_1, 1}},
- {1318, {wxSizerFlags, center, 0}},
- {1319, {wxSizerFlags, centre, 0}},
- {1320, {wxSizerFlags, expand, 0}},
- {1321, {wxSizerFlags, left, 0}},
- {1322, {wxSizerFlags, proportion, 1}},
- {1323, {wxSizerFlags, right, 0}},
- {1324, {wxSizerFlags, 'Destroy', undefined}},
- {1325, {wxSizerItem, new_5_1, 5}},
- {1326, {wxSizerItem, new_2_1, 2}},
- {1327, {wxSizerItem, new_5_0, 5}},
- {1328, {wxSizerItem, new_2_0, 2}},
- {1329, {wxSizerItem, new_6, 6}},
- {1330, {wxSizerItem, new_3, 3}},
- {1331, {wxSizerItem, new_0, 0}},
- {1332, {wxSizerItem, destruct, 0}},
- {1333, {wxSizerItem, calcMin, 0}},
- {1334, {wxSizerItem, deleteWindows, 0}},
- {1335, {wxSizerItem, detachSizer, 0}},
- {1336, {wxSizerItem, getBorder, 0}},
- {1337, {wxSizerItem, getFlag, 0}},
- {1338, {wxSizerItem, getMinSize, 0}},
- {1339, {wxSizerItem, getPosition, 0}},
- {1340, {wxSizerItem, getProportion, 0}},
- {1341, {wxSizerItem, getRatio, 0}},
- {1342, {wxSizerItem, getRect, 0}},
- {1343, {wxSizerItem, getSize, 0}},
- {1344, {wxSizerItem, getSizer, 0}},
- {1345, {wxSizerItem, getSpacer, 0}},
- {1346, {wxSizerItem, getUserData, 0}},
- {1347, {wxSizerItem, getWindow, 0}},
- {1348, {wxSizerItem, isSizer, 0}},
- {1349, {wxSizerItem, isShown, 0}},
- {1350, {wxSizerItem, isSpacer, 0}},
- {1351, {wxSizerItem, isWindow, 0}},
- {1352, {wxSizerItem, setBorder, 1}},
- {1353, {wxSizerItem, setDimension, 2}},
- {1354, {wxSizerItem, setFlag, 1}},
- {1355, {wxSizerItem, setInitSize, 2}},
- {1356, {wxSizerItem, setMinSize_1, 1}},
- {1357, {wxSizerItem, setMinSize_2, 2}},
- {1358, {wxSizerItem, setProportion, 1}},
- {1359, {wxSizerItem, setRatio_2, 2}},
- {1360, {wxSizerItem, setRatio_1_1, 1}},
- {1361, {wxSizerItem, setRatio_1_0, 1}},
- {1362, {wxSizerItem, setSizer, 1}},
- {1363, {wxSizerItem, setSpacer_1, 1}},
- {1364, {wxSizerItem, setSpacer_2, 2}},
- {1365, {wxSizerItem, setWindow, 1}},
- {1366, {wxSizerItem, show, 1}},
- {1367, {wxBoxSizer, new, 1}},
- {1368, {wxBoxSizer, getOrientation, 0}},
- {1369, {wxBoxSizer, 'Destroy', undefined}},
- {1370, {wxStaticBoxSizer, new_2, 2}},
- {1371, {wxStaticBoxSizer, new_3, 3}},
- {1372, {wxStaticBoxSizer, getStaticBox, 0}},
- {1373, {wxStaticBoxSizer, 'Destroy', undefined}},
- {1374, {wxGridSizer, new_4, 4}},
- {1375, {wxGridSizer, new_2, 2}},
- {1376, {wxGridSizer, getCols, 0}},
- {1377, {wxGridSizer, getHGap, 0}},
- {1378, {wxGridSizer, getRows, 0}},
- {1379, {wxGridSizer, getVGap, 0}},
- {1380, {wxGridSizer, setCols, 1}},
- {1381, {wxGridSizer, setHGap, 1}},
- {1382, {wxGridSizer, setRows, 1}},
- {1383, {wxGridSizer, setVGap, 1}},
- {1384, {wxGridSizer, 'Destroy', undefined}},
- {1385, {wxFlexGridSizer, new_4, 4}},
- {1386, {wxFlexGridSizer, new_2, 2}},
- {1387, {wxFlexGridSizer, addGrowableCol, 2}},
- {1388, {wxFlexGridSizer, addGrowableRow, 2}},
- {1389, {wxFlexGridSizer, getFlexibleDirection, 0}},
- {1390, {wxFlexGridSizer, getNonFlexibleGrowMode, 0}},
- {1391, {wxFlexGridSizer, removeGrowableCol, 1}},
- {1392, {wxFlexGridSizer, removeGrowableRow, 1}},
- {1393, {wxFlexGridSizer, setFlexibleDirection, 1}},
- {1394, {wxFlexGridSizer, setNonFlexibleGrowMode, 1}},
- {1395, {wxFlexGridSizer, 'Destroy', undefined}},
- {1396, {wxGridBagSizer, new, 1}},
- {1397, {wxGridBagSizer, add_3_2, 3}},
- {1398, {wxGridBagSizer, add_3_1, 3}},
- {1399, {wxGridBagSizer, add_4, 4}},
- {1400, {wxGridBagSizer, add_1_0, 1}},
- {1401, {wxGridBagSizer, add_2_1, 2}},
- {1402, {wxGridBagSizer, add_2_0, 2}},
- {1403, {wxGridBagSizer, add_3_0, 3}},
- {1404, {wxGridBagSizer, add_1_1, 1}},
- {1405, {wxGridBagSizer, calcMin, 0}},
- {1406, {wxGridBagSizer, checkForIntersection_2, 2}},
- {1407, {wxGridBagSizer, checkForIntersection_3, 3}},
- {1408, {wxGridBagSizer, findItem_1_1, 1}},
- {1409, {wxGridBagSizer, findItem_1_0, 1}},
- {1410, {wxGridBagSizer, findItemAtPoint, 1}},
- {1411, {wxGridBagSizer, findItemAtPosition, 1}},
- {1412, {wxGridBagSizer, findItemWithData, 1}},
- {1413, {wxGridBagSizer, getCellSize, 2}},
- {1414, {wxGridBagSizer, getEmptyCellSize, 0}},
- {1415, {wxGridBagSizer, getItemPosition_1_2, 1}},
- {1416, {wxGridBagSizer, getItemPosition_1_1, 1}},
- {1417, {wxGridBagSizer, getItemPosition_1_0, 1}},
- {1418, {wxGridBagSizer, getItemSpan_1_2, 1}},
- {1419, {wxGridBagSizer, getItemSpan_1_1, 1}},
- {1420, {wxGridBagSizer, getItemSpan_1_0, 1}},
- {1421, {wxGridBagSizer, setEmptyCellSize, 1}},
- {1422, {wxGridBagSizer, setItemPosition_2_2, 2}},
- {1423, {wxGridBagSizer, setItemPosition_2_1, 2}},
- {1424, {wxGridBagSizer, setItemPosition_2_0, 2}},
- {1425, {wxGridBagSizer, setItemSpan_2_2, 2}},
- {1426, {wxGridBagSizer, setItemSpan_2_1, 2}},
- {1427, {wxGridBagSizer, setItemSpan_2_0, 2}},
- {1428, {wxGridBagSizer, 'Destroy', undefined}},
- {1429, {wxStdDialogButtonSizer, new, 0}},
- {1430, {wxStdDialogButtonSizer, addButton, 1}},
- {1431, {wxStdDialogButtonSizer, realize, 0}},
- {1432, {wxStdDialogButtonSizer, setAffirmativeButton, 1}},
- {1433, {wxStdDialogButtonSizer, setCancelButton, 1}},
- {1434, {wxStdDialogButtonSizer, setNegativeButton, 1}},
- {1435, {wxStdDialogButtonSizer, 'Destroy', undefined}},
- {1436, {wxFont, new_0, 0}},
- {1437, {wxFont, new_1, 1}},
- {1438, {wxFont, new_5, 5}},
- {1440, {wxFont, destruct, 0}},
- {1441, {wxFont, isFixedWidth, 0}},
- {1442, {wxFont, getDefaultEncoding, 0}},
- {1443, {wxFont, getFaceName, 0}},
- {1444, {wxFont, getFamily, 0}},
- {1445, {wxFont, getNativeFontInfoDesc, 0}},
- {1446, {wxFont, getNativeFontInfoUserDesc, 0}},
- {1447, {wxFont, getPointSize, 0}},
- {1448, {wxFont, getStyle, 0}},
- {1449, {wxFont, getUnderlined, 0}},
- {1450, {wxFont, getWeight, 0}},
- {1451, {wxFont, ok, 0}},
- {1452, {wxFont, setDefaultEncoding, 1}},
- {1453, {wxFont, setFaceName, 1}},
- {1454, {wxFont, setFamily, 1}},
- {1455, {wxFont, setPointSize, 1}},
- {1456, {wxFont, setStyle, 1}},
- {1457, {wxFont, setUnderlined, 1}},
- {1458, {wxFont, setWeight, 1}},
- {1459, {wxToolTip, enable, 1}},
- {1460, {wxToolTip, setDelay, 1}},
- {1461, {wxToolTip, new, 1}},
- {1462, {wxToolTip, setTip, 1}},
- {1463, {wxToolTip, getTip, 0}},
- {1464, {wxToolTip, getWindow, 0}},
- {1465, {wxToolTip, 'Destroy', undefined}},
- {1467, {wxButton, new_3, 3}},
- {1468, {wxButton, new_0, 0}},
- {1469, {wxButton, destruct, 0}},
- {1470, {wxButton, create, 3}},
- {1471, {wxButton, getDefaultSize, 0}},
- {1472, {wxButton, setDefault, 0}},
- {1473, {wxButton, setLabel, 1}},
- {1475, {wxBitmapButton, new_4, 4}},
- {1476, {wxBitmapButton, new_0, 0}},
- {1477, {wxBitmapButton, create, 4}},
- {1478, {wxBitmapButton, getBitmapDisabled, 0}},
- {1480, {wxBitmapButton, getBitmapFocus, 0}},
- {1482, {wxBitmapButton, getBitmapLabel, 0}},
- {1484, {wxBitmapButton, getBitmapSelected, 0}},
- {1486, {wxBitmapButton, setBitmapDisabled, 1}},
- {1487, {wxBitmapButton, setBitmapFocus, 1}},
- {1488, {wxBitmapButton, setBitmapLabel, 1}},
- {1489, {wxBitmapButton, setBitmapSelected, 1}},
- {1490, {wxBitmapButton, 'Destroy', undefined}},
- {1491, {wxToggleButton, new_0, 0}},
- {1492, {wxToggleButton, new_4, 4}},
- {1493, {wxToggleButton, create, 4}},
- {1494, {wxToggleButton, getValue, 0}},
- {1495, {wxToggleButton, setValue, 1}},
- {1496, {wxToggleButton, 'Destroy', undefined}},
- {1497, {wxCalendarCtrl, new_0, 0}},
- {1498, {wxCalendarCtrl, new_3, 3}},
- {1499, {wxCalendarCtrl, create, 3}},
- {1500, {wxCalendarCtrl, destruct, 0}},
- {1501, {wxCalendarCtrl, setDate, 1}},
- {1502, {wxCalendarCtrl, getDate, 0}},
- {1503, {wxCalendarCtrl, enableYearChange, 1}},
- {1504, {wxCalendarCtrl, enableMonthChange, 1}},
- {1505, {wxCalendarCtrl, enableHolidayDisplay, 1}},
- {1506, {wxCalendarCtrl, setHeaderColours, 2}},
- {1507, {wxCalendarCtrl, getHeaderColourFg, 0}},
- {1508, {wxCalendarCtrl, getHeaderColourBg, 0}},
- {1509, {wxCalendarCtrl, setHighlightColours, 2}},
- {1510, {wxCalendarCtrl, getHighlightColourFg, 0}},
- {1511, {wxCalendarCtrl, getHighlightColourBg, 0}},
- {1512, {wxCalendarCtrl, setHolidayColours, 2}},
- {1513, {wxCalendarCtrl, getHolidayColourFg, 0}},
- {1514, {wxCalendarCtrl, getHolidayColourBg, 0}},
- {1515, {wxCalendarCtrl, getAttr, 1}},
- {1516, {wxCalendarCtrl, setAttr, 2}},
- {1517, {wxCalendarCtrl, setHoliday, 1}},
- {1518, {wxCalendarCtrl, resetAttr, 1}},
- {1519, {wxCalendarCtrl, hitTest, 2}},
- {1520, {wxCalendarDateAttr, new_0, 0}},
- {1521, {wxCalendarDateAttr, new_2_1, 2}},
- {1522, {wxCalendarDateAttr, new_2_0, 2}},
- {1523, {wxCalendarDateAttr, setTextColour, 1}},
- {1524, {wxCalendarDateAttr, setBackgroundColour, 1}},
- {1525, {wxCalendarDateAttr, setBorderColour, 1}},
- {1526, {wxCalendarDateAttr, setFont, 1}},
- {1527, {wxCalendarDateAttr, setBorder, 1}},
- {1528, {wxCalendarDateAttr, setHoliday, 1}},
- {1529, {wxCalendarDateAttr, hasTextColour, 0}},
- {1530, {wxCalendarDateAttr, hasBackgroundColour, 0}},
- {1531, {wxCalendarDateAttr, hasBorderColour, 0}},
- {1532, {wxCalendarDateAttr, hasFont, 0}},
- {1533, {wxCalendarDateAttr, hasBorder, 0}},
- {1534, {wxCalendarDateAttr, isHoliday, 0}},
- {1535, {wxCalendarDateAttr, getTextColour, 0}},
- {1536, {wxCalendarDateAttr, getBackgroundColour, 0}},
- {1537, {wxCalendarDateAttr, getBorderColour, 0}},
- {1538, {wxCalendarDateAttr, getFont, 0}},
- {1539, {wxCalendarDateAttr, getBorder, 0}},
- {1540, {wxCalendarDateAttr, 'Destroy', undefined}},
- {1542, {wxCheckBox, new_4, 4}},
- {1543, {wxCheckBox, new_0, 0}},
- {1544, {wxCheckBox, create, 4}},
- {1545, {wxCheckBox, getValue, 0}},
- {1546, {wxCheckBox, get3StateValue, 0}},
- {1547, {wxCheckBox, is3rdStateAllowedForUser, 0}},
- {1548, {wxCheckBox, is3State, 0}},
- {1549, {wxCheckBox, isChecked, 0}},
- {1550, {wxCheckBox, setValue, 1}},
- {1551, {wxCheckBox, set3StateValue, 1}},
- {1552, {wxCheckBox, 'Destroy', undefined}},
- {1553, {wxCheckListBox, new_0, 0}},
- {1555, {wxCheckListBox, new_3, 3}},
- {1556, {wxCheckListBox, check, 2}},
- {1557, {wxCheckListBox, isChecked, 1}},
- {1558, {wxCheckListBox, 'Destroy', undefined}},
- {1561, {wxChoice, new_3, 3}},
- {1562, {wxChoice, new_0, 0}},
- {1564, {wxChoice, destruct, 0}},
- {1566, {wxChoice, create, 6}},
- {1567, {wxChoice, delete, 1}},
- {1568, {wxChoice, getColumns, 0}},
- {1569, {wxChoice, setColumns, 1}},
- {1570, {wxComboBox, new_0, 0}},
- {1572, {wxComboBox, new_3, 3}},
- {1573, {wxComboBox, destruct, 0}},
- {1575, {wxComboBox, create, 7}},
- {1576, {wxComboBox, canCopy, 0}},
- {1577, {wxComboBox, canCut, 0}},
- {1578, {wxComboBox, canPaste, 0}},
- {1579, {wxComboBox, canRedo, 0}},
- {1580, {wxComboBox, canUndo, 0}},
- {1581, {wxComboBox, copy, 0}},
- {1582, {wxComboBox, cut, 0}},
- {1583, {wxComboBox, getInsertionPoint, 0}},
- {1584, {wxComboBox, getLastPosition, 0}},
- {1585, {wxComboBox, getValue, 0}},
- {1586, {wxComboBox, paste, 0}},
- {1587, {wxComboBox, redo, 0}},
- {1588, {wxComboBox, replace, 3}},
- {1589, {wxComboBox, remove, 2}},
- {1590, {wxComboBox, setInsertionPoint, 1}},
- {1591, {wxComboBox, setInsertionPointEnd, 0}},
- {1592, {wxComboBox, setSelection_1, 1}},
- {1593, {wxComboBox, setSelection_2, 2}},
- {1594, {wxComboBox, setValue, 1}},
- {1595, {wxComboBox, undo, 0}},
- {1596, {wxGauge, new_0, 0}},
- {1597, {wxGauge, new_4, 4}},
- {1598, {wxGauge, create, 4}},
- {1599, {wxGauge, getBezelFace, 0}},
- {1600, {wxGauge, getRange, 0}},
- {1601, {wxGauge, getShadowWidth, 0}},
- {1602, {wxGauge, getValue, 0}},
- {1603, {wxGauge, isVertical, 0}},
- {1604, {wxGauge, setBezelFace, 1}},
- {1605, {wxGauge, setRange, 1}},
- {1606, {wxGauge, setShadowWidth, 1}},
- {1607, {wxGauge, setValue, 1}},
- {1608, {wxGauge, pulse, 0}},
- {1609, {wxGauge, 'Destroy', undefined}},
- {1610, {wxGenericDirCtrl, new_0, 0}},
- {1611, {wxGenericDirCtrl, new_2, 2}},
- {1612, {wxGenericDirCtrl, destruct, 0}},
- {1613, {wxGenericDirCtrl, create, 2}},
- {1614, {wxGenericDirCtrl, init, 0}},
- {1615, {wxGenericDirCtrl, collapseTree, 0}},
- {1616, {wxGenericDirCtrl, expandPath, 1}},
- {1617, {wxGenericDirCtrl, getDefaultPath, 0}},
- {1618, {wxGenericDirCtrl, getPath, 0}},
- {1619, {wxGenericDirCtrl, getFilePath, 0}},
- {1620, {wxGenericDirCtrl, getFilter, 0}},
- {1621, {wxGenericDirCtrl, getFilterIndex, 0}},
- {1622, {wxGenericDirCtrl, getRootId, 0}},
- {1623, {wxGenericDirCtrl, getTreeCtrl, 0}},
- {1624, {wxGenericDirCtrl, reCreateTree, 0}},
- {1625, {wxGenericDirCtrl, setDefaultPath, 1}},
- {1626, {wxGenericDirCtrl, setFilter, 1}},
- {1627, {wxGenericDirCtrl, setFilterIndex, 1}},
- {1628, {wxGenericDirCtrl, setPath, 1}},
- {1630, {wxStaticBox, new_4, 4}},
- {1631, {wxStaticBox, new_0, 0}},
- {1632, {wxStaticBox, create, 4}},
- {1633, {wxStaticBox, 'Destroy', undefined}},
- {1635, {wxStaticLine, new_2, 2}},
- {1636, {wxStaticLine, new_0, 0}},
- {1637, {wxStaticLine, create, 2}},
- {1638, {wxStaticLine, isVertical, 0}},
- {1639, {wxStaticLine, getDefaultSize, 0}},
- {1640, {wxStaticLine, 'Destroy', undefined}},
- {1643, {wxListBox, new_3, 3}},
- {1644, {wxListBox, new_0, 0}},
- {1646, {wxListBox, destruct, 0}},
- {1648, {wxListBox, create, 6}},
- {1649, {wxListBox, deselect, 1}},
- {1650, {wxListBox, getSelections, 1}},
- {1651, {wxListBox, insertItems, 2}},
- {1652, {wxListBox, isSelected, 1}},
- {1654, {wxListBox, set, 2}},
- {1655, {wxListBox, hitTest, 1}},
- {1656, {wxListBox, setFirstItem_1_0, 1}},
- {1657, {wxListBox, setFirstItem_1_1, 1}},
- {1658, {wxListCtrl, new_0, 0}},
- {1659, {wxListCtrl, new_2, 2}},
- {1660, {wxListCtrl, arrange, 1}},
- {1661, {wxListCtrl, assignImageList, 2}},
- {1662, {wxListCtrl, clearAll, 0}},
- {1663, {wxListCtrl, create, 2}},
- {1664, {wxListCtrl, deleteAllItems, 0}},
- {1665, {wxListCtrl, deleteColumn, 1}},
- {1666, {wxListCtrl, deleteItem, 1}},
- {1667, {wxListCtrl, editLabel, 1}},
- {1668, {wxListCtrl, ensureVisible, 1}},
- {1669, {wxListCtrl, findItem_3_0, 3}},
- {1670, {wxListCtrl, findItem_3_1, 3}},
- {1671, {wxListCtrl, getColumn, 2}},
- {1672, {wxListCtrl, getColumnCount, 0}},
- {1673, {wxListCtrl, getColumnWidth, 1}},
- {1674, {wxListCtrl, getCountPerPage, 0}},
- {1675, {wxListCtrl, getEditControl, 0}},
- {1676, {wxListCtrl, getImageList, 1}},
- {1677, {wxListCtrl, getItem, 1}},
- {1678, {wxListCtrl, getItemBackgroundColour, 1}},
- {1679, {wxListCtrl, getItemCount, 0}},
- {1680, {wxListCtrl, getItemData, 1}},
- {1681, {wxListCtrl, getItemFont, 1}},
- {1682, {wxListCtrl, getItemPosition, 2}},
- {1683, {wxListCtrl, getItemRect, 3}},
- {1684, {wxListCtrl, getItemSpacing, 0}},
- {1685, {wxListCtrl, getItemState, 2}},
- {1686, {wxListCtrl, getItemText, 1}},
- {1687, {wxListCtrl, getItemTextColour, 1}},
- {1688, {wxListCtrl, getNextItem, 2}},
- {1689, {wxListCtrl, getSelectedItemCount, 0}},
- {1690, {wxListCtrl, getTextColour, 0}},
- {1691, {wxListCtrl, getTopItem, 0}},
- {1692, {wxListCtrl, getViewRect, 0}},
- {1693, {wxListCtrl, hitTest, 2}},
- {1694, {wxListCtrl, insertColumn_2, 2}},
- {1695, {wxListCtrl, insertColumn_3, 3}},
- {1696, {wxListCtrl, insertItem_1, 1}},
- {1697, {wxListCtrl, insertItem_2_1, 2}},
- {1698, {wxListCtrl, insertItem_2_0, 2}},
- {1699, {wxListCtrl, insertItem_3, 3}},
- {1700, {wxListCtrl, refreshItem, 1}},
- {1701, {wxListCtrl, refreshItems, 2}},
- {1702, {wxListCtrl, scrollList, 2}},
- {1703, {wxListCtrl, setBackgroundColour, 1}},
- {1704, {wxListCtrl, setColumn, 2}},
- {1705, {wxListCtrl, setColumnWidth, 2}},
- {1706, {wxListCtrl, setImageList, 2}},
- {1707, {wxListCtrl, setItem_1, 1}},
- {1708, {wxListCtrl, setItem_4, 4}},
- {1709, {wxListCtrl, setItemBackgroundColour, 2}},
- {1710, {wxListCtrl, setItemCount, 1}},
- {1711, {wxListCtrl, setItemData, 2}},
- {1712, {wxListCtrl, setItemFont, 2}},
- {1713, {wxListCtrl, setItemImage, 3}},
- {1714, {wxListCtrl, setItemColumnImage, 3}},
- {1715, {wxListCtrl, setItemPosition, 2}},
- {1716, {wxListCtrl, setItemState, 3}},
- {1717, {wxListCtrl, setItemText, 2}},
- {1718, {wxListCtrl, setItemTextColour, 2}},
- {1719, {wxListCtrl, setSingleStyle, 2}},
- {1720, {wxListCtrl, setTextColour, 1}},
- {1721, {wxListCtrl, setWindowStyleFlag, 1}},
- {1722, {wxListCtrl, sortItems, 2}},
- {1723, {wxListCtrl, 'Destroy', undefined}},
- {1724, {wxListView, clearColumnImage, 1}},
- {1725, {wxListView, focus, 1}},
- {1726, {wxListView, getFirstSelected, 0}},
- {1727, {wxListView, getFocusedItem, 0}},
- {1728, {wxListView, getNextSelected, 1}},
- {1729, {wxListView, isSelected, 1}},
- {1730, {wxListView, select, 2}},
- {1731, {wxListView, setColumnImage, 2}},
- {1732, {wxListItem, new_0, 0}},
- {1733, {wxListItem, new_1, 1}},
- {1734, {wxListItem, destruct, 0}},
- {1735, {wxListItem, clear, 0}},
- {1736, {wxListItem, getAlign, 0}},
- {1737, {wxListItem, getBackgroundColour, 0}},
- {1738, {wxListItem, getColumn, 0}},
- {1739, {wxListItem, getFont, 0}},
- {1740, {wxListItem, getId, 0}},
- {1741, {wxListItem, getImage, 0}},
- {1742, {wxListItem, getMask, 0}},
- {1743, {wxListItem, getState, 0}},
- {1744, {wxListItem, getText, 0}},
- {1745, {wxListItem, getTextColour, 0}},
- {1746, {wxListItem, getWidth, 0}},
- {1747, {wxListItem, setAlign, 1}},
- {1748, {wxListItem, setBackgroundColour, 1}},
- {1749, {wxListItem, setColumn, 1}},
- {1750, {wxListItem, setFont, 1}},
- {1751, {wxListItem, setId, 1}},
- {1752, {wxListItem, setImage, 1}},
- {1753, {wxListItem, setMask, 1}},
- {1754, {wxListItem, setState, 1}},
- {1755, {wxListItem, setStateMask, 1}},
- {1756, {wxListItem, setText, 1}},
- {1757, {wxListItem, setTextColour, 1}},
- {1758, {wxListItem, setWidth, 1}},
- {1759, {wxImageList, new_0, 0}},
- {1760, {wxImageList, new_3, 3}},
- {1761, {wxImageList, add_1, 1}},
- {1762, {wxImageList, add_2_0, 2}},
- {1763, {wxImageList, add_2_1, 2}},
- {1764, {wxImageList, create, 3}},
- {1766, {wxImageList, draw, 5}},
- {1767, {wxImageList, getBitmap, 1}},
- {1768, {wxImageList, getIcon, 1}},
- {1769, {wxImageList, getImageCount, 0}},
- {1770, {wxImageList, getSize, 3}},
- {1771, {wxImageList, remove, 1}},
- {1772, {wxImageList, removeAll, 0}},
- {1773, {wxImageList, replace_2, 2}},
- {1774, {wxImageList, replace_3, 3}},
- {1775, {wxImageList, 'Destroy', undefined}},
- {1776, {wxTextAttr, new_0, 0}},
- {1777, {wxTextAttr, new_2, 2}},
- {1778, {wxTextAttr, getAlignment, 0}},
- {1779, {wxTextAttr, getBackgroundColour, 0}},
- {1780, {wxTextAttr, getFont, 0}},
- {1781, {wxTextAttr, getLeftIndent, 0}},
- {1782, {wxTextAttr, getLeftSubIndent, 0}},
- {1783, {wxTextAttr, getRightIndent, 0}},
- {1784, {wxTextAttr, getTabs, 0}},
- {1785, {wxTextAttr, getTextColour, 0}},
- {1786, {wxTextAttr, hasBackgroundColour, 0}},
- {1787, {wxTextAttr, hasFont, 0}},
- {1788, {wxTextAttr, hasTextColour, 0}},
- {1789, {wxTextAttr, getFlags, 0}},
- {1790, {wxTextAttr, isDefault, 0}},
- {1791, {wxTextAttr, setAlignment, 1}},
- {1792, {wxTextAttr, setBackgroundColour, 1}},
- {1793, {wxTextAttr, setFlags, 1}},
- {1794, {wxTextAttr, setFont, 2}},
- {1795, {wxTextAttr, setLeftIndent, 2}},
- {1796, {wxTextAttr, setRightIndent, 1}},
- {1797, {wxTextAttr, setTabs, 1}},
- {1798, {wxTextAttr, setTextColour, 1}},
- {1799, {wxTextAttr, 'Destroy', undefined}},
- {1801, {wxTextCtrl, new_3, 3}},
- {1802, {wxTextCtrl, new_0, 0}},
- {1804, {wxTextCtrl, destruct, 0}},
- {1805, {wxTextCtrl, appendText, 1}},
- {1806, {wxTextCtrl, canCopy, 0}},
- {1807, {wxTextCtrl, canCut, 0}},
- {1808, {wxTextCtrl, canPaste, 0}},
- {1809, {wxTextCtrl, canRedo, 0}},
- {1810, {wxTextCtrl, canUndo, 0}},
- {1811, {wxTextCtrl, clear, 0}},
- {1812, {wxTextCtrl, copy, 0}},
- {1813, {wxTextCtrl, create, 3}},
- {1814, {wxTextCtrl, cut, 0}},
- {1815, {wxTextCtrl, discardEdits, 0}},
- {1816, {wxTextCtrl, emulateKeyPress, 1}},
- {1817, {wxTextCtrl, getDefaultStyle, 0}},
- {1818, {wxTextCtrl, getInsertionPoint, 0}},
- {1819, {wxTextCtrl, getLastPosition, 0}},
- {1820, {wxTextCtrl, getLineLength, 1}},
- {1821, {wxTextCtrl, getLineText, 1}},
- {1822, {wxTextCtrl, getNumberOfLines, 0}},
- {1823, {wxTextCtrl, getRange, 2}},
- {1824, {wxTextCtrl, getSelection, 2}},
- {1825, {wxTextCtrl, getStringSelection, 0}},
- {1826, {wxTextCtrl, getStyle, 2}},
- {1827, {wxTextCtrl, getValue, 0}},
- {1828, {wxTextCtrl, isEditable, 0}},
- {1829, {wxTextCtrl, isModified, 0}},
- {1830, {wxTextCtrl, isMultiLine, 0}},
- {1831, {wxTextCtrl, isSingleLine, 0}},
- {1832, {wxTextCtrl, loadFile, 2}},
- {1833, {wxTextCtrl, markDirty, 0}},
- {1834, {wxTextCtrl, paste, 0}},
- {1835, {wxTextCtrl, positionToXY, 3}},
- {1836, {wxTextCtrl, redo, 0}},
- {1837, {wxTextCtrl, remove, 2}},
- {1838, {wxTextCtrl, replace, 3}},
- {1839, {wxTextCtrl, saveFile, 1}},
- {1840, {wxTextCtrl, setDefaultStyle, 1}},
- {1841, {wxTextCtrl, setEditable, 1}},
- {1842, {wxTextCtrl, setInsertionPoint, 1}},
- {1843, {wxTextCtrl, setInsertionPointEnd, 0}},
- {1845, {wxTextCtrl, setMaxLength, 1}},
- {1846, {wxTextCtrl, setSelection, 2}},
- {1847, {wxTextCtrl, setStyle, 3}},
- {1848, {wxTextCtrl, setValue, 1}},
- {1849, {wxTextCtrl, showPosition, 1}},
- {1850, {wxTextCtrl, undo, 0}},
- {1851, {wxTextCtrl, writeText, 1}},
- {1852, {wxTextCtrl, xYToPosition, 2}},
- {1855, {wxNotebook, new_0, 0}},
- {1856, {wxNotebook, new_3, 3}},
- {1857, {wxNotebook, destruct, 0}},
- {1858, {wxNotebook, addPage, 3}},
- {1859, {wxNotebook, advanceSelection, 1}},
- {1860, {wxNotebook, assignImageList, 1}},
- {1861, {wxNotebook, create, 3}},
- {1862, {wxNotebook, deleteAllPages, 0}},
- {1863, {wxNotebook, deletePage, 1}},
- {1864, {wxNotebook, removePage, 1}},
- {1865, {wxNotebook, getCurrentPage, 0}},
- {1866, {wxNotebook, getImageList, 0}},
- {1868, {wxNotebook, getPage, 1}},
- {1869, {wxNotebook, getPageCount, 0}},
- {1870, {wxNotebook, getPageImage, 1}},
- {1871, {wxNotebook, getPageText, 1}},
- {1872, {wxNotebook, getRowCount, 0}},
- {1873, {wxNotebook, getSelection, 0}},
- {1874, {wxNotebook, getThemeBackgroundColour, 0}},
- {1876, {wxNotebook, hitTest, 2}},
- {1878, {wxNotebook, insertPage, 4}},
- {1879, {wxNotebook, setImageList, 1}},
- {1880, {wxNotebook, setPadding, 1}},
- {1881, {wxNotebook, setPageSize, 1}},
- {1882, {wxNotebook, setPageImage, 2}},
- {1883, {wxNotebook, setPageText, 2}},
- {1884, {wxNotebook, setSelection, 1}},
- {1885, {wxNotebook, changeSelection, 1}},
- {1886, {wxChoicebook, new_0, 0}},
- {1887, {wxChoicebook, new_3, 3}},
- {1888, {wxChoicebook, addPage, 3}},
- {1889, {wxChoicebook, advanceSelection, 1}},
- {1890, {wxChoicebook, assignImageList, 1}},
- {1891, {wxChoicebook, create, 3}},
- {1892, {wxChoicebook, deleteAllPages, 0}},
- {1893, {wxChoicebook, deletePage, 1}},
- {1894, {wxChoicebook, removePage, 1}},
- {1895, {wxChoicebook, getCurrentPage, 0}},
- {1896, {wxChoicebook, getImageList, 0}},
- {1898, {wxChoicebook, getPage, 1}},
- {1899, {wxChoicebook, getPageCount, 0}},
- {1900, {wxChoicebook, getPageImage, 1}},
- {1901, {wxChoicebook, getPageText, 1}},
- {1902, {wxChoicebook, getSelection, 0}},
- {1903, {wxChoicebook, hitTest, 2}},
- {1904, {wxChoicebook, insertPage, 4}},
- {1905, {wxChoicebook, setImageList, 1}},
- {1906, {wxChoicebook, setPageSize, 1}},
- {1907, {wxChoicebook, setPageImage, 2}},
- {1908, {wxChoicebook, setPageText, 2}},
- {1909, {wxChoicebook, setSelection, 1}},
- {1910, {wxChoicebook, changeSelection, 1}},
- {1911, {wxChoicebook, 'Destroy', undefined}},
- {1912, {wxToolbook, new_0, 0}},
- {1913, {wxToolbook, new_3, 3}},
- {1914, {wxToolbook, addPage, 3}},
- {1915, {wxToolbook, advanceSelection, 1}},
- {1916, {wxToolbook, assignImageList, 1}},
- {1917, {wxToolbook, create, 3}},
- {1918, {wxToolbook, deleteAllPages, 0}},
- {1919, {wxToolbook, deletePage, 1}},
- {1920, {wxToolbook, removePage, 1}},
- {1921, {wxToolbook, getCurrentPage, 0}},
- {1922, {wxToolbook, getImageList, 0}},
- {1924, {wxToolbook, getPage, 1}},
- {1925, {wxToolbook, getPageCount, 0}},
- {1926, {wxToolbook, getPageImage, 1}},
- {1927, {wxToolbook, getPageText, 1}},
- {1928, {wxToolbook, getSelection, 0}},
- {1930, {wxToolbook, hitTest, 2}},
- {1931, {wxToolbook, insertPage, 4}},
- {1932, {wxToolbook, setImageList, 1}},
- {1933, {wxToolbook, setPageSize, 1}},
- {1934, {wxToolbook, setPageImage, 2}},
- {1935, {wxToolbook, setPageText, 2}},
- {1936, {wxToolbook, setSelection, 1}},
- {1937, {wxToolbook, changeSelection, 1}},
- {1938, {wxToolbook, 'Destroy', undefined}},
- {1939, {wxListbook, new_0, 0}},
- {1940, {wxListbook, new_3, 3}},
- {1941, {wxListbook, addPage, 3}},
- {1942, {wxListbook, advanceSelection, 1}},
- {1943, {wxListbook, assignImageList, 1}},
- {1944, {wxListbook, create, 3}},
- {1945, {wxListbook, deleteAllPages, 0}},
- {1946, {wxListbook, deletePage, 1}},
- {1947, {wxListbook, removePage, 1}},
- {1948, {wxListbook, getCurrentPage, 0}},
- {1949, {wxListbook, getImageList, 0}},
- {1951, {wxListbook, getPage, 1}},
- {1952, {wxListbook, getPageCount, 0}},
- {1953, {wxListbook, getPageImage, 1}},
- {1954, {wxListbook, getPageText, 1}},
- {1955, {wxListbook, getSelection, 0}},
- {1957, {wxListbook, hitTest, 2}},
- {1958, {wxListbook, insertPage, 4}},
- {1959, {wxListbook, setImageList, 1}},
- {1960, {wxListbook, setPageSize, 1}},
- {1961, {wxListbook, setPageImage, 2}},
- {1962, {wxListbook, setPageText, 2}},
- {1963, {wxListbook, setSelection, 1}},
- {1964, {wxListbook, changeSelection, 1}},
- {1965, {wxListbook, 'Destroy', undefined}},
- {1966, {wxTreebook, new_0, 0}},
- {1967, {wxTreebook, new_3, 3}},
- {1968, {wxTreebook, addPage, 3}},
- {1969, {wxTreebook, advanceSelection, 1}},
- {1970, {wxTreebook, assignImageList, 1}},
- {1971, {wxTreebook, create, 3}},
- {1972, {wxTreebook, deleteAllPages, 0}},
- {1973, {wxTreebook, deletePage, 1}},
- {1974, {wxTreebook, removePage, 1}},
- {1975, {wxTreebook, getCurrentPage, 0}},
- {1976, {wxTreebook, getImageList, 0}},
- {1978, {wxTreebook, getPage, 1}},
- {1979, {wxTreebook, getPageCount, 0}},
- {1980, {wxTreebook, getPageImage, 1}},
- {1981, {wxTreebook, getPageText, 1}},
- {1982, {wxTreebook, getSelection, 0}},
- {1983, {wxTreebook, expandNode, 2}},
- {1984, {wxTreebook, isNodeExpanded, 1}},
- {1986, {wxTreebook, hitTest, 2}},
- {1987, {wxTreebook, insertPage, 4}},
- {1988, {wxTreebook, insertSubPage, 4}},
- {1989, {wxTreebook, setImageList, 1}},
- {1990, {wxTreebook, setPageSize, 1}},
- {1991, {wxTreebook, setPageImage, 2}},
- {1992, {wxTreebook, setPageText, 2}},
- {1993, {wxTreebook, setSelection, 1}},
- {1994, {wxTreebook, changeSelection, 1}},
- {1995, {wxTreebook, 'Destroy', undefined}},
- {1998, {wxTreeCtrl, new_2, 2}},
- {1999, {wxTreeCtrl, new_0, 0}},
- {2001, {wxTreeCtrl, destruct, 0}},
- {2002, {wxTreeCtrl, addRoot, 2}},
- {2003, {wxTreeCtrl, appendItem, 3}},
- {2004, {wxTreeCtrl, assignImageList, 1}},
- {2005, {wxTreeCtrl, assignStateImageList, 1}},
- {2006, {wxTreeCtrl, collapse, 1}},
- {2007, {wxTreeCtrl, collapseAndReset, 1}},
- {2008, {wxTreeCtrl, create, 2}},
- {2009, {wxTreeCtrl, delete, 1}},
- {2010, {wxTreeCtrl, deleteAllItems, 0}},
- {2011, {wxTreeCtrl, deleteChildren, 1}},
- {2012, {wxTreeCtrl, ensureVisible, 1}},
- {2013, {wxTreeCtrl, expand, 1}},
- {2014, {wxTreeCtrl, getBoundingRect, 3}},
- {2016, {wxTreeCtrl, getChildrenCount, 2}},
- {2017, {wxTreeCtrl, getCount, 0}},
- {2018, {wxTreeCtrl, getEditControl, 0}},
- {2019, {wxTreeCtrl, getFirstChild, 2}},
- {2020, {wxTreeCtrl, getNextChild, 2}},
- {2021, {wxTreeCtrl, getFirstVisibleItem, 0}},
- {2022, {wxTreeCtrl, getImageList, 0}},
- {2023, {wxTreeCtrl, getIndent, 0}},
- {2024, {wxTreeCtrl, getItemBackgroundColour, 1}},
- {2025, {wxTreeCtrl, getItemData, 1}},
- {2026, {wxTreeCtrl, getItemFont, 1}},
- {2027, {wxTreeCtrl, getItemImage_1, 1}},
- {2028, {wxTreeCtrl, getItemImage_2, 2}},
- {2029, {wxTreeCtrl, getItemText, 1}},
- {2030, {wxTreeCtrl, getItemTextColour, 1}},
- {2031, {wxTreeCtrl, getLastChild, 1}},
- {2032, {wxTreeCtrl, getNextSibling, 1}},
- {2033, {wxTreeCtrl, getNextVisible, 1}},
- {2034, {wxTreeCtrl, getItemParent, 1}},
- {2035, {wxTreeCtrl, getPrevSibling, 1}},
- {2036, {wxTreeCtrl, getPrevVisible, 1}},
- {2037, {wxTreeCtrl, getRootItem, 0}},
- {2038, {wxTreeCtrl, getSelection, 0}},
- {2039, {wxTreeCtrl, getSelections, 1}},
- {2040, {wxTreeCtrl, getStateImageList, 0}},
- {2041, {wxTreeCtrl, hitTest, 1}},
- {2043, {wxTreeCtrl, insertItem, 4}},
- {2044, {wxTreeCtrl, isBold, 1}},
- {2045, {wxTreeCtrl, isExpanded, 1}},
- {2046, {wxTreeCtrl, isSelected, 1}},
- {2047, {wxTreeCtrl, isVisible, 1}},
- {2048, {wxTreeCtrl, itemHasChildren, 1}},
- {2049, {wxTreeCtrl, prependItem, 3}},
- {2050, {wxTreeCtrl, scrollTo, 1}},
- {2051, {wxTreeCtrl, selectItem_1, 1}},
- {2052, {wxTreeCtrl, selectItem_2, 2}},
- {2053, {wxTreeCtrl, setIndent, 1}},
- {2054, {wxTreeCtrl, setImageList, 1}},
- {2055, {wxTreeCtrl, setItemBackgroundColour, 2}},
- {2056, {wxTreeCtrl, setItemBold, 2}},
- {2057, {wxTreeCtrl, setItemData, 2}},
- {2058, {wxTreeCtrl, setItemDropHighlight, 2}},
- {2059, {wxTreeCtrl, setItemFont, 2}},
- {2060, {wxTreeCtrl, setItemHasChildren, 2}},
- {2061, {wxTreeCtrl, setItemImage_2, 2}},
- {2062, {wxTreeCtrl, setItemImage_3, 3}},
- {2063, {wxTreeCtrl, setItemText, 2}},
- {2064, {wxTreeCtrl, setItemTextColour, 2}},
- {2065, {wxTreeCtrl, setStateImageList, 1}},
- {2066, {wxTreeCtrl, setWindowStyle, 1}},
- {2067, {wxTreeCtrl, sortChildren, 1}},
- {2068, {wxTreeCtrl, toggle, 1}},
- {2069, {wxTreeCtrl, toggleItemSelection, 1}},
- {2070, {wxTreeCtrl, unselect, 0}},
- {2071, {wxTreeCtrl, unselectAll, 0}},
- {2072, {wxTreeCtrl, unselectItem, 1}},
- {2073, {wxScrollBar, new_0, 0}},
- {2074, {wxScrollBar, new_3, 3}},
- {2075, {wxScrollBar, destruct, 0}},
- {2076, {wxScrollBar, create, 3}},
- {2077, {wxScrollBar, getRange, 0}},
- {2078, {wxScrollBar, getPageSize, 0}},
- {2079, {wxScrollBar, getThumbPosition, 0}},
- {2080, {wxScrollBar, getThumbSize, 0}},
- {2081, {wxScrollBar, setThumbPosition, 1}},
- {2082, {wxScrollBar, setScrollbar, 5}},
- {2084, {wxSpinButton, new_2, 2}},
- {2085, {wxSpinButton, new_0, 0}},
- {2086, {wxSpinButton, create, 2}},
- {2087, {wxSpinButton, getMax, 0}},
- {2088, {wxSpinButton, getMin, 0}},
- {2089, {wxSpinButton, getValue, 0}},
- {2090, {wxSpinButton, setRange, 2}},
- {2091, {wxSpinButton, setValue, 1}},
- {2092, {wxSpinButton, 'Destroy', undefined}},
- {2093, {wxSpinCtrl, new_0, 0}},
- {2094, {wxSpinCtrl, new_2, 2}},
- {2096, {wxSpinCtrl, create, 2}},
- {2099, {wxSpinCtrl, setValue_1_1, 1}},
- {2100, {wxSpinCtrl, setValue_1_0, 1}},
- {2102, {wxSpinCtrl, getValue, 0}},
- {2104, {wxSpinCtrl, setRange, 2}},
- {2105, {wxSpinCtrl, setSelection, 2}},
- {2107, {wxSpinCtrl, getMin, 0}},
- {2109, {wxSpinCtrl, getMax, 0}},
- {2110, {wxSpinCtrl, 'Destroy', undefined}},
- {2111, {wxStaticText, new_0, 0}},
- {2112, {wxStaticText, new_4, 4}},
- {2113, {wxStaticText, create, 4}},
- {2114, {wxStaticText, getLabel, 0}},
- {2115, {wxStaticText, setLabel, 1}},
- {2116, {wxStaticText, wrap, 1}},
- {2117, {wxStaticText, 'Destroy', undefined}},
- {2118, {wxStaticBitmap, new_0, 0}},
- {2119, {wxStaticBitmap, new_4, 4}},
- {2120, {wxStaticBitmap, create, 4}},
- {2121, {wxStaticBitmap, getBitmap, 0}},
- {2122, {wxStaticBitmap, setBitmap, 1}},
- {2123, {wxStaticBitmap, 'Destroy', undefined}},
- {2124, {wxRadioBox, new, 7}},
- {2126, {wxRadioBox, destruct, 0}},
- {2127, {wxRadioBox, create, 7}},
- {2128, {wxRadioBox, enable_2, 2}},
- {2129, {wxRadioBox, enable_1, 1}},
- {2130, {wxRadioBox, getSelection, 0}},
- {2131, {wxRadioBox, getString, 1}},
- {2132, {wxRadioBox, setSelection, 1}},
- {2133, {wxRadioBox, show_2, 2}},
- {2134, {wxRadioBox, show_1, 1}},
- {2135, {wxRadioBox, getColumnCount, 0}},
- {2136, {wxRadioBox, getItemHelpText, 1}},
- {2137, {wxRadioBox, getItemToolTip, 1}},
- {2139, {wxRadioBox, getItemFromPoint, 1}},
- {2140, {wxRadioBox, getRowCount, 0}},
- {2141, {wxRadioBox, isItemEnabled, 1}},
- {2142, {wxRadioBox, isItemShown, 1}},
- {2143, {wxRadioBox, setItemHelpText, 2}},
- {2144, {wxRadioBox, setItemToolTip, 2}},
- {2145, {wxRadioButton, new_0, 0}},
- {2146, {wxRadioButton, new_4, 4}},
- {2147, {wxRadioButton, create, 4}},
- {2148, {wxRadioButton, getValue, 0}},
- {2149, {wxRadioButton, setValue, 1}},
- {2150, {wxRadioButton, 'Destroy', undefined}},
- {2152, {wxSlider, new_6, 6}},
- {2153, {wxSlider, new_0, 0}},
- {2154, {wxSlider, create, 6}},
- {2155, {wxSlider, getLineSize, 0}},
- {2156, {wxSlider, getMax, 0}},
- {2157, {wxSlider, getMin, 0}},
- {2158, {wxSlider, getPageSize, 0}},
- {2159, {wxSlider, getThumbLength, 0}},
- {2160, {wxSlider, getValue, 0}},
- {2161, {wxSlider, setLineSize, 1}},
- {2162, {wxSlider, setPageSize, 1}},
- {2163, {wxSlider, setRange, 2}},
- {2164, {wxSlider, setThumbLength, 1}},
- {2165, {wxSlider, setValue, 1}},
- {2166, {wxSlider, 'Destroy', undefined}},
- {2168, {wxDialog, new_4, 4}},
- {2169, {wxDialog, new_0, 0}},
- {2171, {wxDialog, destruct, 0}},
- {2172, {wxDialog, create, 4}},
- {2173, {wxDialog, createButtonSizer, 1}},
- {2174, {wxDialog, createStdDialogButtonSizer, 1}},
- {2175, {wxDialog, endModal, 1}},
- {2176, {wxDialog, getAffirmativeId, 0}},
- {2177, {wxDialog, getReturnCode, 0}},
- {2178, {wxDialog, isModal, 0}},
- {2179, {wxDialog, setAffirmativeId, 1}},
- {2180, {wxDialog, setReturnCode, 1}},
- {2181, {wxDialog, show, 1}},
- {2182, {wxDialog, showModal, 0}},
- {2183, {wxColourDialog, new_0, 0}},
- {2184, {wxColourDialog, new_2, 2}},
- {2185, {wxColourDialog, destruct, 0}},
- {2186, {wxColourDialog, create, 2}},
- {2187, {wxColourDialog, getColourData, 0}},
- {2188, {wxColourData, new_0, 0}},
- {2189, {wxColourData, new_1, 1}},
- {2190, {wxColourData, destruct, 0}},
- {2191, {wxColourData, getChooseFull, 0}},
- {2192, {wxColourData, getColour, 0}},
- {2194, {wxColourData, getCustomColour, 1}},
- {2195, {wxColourData, setChooseFull, 1}},
- {2196, {wxColourData, setColour, 1}},
- {2197, {wxColourData, setCustomColour, 2}},
- {2198, {wxPalette, new_0, 0}},
- {2199, {wxPalette, new_4, 4}},
- {2201, {wxPalette, destruct, 0}},
- {2202, {wxPalette, create, 4}},
- {2203, {wxPalette, getColoursCount, 0}},
- {2204, {wxPalette, getPixel, 3}},
- {2205, {wxPalette, getRGB, 4}},
- {2206, {wxPalette, isOk, 0}},
- {2210, {wxDirDialog, new, 2}},
- {2211, {wxDirDialog, destruct, 0}},
- {2212, {wxDirDialog, getPath, 0}},
- {2213, {wxDirDialog, getMessage, 0}},
- {2214, {wxDirDialog, setMessage, 1}},
- {2215, {wxDirDialog, setPath, 1}},
- {2219, {wxFileDialog, new, 2}},
- {2220, {wxFileDialog, destruct, 0}},
- {2221, {wxFileDialog, getDirectory, 0}},
- {2222, {wxFileDialog, getFilename, 0}},
- {2223, {wxFileDialog, getFilenames, 1}},
- {2224, {wxFileDialog, getFilterIndex, 0}},
- {2225, {wxFileDialog, getMessage, 0}},
- {2226, {wxFileDialog, getPath, 0}},
- {2227, {wxFileDialog, getPaths, 1}},
- {2228, {wxFileDialog, getWildcard, 0}},
- {2229, {wxFileDialog, setDirectory, 1}},
- {2230, {wxFileDialog, setFilename, 1}},
- {2231, {wxFileDialog, setFilterIndex, 1}},
- {2232, {wxFileDialog, setMessage, 1}},
- {2233, {wxFileDialog, setPath, 1}},
- {2234, {wxFileDialog, setWildcard, 1}},
- {2235, {wxPickerBase, setInternalMargin, 1}},
- {2236, {wxPickerBase, getInternalMargin, 0}},
- {2237, {wxPickerBase, setTextCtrlProportion, 1}},
- {2238, {wxPickerBase, setPickerCtrlProportion, 1}},
- {2239, {wxPickerBase, getTextCtrlProportion, 0}},
- {2240, {wxPickerBase, getPickerCtrlProportion, 0}},
- {2241, {wxPickerBase, hasTextCtrl, 0}},
- {2242, {wxPickerBase, getTextCtrl, 0}},
- {2243, {wxPickerBase, isTextCtrlGrowable, 0}},
- {2244, {wxPickerBase, setPickerCtrlGrowable, 1}},
- {2245, {wxPickerBase, setTextCtrlGrowable, 1}},
- {2246, {wxPickerBase, isPickerCtrlGrowable, 0}},
- {2247, {wxFilePickerCtrl, new_0, 0}},
- {2248, {wxFilePickerCtrl, new_3, 3}},
- {2249, {wxFilePickerCtrl, create, 3}},
- {2250, {wxFilePickerCtrl, getPath, 0}},
- {2251, {wxFilePickerCtrl, setPath, 1}},
- {2252, {wxFilePickerCtrl, 'Destroy', undefined}},
- {2253, {wxDirPickerCtrl, new_0, 0}},
- {2254, {wxDirPickerCtrl, new_3, 3}},
- {2255, {wxDirPickerCtrl, create, 3}},
- {2256, {wxDirPickerCtrl, getPath, 0}},
- {2257, {wxDirPickerCtrl, setPath, 1}},
- {2258, {wxDirPickerCtrl, 'Destroy', undefined}},
- {2259, {wxColourPickerCtrl, new_0, 0}},
- {2260, {wxColourPickerCtrl, new_3, 3}},
- {2261, {wxColourPickerCtrl, create, 3}},
- {2262, {wxColourPickerCtrl, getColour, 0}},
- {2263, {wxColourPickerCtrl, setColour_1_1, 1}},
- {2264, {wxColourPickerCtrl, setColour_1_0, 1}},
- {2265, {wxColourPickerCtrl, 'Destroy', undefined}},
- {2266, {wxDatePickerCtrl, new_0, 0}},
- {2267, {wxDatePickerCtrl, new_3, 3}},
- {2268, {wxDatePickerCtrl, getRange, 2}},
- {2269, {wxDatePickerCtrl, getValue, 0}},
- {2270, {wxDatePickerCtrl, setRange, 2}},
- {2271, {wxDatePickerCtrl, setValue, 1}},
- {2272, {wxDatePickerCtrl, 'Destroy', undefined}},
- {2273, {wxFontPickerCtrl, new_0, 0}},
- {2274, {wxFontPickerCtrl, new_3, 3}},
- {2275, {wxFontPickerCtrl, create, 3}},
- {2276, {wxFontPickerCtrl, getSelectedFont, 0}},
- {2277, {wxFontPickerCtrl, setSelectedFont, 1}},
- {2278, {wxFontPickerCtrl, getMaxPointSize, 0}},
- {2279, {wxFontPickerCtrl, setMaxPointSize, 1}},
- {2280, {wxFontPickerCtrl, 'Destroy', undefined}},
- {2283, {wxFindReplaceDialog, new_0, 0}},
- {2284, {wxFindReplaceDialog, new_4, 4}},
- {2285, {wxFindReplaceDialog, destruct, 0}},
- {2286, {wxFindReplaceDialog, create, 4}},
- {2287, {wxFindReplaceDialog, getData, 0}},
- {2288, {wxFindReplaceData, new_0, 0}},
- {2289, {wxFindReplaceData, new_1, 1}},
- {2290, {wxFindReplaceData, getFindString, 0}},
- {2291, {wxFindReplaceData, getReplaceString, 0}},
- {2292, {wxFindReplaceData, getFlags, 0}},
- {2293, {wxFindReplaceData, setFlags, 1}},
- {2294, {wxFindReplaceData, setFindString, 1}},
- {2295, {wxFindReplaceData, setReplaceString, 1}},
- {2296, {wxFindReplaceData, 'Destroy', undefined}},
- {2297, {wxMultiChoiceDialog, new_0, 0}},
- {2299, {wxMultiChoiceDialog, new_5, 5}},
- {2300, {wxMultiChoiceDialog, getSelections, 0}},
- {2301, {wxMultiChoiceDialog, setSelections, 1}},
- {2302, {wxMultiChoiceDialog, 'Destroy', undefined}},
- {2303, {wxSingleChoiceDialog, new_0, 0}},
- {2305, {wxSingleChoiceDialog, new_5, 5}},
- {2306, {wxSingleChoiceDialog, getSelection, 0}},
- {2307, {wxSingleChoiceDialog, getStringSelection, 0}},
- {2308, {wxSingleChoiceDialog, setSelection, 1}},
- {2309, {wxSingleChoiceDialog, 'Destroy', undefined}},
- {2310, {wxTextEntryDialog, new, 3}},
- {2311, {wxTextEntryDialog, getValue, 0}},
- {2312, {wxTextEntryDialog, setValue, 1}},
- {2313, {wxTextEntryDialog, 'Destroy', undefined}},
- {2314, {wxPasswordEntryDialog, new, 3}},
- {2315, {wxPasswordEntryDialog, 'Destroy', undefined}},
- {2316, {wxFontData, new_0, 0}},
- {2317, {wxFontData, new_1, 1}},
- {2318, {wxFontData, destruct, 0}},
- {2319, {wxFontData, enableEffects, 1}},
- {2320, {wxFontData, getAllowSymbols, 0}},
- {2321, {wxFontData, getColour, 0}},
- {2322, {wxFontData, getChosenFont, 0}},
- {2323, {wxFontData, getEnableEffects, 0}},
- {2324, {wxFontData, getInitialFont, 0}},
- {2325, {wxFontData, getShowHelp, 0}},
- {2326, {wxFontData, setAllowSymbols, 1}},
- {2327, {wxFontData, setChosenFont, 1}},
- {2328, {wxFontData, setColour, 1}},
- {2329, {wxFontData, setInitialFont, 1}},
- {2330, {wxFontData, setRange, 2}},
- {2331, {wxFontData, setShowHelp, 1}},
- {2335, {wxFontDialog, new_0, 0}},
- {2337, {wxFontDialog, new_2, 2}},
- {2339, {wxFontDialog, create, 2}},
- {2340, {wxFontDialog, getFontData, 0}},
- {2342, {wxFontDialog, 'Destroy', undefined}},
- {2343, {wxProgressDialog, new, 3}},
- {2344, {wxProgressDialog, destruct, 0}},
- {2345, {wxProgressDialog, resume, 0}},
- {2346, {wxProgressDialog, update_2, 2}},
- {2347, {wxProgressDialog, update_0, 0}},
- {2348, {wxMessageDialog, new, 3}},
- {2349, {wxMessageDialog, destruct, 0}},
- {2350, {wxPageSetupDialog, new, 2}},
- {2351, {wxPageSetupDialog, destruct, 0}},
- {2352, {wxPageSetupDialog, getPageSetupData, 0}},
- {2353, {wxPageSetupDialog, showModal, 0}},
- {2354, {wxPageSetupDialogData, new_0, 0}},
- {2355, {wxPageSetupDialogData, new_1_0, 1}},
- {2356, {wxPageSetupDialogData, new_1_1, 1}},
- {2357, {wxPageSetupDialogData, destruct, 0}},
- {2358, {wxPageSetupDialogData, enableHelp, 1}},
- {2359, {wxPageSetupDialogData, enableMargins, 1}},
- {2360, {wxPageSetupDialogData, enableOrientation, 1}},
- {2361, {wxPageSetupDialogData, enablePaper, 1}},
- {2362, {wxPageSetupDialogData, enablePrinter, 1}},
- {2363, {wxPageSetupDialogData, getDefaultMinMargins, 0}},
- {2364, {wxPageSetupDialogData, getEnableMargins, 0}},
- {2365, {wxPageSetupDialogData, getEnableOrientation, 0}},
- {2366, {wxPageSetupDialogData, getEnablePaper, 0}},
- {2367, {wxPageSetupDialogData, getEnablePrinter, 0}},
- {2368, {wxPageSetupDialogData, getEnableHelp, 0}},
- {2369, {wxPageSetupDialogData, getDefaultInfo, 0}},
- {2370, {wxPageSetupDialogData, getMarginTopLeft, 0}},
- {2371, {wxPageSetupDialogData, getMarginBottomRight, 0}},
- {2372, {wxPageSetupDialogData, getMinMarginTopLeft, 0}},
- {2373, {wxPageSetupDialogData, getMinMarginBottomRight, 0}},
- {2374, {wxPageSetupDialogData, getPaperId, 0}},
- {2375, {wxPageSetupDialogData, getPaperSize, 0}},
- {2377, {wxPageSetupDialogData, getPrintData, 0}},
- {2378, {wxPageSetupDialogData, isOk, 0}},
- {2379, {wxPageSetupDialogData, setDefaultInfo, 1}},
- {2380, {wxPageSetupDialogData, setDefaultMinMargins, 1}},
- {2381, {wxPageSetupDialogData, setMarginTopLeft, 1}},
- {2382, {wxPageSetupDialogData, setMarginBottomRight, 1}},
- {2383, {wxPageSetupDialogData, setMinMarginTopLeft, 1}},
- {2384, {wxPageSetupDialogData, setMinMarginBottomRight, 1}},
- {2385, {wxPageSetupDialogData, setPaperId, 1}},
- {2386, {wxPageSetupDialogData, setPaperSize_1_1, 1}},
- {2387, {wxPageSetupDialogData, setPaperSize_1_0, 1}},
- {2388, {wxPageSetupDialogData, setPrintData, 1}},
- {2389, {wxPrintDialog, new_2_0, 2}},
- {2390, {wxPrintDialog, new_2_1, 2}},
- {2391, {wxPrintDialog, destruct, 0}},
- {2392, {wxPrintDialog, getPrintDialogData, 0}},
- {2393, {wxPrintDialog, getPrintDC, 0}},
- {2394, {wxPrintDialogData, new_0, 0}},
- {2395, {wxPrintDialogData, new_1_1, 1}},
- {2396, {wxPrintDialogData, new_1_0, 1}},
- {2397, {wxPrintDialogData, destruct, 0}},
- {2398, {wxPrintDialogData, enableHelp, 1}},
- {2399, {wxPrintDialogData, enablePageNumbers, 1}},
- {2400, {wxPrintDialogData, enablePrintToFile, 1}},
- {2401, {wxPrintDialogData, enableSelection, 1}},
- {2402, {wxPrintDialogData, getAllPages, 0}},
- {2403, {wxPrintDialogData, getCollate, 0}},
- {2404, {wxPrintDialogData, getFromPage, 0}},
- {2405, {wxPrintDialogData, getMaxPage, 0}},
- {2406, {wxPrintDialogData, getMinPage, 0}},
- {2407, {wxPrintDialogData, getNoCopies, 0}},
- {2408, {wxPrintDialogData, getPrintData, 0}},
- {2409, {wxPrintDialogData, getPrintToFile, 0}},
- {2410, {wxPrintDialogData, getSelection, 0}},
- {2411, {wxPrintDialogData, getToPage, 0}},
- {2412, {wxPrintDialogData, isOk, 0}},
- {2413, {wxPrintDialogData, setCollate, 1}},
- {2414, {wxPrintDialogData, setFromPage, 1}},
- {2415, {wxPrintDialogData, setMaxPage, 1}},
- {2416, {wxPrintDialogData, setMinPage, 1}},
- {2417, {wxPrintDialogData, setNoCopies, 1}},
- {2418, {wxPrintDialogData, setPrintData, 1}},
- {2419, {wxPrintDialogData, setPrintToFile, 1}},
- {2420, {wxPrintDialogData, setSelection, 1}},
- {2421, {wxPrintDialogData, setToPage, 1}},
- {2422, {wxPrintData, new_0, 0}},
- {2423, {wxPrintData, new_1, 1}},
- {2424, {wxPrintData, destruct, 0}},
- {2425, {wxPrintData, getCollate, 0}},
- {2426, {wxPrintData, getBin, 0}},
- {2427, {wxPrintData, getColour, 0}},
- {2428, {wxPrintData, getDuplex, 0}},
- {2429, {wxPrintData, getNoCopies, 0}},
- {2430, {wxPrintData, getOrientation, 0}},
- {2431, {wxPrintData, getPaperId, 0}},
- {2432, {wxPrintData, getPrinterName, 0}},
- {2433, {wxPrintData, getQuality, 0}},
- {2434, {wxPrintData, isOk, 0}},
- {2435, {wxPrintData, setBin, 1}},
- {2436, {wxPrintData, setCollate, 1}},
- {2437, {wxPrintData, setColour, 1}},
- {2438, {wxPrintData, setDuplex, 1}},
- {2439, {wxPrintData, setNoCopies, 1}},
- {2440, {wxPrintData, setOrientation, 1}},
- {2441, {wxPrintData, setPaperId, 1}},
- {2442, {wxPrintData, setPrinterName, 1}},
- {2443, {wxPrintData, setQuality, 1}},
- {2446, {wxPrintPreview, new_2, 2}},
- {2447, {wxPrintPreview, new_3, 3}},
- {2449, {wxPrintPreview, destruct, 0}},
- {2450, {wxPrintPreview, getCanvas, 0}},
- {2451, {wxPrintPreview, getCurrentPage, 0}},
- {2452, {wxPrintPreview, getFrame, 0}},
- {2453, {wxPrintPreview, getMaxPage, 0}},
- {2454, {wxPrintPreview, getMinPage, 0}},
- {2455, {wxPrintPreview, getPrintout, 0}},
- {2456, {wxPrintPreview, getPrintoutForPrinting, 0}},
- {2457, {wxPrintPreview, isOk, 0}},
- {2458, {wxPrintPreview, paintPage, 2}},
- {2459, {wxPrintPreview, print, 1}},
- {2460, {wxPrintPreview, renderPage, 1}},
- {2461, {wxPrintPreview, setCanvas, 1}},
- {2462, {wxPrintPreview, setCurrentPage, 1}},
- {2463, {wxPrintPreview, setFrame, 1}},
- {2464, {wxPrintPreview, setPrintout, 1}},
- {2465, {wxPrintPreview, setZoom, 1}},
- {2466, {wxPreviewFrame, new, 3}},
- {2467, {wxPreviewFrame, destruct, 0}},
- {2468, {wxPreviewFrame, createControlBar, 0}},
- {2469, {wxPreviewFrame, createCanvas, 0}},
- {2470, {wxPreviewFrame, initialize, 0}},
- {2471, {wxPreviewFrame, onCloseWindow, 1}},
- {2472, {wxPreviewControlBar, new, 4}},
- {2473, {wxPreviewControlBar, destruct, 0}},
- {2474, {wxPreviewControlBar, createButtons, 0}},
- {2475, {wxPreviewControlBar, getPrintPreview, 0}},
- {2476, {wxPreviewControlBar, getZoomControl, 0}},
- {2477, {wxPreviewControlBar, setZoomControl, 1}},
- {2479, {wxPrinter, new, 1}},
- {2480, {wxPrinter, createAbortWindow, 2}},
- {2481, {wxPrinter, getAbort, 0}},
- {2482, {wxPrinter, getLastError, 0}},
- {2483, {wxPrinter, getPrintDialogData, 0}},
- {2484, {wxPrinter, print, 3}},
- {2485, {wxPrinter, printDialog, 1}},
- {2486, {wxPrinter, reportError, 3}},
- {2487, {wxPrinter, setup, 1}},
- {2488, {wxPrinter, 'Destroy', undefined}},
- {2489, {wxXmlResource, new_1, 1}},
- {2490, {wxXmlResource, new_2, 2}},
- {2491, {wxXmlResource, destruct, 0}},
- {2492, {wxXmlResource, attachUnknownControl, 3}},
- {2493, {wxXmlResource, clearHandlers, 0}},
- {2494, {wxXmlResource, compareVersion, 4}},
- {2495, {wxXmlResource, get, 0}},
- {2496, {wxXmlResource, getFlags, 0}},
- {2497, {wxXmlResource, getVersion, 0}},
- {2498, {wxXmlResource, getXRCID, 2}},
- {2499, {wxXmlResource, initAllHandlers, 0}},
- {2500, {wxXmlResource, load, 1}},
- {2501, {wxXmlResource, loadBitmap, 1}},
- {2502, {wxXmlResource, loadDialog_2, 2}},
- {2503, {wxXmlResource, loadDialog_3, 3}},
- {2504, {wxXmlResource, loadFrame_2, 2}},
- {2505, {wxXmlResource, loadFrame_3, 3}},
- {2506, {wxXmlResource, loadIcon, 1}},
- {2507, {wxXmlResource, loadMenu, 1}},
- {2508, {wxXmlResource, loadMenuBar_2, 2}},
- {2509, {wxXmlResource, loadMenuBar_1, 1}},
- {2510, {wxXmlResource, loadPanel_2, 2}},
- {2511, {wxXmlResource, loadPanel_3, 3}},
- {2512, {wxXmlResource, loadToolBar, 2}},
- {2513, {wxXmlResource, set, 1}},
- {2514, {wxXmlResource, setFlags, 1}},
- {2515, {wxXmlResource, unload, 1}},
- {2516, {wxXmlResource, xrcctrl, 3}},
- {2517, {wxHtmlEasyPrinting, new, 1}},
- {2518, {wxHtmlEasyPrinting, destruct, 0}},
- {2519, {wxHtmlEasyPrinting, getPrintData, 0}},
- {2520, {wxHtmlEasyPrinting, getPageSetupData, 0}},
- {2521, {wxHtmlEasyPrinting, previewFile, 1}},
- {2522, {wxHtmlEasyPrinting, previewText, 2}},
- {2523, {wxHtmlEasyPrinting, printFile, 1}},
- {2524, {wxHtmlEasyPrinting, printText, 2}},
- {2525, {wxHtmlEasyPrinting, pageSetup, 0}},
- {2526, {wxHtmlEasyPrinting, setFonts, 3}},
- {2527, {wxHtmlEasyPrinting, setHeader, 2}},
- {2528, {wxHtmlEasyPrinting, setFooter, 2}},
- {2530, {wxGLCanvas, new_2, 2}},
- {2531, {wxGLCanvas, new_3_1, 3}},
- {2532, {wxGLCanvas, new_3_0, 3}},
- {2533, {wxGLCanvas, getContext, 0}},
- {2535, {wxGLCanvas, setCurrent, 0}},
- {2536, {wxGLCanvas, swapBuffers, 0}},
- {2537, {wxGLCanvas, 'Destroy', undefined}},
- {2538, {wxAuiManager, new, 1}},
- {2539, {wxAuiManager, destruct, 0}},
- {2540, {wxAuiManager, addPane_2_1, 2}},
- {2541, {wxAuiManager, addPane_3, 3}},
- {2542, {wxAuiManager, addPane_2_0, 2}},
- {2543, {wxAuiManager, detachPane, 1}},
- {2544, {wxAuiManager, getAllPanes, 0}},
- {2545, {wxAuiManager, getArtProvider, 0}},
- {2546, {wxAuiManager, getDockSizeConstraint, 2}},
- {2547, {wxAuiManager, getFlags, 0}},
- {2548, {wxAuiManager, getManagedWindow, 0}},
- {2549, {wxAuiManager, getManager, 1}},
- {2550, {wxAuiManager, getPane_1_1, 1}},
- {2551, {wxAuiManager, getPane_1_0, 1}},
- {2552, {wxAuiManager, hideHint, 0}},
- {2553, {wxAuiManager, insertPane, 3}},
- {2554, {wxAuiManager, loadPaneInfo, 2}},
- {2555, {wxAuiManager, loadPerspective, 2}},
- {2556, {wxAuiManager, savePaneInfo, 1}},
- {2557, {wxAuiManager, savePerspective, 0}},
- {2558, {wxAuiManager, setArtProvider, 1}},
- {2559, {wxAuiManager, setDockSizeConstraint, 2}},
- {2560, {wxAuiManager, setFlags, 1}},
- {2561, {wxAuiManager, setManagedWindow, 1}},
- {2562, {wxAuiManager, showHint, 1}},
- {2563, {wxAuiManager, unInit, 0}},
- {2564, {wxAuiManager, update, 0}},
- {2565, {wxAuiPaneInfo, new_0, 0}},
- {2566, {wxAuiPaneInfo, new_1, 1}},
- {2567, {wxAuiPaneInfo, destruct, 0}},
- {2568, {wxAuiPaneInfo, bestSize_1, 1}},
- {2569, {wxAuiPaneInfo, bestSize_2, 2}},
- {2570, {wxAuiPaneInfo, bottom, 0}},
- {2571, {wxAuiPaneInfo, bottomDockable, 1}},
- {2572, {wxAuiPaneInfo, caption, 1}},
- {2573, {wxAuiPaneInfo, captionVisible, 1}},
- {2574, {wxAuiPaneInfo, centre, 0}},
- {2575, {wxAuiPaneInfo, centrePane, 0}},
- {2576, {wxAuiPaneInfo, closeButton, 1}},
- {2577, {wxAuiPaneInfo, defaultPane, 0}},
- {2578, {wxAuiPaneInfo, destroyOnClose, 1}},
- {2579, {wxAuiPaneInfo, direction, 1}},
- {2580, {wxAuiPaneInfo, dock, 0}},
- {2581, {wxAuiPaneInfo, dockable, 1}},
- {2582, {wxAuiPaneInfo, fixed, 0}},
- {2583, {wxAuiPaneInfo, float, 0}},
- {2584, {wxAuiPaneInfo, floatable, 1}},
- {2585, {wxAuiPaneInfo, floatingPosition_1, 1}},
- {2586, {wxAuiPaneInfo, floatingPosition_2, 2}},
- {2587, {wxAuiPaneInfo, floatingSize_1, 1}},
- {2588, {wxAuiPaneInfo, floatingSize_2, 2}},
- {2589, {wxAuiPaneInfo, gripper, 1}},
- {2590, {wxAuiPaneInfo, gripperTop, 1}},
- {2591, {wxAuiPaneInfo, hasBorder, 0}},
- {2592, {wxAuiPaneInfo, hasCaption, 0}},
- {2593, {wxAuiPaneInfo, hasCloseButton, 0}},
- {2594, {wxAuiPaneInfo, hasFlag, 1}},
- {2595, {wxAuiPaneInfo, hasGripper, 0}},
- {2596, {wxAuiPaneInfo, hasGripperTop, 0}},
- {2597, {wxAuiPaneInfo, hasMaximizeButton, 0}},
- {2598, {wxAuiPaneInfo, hasMinimizeButton, 0}},
- {2599, {wxAuiPaneInfo, hasPinButton, 0}},
- {2600, {wxAuiPaneInfo, hide, 0}},
- {2601, {wxAuiPaneInfo, isBottomDockable, 0}},
- {2602, {wxAuiPaneInfo, isDocked, 0}},
- {2603, {wxAuiPaneInfo, isFixed, 0}},
- {2604, {wxAuiPaneInfo, isFloatable, 0}},
- {2605, {wxAuiPaneInfo, isFloating, 0}},
- {2606, {wxAuiPaneInfo, isLeftDockable, 0}},
- {2607, {wxAuiPaneInfo, isMovable, 0}},
- {2608, {wxAuiPaneInfo, isOk, 0}},
- {2609, {wxAuiPaneInfo, isResizable, 0}},
- {2610, {wxAuiPaneInfo, isRightDockable, 0}},
- {2611, {wxAuiPaneInfo, isShown, 0}},
- {2612, {wxAuiPaneInfo, isToolbar, 0}},
- {2613, {wxAuiPaneInfo, isTopDockable, 0}},
- {2614, {wxAuiPaneInfo, layer, 1}},
- {2615, {wxAuiPaneInfo, left, 0}},
- {2616, {wxAuiPaneInfo, leftDockable, 1}},
- {2617, {wxAuiPaneInfo, maxSize_1, 1}},
- {2618, {wxAuiPaneInfo, maxSize_2, 2}},
- {2619, {wxAuiPaneInfo, maximizeButton, 1}},
- {2620, {wxAuiPaneInfo, minSize_1, 1}},
- {2621, {wxAuiPaneInfo, minSize_2, 2}},
- {2622, {wxAuiPaneInfo, minimizeButton, 1}},
- {2623, {wxAuiPaneInfo, movable, 1}},
- {2624, {wxAuiPaneInfo, name, 1}},
- {2625, {wxAuiPaneInfo, paneBorder, 1}},
- {2626, {wxAuiPaneInfo, pinButton, 1}},
- {2627, {wxAuiPaneInfo, position, 1}},
- {2628, {wxAuiPaneInfo, resizable, 1}},
- {2629, {wxAuiPaneInfo, right, 0}},
- {2630, {wxAuiPaneInfo, rightDockable, 1}},
- {2631, {wxAuiPaneInfo, row, 1}},
- {2632, {wxAuiPaneInfo, safeSet, 1}},
- {2633, {wxAuiPaneInfo, setFlag, 2}},
- {2634, {wxAuiPaneInfo, show, 1}},
- {2635, {wxAuiPaneInfo, toolbarPane, 0}},
- {2636, {wxAuiPaneInfo, top, 0}},
- {2637, {wxAuiPaneInfo, topDockable, 1}},
- {2638, {wxAuiPaneInfo, window, 1}},
- {2639, {wxAuiNotebook, new_0, 0}},
- {2640, {wxAuiNotebook, new_2, 2}},
- {2641, {wxAuiNotebook, addPage, 3}},
- {2642, {wxAuiNotebook, create, 2}},
- {2643, {wxAuiNotebook, deletePage, 1}},
- {2644, {wxAuiNotebook, getArtProvider, 0}},
- {2645, {wxAuiNotebook, getPage, 1}},
- {2646, {wxAuiNotebook, getPageBitmap, 1}},
- {2647, {wxAuiNotebook, getPageCount, 0}},
- {2648, {wxAuiNotebook, getPageIndex, 1}},
- {2649, {wxAuiNotebook, getPageText, 1}},
- {2650, {wxAuiNotebook, getSelection, 0}},
- {2651, {wxAuiNotebook, insertPage, 4}},
- {2652, {wxAuiNotebook, removePage, 1}},
- {2653, {wxAuiNotebook, setArtProvider, 1}},
- {2654, {wxAuiNotebook, setFont, 1}},
- {2655, {wxAuiNotebook, setPageBitmap, 2}},
- {2656, {wxAuiNotebook, setPageText, 2}},
- {2657, {wxAuiNotebook, setSelection, 1}},
- {2658, {wxAuiNotebook, setTabCtrlHeight, 1}},
- {2659, {wxAuiNotebook, setUniformBitmapSize, 1}},
- {2660, {wxAuiNotebook, 'Destroy', undefined}},
- {2661, {wxMDIParentFrame, new_0, 0}},
- {2662, {wxMDIParentFrame, new_4, 4}},
- {2663, {wxMDIParentFrame, destruct, 0}},
- {2664, {wxMDIParentFrame, activateNext, 0}},
- {2665, {wxMDIParentFrame, activatePrevious, 0}},
- {2666, {wxMDIParentFrame, arrangeIcons, 0}},
- {2667, {wxMDIParentFrame, cascade, 0}},
- {2668, {wxMDIParentFrame, create, 4}},
- {2669, {wxMDIParentFrame, getActiveChild, 0}},
- {2670, {wxMDIParentFrame, getClientWindow, 0}},
- {2671, {wxMDIParentFrame, tile, 1}},
- {2672, {wxMDIChildFrame, new_0, 0}},
- {2673, {wxMDIChildFrame, new_4, 4}},
- {2674, {wxMDIChildFrame, destruct, 0}},
- {2675, {wxMDIChildFrame, activate, 0}},
- {2676, {wxMDIChildFrame, create, 4}},
- {2677, {wxMDIChildFrame, maximize, 1}},
- {2678, {wxMDIChildFrame, restore, 0}},
- {2679, {wxMDIClientWindow, new_0, 0}},
- {2680, {wxMDIClientWindow, new_2, 2}},
- {2681, {wxMDIClientWindow, destruct, 0}},
- {2682, {wxMDIClientWindow, createClient, 2}},
- {2683, {wxLayoutAlgorithm, new, 0}},
- {2684, {wxLayoutAlgorithm, layoutFrame, 2}},
- {2685, {wxLayoutAlgorithm, layoutMDIFrame, 2}},
- {2686, {wxLayoutAlgorithm, layoutWindow, 2}},
- {2687, {wxLayoutAlgorithm, 'Destroy', undefined}},
- {2688, {wxEvent, getId, 0}},
- {2689, {wxEvent, getSkipped, 0}},
- {2690, {wxEvent, getTimestamp, 0}},
- {2691, {wxEvent, isCommandEvent, 0}},
- {2692, {wxEvent, resumePropagation, 1}},
- {2693, {wxEvent, shouldPropagate, 0}},
- {2694, {wxEvent, skip, 1}},
- {2695, {wxEvent, stopPropagation, 0}},
- {2696, {wxCommandEvent, getClientData, 0}},
- {2697, {wxCommandEvent, getExtraLong, 0}},
- {2698, {wxCommandEvent, getInt, 0}},
- {2699, {wxCommandEvent, getSelection, 0}},
- {2700, {wxCommandEvent, getString, 0}},
- {2701, {wxCommandEvent, isChecked, 0}},
- {2702, {wxCommandEvent, isSelection, 0}},
- {2703, {wxCommandEvent, setInt, 1}},
- {2704, {wxCommandEvent, setString, 1}},
- {2705, {wxScrollEvent, getOrientation, 0}},
- {2706, {wxScrollEvent, getPosition, 0}},
- {2707, {wxScrollWinEvent, getOrientation, 0}},
- {2708, {wxScrollWinEvent, getPosition, 0}},
- {2709, {wxMouseEvent, altDown, 0}},
- {2710, {wxMouseEvent, button, 1}},
- {2711, {wxMouseEvent, buttonDClick, 1}},
- {2712, {wxMouseEvent, buttonDown, 1}},
- {2713, {wxMouseEvent, buttonUp, 1}},
- {2714, {wxMouseEvent, cmdDown, 0}},
- {2715, {wxMouseEvent, controlDown, 0}},
- {2716, {wxMouseEvent, dragging, 0}},
- {2717, {wxMouseEvent, entering, 0}},
- {2718, {wxMouseEvent, getButton, 0}},
- {2721, {wxMouseEvent, getPosition, 0}},
- {2722, {wxMouseEvent, getLogicalPosition, 1}},
- {2723, {wxMouseEvent, getLinesPerAction, 0}},
- {2724, {wxMouseEvent, getWheelRotation, 0}},
- {2725, {wxMouseEvent, getWheelDelta, 0}},
- {2726, {wxMouseEvent, getX, 0}},
- {2727, {wxMouseEvent, getY, 0}},
- {2728, {wxMouseEvent, isButton, 0}},
- {2729, {wxMouseEvent, isPageScroll, 0}},
- {2730, {wxMouseEvent, leaving, 0}},
- {2731, {wxMouseEvent, leftDClick, 0}},
- {2732, {wxMouseEvent, leftDown, 0}},
- {2733, {wxMouseEvent, leftIsDown, 0}},
- {2734, {wxMouseEvent, leftUp, 0}},
- {2735, {wxMouseEvent, metaDown, 0}},
- {2736, {wxMouseEvent, middleDClick, 0}},
- {2737, {wxMouseEvent, middleDown, 0}},
- {2738, {wxMouseEvent, middleIsDown, 0}},
- {2739, {wxMouseEvent, middleUp, 0}},
- {2740, {wxMouseEvent, moving, 0}},
- {2741, {wxMouseEvent, rightDClick, 0}},
- {2742, {wxMouseEvent, rightDown, 0}},
- {2743, {wxMouseEvent, rightIsDown, 0}},
- {2744, {wxMouseEvent, rightUp, 0}},
- {2745, {wxMouseEvent, shiftDown, 0}},
- {2746, {wxSetCursorEvent, getCursor, 0}},
- {2747, {wxSetCursorEvent, getX, 0}},
- {2748, {wxSetCursorEvent, getY, 0}},
- {2749, {wxSetCursorEvent, hasCursor, 0}},
- {2750, {wxSetCursorEvent, setCursor, 1}},
- {2751, {wxKeyEvent, altDown, 0}},
- {2752, {wxKeyEvent, cmdDown, 0}},
- {2753, {wxKeyEvent, controlDown, 0}},
- {2754, {wxKeyEvent, getKeyCode, 0}},
- {2755, {wxKeyEvent, getModifiers, 0}},
- {2758, {wxKeyEvent, getPosition, 0}},
- {2759, {wxKeyEvent, getRawKeyCode, 0}},
- {2760, {wxKeyEvent, getRawKeyFlags, 0}},
- {2761, {wxKeyEvent, getUnicodeKey, 0}},
- {2762, {wxKeyEvent, getX, 0}},
- {2763, {wxKeyEvent, getY, 0}},
- {2764, {wxKeyEvent, hasModifiers, 0}},
- {2765, {wxKeyEvent, metaDown, 0}},
- {2766, {wxKeyEvent, shiftDown, 0}},
- {2767, {wxSizeEvent, getSize, 0}},
- {2768, {wxMoveEvent, getPosition, 0}},
- {2769, {wxEraseEvent, getDC, 0}},
- {2770, {wxFocusEvent, getWindow, 0}},
- {2771, {wxChildFocusEvent, getWindow, 0}},
- {2772, {wxMenuEvent, getMenu, 0}},
- {2773, {wxMenuEvent, getMenuId, 0}},
- {2774, {wxMenuEvent, isPopup, 0}},
- {2775, {wxCloseEvent, canVeto, 0}},
- {2776, {wxCloseEvent, getLoggingOff, 0}},
- {2777, {wxCloseEvent, setCanVeto, 1}},
- {2778, {wxCloseEvent, setLoggingOff, 1}},
- {2779, {wxCloseEvent, veto, 1}},
- {2780, {wxShowEvent, setShow, 1}},
- {2781, {wxShowEvent, getShow, 0}},
- {2782, {wxIconizeEvent, iconized, 0}},
- {2783, {wxJoystickEvent, buttonDown, 1}},
- {2784, {wxJoystickEvent, buttonIsDown, 1}},
- {2785, {wxJoystickEvent, buttonUp, 1}},
- {2786, {wxJoystickEvent, getButtonChange, 0}},
- {2787, {wxJoystickEvent, getButtonState, 0}},
- {2788, {wxJoystickEvent, getJoystick, 0}},
- {2789, {wxJoystickEvent, getPosition, 0}},
- {2790, {wxJoystickEvent, getZPosition, 0}},
- {2791, {wxJoystickEvent, isButton, 0}},
- {2792, {wxJoystickEvent, isMove, 0}},
- {2793, {wxJoystickEvent, isZMove, 0}},
- {2794, {wxUpdateUIEvent, canUpdate, 1}},
- {2795, {wxUpdateUIEvent, check, 1}},
- {2796, {wxUpdateUIEvent, enable, 1}},
- {2797, {wxUpdateUIEvent, show, 1}},
- {2798, {wxUpdateUIEvent, getChecked, 0}},
- {2799, {wxUpdateUIEvent, getEnabled, 0}},
- {2800, {wxUpdateUIEvent, getShown, 0}},
- {2801, {wxUpdateUIEvent, getSetChecked, 0}},
- {2802, {wxUpdateUIEvent, getSetEnabled, 0}},
- {2803, {wxUpdateUIEvent, getSetShown, 0}},
- {2804, {wxUpdateUIEvent, getSetText, 0}},
- {2805, {wxUpdateUIEvent, getText, 0}},
- {2806, {wxUpdateUIEvent, getMode, 0}},
- {2807, {wxUpdateUIEvent, getUpdateInterval, 0}},
- {2808, {wxUpdateUIEvent, resetUpdateTime, 0}},
- {2809, {wxUpdateUIEvent, setMode, 1}},
- {2810, {wxUpdateUIEvent, setText, 1}},
- {2811, {wxUpdateUIEvent, setUpdateInterval, 1}},
- {2812, {wxMouseCaptureChangedEvent, getCapturedWindow, 0}},
- {2813, {wxPaletteChangedEvent, setChangedWindow, 1}},
- {2814, {wxPaletteChangedEvent, getChangedWindow, 0}},
- {2815, {wxQueryNewPaletteEvent, setPaletteRealized, 1}},
- {2816, {wxQueryNewPaletteEvent, getPaletteRealized, 0}},
- {2817, {wxNavigationKeyEvent, getDirection, 0}},
- {2818, {wxNavigationKeyEvent, setDirection, 1}},
- {2819, {wxNavigationKeyEvent, isWindowChange, 0}},
- {2820, {wxNavigationKeyEvent, setWindowChange, 1}},
- {2821, {wxNavigationKeyEvent, isFromTab, 0}},
- {2822, {wxNavigationKeyEvent, setFromTab, 1}},
- {2823, {wxNavigationKeyEvent, getCurrentFocus, 0}},
- {2824, {wxNavigationKeyEvent, setCurrentFocus, 1}},
- {2825, {wxHelpEvent, getOrigin, 0}},
- {2826, {wxHelpEvent, getPosition, 0}},
- {2827, {wxHelpEvent, setOrigin, 1}},
- {2828, {wxHelpEvent, setPosition, 1}},
- {2829, {wxContextMenuEvent, getPosition, 0}},
- {2830, {wxContextMenuEvent, setPosition, 1}},
- {2831, {wxIdleEvent, canSend, 1}},
- {2832, {wxIdleEvent, getMode, 0}},
- {2833, {wxIdleEvent, requestMore, 1}},
- {2834, {wxIdleEvent, moreRequested, 0}},
- {2835, {wxIdleEvent, setMode, 1}},
- {2836, {wxGridEvent, altDown, 0}},
- {2837, {wxGridEvent, controlDown, 0}},
- {2838, {wxGridEvent, getCol, 0}},
- {2839, {wxGridEvent, getPosition, 0}},
- {2840, {wxGridEvent, getRow, 0}},
- {2841, {wxGridEvent, metaDown, 0}},
- {2842, {wxGridEvent, selecting, 0}},
- {2843, {wxGridEvent, shiftDown, 0}},
- {2844, {wxNotifyEvent, allow, 0}},
- {2845, {wxNotifyEvent, isAllowed, 0}},
- {2846, {wxNotifyEvent, veto, 0}},
- {2847, {wxSashEvent, getEdge, 0}},
- {2848, {wxSashEvent, getDragRect, 0}},
- {2849, {wxSashEvent, getDragStatus, 0}},
- {2850, {wxListEvent, getCacheFrom, 0}},
- {2851, {wxListEvent, getCacheTo, 0}},
- {2852, {wxListEvent, getKeyCode, 0}},
- {2853, {wxListEvent, getIndex, 0}},
- {2854, {wxListEvent, getColumn, 0}},
- {2855, {wxListEvent, getPoint, 0}},
- {2856, {wxListEvent, getLabel, 0}},
- {2857, {wxListEvent, getText, 0}},
- {2858, {wxListEvent, getImage, 0}},
- {2859, {wxListEvent, getData, 0}},
- {2860, {wxListEvent, getMask, 0}},
- {2861, {wxListEvent, getItem, 0}},
- {2862, {wxListEvent, isEditCancelled, 0}},
- {2863, {wxDateEvent, getDate, 0}},
- {2864, {wxCalendarEvent, getWeekDay, 0}},
- {2865, {wxFileDirPickerEvent, getPath, 0}},
- {2866, {wxColourPickerEvent, getColour, 0}},
- {2867, {wxFontPickerEvent, getFont, 0}},
- {2868, {wxStyledTextEvent, getPosition, 0}},
- {2869, {wxStyledTextEvent, getKey, 0}},
- {2870, {wxStyledTextEvent, getModifiers, 0}},
- {2871, {wxStyledTextEvent, getModificationType, 0}},
- {2872, {wxStyledTextEvent, getText, 0}},
- {2873, {wxStyledTextEvent, getLength, 0}},
- {2874, {wxStyledTextEvent, getLinesAdded, 0}},
- {2875, {wxStyledTextEvent, getLine, 0}},
- {2876, {wxStyledTextEvent, getFoldLevelNow, 0}},
- {2877, {wxStyledTextEvent, getFoldLevelPrev, 0}},
- {2878, {wxStyledTextEvent, getMargin, 0}},
- {2879, {wxStyledTextEvent, getMessage, 0}},
- {2880, {wxStyledTextEvent, getWParam, 0}},
- {2881, {wxStyledTextEvent, getLParam, 0}},
- {2882, {wxStyledTextEvent, getListType, 0}},
- {2883, {wxStyledTextEvent, getX, 0}},
- {2884, {wxStyledTextEvent, getY, 0}},
- {2885, {wxStyledTextEvent, getDragText, 0}},
- {2886, {wxStyledTextEvent, getDragAllowMove, 0}},
- {2887, {wxStyledTextEvent, getDragResult, 0}},
- {2888, {wxStyledTextEvent, getShift, 0}},
- {2889, {wxStyledTextEvent, getControl, 0}},
- {2890, {wxStyledTextEvent, getAlt, 0}},
- {2891, {utils, getKeyState, 1}},
- {2892, {utils, getMousePosition, 2}},
- {2893, {utils, getMouseState, 0}},
- {2894, {utils, setDetectableAutoRepeat, 1}},
- {2895, {utils, bell, 0}},
- {2896, {utils, findMenuItemId, 3}},
- {2897, {utils, genericFindWindowAtPoint, 1}},
- {2898, {utils, findWindowAtPoint, 1}},
- {2899, {utils, beginBusyCursor, 1}},
- {2900, {utils, endBusyCursor, 0}},
- {2901, {utils, isBusy, 0}},
- {2902, {utils, shutdown, 1}},
- {2903, {utils, shell, 1}},
- {2904, {utils, launchDefaultBrowser, 2}},
- {2905, {utils, getEmailAddress, 0}},
- {2906, {utils, getUserId, 0}},
- {2907, {utils, getHomeDir, 0}},
- {2908, {utils, newId, 0}},
- {2909, {utils, registerId, 1}},
- {2910, {utils, getCurrentId, 0}},
- {2911, {utils, getOsDescription, 0}},
- {2912, {utils, isPlatformLittleEndian, 0}},
- {2913, {utils, isPlatform64Bit, 0}},
- {2914, {wxPrintout, new, 1}},
- {2915, {wxPrintout, destruct, 0}},
- {2916, {wxPrintout, getDC, 0}},
- {2917, {wxPrintout, getPageSizeMM, 2}},
- {2918, {wxPrintout, getPageSizePixels, 2}},
- {2919, {wxPrintout, getPaperRectPixels, 0}},
- {2920, {wxPrintout, getPPIPrinter, 2}},
- {2921, {wxPrintout, getPPIScreen, 2}},
- {2922, {wxPrintout, getTitle, 0}},
- {2923, {wxPrintout, isPreview, 0}},
- {2924, {wxPrintout, fitThisSizeToPaper, 1}},
- {2925, {wxPrintout, fitThisSizeToPage, 1}},
- {2926, {wxPrintout, fitThisSizeToPageMargins, 2}},
- {2927, {wxPrintout, mapScreenSizeToPaper, 0}},
- {2928, {wxPrintout, mapScreenSizeToPage, 0}},
- {2929, {wxPrintout, mapScreenSizeToPageMargins, 1}},
- {2930, {wxPrintout, mapScreenSizeToDevice, 0}},
- {2931, {wxPrintout, getLogicalPaperRect, 0}},
- {2932, {wxPrintout, getLogicalPageRect, 0}},
- {2933, {wxPrintout, getLogicalPageMarginsRect, 1}},
- {2934, {wxPrintout, setLogicalOrigin, 2}},
- {2935, {wxPrintout, offsetLogicalOrigin, 2}},
- {2936, {wxStyledTextCtrl, new_2, 2}},
- {2937, {wxStyledTextCtrl, new_0, 0}},
- {2938, {wxStyledTextCtrl, destruct, 0}},
- {2939, {wxStyledTextCtrl, create, 2}},
- {2940, {wxStyledTextCtrl, addText, 1}},
- {2941, {wxStyledTextCtrl, addStyledText, 1}},
- {2942, {wxStyledTextCtrl, insertText, 2}},
- {2943, {wxStyledTextCtrl, clearAll, 0}},
- {2944, {wxStyledTextCtrl, clearDocumentStyle, 0}},
- {2945, {wxStyledTextCtrl, getLength, 0}},
- {2946, {wxStyledTextCtrl, getCharAt, 1}},
- {2947, {wxStyledTextCtrl, getCurrentPos, 0}},
- {2948, {wxStyledTextCtrl, getAnchor, 0}},
- {2949, {wxStyledTextCtrl, getStyleAt, 1}},
- {2950, {wxStyledTextCtrl, redo, 0}},
- {2951, {wxStyledTextCtrl, setUndoCollection, 1}},
- {2952, {wxStyledTextCtrl, selectAll, 0}},
- {2953, {wxStyledTextCtrl, setSavePoint, 0}},
- {2954, {wxStyledTextCtrl, getStyledText, 2}},
- {2955, {wxStyledTextCtrl, canRedo, 0}},
- {2956, {wxStyledTextCtrl, markerLineFromHandle, 1}},
- {2957, {wxStyledTextCtrl, markerDeleteHandle, 1}},
- {2958, {wxStyledTextCtrl, getUndoCollection, 0}},
- {2959, {wxStyledTextCtrl, getViewWhiteSpace, 0}},
- {2960, {wxStyledTextCtrl, setViewWhiteSpace, 1}},
- {2961, {wxStyledTextCtrl, positionFromPoint, 1}},
- {2962, {wxStyledTextCtrl, positionFromPointClose, 2}},
- {2963, {wxStyledTextCtrl, gotoLine, 1}},
- {2964, {wxStyledTextCtrl, gotoPos, 1}},
- {2965, {wxStyledTextCtrl, setAnchor, 1}},
- {2966, {wxStyledTextCtrl, getCurLine, 1}},
- {2967, {wxStyledTextCtrl, getEndStyled, 0}},
- {2968, {wxStyledTextCtrl, convertEOLs, 1}},
- {2969, {wxStyledTextCtrl, getEOLMode, 0}},
- {2970, {wxStyledTextCtrl, setEOLMode, 1}},
- {2971, {wxStyledTextCtrl, startStyling, 2}},
- {2972, {wxStyledTextCtrl, setStyling, 2}},
- {2973, {wxStyledTextCtrl, getBufferedDraw, 0}},
- {2974, {wxStyledTextCtrl, setBufferedDraw, 1}},
- {2975, {wxStyledTextCtrl, setTabWidth, 1}},
- {2976, {wxStyledTextCtrl, getTabWidth, 0}},
- {2977, {wxStyledTextCtrl, setCodePage, 1}},
- {2978, {wxStyledTextCtrl, markerDefine, 3}},
- {2979, {wxStyledTextCtrl, markerSetForeground, 2}},
- {2980, {wxStyledTextCtrl, markerSetBackground, 2}},
- {2981, {wxStyledTextCtrl, markerAdd, 2}},
- {2982, {wxStyledTextCtrl, markerDelete, 2}},
- {2983, {wxStyledTextCtrl, markerDeleteAll, 1}},
- {2984, {wxStyledTextCtrl, markerGet, 1}},
- {2985, {wxStyledTextCtrl, markerNext, 2}},
- {2986, {wxStyledTextCtrl, markerPrevious, 2}},
- {2987, {wxStyledTextCtrl, markerDefineBitmap, 2}},
- {2988, {wxStyledTextCtrl, markerAddSet, 2}},
- {2989, {wxStyledTextCtrl, markerSetAlpha, 2}},
- {2990, {wxStyledTextCtrl, setMarginType, 2}},
- {2991, {wxStyledTextCtrl, getMarginType, 1}},
- {2992, {wxStyledTextCtrl, setMarginWidth, 2}},
- {2993, {wxStyledTextCtrl, getMarginWidth, 1}},
- {2994, {wxStyledTextCtrl, setMarginMask, 2}},
- {2995, {wxStyledTextCtrl, getMarginMask, 1}},
- {2996, {wxStyledTextCtrl, setMarginSensitive, 2}},
- {2997, {wxStyledTextCtrl, getMarginSensitive, 1}},
- {2998, {wxStyledTextCtrl, styleClearAll, 0}},
- {2999, {wxStyledTextCtrl, styleSetForeground, 2}},
- {3000, {wxStyledTextCtrl, styleSetBackground, 2}},
- {3001, {wxStyledTextCtrl, styleSetBold, 2}},
- {3002, {wxStyledTextCtrl, styleSetItalic, 2}},
- {3003, {wxStyledTextCtrl, styleSetSize, 2}},
- {3004, {wxStyledTextCtrl, styleSetFaceName, 2}},
- {3005, {wxStyledTextCtrl, styleSetEOLFilled, 2}},
- {3006, {wxStyledTextCtrl, styleResetDefault, 0}},
- {3007, {wxStyledTextCtrl, styleSetUnderline, 2}},
- {3008, {wxStyledTextCtrl, styleSetCase, 2}},
- {3009, {wxStyledTextCtrl, styleSetHotSpot, 2}},
- {3010, {wxStyledTextCtrl, setSelForeground, 2}},
- {3011, {wxStyledTextCtrl, setSelBackground, 2}},
- {3012, {wxStyledTextCtrl, getSelAlpha, 0}},
- {3013, {wxStyledTextCtrl, setSelAlpha, 1}},
- {3014, {wxStyledTextCtrl, setCaretForeground, 1}},
- {3015, {wxStyledTextCtrl, cmdKeyAssign, 3}},
- {3016, {wxStyledTextCtrl, cmdKeyClear, 2}},
- {3017, {wxStyledTextCtrl, cmdKeyClearAll, 0}},
- {3018, {wxStyledTextCtrl, setStyleBytes, 2}},
- {3019, {wxStyledTextCtrl, styleSetVisible, 2}},
- {3020, {wxStyledTextCtrl, getCaretPeriod, 0}},
- {3021, {wxStyledTextCtrl, setCaretPeriod, 1}},
- {3022, {wxStyledTextCtrl, setWordChars, 1}},
- {3023, {wxStyledTextCtrl, beginUndoAction, 0}},
- {3024, {wxStyledTextCtrl, endUndoAction, 0}},
- {3025, {wxStyledTextCtrl, indicatorSetStyle, 2}},
- {3026, {wxStyledTextCtrl, indicatorGetStyle, 1}},
- {3027, {wxStyledTextCtrl, indicatorSetForeground, 2}},
- {3028, {wxStyledTextCtrl, indicatorGetForeground, 1}},
- {3029, {wxStyledTextCtrl, setWhitespaceForeground, 2}},
- {3030, {wxStyledTextCtrl, setWhitespaceBackground, 2}},
- {3031, {wxStyledTextCtrl, getStyleBits, 0}},
- {3032, {wxStyledTextCtrl, setLineState, 2}},
- {3033, {wxStyledTextCtrl, getLineState, 1}},
- {3034, {wxStyledTextCtrl, getMaxLineState, 0}},
- {3035, {wxStyledTextCtrl, getCaretLineVisible, 0}},
- {3036, {wxStyledTextCtrl, setCaretLineVisible, 1}},
- {3037, {wxStyledTextCtrl, getCaretLineBackground, 0}},
- {3038, {wxStyledTextCtrl, setCaretLineBackground, 1}},
- {3039, {wxStyledTextCtrl, autoCompShow, 2}},
- {3040, {wxStyledTextCtrl, autoCompCancel, 0}},
- {3041, {wxStyledTextCtrl, autoCompActive, 0}},
- {3042, {wxStyledTextCtrl, autoCompPosStart, 0}},
- {3043, {wxStyledTextCtrl, autoCompComplete, 0}},
- {3044, {wxStyledTextCtrl, autoCompStops, 1}},
- {3045, {wxStyledTextCtrl, autoCompSetSeparator, 1}},
- {3046, {wxStyledTextCtrl, autoCompGetSeparator, 0}},
- {3047, {wxStyledTextCtrl, autoCompSelect, 1}},
- {3048, {wxStyledTextCtrl, autoCompSetCancelAtStart, 1}},
- {3049, {wxStyledTextCtrl, autoCompGetCancelAtStart, 0}},
- {3050, {wxStyledTextCtrl, autoCompSetFillUps, 1}},
- {3051, {wxStyledTextCtrl, autoCompSetChooseSingle, 1}},
- {3052, {wxStyledTextCtrl, autoCompGetChooseSingle, 0}},
- {3053, {wxStyledTextCtrl, autoCompSetIgnoreCase, 1}},
- {3054, {wxStyledTextCtrl, autoCompGetIgnoreCase, 0}},
- {3055, {wxStyledTextCtrl, userListShow, 2}},
- {3056, {wxStyledTextCtrl, autoCompSetAutoHide, 1}},
- {3057, {wxStyledTextCtrl, autoCompGetAutoHide, 0}},
- {3058, {wxStyledTextCtrl, autoCompSetDropRestOfWord, 1}},
- {3059, {wxStyledTextCtrl, autoCompGetDropRestOfWord, 0}},
- {3060, {wxStyledTextCtrl, registerImage, 2}},
- {3061, {wxStyledTextCtrl, clearRegisteredImages, 0}},
- {3062, {wxStyledTextCtrl, autoCompGetTypeSeparator, 0}},
- {3063, {wxStyledTextCtrl, autoCompSetTypeSeparator, 1}},
- {3064, {wxStyledTextCtrl, autoCompSetMaxWidth, 1}},
- {3065, {wxStyledTextCtrl, autoCompGetMaxWidth, 0}},
- {3066, {wxStyledTextCtrl, autoCompSetMaxHeight, 1}},
- {3067, {wxStyledTextCtrl, autoCompGetMaxHeight, 0}},
- {3068, {wxStyledTextCtrl, setIndent, 1}},
- {3069, {wxStyledTextCtrl, getIndent, 0}},
- {3070, {wxStyledTextCtrl, setUseTabs, 1}},
- {3071, {wxStyledTextCtrl, getUseTabs, 0}},
- {3072, {wxStyledTextCtrl, setLineIndentation, 2}},
- {3073, {wxStyledTextCtrl, getLineIndentation, 1}},
- {3074, {wxStyledTextCtrl, getLineIndentPosition, 1}},
- {3075, {wxStyledTextCtrl, getColumn, 1}},
- {3076, {wxStyledTextCtrl, setUseHorizontalScrollBar, 1}},
- {3077, {wxStyledTextCtrl, getUseHorizontalScrollBar, 0}},
- {3078, {wxStyledTextCtrl, setIndentationGuides, 1}},
- {3079, {wxStyledTextCtrl, getIndentationGuides, 0}},
- {3080, {wxStyledTextCtrl, setHighlightGuide, 1}},
- {3081, {wxStyledTextCtrl, getHighlightGuide, 0}},
- {3082, {wxStyledTextCtrl, getLineEndPosition, 1}},
- {3083, {wxStyledTextCtrl, getCodePage, 0}},
- {3084, {wxStyledTextCtrl, getCaretForeground, 0}},
- {3085, {wxStyledTextCtrl, getReadOnly, 0}},
- {3086, {wxStyledTextCtrl, setCurrentPos, 1}},
- {3087, {wxStyledTextCtrl, setSelectionStart, 1}},
- {3088, {wxStyledTextCtrl, getSelectionStart, 0}},
- {3089, {wxStyledTextCtrl, setSelectionEnd, 1}},
- {3090, {wxStyledTextCtrl, getSelectionEnd, 0}},
- {3091, {wxStyledTextCtrl, setPrintMagnification, 1}},
- {3092, {wxStyledTextCtrl, getPrintMagnification, 0}},
- {3093, {wxStyledTextCtrl, setPrintColourMode, 1}},
- {3094, {wxStyledTextCtrl, getPrintColourMode, 0}},
- {3095, {wxStyledTextCtrl, findText, 4}},
- {3096, {wxStyledTextCtrl, formatRange, 7}},
- {3097, {wxStyledTextCtrl, getFirstVisibleLine, 0}},
- {3098, {wxStyledTextCtrl, getLine, 1}},
- {3099, {wxStyledTextCtrl, getLineCount, 0}},
- {3100, {wxStyledTextCtrl, setMarginLeft, 1}},
- {3101, {wxStyledTextCtrl, getMarginLeft, 0}},
- {3102, {wxStyledTextCtrl, setMarginRight, 1}},
- {3103, {wxStyledTextCtrl, getMarginRight, 0}},
- {3104, {wxStyledTextCtrl, getModify, 0}},
- {3105, {wxStyledTextCtrl, setSelection, 2}},
- {3106, {wxStyledTextCtrl, getSelectedText, 0}},
- {3107, {wxStyledTextCtrl, getTextRange, 2}},
- {3108, {wxStyledTextCtrl, hideSelection, 1}},
- {3109, {wxStyledTextCtrl, lineFromPosition, 1}},
- {3110, {wxStyledTextCtrl, positionFromLine, 1}},
- {3111, {wxStyledTextCtrl, lineScroll, 2}},
- {3112, {wxStyledTextCtrl, ensureCaretVisible, 0}},
- {3113, {wxStyledTextCtrl, replaceSelection, 1}},
- {3114, {wxStyledTextCtrl, setReadOnly, 1}},
- {3115, {wxStyledTextCtrl, canPaste, 0}},
- {3116, {wxStyledTextCtrl, canUndo, 0}},
- {3117, {wxStyledTextCtrl, emptyUndoBuffer, 0}},
- {3118, {wxStyledTextCtrl, undo, 0}},
- {3119, {wxStyledTextCtrl, cut, 0}},
- {3120, {wxStyledTextCtrl, copy, 0}},
- {3121, {wxStyledTextCtrl, paste, 0}},
- {3122, {wxStyledTextCtrl, clear, 0}},
- {3123, {wxStyledTextCtrl, setText, 1}},
- {3124, {wxStyledTextCtrl, getText, 0}},
- {3125, {wxStyledTextCtrl, getTextLength, 0}},
- {3126, {wxStyledTextCtrl, getOvertype, 0}},
- {3127, {wxStyledTextCtrl, setCaretWidth, 1}},
- {3128, {wxStyledTextCtrl, getCaretWidth, 0}},
- {3129, {wxStyledTextCtrl, setTargetStart, 1}},
- {3130, {wxStyledTextCtrl, getTargetStart, 0}},
- {3131, {wxStyledTextCtrl, setTargetEnd, 1}},
- {3132, {wxStyledTextCtrl, getTargetEnd, 0}},
- {3133, {wxStyledTextCtrl, replaceTarget, 1}},
- {3134, {wxStyledTextCtrl, searchInTarget, 1}},
- {3135, {wxStyledTextCtrl, setSearchFlags, 1}},
- {3136, {wxStyledTextCtrl, getSearchFlags, 0}},
- {3137, {wxStyledTextCtrl, callTipShow, 2}},
- {3138, {wxStyledTextCtrl, callTipCancel, 0}},
- {3139, {wxStyledTextCtrl, callTipActive, 0}},
- {3140, {wxStyledTextCtrl, callTipPosAtStart, 0}},
- {3141, {wxStyledTextCtrl, callTipSetHighlight, 2}},
- {3142, {wxStyledTextCtrl, callTipSetBackground, 1}},
- {3143, {wxStyledTextCtrl, callTipSetForeground, 1}},
- {3144, {wxStyledTextCtrl, callTipSetForegroundHighlight, 1}},
- {3145, {wxStyledTextCtrl, callTipUseStyle, 1}},
- {3146, {wxStyledTextCtrl, visibleFromDocLine, 1}},
- {3147, {wxStyledTextCtrl, docLineFromVisible, 1}},
- {3148, {wxStyledTextCtrl, wrapCount, 1}},
- {3149, {wxStyledTextCtrl, setFoldLevel, 2}},
- {3150, {wxStyledTextCtrl, getFoldLevel, 1}},
- {3151, {wxStyledTextCtrl, getLastChild, 2}},
- {3152, {wxStyledTextCtrl, getFoldParent, 1}},
- {3153, {wxStyledTextCtrl, showLines, 2}},
- {3154, {wxStyledTextCtrl, hideLines, 2}},
- {3155, {wxStyledTextCtrl, getLineVisible, 1}},
- {3156, {wxStyledTextCtrl, setFoldExpanded, 2}},
- {3157, {wxStyledTextCtrl, getFoldExpanded, 1}},
- {3158, {wxStyledTextCtrl, toggleFold, 1}},
- {3159, {wxStyledTextCtrl, ensureVisible, 1}},
- {3160, {wxStyledTextCtrl, setFoldFlags, 1}},
- {3161, {wxStyledTextCtrl, ensureVisibleEnforcePolicy, 1}},
- {3162, {wxStyledTextCtrl, setTabIndents, 1}},
- {3163, {wxStyledTextCtrl, getTabIndents, 0}},
- {3164, {wxStyledTextCtrl, setBackSpaceUnIndents, 1}},
- {3165, {wxStyledTextCtrl, getBackSpaceUnIndents, 0}},
- {3166, {wxStyledTextCtrl, setMouseDwellTime, 1}},
- {3167, {wxStyledTextCtrl, getMouseDwellTime, 0}},
- {3168, {wxStyledTextCtrl, wordStartPosition, 2}},
- {3169, {wxStyledTextCtrl, wordEndPosition, 2}},
- {3170, {wxStyledTextCtrl, setWrapMode, 1}},
- {3171, {wxStyledTextCtrl, getWrapMode, 0}},
- {3172, {wxStyledTextCtrl, setWrapVisualFlags, 1}},
- {3173, {wxStyledTextCtrl, getWrapVisualFlags, 0}},
- {3174, {wxStyledTextCtrl, setWrapVisualFlagsLocation, 1}},
- {3175, {wxStyledTextCtrl, getWrapVisualFlagsLocation, 0}},
- {3176, {wxStyledTextCtrl, setWrapStartIndent, 1}},
- {3177, {wxStyledTextCtrl, getWrapStartIndent, 0}},
- {3178, {wxStyledTextCtrl, setLayoutCache, 1}},
- {3179, {wxStyledTextCtrl, getLayoutCache, 0}},
- {3180, {wxStyledTextCtrl, setScrollWidth, 1}},
- {3181, {wxStyledTextCtrl, getScrollWidth, 0}},
- {3182, {wxStyledTextCtrl, textWidth, 2}},
- {3183, {wxStyledTextCtrl, getEndAtLastLine, 0}},
- {3184, {wxStyledTextCtrl, textHeight, 1}},
- {3185, {wxStyledTextCtrl, setUseVerticalScrollBar, 1}},
- {3186, {wxStyledTextCtrl, getUseVerticalScrollBar, 0}},
- {3187, {wxStyledTextCtrl, appendText, 1}},
- {3188, {wxStyledTextCtrl, getTwoPhaseDraw, 0}},
- {3189, {wxStyledTextCtrl, setTwoPhaseDraw, 1}},
- {3190, {wxStyledTextCtrl, targetFromSelection, 0}},
- {3191, {wxStyledTextCtrl, linesJoin, 0}},
- {3192, {wxStyledTextCtrl, linesSplit, 1}},
- {3193, {wxStyledTextCtrl, setFoldMarginColour, 2}},
- {3194, {wxStyledTextCtrl, setFoldMarginHiColour, 2}},
- {3195, {wxStyledTextCtrl, lineDown, 0}},
- {3196, {wxStyledTextCtrl, lineDownExtend, 0}},
- {3197, {wxStyledTextCtrl, lineUp, 0}},
- {3198, {wxStyledTextCtrl, lineUpExtend, 0}},
- {3199, {wxStyledTextCtrl, charLeft, 0}},
- {3200, {wxStyledTextCtrl, charLeftExtend, 0}},
- {3201, {wxStyledTextCtrl, charRight, 0}},
- {3202, {wxStyledTextCtrl, charRightExtend, 0}},
- {3203, {wxStyledTextCtrl, wordLeft, 0}},
- {3204, {wxStyledTextCtrl, wordLeftExtend, 0}},
- {3205, {wxStyledTextCtrl, wordRight, 0}},
- {3206, {wxStyledTextCtrl, wordRightExtend, 0}},
- {3207, {wxStyledTextCtrl, home, 0}},
- {3208, {wxStyledTextCtrl, homeExtend, 0}},
- {3209, {wxStyledTextCtrl, lineEnd, 0}},
- {3210, {wxStyledTextCtrl, lineEndExtend, 0}},
- {3211, {wxStyledTextCtrl, documentStart, 0}},
- {3212, {wxStyledTextCtrl, documentStartExtend, 0}},
- {3213, {wxStyledTextCtrl, documentEnd, 0}},
- {3214, {wxStyledTextCtrl, documentEndExtend, 0}},
- {3215, {wxStyledTextCtrl, pageUp, 0}},
- {3216, {wxStyledTextCtrl, pageUpExtend, 0}},
- {3217, {wxStyledTextCtrl, pageDown, 0}},
- {3218, {wxStyledTextCtrl, pageDownExtend, 0}},
- {3219, {wxStyledTextCtrl, editToggleOvertype, 0}},
- {3220, {wxStyledTextCtrl, cancel, 0}},
- {3221, {wxStyledTextCtrl, deleteBack, 0}},
- {3222, {wxStyledTextCtrl, tab, 0}},
- {3223, {wxStyledTextCtrl, backTab, 0}},
- {3224, {wxStyledTextCtrl, newLine, 0}},
- {3225, {wxStyledTextCtrl, formFeed, 0}},
- {3226, {wxStyledTextCtrl, vCHome, 0}},
- {3227, {wxStyledTextCtrl, vCHomeExtend, 0}},
- {3228, {wxStyledTextCtrl, zoomIn, 0}},
- {3229, {wxStyledTextCtrl, zoomOut, 0}},
- {3230, {wxStyledTextCtrl, delWordLeft, 0}},
- {3231, {wxStyledTextCtrl, delWordRight, 0}},
- {3232, {wxStyledTextCtrl, lineCut, 0}},
- {3233, {wxStyledTextCtrl, lineDelete, 0}},
- {3234, {wxStyledTextCtrl, lineTranspose, 0}},
- {3235, {wxStyledTextCtrl, lineDuplicate, 0}},
- {3236, {wxStyledTextCtrl, lowerCase, 0}},
- {3237, {wxStyledTextCtrl, upperCase, 0}},
- {3238, {wxStyledTextCtrl, lineScrollDown, 0}},
- {3239, {wxStyledTextCtrl, lineScrollUp, 0}},
- {3240, {wxStyledTextCtrl, deleteBackNotLine, 0}},
- {3241, {wxStyledTextCtrl, homeDisplay, 0}},
- {3242, {wxStyledTextCtrl, homeDisplayExtend, 0}},
- {3243, {wxStyledTextCtrl, lineEndDisplay, 0}},
- {3244, {wxStyledTextCtrl, lineEndDisplayExtend, 0}},
- {3245, {wxStyledTextCtrl, homeWrapExtend, 0}},
- {3246, {wxStyledTextCtrl, lineEndWrap, 0}},
- {3247, {wxStyledTextCtrl, lineEndWrapExtend, 0}},
- {3248, {wxStyledTextCtrl, vCHomeWrap, 0}},
- {3249, {wxStyledTextCtrl, vCHomeWrapExtend, 0}},
- {3250, {wxStyledTextCtrl, lineCopy, 0}},
- {3251, {wxStyledTextCtrl, moveCaretInsideView, 0}},
- {3252, {wxStyledTextCtrl, lineLength, 1}},
- {3253, {wxStyledTextCtrl, braceHighlight, 2}},
- {3254, {wxStyledTextCtrl, braceBadLight, 1}},
- {3255, {wxStyledTextCtrl, braceMatch, 1}},
- {3256, {wxStyledTextCtrl, getViewEOL, 0}},
- {3257, {wxStyledTextCtrl, setViewEOL, 1}},
- {3258, {wxStyledTextCtrl, setModEventMask, 1}},
- {3259, {wxStyledTextCtrl, getEdgeColumn, 0}},
- {3260, {wxStyledTextCtrl, setEdgeColumn, 1}},
- {3261, {wxStyledTextCtrl, getEdgeMode, 0}},
- {3262, {wxStyledTextCtrl, getEdgeColour, 0}},
- {3263, {wxStyledTextCtrl, setEdgeColour, 1}},
- {3264, {wxStyledTextCtrl, searchAnchor, 0}},
- {3265, {wxStyledTextCtrl, searchNext, 2}},
- {3266, {wxStyledTextCtrl, searchPrev, 2}},
- {3267, {wxStyledTextCtrl, linesOnScreen, 0}},
- {3268, {wxStyledTextCtrl, usePopUp, 1}},
- {3269, {wxStyledTextCtrl, selectionIsRectangle, 0}},
- {3270, {wxStyledTextCtrl, setZoom, 1}},
- {3271, {wxStyledTextCtrl, getZoom, 0}},
- {3272, {wxStyledTextCtrl, getModEventMask, 0}},
- {3273, {wxStyledTextCtrl, setSTCFocus, 1}},
- {3274, {wxStyledTextCtrl, getSTCFocus, 0}},
- {3275, {wxStyledTextCtrl, setStatus, 1}},
- {3276, {wxStyledTextCtrl, getStatus, 0}},
- {3277, {wxStyledTextCtrl, setMouseDownCaptures, 1}},
- {3278, {wxStyledTextCtrl, getMouseDownCaptures, 0}},
- {3279, {wxStyledTextCtrl, setSTCCursor, 1}},
- {3280, {wxStyledTextCtrl, getSTCCursor, 0}},
- {3281, {wxStyledTextCtrl, setControlCharSymbol, 1}},
- {3282, {wxStyledTextCtrl, getControlCharSymbol, 0}},
- {3283, {wxStyledTextCtrl, wordPartLeft, 0}},
- {3284, {wxStyledTextCtrl, wordPartLeftExtend, 0}},
- {3285, {wxStyledTextCtrl, wordPartRight, 0}},
- {3286, {wxStyledTextCtrl, wordPartRightExtend, 0}},
- {3287, {wxStyledTextCtrl, setVisiblePolicy, 2}},
- {3288, {wxStyledTextCtrl, delLineLeft, 0}},
- {3289, {wxStyledTextCtrl, delLineRight, 0}},
- {3290, {wxStyledTextCtrl, getXOffset, 0}},
- {3291, {wxStyledTextCtrl, chooseCaretX, 0}},
- {3292, {wxStyledTextCtrl, setXCaretPolicy, 2}},
- {3293, {wxStyledTextCtrl, setYCaretPolicy, 2}},
- {3294, {wxStyledTextCtrl, getPrintWrapMode, 0}},
- {3295, {wxStyledTextCtrl, setHotspotActiveForeground, 2}},
- {3296, {wxStyledTextCtrl, setHotspotActiveBackground, 2}},
- {3297, {wxStyledTextCtrl, setHotspotActiveUnderline, 1}},
- {3298, {wxStyledTextCtrl, setHotspotSingleLine, 1}},
- {3299, {wxStyledTextCtrl, paraDownExtend, 0}},
- {3300, {wxStyledTextCtrl, paraUp, 0}},
- {3301, {wxStyledTextCtrl, paraUpExtend, 0}},
- {3302, {wxStyledTextCtrl, positionBefore, 1}},
- {3303, {wxStyledTextCtrl, positionAfter, 1}},
- {3304, {wxStyledTextCtrl, copyRange, 2}},
- {3305, {wxStyledTextCtrl, copyText, 2}},
- {3306, {wxStyledTextCtrl, setSelectionMode, 1}},
- {3307, {wxStyledTextCtrl, getSelectionMode, 0}},
- {3308, {wxStyledTextCtrl, lineDownRectExtend, 0}},
- {3309, {wxStyledTextCtrl, lineUpRectExtend, 0}},
- {3310, {wxStyledTextCtrl, charLeftRectExtend, 0}},
- {3311, {wxStyledTextCtrl, charRightRectExtend, 0}},
- {3312, {wxStyledTextCtrl, homeRectExtend, 0}},
- {3313, {wxStyledTextCtrl, vCHomeRectExtend, 0}},
- {3314, {wxStyledTextCtrl, lineEndRectExtend, 0}},
- {3315, {wxStyledTextCtrl, pageUpRectExtend, 0}},
- {3316, {wxStyledTextCtrl, pageDownRectExtend, 0}},
- {3317, {wxStyledTextCtrl, stutteredPageUp, 0}},
- {3318, {wxStyledTextCtrl, stutteredPageUpExtend, 0}},
- {3319, {wxStyledTextCtrl, stutteredPageDown, 0}},
- {3320, {wxStyledTextCtrl, stutteredPageDownExtend, 0}},
- {3321, {wxStyledTextCtrl, wordLeftEnd, 0}},
- {3322, {wxStyledTextCtrl, wordLeftEndExtend, 0}},
- {3323, {wxStyledTextCtrl, wordRightEnd, 0}},
- {3324, {wxStyledTextCtrl, wordRightEndExtend, 0}},
- {3325, {wxStyledTextCtrl, setWhitespaceChars, 1}},
- {3326, {wxStyledTextCtrl, setCharsDefault, 0}},
- {3327, {wxStyledTextCtrl, autoCompGetCurrent, 0}},
- {3328, {wxStyledTextCtrl, allocate, 1}},
- {3329, {wxStyledTextCtrl, findColumn, 2}},
- {3330, {wxStyledTextCtrl, getCaretSticky, 0}},
- {3331, {wxStyledTextCtrl, setCaretSticky, 1}},
- {3332, {wxStyledTextCtrl, toggleCaretSticky, 0}},
- {3333, {wxStyledTextCtrl, setPasteConvertEndings, 1}},
- {3334, {wxStyledTextCtrl, getPasteConvertEndings, 0}},
- {3335, {wxStyledTextCtrl, selectionDuplicate, 0}},
- {3336, {wxStyledTextCtrl, setCaretLineBackAlpha, 1}},
- {3337, {wxStyledTextCtrl, getCaretLineBackAlpha, 0}},
- {3338, {wxStyledTextCtrl, startRecord, 0}},
- {3339, {wxStyledTextCtrl, stopRecord, 0}},
- {3340, {wxStyledTextCtrl, setLexer, 1}},
- {3341, {wxStyledTextCtrl, getLexer, 0}},
- {3342, {wxStyledTextCtrl, colourise, 2}},
- {3343, {wxStyledTextCtrl, setProperty, 2}},
- {3344, {wxStyledTextCtrl, setKeyWords, 2}},
- {3345, {wxStyledTextCtrl, setLexerLanguage, 1}},
- {3346, {wxStyledTextCtrl, getProperty, 1}},
- {3347, {wxStyledTextCtrl, getStyleBitsNeeded, 0}},
- {3348, {wxStyledTextCtrl, getCurrentLine, 0}},
- {3349, {wxStyledTextCtrl, styleSetSpec, 2}},
- {3350, {wxStyledTextCtrl, styleSetFont, 2}},
- {3351, {wxStyledTextCtrl, styleSetFontAttr, 7}},
- {3352, {wxStyledTextCtrl, styleSetCharacterSet, 2}},
- {3353, {wxStyledTextCtrl, styleSetFontEncoding, 2}},
- {3354, {wxStyledTextCtrl, cmdKeyExecute, 1}},
- {3355, {wxStyledTextCtrl, setMargins, 2}},
- {3356, {wxStyledTextCtrl, getSelection, 2}},
- {3357, {wxStyledTextCtrl, pointFromPosition, 1}},
- {3358, {wxStyledTextCtrl, scrollToLine, 1}},
- {3359, {wxStyledTextCtrl, scrollToColumn, 1}},
- {3360, {wxStyledTextCtrl, sendMsg, 2}},
- {3361, {wxStyledTextCtrl, setVScrollBar, 1}},
- {3362, {wxStyledTextCtrl, setHScrollBar, 1}},
- {3363, {wxStyledTextCtrl, getLastKeydownProcessed, 0}},
- {3364, {wxStyledTextCtrl, setLastKeydownProcessed, 1}},
- {3365, {wxStyledTextCtrl, saveFile, 1}},
- {3366, {wxStyledTextCtrl, loadFile, 1}},
- {3367, {wxStyledTextCtrl, doDragOver, 3}},
- {3368, {wxStyledTextCtrl, doDropText, 3}},
- {3369, {wxStyledTextCtrl, getUseAntiAliasing, 0}},
- {3370, {wxStyledTextCtrl, addTextRaw, 1}},
- {3371, {wxStyledTextCtrl, insertTextRaw, 2}},
- {3372, {wxStyledTextCtrl, getCurLineRaw, 1}},
- {3373, {wxStyledTextCtrl, getLineRaw, 1}},
- {3374, {wxStyledTextCtrl, getSelectedTextRaw, 0}},
- {3375, {wxStyledTextCtrl, getTextRangeRaw, 2}},
- {3376, {wxStyledTextCtrl, setTextRaw, 1}},
- {3377, {wxStyledTextCtrl, getTextRaw, 0}},
- {3378, {wxStyledTextCtrl, appendTextRaw, 1}},
- {3379, {wxArtProvider, getBitmap, 2}},
- {3380, {wxArtProvider, getIcon, 2}},
- {3381, {wxTreeEvent, getKeyCode, 0}},
- {3382, {wxTreeEvent, getItem, 0}},
- {3383, {wxTreeEvent, getKeyEvent, 0}},
- {3384, {wxTreeEvent, getLabel, 0}},
- {3385, {wxTreeEvent, getOldItem, 0}},
- {3386, {wxTreeEvent, getPoint, 0}},
- {3387, {wxTreeEvent, isEditCancelled, 0}},
- {3388, {wxTreeEvent, setToolTip, 1}},
- {3389, {wxNotebookEvent, getOldSelection, 0}},
- {3390, {wxNotebookEvent, getSelection, 0}},
- {3391, {wxNotebookEvent, setOldSelection, 1}},
- {3392, {wxNotebookEvent, setSelection, 1}},
- {3393, {wxFileDataObject, new, 0}},
- {3394, {wxFileDataObject, addFile, 1}},
- {3395, {wxFileDataObject, getFilenames, 0}},
- {3396, {wxFileDataObject, 'Destroy', undefined}},
- {3397, {wxTextDataObject, new, 1}},
- {3398, {wxTextDataObject, getTextLength, 0}},
- {3399, {wxTextDataObject, getText, 0}},
- {3400, {wxTextDataObject, setText, 1}},
- {3401, {wxTextDataObject, 'Destroy', undefined}},
- {3402, {wxBitmapDataObject, new_1_1, 1}},
- {3403, {wxBitmapDataObject, new_1_0, 1}},
- {3404, {wxBitmapDataObject, getBitmap, 0}},
- {3405, {wxBitmapDataObject, setBitmap, 1}},
- {3406, {wxBitmapDataObject, 'Destroy', undefined}},
- {3408, {wxClipboard, new, 0}},
- {3409, {wxClipboard, destruct, 0}},
- {3410, {wxClipboard, addData, 1}},
- {3411, {wxClipboard, clear, 0}},
- {3412, {wxClipboard, close, 0}},
- {3413, {wxClipboard, flush, 0}},
- {3414, {wxClipboard, getData, 1}},
- {3415, {wxClipboard, isOpened, 0}},
- {3416, {wxClipboard, open, 0}},
- {3417, {wxClipboard, setData, 1}},
- {3419, {wxClipboard, usePrimarySelection, 1}},
- {3420, {wxClipboard, isSupported, 1}},
- {3421, {wxClipboard, get, 0}},
- {3422, {wxSpinEvent, getPosition, 0}},
- {3423, {wxSpinEvent, setPosition, 1}},
- {3424, {wxSplitterWindow, new_0, 0}},
- {3425, {wxSplitterWindow, new_2, 2}},
- {3426, {wxSplitterWindow, destruct, 0}},
- {3427, {wxSplitterWindow, create, 2}},
- {3428, {wxSplitterWindow, getMinimumPaneSize, 0}},
- {3429, {wxSplitterWindow, getSashGravity, 0}},
- {3430, {wxSplitterWindow, getSashPosition, 0}},
- {3431, {wxSplitterWindow, getSplitMode, 0}},
- {3432, {wxSplitterWindow, getWindow1, 0}},
- {3433, {wxSplitterWindow, getWindow2, 0}},
- {3434, {wxSplitterWindow, initialize, 1}},
- {3435, {wxSplitterWindow, isSplit, 0}},
- {3436, {wxSplitterWindow, replaceWindow, 2}},
- {3437, {wxSplitterWindow, setSashGravity, 1}},
- {3438, {wxSplitterWindow, setSashPosition, 2}},
- {3439, {wxSplitterWindow, setSashSize, 1}},
- {3440, {wxSplitterWindow, setMinimumPaneSize, 1}},
- {3441, {wxSplitterWindow, setSplitMode, 1}},
- {3442, {wxSplitterWindow, splitHorizontally, 3}},
- {3443, {wxSplitterWindow, splitVertically, 3}},
- {3444, {wxSplitterWindow, unsplit, 1}},
- {3445, {wxSplitterWindow, updateSize, 0}},
- {3446, {wxSplitterEvent, getSashPosition, 0}},
- {3447, {wxSplitterEvent, getX, 0}},
- {3448, {wxSplitterEvent, getY, 0}},
- {3449, {wxSplitterEvent, getWindowBeingRemoved, 0}},
- {3450, {wxSplitterEvent, setSashPosition, 1}},
- {3451, {wxHtmlWindow, new_0, 0}},
- {3452, {wxHtmlWindow, new_2, 2}},
- {3453, {wxHtmlWindow, appendToPage, 1}},
- {3454, {wxHtmlWindow, getOpenedAnchor, 0}},
- {3455, {wxHtmlWindow, getOpenedPage, 0}},
- {3456, {wxHtmlWindow, getOpenedPageTitle, 0}},
- {3457, {wxHtmlWindow, getRelatedFrame, 0}},
- {3458, {wxHtmlWindow, historyBack, 0}},
- {3459, {wxHtmlWindow, historyCanBack, 0}},
- {3460, {wxHtmlWindow, historyCanForward, 0}},
- {3461, {wxHtmlWindow, historyClear, 0}},
- {3462, {wxHtmlWindow, historyForward, 0}},
- {3463, {wxHtmlWindow, loadFile, 1}},
- {3464, {wxHtmlWindow, loadPage, 1}},
- {3465, {wxHtmlWindow, selectAll, 0}},
- {3466, {wxHtmlWindow, selectionToText, 0}},
- {3467, {wxHtmlWindow, selectLine, 1}},
- {3468, {wxHtmlWindow, selectWord, 1}},
- {3469, {wxHtmlWindow, setBorders, 1}},
- {3470, {wxHtmlWindow, setFonts, 3}},
- {3471, {wxHtmlWindow, setPage, 1}},
- {3472, {wxHtmlWindow, setRelatedFrame, 2}},
- {3473, {wxHtmlWindow, setRelatedStatusBar, 1}},
- {3474, {wxHtmlWindow, toText, 0}},
- {3475, {wxHtmlWindow, 'Destroy', undefined}},
- {3476, {wxHtmlLinkEvent, getLinkInfo, 0}},
- {3477, {wxAuiNotebookEvent, setSelection, 1}},
- {3478, {wxAuiNotebookEvent, getSelection, 0}},
- {3479, {wxAuiNotebookEvent, setOldSelection, 1}},
- {3480, {wxAuiNotebookEvent, getOldSelection, 0}},
- {3481, {wxAuiNotebookEvent, setDragSource, 1}},
- {3482, {wxAuiNotebookEvent, getDragSource, 0}},
- {3483, {wxAuiManagerEvent, setManager, 1}},
- {3484, {wxAuiManagerEvent, getManager, 0}},
- {3485, {wxAuiManagerEvent, setPane, 1}},
- {3486, {wxAuiManagerEvent, getPane, 0}},
- {3487, {wxAuiManagerEvent, setButton, 1}},
- {3488, {wxAuiManagerEvent, getButton, 0}},
- {3489, {wxAuiManagerEvent, setDC, 1}},
- {3490, {wxAuiManagerEvent, getDC, 0}},
- {3491, {wxAuiManagerEvent, veto, 1}},
- {3492, {wxAuiManagerEvent, getVeto, 0}},
- {3493, {wxAuiManagerEvent, setCanVeto, 1}},
- {3494, {wxAuiManagerEvent, canVeto, 0}},
- {3495, {wxLogNull, new, 0}},
- {3496, {wxLogNull, 'Destroy', undefined}},
+ {885, {wxControlWithItems, getClientData, 1}},
+ {886, {wxControlWithItems, setClientData, 2}},
+ {887, {wxControlWithItems, getCount, 0}},
+ {888, {wxControlWithItems, getSelection, 0}},
+ {889, {wxControlWithItems, getString, 1}},
+ {890, {wxControlWithItems, getStringSelection, 0}},
+ {891, {wxControlWithItems, insert_2, 2}},
+ {892, {wxControlWithItems, insert_3, 3}},
+ {893, {wxControlWithItems, isEmpty, 0}},
+ {894, {wxControlWithItems, select, 1}},
+ {895, {wxControlWithItems, setSelection, 1}},
+ {896, {wxControlWithItems, setString, 2}},
+ {897, {wxControlWithItems, setStringSelection, 1}},
+ {900, {wxMenu, new_2, 2}},
+ {901, {wxMenu, new_1, 1}},
+ {903, {wxMenu, destruct, 0}},
+ {904, {wxMenu, append_3, 3}},
+ {905, {wxMenu, append_1, 1}},
+ {906, {wxMenu, append_4_0, 4}},
+ {907, {wxMenu, append_4_1, 4}},
+ {908, {wxMenu, appendCheckItem, 3}},
+ {909, {wxMenu, appendRadioItem, 3}},
+ {910, {wxMenu, appendSeparator, 0}},
+ {911, {wxMenu, break, 0}},
+ {912, {wxMenu, check, 2}},
+ {913, {wxMenu, delete_1_0, 1}},
+ {914, {wxMenu, delete_1_1, 1}},
+ {915, {wxMenu, destroy_1_0, 1}},
+ {916, {wxMenu, destroy_1_1, 1}},
+ {917, {wxMenu, enable, 2}},
+ {918, {wxMenu, findItem_1, 1}},
+ {919, {wxMenu, findItem_2, 2}},
+ {920, {wxMenu, findItemByPosition, 1}},
+ {921, {wxMenu, getHelpString, 1}},
+ {922, {wxMenu, getLabel, 1}},
+ {923, {wxMenu, getMenuItemCount, 0}},
+ {924, {wxMenu, getMenuItems, 0}},
+ {926, {wxMenu, getTitle, 0}},
+ {927, {wxMenu, insert_2, 2}},
+ {928, {wxMenu, insert_3, 3}},
+ {929, {wxMenu, insert_5_1, 5}},
+ {930, {wxMenu, insert_5_0, 5}},
+ {931, {wxMenu, insertCheckItem, 4}},
+ {932, {wxMenu, insertRadioItem, 4}},
+ {933, {wxMenu, insertSeparator, 1}},
+ {934, {wxMenu, isChecked, 1}},
+ {935, {wxMenu, isEnabled, 1}},
+ {936, {wxMenu, prepend_1, 1}},
+ {937, {wxMenu, prepend_2, 2}},
+ {938, {wxMenu, prepend_4_1, 4}},
+ {939, {wxMenu, prepend_4_0, 4}},
+ {940, {wxMenu, prependCheckItem, 3}},
+ {941, {wxMenu, prependRadioItem, 3}},
+ {942, {wxMenu, prependSeparator, 0}},
+ {943, {wxMenu, remove_1_0, 1}},
+ {944, {wxMenu, remove_1_1, 1}},
+ {945, {wxMenu, setHelpString, 2}},
+ {946, {wxMenu, setLabel, 2}},
+ {947, {wxMenu, setTitle, 1}},
+ {948, {wxMenuItem, new, 1}},
+ {950, {wxMenuItem, destruct, 0}},
+ {951, {wxMenuItem, check, 1}},
+ {952, {wxMenuItem, enable, 1}},
+ {953, {wxMenuItem, getBitmap, 0}},
+ {954, {wxMenuItem, getHelp, 0}},
+ {955, {wxMenuItem, getId, 0}},
+ {956, {wxMenuItem, getKind, 0}},
+ {957, {wxMenuItem, getLabel, 0}},
+ {958, {wxMenuItem, getLabelFromText, 1}},
+ {959, {wxMenuItem, getMenu, 0}},
+ {960, {wxMenuItem, getText, 0}},
+ {961, {wxMenuItem, getSubMenu, 0}},
+ {962, {wxMenuItem, isCheckable, 0}},
+ {963, {wxMenuItem, isChecked, 0}},
+ {964, {wxMenuItem, isEnabled, 0}},
+ {965, {wxMenuItem, isSeparator, 0}},
+ {966, {wxMenuItem, isSubMenu, 0}},
+ {967, {wxMenuItem, setBitmap, 1}},
+ {968, {wxMenuItem, setHelp, 1}},
+ {969, {wxMenuItem, setMenu, 1}},
+ {970, {wxMenuItem, setSubMenu, 1}},
+ {971, {wxMenuItem, setText, 1}},
+ {972, {wxToolBar, addControl, 1}},
+ {973, {wxToolBar, addSeparator, 0}},
+ {974, {wxToolBar, addTool_5, 5}},
+ {975, {wxToolBar, addTool_4_0, 4}},
+ {976, {wxToolBar, addTool_1, 1}},
+ {977, {wxToolBar, addTool_4_1, 4}},
+ {978, {wxToolBar, addTool_3, 3}},
+ {979, {wxToolBar, addTool_6, 6}},
+ {980, {wxToolBar, addCheckTool, 4}},
+ {981, {wxToolBar, addRadioTool, 4}},
+ {982, {wxToolBar, deleteTool, 1}},
+ {983, {wxToolBar, deleteToolByPos, 1}},
+ {984, {wxToolBar, enableTool, 2}},
+ {985, {wxToolBar, findById, 1}},
+ {986, {wxToolBar, findControl, 1}},
+ {987, {wxToolBar, findToolForPosition, 2}},
+ {988, {wxToolBar, getToolSize, 0}},
+ {989, {wxToolBar, getToolBitmapSize, 0}},
+ {990, {wxToolBar, getMargins, 0}},
+ {991, {wxToolBar, getToolEnabled, 1}},
+ {992, {wxToolBar, getToolLongHelp, 1}},
+ {993, {wxToolBar, getToolPacking, 0}},
+ {994, {wxToolBar, getToolPos, 1}},
+ {995, {wxToolBar, getToolSeparation, 0}},
+ {996, {wxToolBar, getToolShortHelp, 1}},
+ {997, {wxToolBar, getToolState, 1}},
+ {998, {wxToolBar, insertControl, 2}},
+ {999, {wxToolBar, insertSeparator, 1}},
+ {1000, {wxToolBar, insertTool_5, 5}},
+ {1001, {wxToolBar, insertTool_2, 2}},
+ {1002, {wxToolBar, insertTool_4, 4}},
+ {1003, {wxToolBar, realize, 0}},
+ {1004, {wxToolBar, removeTool, 1}},
+ {1005, {wxToolBar, setMargins, 2}},
+ {1006, {wxToolBar, setToolBitmapSize, 1}},
+ {1007, {wxToolBar, setToolLongHelp, 2}},
+ {1008, {wxToolBar, setToolPacking, 1}},
+ {1009, {wxToolBar, setToolShortHelp, 2}},
+ {1010, {wxToolBar, setToolSeparation, 1}},
+ {1011, {wxToolBar, toggleTool, 2}},
+ {1013, {wxStatusBar, new_0, 0}},
+ {1014, {wxStatusBar, new_2, 2}},
+ {1016, {wxStatusBar, destruct, 0}},
+ {1017, {wxStatusBar, create, 2}},
+ {1018, {wxStatusBar, getFieldRect, 2}},
+ {1019, {wxStatusBar, getFieldsCount, 0}},
+ {1020, {wxStatusBar, getStatusText, 1}},
+ {1021, {wxStatusBar, popStatusText, 1}},
+ {1022, {wxStatusBar, pushStatusText, 2}},
+ {1023, {wxStatusBar, setFieldsCount, 2}},
+ {1024, {wxStatusBar, setMinHeight, 1}},
+ {1025, {wxStatusBar, setStatusText, 2}},
+ {1026, {wxStatusBar, setStatusWidths, 2}},
+ {1027, {wxStatusBar, setStatusStyles, 2}},
+ {1028, {wxBitmap, new_0, 0}},
+ {1029, {wxBitmap, new_3, 3}},
+ {1030, {wxBitmap, new_4, 4}},
+ {1031, {wxBitmap, new_2_0, 2}},
+ {1032, {wxBitmap, new_2_1, 2}},
+ {1033, {wxBitmap, destruct, 0}},
+ {1034, {wxBitmap, convertToImage, 0}},
+ {1035, {wxBitmap, copyFromIcon, 1}},
+ {1036, {wxBitmap, create, 3}},
+ {1037, {wxBitmap, getDepth, 0}},
+ {1038, {wxBitmap, getHeight, 0}},
+ {1039, {wxBitmap, getPalette, 0}},
+ {1040, {wxBitmap, getMask, 0}},
+ {1041, {wxBitmap, getWidth, 0}},
+ {1042, {wxBitmap, getSubBitmap, 1}},
+ {1043, {wxBitmap, loadFile, 2}},
+ {1044, {wxBitmap, ok, 0}},
+ {1045, {wxBitmap, saveFile, 3}},
+ {1046, {wxBitmap, setDepth, 1}},
+ {1047, {wxBitmap, setHeight, 1}},
+ {1048, {wxBitmap, setMask, 1}},
+ {1049, {wxBitmap, setPalette, 1}},
+ {1050, {wxBitmap, setWidth, 1}},
+ {1051, {wxIcon, new_0, 0}},
+ {1052, {wxIcon, new_2, 2}},
+ {1053, {wxIcon, new_1, 1}},
+ {1054, {wxIcon, copyFromBitmap, 1}},
+ {1055, {wxIcon, 'Destroy', undefined}},
+ {1056, {wxIconBundle, new_0, 0}},
+ {1057, {wxIconBundle, new_2, 2}},
+ {1058, {wxIconBundle, new_1_0, 1}},
+ {1059, {wxIconBundle, new_1_1, 1}},
+ {1060, {wxIconBundle, destruct, 0}},
+ {1061, {wxIconBundle, addIcon_2, 2}},
+ {1062, {wxIconBundle, addIcon_1, 1}},
+ {1063, {wxIconBundle, getIcon_1_1, 1}},
+ {1064, {wxIconBundle, getIcon_1_0, 1}},
+ {1065, {wxCursor, new_0, 0}},
+ {1066, {wxCursor, new_1_0, 1}},
+ {1067, {wxCursor, new_1_1, 1}},
+ {1068, {wxCursor, new_4, 4}},
+ {1069, {wxCursor, destruct, 0}},
+ {1070, {wxCursor, ok, 0}},
+ {1071, {wxMask, new_0, 0}},
+ {1072, {wxMask, new_2_1, 2}},
+ {1073, {wxMask, new_2_0, 2}},
+ {1074, {wxMask, new_1, 1}},
+ {1075, {wxMask, destruct, 0}},
+ {1076, {wxMask, create_2_1, 2}},
+ {1077, {wxMask, create_2_0, 2}},
+ {1078, {wxMask, create_1, 1}},
+ {1079, {wxImage, new_0, 0}},
+ {1080, {wxImage, new_3_0, 3}},
+ {1081, {wxImage, new_4, 4}},
+ {1082, {wxImage, new_5, 5}},
+ {1083, {wxImage, new_2, 2}},
+ {1084, {wxImage, new_3_1, 3}},
+ {1085, {wxImage, blur, 1}},
+ {1086, {wxImage, blurHorizontal, 1}},
+ {1087, {wxImage, blurVertical, 1}},
+ {1088, {wxImage, convertAlphaToMask, 1}},
+ {1089, {wxImage, convertToGreyscale, 1}},
+ {1090, {wxImage, convertToMono, 3}},
+ {1091, {wxImage, copy, 0}},
+ {1092, {wxImage, create_3, 3}},
+ {1093, {wxImage, create_4, 4}},
+ {1094, {wxImage, create_5, 5}},
+ {1095, {wxImage, 'Destroy', 0}},
+ {1096, {wxImage, findFirstUnusedColour, 4}},
+ {1097, {wxImage, getImageExtWildcard, 0}},
+ {1098, {wxImage, getAlpha_2, 2}},
+ {1099, {wxImage, getAlpha_0, 0}},
+ {1100, {wxImage, getBlue, 2}},
+ {1101, {wxImage, getData, 0}},
+ {1102, {wxImage, getGreen, 2}},
+ {1103, {wxImage, getImageCount, 2}},
+ {1104, {wxImage, getHeight, 0}},
+ {1105, {wxImage, getMaskBlue, 0}},
+ {1106, {wxImage, getMaskGreen, 0}},
+ {1107, {wxImage, getMaskRed, 0}},
+ {1108, {wxImage, getOrFindMaskColour, 3}},
+ {1109, {wxImage, getPalette, 0}},
+ {1110, {wxImage, getRed, 2}},
+ {1111, {wxImage, getSubImage, 1}},
+ {1112, {wxImage, getWidth, 0}},
+ {1113, {wxImage, hasAlpha, 0}},
+ {1114, {wxImage, hasMask, 0}},
+ {1115, {wxImage, getOption, 1}},
+ {1116, {wxImage, getOptionInt, 1}},
+ {1117, {wxImage, hasOption, 1}},
+ {1118, {wxImage, initAlpha, 0}},
+ {1119, {wxImage, initStandardHandlers, 0}},
+ {1120, {wxImage, isTransparent, 3}},
+ {1121, {wxImage, loadFile_2, 2}},
+ {1122, {wxImage, loadFile_3, 3}},
+ {1123, {wxImage, ok, 0}},
+ {1124, {wxImage, removeHandler, 1}},
+ {1125, {wxImage, mirror, 1}},
+ {1126, {wxImage, replace, 6}},
+ {1127, {wxImage, rescale, 3}},
+ {1128, {wxImage, resize, 3}},
+ {1129, {wxImage, rotate, 3}},
+ {1130, {wxImage, rotateHue, 1}},
+ {1131, {wxImage, rotate90, 1}},
+ {1132, {wxImage, saveFile_1, 1}},
+ {1133, {wxImage, saveFile_2_0, 2}},
+ {1134, {wxImage, saveFile_2_1, 2}},
+ {1135, {wxImage, scale, 3}},
+ {1136, {wxImage, size, 3}},
+ {1137, {wxImage, setAlpha_3, 3}},
+ {1138, {wxImage, setAlpha_2, 2}},
+ {1139, {wxImage, setData_2, 2}},
+ {1140, {wxImage, setData_4, 4}},
+ {1141, {wxImage, setMask, 1}},
+ {1142, {wxImage, setMaskColour, 3}},
+ {1143, {wxImage, setMaskFromImage, 4}},
+ {1144, {wxImage, setOption_2_1, 2}},
+ {1145, {wxImage, setOption_2_0, 2}},
+ {1146, {wxImage, setPalette, 1}},
+ {1147, {wxImage, setRGB_5, 5}},
+ {1148, {wxImage, setRGB_4, 4}},
+ {1149, {wxImage, 'Destroy', undefined}},
+ {1150, {wxBrush, new_0, 0}},
+ {1151, {wxBrush, new_2, 2}},
+ {1152, {wxBrush, new_1, 1}},
+ {1154, {wxBrush, destruct, 0}},
+ {1155, {wxBrush, getColour, 0}},
+ {1156, {wxBrush, getStipple, 0}},
+ {1157, {wxBrush, getStyle, 0}},
+ {1158, {wxBrush, isHatch, 0}},
+ {1159, {wxBrush, isOk, 0}},
+ {1160, {wxBrush, setColour_1, 1}},
+ {1161, {wxBrush, setColour_3, 3}},
+ {1162, {wxBrush, setStipple, 1}},
+ {1163, {wxBrush, setStyle, 1}},
+ {1164, {wxPen, new_0, 0}},
+ {1165, {wxPen, new_2, 2}},
+ {1166, {wxPen, destruct, 0}},
+ {1167, {wxPen, getCap, 0}},
+ {1168, {wxPen, getColour, 0}},
+ {1169, {wxPen, getJoin, 0}},
+ {1170, {wxPen, getStyle, 0}},
+ {1171, {wxPen, getWidth, 0}},
+ {1172, {wxPen, isOk, 0}},
+ {1173, {wxPen, setCap, 1}},
+ {1174, {wxPen, setColour_1, 1}},
+ {1175, {wxPen, setColour_3, 3}},
+ {1176, {wxPen, setJoin, 1}},
+ {1177, {wxPen, setStyle, 1}},
+ {1178, {wxPen, setWidth, 1}},
+ {1179, {wxRegion, new_0, 0}},
+ {1180, {wxRegion, new_4, 4}},
+ {1181, {wxRegion, new_2, 2}},
+ {1182, {wxRegion, new_1_1, 1}},
+ {1184, {wxRegion, new_1_0, 1}},
+ {1186, {wxRegion, destruct, 0}},
+ {1187, {wxRegion, clear, 0}},
+ {1188, {wxRegion, contains_2, 2}},
+ {1189, {wxRegion, contains_1_0, 1}},
+ {1190, {wxRegion, contains_4, 4}},
+ {1191, {wxRegion, contains_1_1, 1}},
+ {1192, {wxRegion, convertToBitmap, 0}},
+ {1193, {wxRegion, getBox, 0}},
+ {1194, {wxRegion, intersect_4, 4}},
+ {1195, {wxRegion, intersect_1_1, 1}},
+ {1196, {wxRegion, intersect_1_0, 1}},
+ {1197, {wxRegion, isEmpty, 0}},
+ {1198, {wxRegion, subtract_4, 4}},
+ {1199, {wxRegion, subtract_1_1, 1}},
+ {1200, {wxRegion, subtract_1_0, 1}},
+ {1201, {wxRegion, offset_2, 2}},
+ {1202, {wxRegion, offset_1, 1}},
+ {1203, {wxRegion, union_4, 4}},
+ {1204, {wxRegion, union_1_2, 1}},
+ {1205, {wxRegion, union_1_1, 1}},
+ {1206, {wxRegion, union_1_0, 1}},
+ {1207, {wxRegion, union_3, 3}},
+ {1208, {wxRegion, xor_4, 4}},
+ {1209, {wxRegion, xor_1_1, 1}},
+ {1210, {wxRegion, xor_1_0, 1}},
+ {1211, {wxAcceleratorTable, new_0, 0}},
+ {1212, {wxAcceleratorTable, new_2, 2}},
+ {1213, {wxAcceleratorTable, destruct, 0}},
+ {1214, {wxAcceleratorTable, ok, 0}},
+ {1215, {wxAcceleratorEntry, new_1_0, 1}},
+ {1216, {wxAcceleratorEntry, new_1_1, 1}},
+ {1217, {wxAcceleratorEntry, getCommand, 0}},
+ {1218, {wxAcceleratorEntry, getFlags, 0}},
+ {1219, {wxAcceleratorEntry, getKeyCode, 0}},
+ {1220, {wxAcceleratorEntry, set, 4}},
+ {1221, {wxAcceleratorEntry, 'Destroy', undefined}},
+ {1226, {wxCaret, new_3, 3}},
+ {1227, {wxCaret, new_2, 2}},
+ {1229, {wxCaret, destruct, 0}},
+ {1230, {wxCaret, create_3, 3}},
+ {1231, {wxCaret, create_2, 2}},
+ {1232, {wxCaret, getBlinkTime, 0}},
+ {1234, {wxCaret, getPosition, 0}},
+ {1236, {wxCaret, getSize, 0}},
+ {1237, {wxCaret, getWindow, 0}},
+ {1238, {wxCaret, hide, 0}},
+ {1239, {wxCaret, isOk, 0}},
+ {1240, {wxCaret, isVisible, 0}},
+ {1241, {wxCaret, move_2, 2}},
+ {1242, {wxCaret, move_1, 1}},
+ {1243, {wxCaret, setBlinkTime, 1}},
+ {1244, {wxCaret, setSize_2, 2}},
+ {1245, {wxCaret, setSize_1, 1}},
+ {1246, {wxCaret, show, 1}},
+ {1247, {wxSizer, add_2_1, 2}},
+ {1248, {wxSizer, add_2_0, 2}},
+ {1249, {wxSizer, add_3, 3}},
+ {1250, {wxSizer, add_2_3, 2}},
+ {1251, {wxSizer, add_2_2, 2}},
+ {1252, {wxSizer, addSpacer, 1}},
+ {1253, {wxSizer, addStretchSpacer, 1}},
+ {1254, {wxSizer, calcMin, 0}},
+ {1255, {wxSizer, clear, 1}},
+ {1256, {wxSizer, detach_1_2, 1}},
+ {1257, {wxSizer, detach_1_1, 1}},
+ {1258, {wxSizer, detach_1_0, 1}},
+ {1259, {wxSizer, fit, 1}},
+ {1260, {wxSizer, fitInside, 1}},
+ {1261, {wxSizer, getChildren, 0}},
+ {1262, {wxSizer, getItem_2_1, 2}},
+ {1263, {wxSizer, getItem_2_0, 2}},
+ {1264, {wxSizer, getItem_1, 1}},
+ {1265, {wxSizer, getSize, 0}},
+ {1266, {wxSizer, getPosition, 0}},
+ {1267, {wxSizer, getMinSize, 0}},
+ {1268, {wxSizer, hide_2_0, 2}},
+ {1269, {wxSizer, hide_2_1, 2}},
+ {1270, {wxSizer, hide_1, 1}},
+ {1271, {wxSizer, insert_3_1, 3}},
+ {1272, {wxSizer, insert_3_0, 3}},
+ {1273, {wxSizer, insert_4, 4}},
+ {1274, {wxSizer, insert_3_3, 3}},
+ {1275, {wxSizer, insert_3_2, 3}},
+ {1276, {wxSizer, insert_2, 2}},
+ {1277, {wxSizer, insertSpacer, 2}},
+ {1278, {wxSizer, insertStretchSpacer, 2}},
+ {1279, {wxSizer, isShown_1_2, 1}},
+ {1280, {wxSizer, isShown_1_1, 1}},
+ {1281, {wxSizer, isShown_1_0, 1}},
+ {1282, {wxSizer, layout, 0}},
+ {1283, {wxSizer, prepend_2_1, 2}},
+ {1284, {wxSizer, prepend_2_0, 2}},
+ {1285, {wxSizer, prepend_3, 3}},
+ {1286, {wxSizer, prepend_2_3, 2}},
+ {1287, {wxSizer, prepend_2_2, 2}},
+ {1288, {wxSizer, prepend_1, 1}},
+ {1289, {wxSizer, prependSpacer, 1}},
+ {1290, {wxSizer, prependStretchSpacer, 1}},
+ {1291, {wxSizer, recalcSizes, 0}},
+ {1292, {wxSizer, remove_1_1, 1}},
+ {1293, {wxSizer, remove_1_0, 1}},
+ {1294, {wxSizer, replace_3_1, 3}},
+ {1295, {wxSizer, replace_3_0, 3}},
+ {1296, {wxSizer, replace_2, 2}},
+ {1297, {wxSizer, setDimension, 4}},
+ {1298, {wxSizer, setMinSize_2, 2}},
+ {1299, {wxSizer, setMinSize_1, 1}},
+ {1300, {wxSizer, setItemMinSize_3_2, 3}},
+ {1301, {wxSizer, setItemMinSize_2_2, 2}},
+ {1302, {wxSizer, setItemMinSize_3_1, 3}},
+ {1303, {wxSizer, setItemMinSize_2_1, 2}},
+ {1304, {wxSizer, setItemMinSize_3_0, 3}},
+ {1305, {wxSizer, setItemMinSize_2_0, 2}},
+ {1306, {wxSizer, setSizeHints, 1}},
+ {1307, {wxSizer, setVirtualSizeHints, 1}},
+ {1308, {wxSizer, show_2_2, 2}},
+ {1309, {wxSizer, show_2_1, 2}},
+ {1310, {wxSizer, show_2_0, 2}},
+ {1311, {wxSizer, show_1, 1}},
+ {1312, {wxSizerFlags, new, 1}},
+ {1313, {wxSizerFlags, align, 1}},
+ {1314, {wxSizerFlags, border_2, 2}},
+ {1315, {wxSizerFlags, border_1, 1}},
+ {1316, {wxSizerFlags, center, 0}},
+ {1317, {wxSizerFlags, centre, 0}},
+ {1318, {wxSizerFlags, expand, 0}},
+ {1319, {wxSizerFlags, left, 0}},
+ {1320, {wxSizerFlags, proportion, 1}},
+ {1321, {wxSizerFlags, right, 0}},
+ {1322, {wxSizerFlags, 'Destroy', undefined}},
+ {1323, {wxSizerItem, new_5_1, 5}},
+ {1324, {wxSizerItem, new_2_1, 2}},
+ {1325, {wxSizerItem, new_5_0, 5}},
+ {1326, {wxSizerItem, new_2_0, 2}},
+ {1327, {wxSizerItem, new_6, 6}},
+ {1328, {wxSizerItem, new_3, 3}},
+ {1329, {wxSizerItem, new_0, 0}},
+ {1330, {wxSizerItem, destruct, 0}},
+ {1331, {wxSizerItem, calcMin, 0}},
+ {1332, {wxSizerItem, deleteWindows, 0}},
+ {1333, {wxSizerItem, detachSizer, 0}},
+ {1334, {wxSizerItem, getBorder, 0}},
+ {1335, {wxSizerItem, getFlag, 0}},
+ {1336, {wxSizerItem, getMinSize, 0}},
+ {1337, {wxSizerItem, getPosition, 0}},
+ {1338, {wxSizerItem, getProportion, 0}},
+ {1339, {wxSizerItem, getRatio, 0}},
+ {1340, {wxSizerItem, getRect, 0}},
+ {1341, {wxSizerItem, getSize, 0}},
+ {1342, {wxSizerItem, getSizer, 0}},
+ {1343, {wxSizerItem, getSpacer, 0}},
+ {1344, {wxSizerItem, getUserData, 0}},
+ {1345, {wxSizerItem, getWindow, 0}},
+ {1346, {wxSizerItem, isSizer, 0}},
+ {1347, {wxSizerItem, isShown, 0}},
+ {1348, {wxSizerItem, isSpacer, 0}},
+ {1349, {wxSizerItem, isWindow, 0}},
+ {1350, {wxSizerItem, setBorder, 1}},
+ {1351, {wxSizerItem, setDimension, 2}},
+ {1352, {wxSizerItem, setFlag, 1}},
+ {1353, {wxSizerItem, setInitSize, 2}},
+ {1354, {wxSizerItem, setMinSize_1, 1}},
+ {1355, {wxSizerItem, setMinSize_2, 2}},
+ {1356, {wxSizerItem, setProportion, 1}},
+ {1357, {wxSizerItem, setRatio_2, 2}},
+ {1358, {wxSizerItem, setRatio_1_1, 1}},
+ {1359, {wxSizerItem, setRatio_1_0, 1}},
+ {1360, {wxSizerItem, setSizer, 1}},
+ {1361, {wxSizerItem, setSpacer_1, 1}},
+ {1362, {wxSizerItem, setSpacer_2, 2}},
+ {1363, {wxSizerItem, setWindow, 1}},
+ {1364, {wxSizerItem, show, 1}},
+ {1365, {wxBoxSizer, new, 1}},
+ {1366, {wxBoxSizer, getOrientation, 0}},
+ {1367, {wxBoxSizer, 'Destroy', undefined}},
+ {1368, {wxStaticBoxSizer, new_2, 2}},
+ {1369, {wxStaticBoxSizer, new_3, 3}},
+ {1370, {wxStaticBoxSizer, getStaticBox, 0}},
+ {1371, {wxStaticBoxSizer, 'Destroy', undefined}},
+ {1372, {wxGridSizer, new_4, 4}},
+ {1373, {wxGridSizer, new_2, 2}},
+ {1374, {wxGridSizer, getCols, 0}},
+ {1375, {wxGridSizer, getHGap, 0}},
+ {1376, {wxGridSizer, getRows, 0}},
+ {1377, {wxGridSizer, getVGap, 0}},
+ {1378, {wxGridSizer, setCols, 1}},
+ {1379, {wxGridSizer, setHGap, 1}},
+ {1380, {wxGridSizer, setRows, 1}},
+ {1381, {wxGridSizer, setVGap, 1}},
+ {1382, {wxGridSizer, 'Destroy', undefined}},
+ {1383, {wxFlexGridSizer, new_4, 4}},
+ {1384, {wxFlexGridSizer, new_2, 2}},
+ {1385, {wxFlexGridSizer, addGrowableCol, 2}},
+ {1386, {wxFlexGridSizer, addGrowableRow, 2}},
+ {1387, {wxFlexGridSizer, getFlexibleDirection, 0}},
+ {1388, {wxFlexGridSizer, getNonFlexibleGrowMode, 0}},
+ {1389, {wxFlexGridSizer, removeGrowableCol, 1}},
+ {1390, {wxFlexGridSizer, removeGrowableRow, 1}},
+ {1391, {wxFlexGridSizer, setFlexibleDirection, 1}},
+ {1392, {wxFlexGridSizer, setNonFlexibleGrowMode, 1}},
+ {1393, {wxFlexGridSizer, 'Destroy', undefined}},
+ {1394, {wxGridBagSizer, new, 1}},
+ {1395, {wxGridBagSizer, add_3_2, 3}},
+ {1396, {wxGridBagSizer, add_3_1, 3}},
+ {1397, {wxGridBagSizer, add_4, 4}},
+ {1398, {wxGridBagSizer, add_1_0, 1}},
+ {1399, {wxGridBagSizer, add_2_1, 2}},
+ {1400, {wxGridBagSizer, add_2_0, 2}},
+ {1401, {wxGridBagSizer, add_3_0, 3}},
+ {1402, {wxGridBagSizer, add_1_1, 1}},
+ {1403, {wxGridBagSizer, calcMin, 0}},
+ {1404, {wxGridBagSizer, checkForIntersection_2, 2}},
+ {1405, {wxGridBagSizer, checkForIntersection_3, 3}},
+ {1406, {wxGridBagSizer, findItem_1_1, 1}},
+ {1407, {wxGridBagSizer, findItem_1_0, 1}},
+ {1408, {wxGridBagSizer, findItemAtPoint, 1}},
+ {1409, {wxGridBagSizer, findItemAtPosition, 1}},
+ {1410, {wxGridBagSizer, findItemWithData, 1}},
+ {1411, {wxGridBagSizer, getCellSize, 2}},
+ {1412, {wxGridBagSizer, getEmptyCellSize, 0}},
+ {1413, {wxGridBagSizer, getItemPosition_1_2, 1}},
+ {1414, {wxGridBagSizer, getItemPosition_1_1, 1}},
+ {1415, {wxGridBagSizer, getItemPosition_1_0, 1}},
+ {1416, {wxGridBagSizer, getItemSpan_1_2, 1}},
+ {1417, {wxGridBagSizer, getItemSpan_1_1, 1}},
+ {1418, {wxGridBagSizer, getItemSpan_1_0, 1}},
+ {1419, {wxGridBagSizer, setEmptyCellSize, 1}},
+ {1420, {wxGridBagSizer, setItemPosition_2_2, 2}},
+ {1421, {wxGridBagSizer, setItemPosition_2_1, 2}},
+ {1422, {wxGridBagSizer, setItemPosition_2_0, 2}},
+ {1423, {wxGridBagSizer, setItemSpan_2_2, 2}},
+ {1424, {wxGridBagSizer, setItemSpan_2_1, 2}},
+ {1425, {wxGridBagSizer, setItemSpan_2_0, 2}},
+ {1426, {wxGridBagSizer, 'Destroy', undefined}},
+ {1427, {wxStdDialogButtonSizer, new, 0}},
+ {1428, {wxStdDialogButtonSizer, addButton, 1}},
+ {1429, {wxStdDialogButtonSizer, realize, 0}},
+ {1430, {wxStdDialogButtonSizer, setAffirmativeButton, 1}},
+ {1431, {wxStdDialogButtonSizer, setCancelButton, 1}},
+ {1432, {wxStdDialogButtonSizer, setNegativeButton, 1}},
+ {1433, {wxStdDialogButtonSizer, 'Destroy', undefined}},
+ {1434, {wxFont, new_0, 0}},
+ {1435, {wxFont, new_1, 1}},
+ {1436, {wxFont, new_5, 5}},
+ {1438, {wxFont, destruct, 0}},
+ {1439, {wxFont, isFixedWidth, 0}},
+ {1440, {wxFont, getDefaultEncoding, 0}},
+ {1441, {wxFont, getFaceName, 0}},
+ {1442, {wxFont, getFamily, 0}},
+ {1443, {wxFont, getNativeFontInfoDesc, 0}},
+ {1444, {wxFont, getNativeFontInfoUserDesc, 0}},
+ {1445, {wxFont, getPointSize, 0}},
+ {1446, {wxFont, getStyle, 0}},
+ {1447, {wxFont, getUnderlined, 0}},
+ {1448, {wxFont, getWeight, 0}},
+ {1449, {wxFont, ok, 0}},
+ {1450, {wxFont, setDefaultEncoding, 1}},
+ {1451, {wxFont, setFaceName, 1}},
+ {1452, {wxFont, setFamily, 1}},
+ {1453, {wxFont, setPointSize, 1}},
+ {1454, {wxFont, setStyle, 1}},
+ {1455, {wxFont, setUnderlined, 1}},
+ {1456, {wxFont, setWeight, 1}},
+ {1457, {wxToolTip, enable, 1}},
+ {1458, {wxToolTip, setDelay, 1}},
+ {1459, {wxToolTip, new, 1}},
+ {1460, {wxToolTip, setTip, 1}},
+ {1461, {wxToolTip, getTip, 0}},
+ {1462, {wxToolTip, getWindow, 0}},
+ {1463, {wxToolTip, 'Destroy', undefined}},
+ {1465, {wxButton, new_3, 3}},
+ {1466, {wxButton, new_0, 0}},
+ {1467, {wxButton, destruct, 0}},
+ {1468, {wxButton, create, 3}},
+ {1469, {wxButton, getDefaultSize, 0}},
+ {1470, {wxButton, setDefault, 0}},
+ {1471, {wxButton, setLabel, 1}},
+ {1473, {wxBitmapButton, new_4, 4}},
+ {1474, {wxBitmapButton, new_0, 0}},
+ {1475, {wxBitmapButton, create, 4}},
+ {1476, {wxBitmapButton, getBitmapDisabled, 0}},
+ {1478, {wxBitmapButton, getBitmapFocus, 0}},
+ {1480, {wxBitmapButton, getBitmapLabel, 0}},
+ {1482, {wxBitmapButton, getBitmapSelected, 0}},
+ {1484, {wxBitmapButton, setBitmapDisabled, 1}},
+ {1485, {wxBitmapButton, setBitmapFocus, 1}},
+ {1486, {wxBitmapButton, setBitmapLabel, 1}},
+ {1487, {wxBitmapButton, setBitmapSelected, 1}},
+ {1488, {wxBitmapButton, 'Destroy', undefined}},
+ {1489, {wxToggleButton, new_0, 0}},
+ {1490, {wxToggleButton, new_4, 4}},
+ {1491, {wxToggleButton, create, 4}},
+ {1492, {wxToggleButton, getValue, 0}},
+ {1493, {wxToggleButton, setValue, 1}},
+ {1494, {wxToggleButton, 'Destroy', undefined}},
+ {1495, {wxCalendarCtrl, new_0, 0}},
+ {1496, {wxCalendarCtrl, new_3, 3}},
+ {1497, {wxCalendarCtrl, create, 3}},
+ {1498, {wxCalendarCtrl, destruct, 0}},
+ {1499, {wxCalendarCtrl, setDate, 1}},
+ {1500, {wxCalendarCtrl, getDate, 0}},
+ {1501, {wxCalendarCtrl, enableYearChange, 1}},
+ {1502, {wxCalendarCtrl, enableMonthChange, 1}},
+ {1503, {wxCalendarCtrl, enableHolidayDisplay, 1}},
+ {1504, {wxCalendarCtrl, setHeaderColours, 2}},
+ {1505, {wxCalendarCtrl, getHeaderColourFg, 0}},
+ {1506, {wxCalendarCtrl, getHeaderColourBg, 0}},
+ {1507, {wxCalendarCtrl, setHighlightColours, 2}},
+ {1508, {wxCalendarCtrl, getHighlightColourFg, 0}},
+ {1509, {wxCalendarCtrl, getHighlightColourBg, 0}},
+ {1510, {wxCalendarCtrl, setHolidayColours, 2}},
+ {1511, {wxCalendarCtrl, getHolidayColourFg, 0}},
+ {1512, {wxCalendarCtrl, getHolidayColourBg, 0}},
+ {1513, {wxCalendarCtrl, getAttr, 1}},
+ {1514, {wxCalendarCtrl, setAttr, 2}},
+ {1515, {wxCalendarCtrl, setHoliday, 1}},
+ {1516, {wxCalendarCtrl, resetAttr, 1}},
+ {1517, {wxCalendarCtrl, hitTest, 2}},
+ {1518, {wxCalendarDateAttr, new_0, 0}},
+ {1519, {wxCalendarDateAttr, new_2_1, 2}},
+ {1520, {wxCalendarDateAttr, new_2_0, 2}},
+ {1521, {wxCalendarDateAttr, setTextColour, 1}},
+ {1522, {wxCalendarDateAttr, setBackgroundColour, 1}},
+ {1523, {wxCalendarDateAttr, setBorderColour, 1}},
+ {1524, {wxCalendarDateAttr, setFont, 1}},
+ {1525, {wxCalendarDateAttr, setBorder, 1}},
+ {1526, {wxCalendarDateAttr, setHoliday, 1}},
+ {1527, {wxCalendarDateAttr, hasTextColour, 0}},
+ {1528, {wxCalendarDateAttr, hasBackgroundColour, 0}},
+ {1529, {wxCalendarDateAttr, hasBorderColour, 0}},
+ {1530, {wxCalendarDateAttr, hasFont, 0}},
+ {1531, {wxCalendarDateAttr, hasBorder, 0}},
+ {1532, {wxCalendarDateAttr, isHoliday, 0}},
+ {1533, {wxCalendarDateAttr, getTextColour, 0}},
+ {1534, {wxCalendarDateAttr, getBackgroundColour, 0}},
+ {1535, {wxCalendarDateAttr, getBorderColour, 0}},
+ {1536, {wxCalendarDateAttr, getFont, 0}},
+ {1537, {wxCalendarDateAttr, getBorder, 0}},
+ {1538, {wxCalendarDateAttr, 'Destroy', undefined}},
+ {1540, {wxCheckBox, new_4, 4}},
+ {1541, {wxCheckBox, new_0, 0}},
+ {1542, {wxCheckBox, create, 4}},
+ {1543, {wxCheckBox, getValue, 0}},
+ {1544, {wxCheckBox, get3StateValue, 0}},
+ {1545, {wxCheckBox, is3rdStateAllowedForUser, 0}},
+ {1546, {wxCheckBox, is3State, 0}},
+ {1547, {wxCheckBox, isChecked, 0}},
+ {1548, {wxCheckBox, setValue, 1}},
+ {1549, {wxCheckBox, set3StateValue, 1}},
+ {1550, {wxCheckBox, 'Destroy', undefined}},
+ {1551, {wxCheckListBox, new_0, 0}},
+ {1553, {wxCheckListBox, new_3, 3}},
+ {1554, {wxCheckListBox, check, 2}},
+ {1555, {wxCheckListBox, isChecked, 1}},
+ {1556, {wxCheckListBox, 'Destroy', undefined}},
+ {1559, {wxChoice, new_3, 3}},
+ {1560, {wxChoice, new_0, 0}},
+ {1562, {wxChoice, destruct, 0}},
+ {1564, {wxChoice, create, 6}},
+ {1565, {wxChoice, delete, 1}},
+ {1566, {wxChoice, getColumns, 0}},
+ {1567, {wxChoice, setColumns, 1}},
+ {1568, {wxComboBox, new_0, 0}},
+ {1570, {wxComboBox, new_3, 3}},
+ {1571, {wxComboBox, destruct, 0}},
+ {1573, {wxComboBox, create, 7}},
+ {1574, {wxComboBox, canCopy, 0}},
+ {1575, {wxComboBox, canCut, 0}},
+ {1576, {wxComboBox, canPaste, 0}},
+ {1577, {wxComboBox, canRedo, 0}},
+ {1578, {wxComboBox, canUndo, 0}},
+ {1579, {wxComboBox, copy, 0}},
+ {1580, {wxComboBox, cut, 0}},
+ {1581, {wxComboBox, getInsertionPoint, 0}},
+ {1582, {wxComboBox, getLastPosition, 0}},
+ {1583, {wxComboBox, getValue, 0}},
+ {1584, {wxComboBox, paste, 0}},
+ {1585, {wxComboBox, redo, 0}},
+ {1586, {wxComboBox, replace, 3}},
+ {1587, {wxComboBox, remove, 2}},
+ {1588, {wxComboBox, setInsertionPoint, 1}},
+ {1589, {wxComboBox, setInsertionPointEnd, 0}},
+ {1590, {wxComboBox, setSelection_1, 1}},
+ {1591, {wxComboBox, setSelection_2, 2}},
+ {1592, {wxComboBox, setValue, 1}},
+ {1593, {wxComboBox, undo, 0}},
+ {1594, {wxGauge, new_0, 0}},
+ {1595, {wxGauge, new_4, 4}},
+ {1596, {wxGauge, create, 4}},
+ {1597, {wxGauge, getBezelFace, 0}},
+ {1598, {wxGauge, getRange, 0}},
+ {1599, {wxGauge, getShadowWidth, 0}},
+ {1600, {wxGauge, getValue, 0}},
+ {1601, {wxGauge, isVertical, 0}},
+ {1602, {wxGauge, setBezelFace, 1}},
+ {1603, {wxGauge, setRange, 1}},
+ {1604, {wxGauge, setShadowWidth, 1}},
+ {1605, {wxGauge, setValue, 1}},
+ {1606, {wxGauge, pulse, 0}},
+ {1607, {wxGauge, 'Destroy', undefined}},
+ {1608, {wxGenericDirCtrl, new_0, 0}},
+ {1609, {wxGenericDirCtrl, new_2, 2}},
+ {1610, {wxGenericDirCtrl, destruct, 0}},
+ {1611, {wxGenericDirCtrl, create, 2}},
+ {1612, {wxGenericDirCtrl, init, 0}},
+ {1613, {wxGenericDirCtrl, collapseTree, 0}},
+ {1614, {wxGenericDirCtrl, expandPath, 1}},
+ {1615, {wxGenericDirCtrl, getDefaultPath, 0}},
+ {1616, {wxGenericDirCtrl, getPath, 0}},
+ {1617, {wxGenericDirCtrl, getFilePath, 0}},
+ {1618, {wxGenericDirCtrl, getFilter, 0}},
+ {1619, {wxGenericDirCtrl, getFilterIndex, 0}},
+ {1620, {wxGenericDirCtrl, getRootId, 0}},
+ {1621, {wxGenericDirCtrl, getTreeCtrl, 0}},
+ {1622, {wxGenericDirCtrl, reCreateTree, 0}},
+ {1623, {wxGenericDirCtrl, setDefaultPath, 1}},
+ {1624, {wxGenericDirCtrl, setFilter, 1}},
+ {1625, {wxGenericDirCtrl, setFilterIndex, 1}},
+ {1626, {wxGenericDirCtrl, setPath, 1}},
+ {1628, {wxStaticBox, new_4, 4}},
+ {1629, {wxStaticBox, new_0, 0}},
+ {1630, {wxStaticBox, create, 4}},
+ {1631, {wxStaticBox, 'Destroy', undefined}},
+ {1633, {wxStaticLine, new_2, 2}},
+ {1634, {wxStaticLine, new_0, 0}},
+ {1635, {wxStaticLine, create, 2}},
+ {1636, {wxStaticLine, isVertical, 0}},
+ {1637, {wxStaticLine, getDefaultSize, 0}},
+ {1638, {wxStaticLine, 'Destroy', undefined}},
+ {1641, {wxListBox, new_3, 3}},
+ {1642, {wxListBox, new_0, 0}},
+ {1644, {wxListBox, destruct, 0}},
+ {1646, {wxListBox, create, 6}},
+ {1647, {wxListBox, deselect, 1}},
+ {1648, {wxListBox, getSelections, 1}},
+ {1649, {wxListBox, insertItems, 2}},
+ {1650, {wxListBox, isSelected, 1}},
+ {1652, {wxListBox, set, 2}},
+ {1653, {wxListBox, hitTest, 1}},
+ {1654, {wxListBox, setFirstItem_1_0, 1}},
+ {1655, {wxListBox, setFirstItem_1_1, 1}},
+ {1656, {wxListCtrl, new_0, 0}},
+ {1657, {wxListCtrl, new_2, 2}},
+ {1658, {wxListCtrl, arrange, 1}},
+ {1659, {wxListCtrl, assignImageList, 2}},
+ {1660, {wxListCtrl, clearAll, 0}},
+ {1661, {wxListCtrl, create, 2}},
+ {1662, {wxListCtrl, deleteAllItems, 0}},
+ {1663, {wxListCtrl, deleteColumn, 1}},
+ {1664, {wxListCtrl, deleteItem, 1}},
+ {1665, {wxListCtrl, editLabel, 1}},
+ {1666, {wxListCtrl, ensureVisible, 1}},
+ {1667, {wxListCtrl, findItem_3_0, 3}},
+ {1668, {wxListCtrl, findItem_3_1, 3}},
+ {1669, {wxListCtrl, getColumn, 2}},
+ {1670, {wxListCtrl, getColumnCount, 0}},
+ {1671, {wxListCtrl, getColumnWidth, 1}},
+ {1672, {wxListCtrl, getCountPerPage, 0}},
+ {1673, {wxListCtrl, getEditControl, 0}},
+ {1674, {wxListCtrl, getImageList, 1}},
+ {1675, {wxListCtrl, getItem, 1}},
+ {1676, {wxListCtrl, getItemBackgroundColour, 1}},
+ {1677, {wxListCtrl, getItemCount, 0}},
+ {1678, {wxListCtrl, getItemData, 1}},
+ {1679, {wxListCtrl, getItemFont, 1}},
+ {1680, {wxListCtrl, getItemPosition, 2}},
+ {1681, {wxListCtrl, getItemRect, 3}},
+ {1682, {wxListCtrl, getItemSpacing, 0}},
+ {1683, {wxListCtrl, getItemState, 2}},
+ {1684, {wxListCtrl, getItemText, 1}},
+ {1685, {wxListCtrl, getItemTextColour, 1}},
+ {1686, {wxListCtrl, getNextItem, 2}},
+ {1687, {wxListCtrl, getSelectedItemCount, 0}},
+ {1688, {wxListCtrl, getTextColour, 0}},
+ {1689, {wxListCtrl, getTopItem, 0}},
+ {1690, {wxListCtrl, getViewRect, 0}},
+ {1691, {wxListCtrl, hitTest, 2}},
+ {1692, {wxListCtrl, insertColumn_2, 2}},
+ {1693, {wxListCtrl, insertColumn_3, 3}},
+ {1694, {wxListCtrl, insertItem_1, 1}},
+ {1695, {wxListCtrl, insertItem_2_1, 2}},
+ {1696, {wxListCtrl, insertItem_2_0, 2}},
+ {1697, {wxListCtrl, insertItem_3, 3}},
+ {1698, {wxListCtrl, refreshItem, 1}},
+ {1699, {wxListCtrl, refreshItems, 2}},
+ {1700, {wxListCtrl, scrollList, 2}},
+ {1701, {wxListCtrl, setBackgroundColour, 1}},
+ {1702, {wxListCtrl, setColumn, 2}},
+ {1703, {wxListCtrl, setColumnWidth, 2}},
+ {1704, {wxListCtrl, setImageList, 2}},
+ {1705, {wxListCtrl, setItem_1, 1}},
+ {1706, {wxListCtrl, setItem_4, 4}},
+ {1707, {wxListCtrl, setItemBackgroundColour, 2}},
+ {1708, {wxListCtrl, setItemCount, 1}},
+ {1709, {wxListCtrl, setItemData, 2}},
+ {1710, {wxListCtrl, setItemFont, 2}},
+ {1711, {wxListCtrl, setItemImage, 3}},
+ {1712, {wxListCtrl, setItemColumnImage, 3}},
+ {1713, {wxListCtrl, setItemPosition, 2}},
+ {1714, {wxListCtrl, setItemState, 3}},
+ {1715, {wxListCtrl, setItemText, 2}},
+ {1716, {wxListCtrl, setItemTextColour, 2}},
+ {1717, {wxListCtrl, setSingleStyle, 2}},
+ {1718, {wxListCtrl, setTextColour, 1}},
+ {1719, {wxListCtrl, setWindowStyleFlag, 1}},
+ {1720, {wxListCtrl, sortItems, 2}},
+ {1721, {wxListCtrl, 'Destroy', undefined}},
+ {1722, {wxListView, clearColumnImage, 1}},
+ {1723, {wxListView, focus, 1}},
+ {1724, {wxListView, getFirstSelected, 0}},
+ {1725, {wxListView, getFocusedItem, 0}},
+ {1726, {wxListView, getNextSelected, 1}},
+ {1727, {wxListView, isSelected, 1}},
+ {1728, {wxListView, select, 2}},
+ {1729, {wxListView, setColumnImage, 2}},
+ {1730, {wxListItem, new_0, 0}},
+ {1731, {wxListItem, new_1, 1}},
+ {1732, {wxListItem, destruct, 0}},
+ {1733, {wxListItem, clear, 0}},
+ {1734, {wxListItem, getAlign, 0}},
+ {1735, {wxListItem, getBackgroundColour, 0}},
+ {1736, {wxListItem, getColumn, 0}},
+ {1737, {wxListItem, getFont, 0}},
+ {1738, {wxListItem, getId, 0}},
+ {1739, {wxListItem, getImage, 0}},
+ {1740, {wxListItem, getMask, 0}},
+ {1741, {wxListItem, getState, 0}},
+ {1742, {wxListItem, getText, 0}},
+ {1743, {wxListItem, getTextColour, 0}},
+ {1744, {wxListItem, getWidth, 0}},
+ {1745, {wxListItem, setAlign, 1}},
+ {1746, {wxListItem, setBackgroundColour, 1}},
+ {1747, {wxListItem, setColumn, 1}},
+ {1748, {wxListItem, setFont, 1}},
+ {1749, {wxListItem, setId, 1}},
+ {1750, {wxListItem, setImage, 1}},
+ {1751, {wxListItem, setMask, 1}},
+ {1752, {wxListItem, setState, 1}},
+ {1753, {wxListItem, setStateMask, 1}},
+ {1754, {wxListItem, setText, 1}},
+ {1755, {wxListItem, setTextColour, 1}},
+ {1756, {wxListItem, setWidth, 1}},
+ {1757, {wxImageList, new_0, 0}},
+ {1758, {wxImageList, new_3, 3}},
+ {1759, {wxImageList, add_1, 1}},
+ {1760, {wxImageList, add_2_0, 2}},
+ {1761, {wxImageList, add_2_1, 2}},
+ {1762, {wxImageList, create, 3}},
+ {1764, {wxImageList, draw, 5}},
+ {1765, {wxImageList, getBitmap, 1}},
+ {1766, {wxImageList, getIcon, 1}},
+ {1767, {wxImageList, getImageCount, 0}},
+ {1768, {wxImageList, getSize, 3}},
+ {1769, {wxImageList, remove, 1}},
+ {1770, {wxImageList, removeAll, 0}},
+ {1771, {wxImageList, replace_2, 2}},
+ {1772, {wxImageList, replace_3, 3}},
+ {1773, {wxImageList, 'Destroy', undefined}},
+ {1774, {wxTextAttr, new_0, 0}},
+ {1775, {wxTextAttr, new_2, 2}},
+ {1776, {wxTextAttr, getAlignment, 0}},
+ {1777, {wxTextAttr, getBackgroundColour, 0}},
+ {1778, {wxTextAttr, getFont, 0}},
+ {1779, {wxTextAttr, getLeftIndent, 0}},
+ {1780, {wxTextAttr, getLeftSubIndent, 0}},
+ {1781, {wxTextAttr, getRightIndent, 0}},
+ {1782, {wxTextAttr, getTabs, 0}},
+ {1783, {wxTextAttr, getTextColour, 0}},
+ {1784, {wxTextAttr, hasBackgroundColour, 0}},
+ {1785, {wxTextAttr, hasFont, 0}},
+ {1786, {wxTextAttr, hasTextColour, 0}},
+ {1787, {wxTextAttr, getFlags, 0}},
+ {1788, {wxTextAttr, isDefault, 0}},
+ {1789, {wxTextAttr, setAlignment, 1}},
+ {1790, {wxTextAttr, setBackgroundColour, 1}},
+ {1791, {wxTextAttr, setFlags, 1}},
+ {1792, {wxTextAttr, setFont, 2}},
+ {1793, {wxTextAttr, setLeftIndent, 2}},
+ {1794, {wxTextAttr, setRightIndent, 1}},
+ {1795, {wxTextAttr, setTabs, 1}},
+ {1796, {wxTextAttr, setTextColour, 1}},
+ {1797, {wxTextAttr, 'Destroy', undefined}},
+ {1799, {wxTextCtrl, new_3, 3}},
+ {1800, {wxTextCtrl, new_0, 0}},
+ {1802, {wxTextCtrl, destruct, 0}},
+ {1803, {wxTextCtrl, appendText, 1}},
+ {1804, {wxTextCtrl, canCopy, 0}},
+ {1805, {wxTextCtrl, canCut, 0}},
+ {1806, {wxTextCtrl, canPaste, 0}},
+ {1807, {wxTextCtrl, canRedo, 0}},
+ {1808, {wxTextCtrl, canUndo, 0}},
+ {1809, {wxTextCtrl, clear, 0}},
+ {1810, {wxTextCtrl, copy, 0}},
+ {1811, {wxTextCtrl, create, 3}},
+ {1812, {wxTextCtrl, cut, 0}},
+ {1813, {wxTextCtrl, discardEdits, 0}},
+ {1814, {wxTextCtrl, emulateKeyPress, 1}},
+ {1815, {wxTextCtrl, getDefaultStyle, 0}},
+ {1816, {wxTextCtrl, getInsertionPoint, 0}},
+ {1817, {wxTextCtrl, getLastPosition, 0}},
+ {1818, {wxTextCtrl, getLineLength, 1}},
+ {1819, {wxTextCtrl, getLineText, 1}},
+ {1820, {wxTextCtrl, getNumberOfLines, 0}},
+ {1821, {wxTextCtrl, getRange, 2}},
+ {1822, {wxTextCtrl, getSelection, 2}},
+ {1823, {wxTextCtrl, getStringSelection, 0}},
+ {1824, {wxTextCtrl, getStyle, 2}},
+ {1825, {wxTextCtrl, getValue, 0}},
+ {1826, {wxTextCtrl, isEditable, 0}},
+ {1827, {wxTextCtrl, isModified, 0}},
+ {1828, {wxTextCtrl, isMultiLine, 0}},
+ {1829, {wxTextCtrl, isSingleLine, 0}},
+ {1830, {wxTextCtrl, loadFile, 2}},
+ {1831, {wxTextCtrl, markDirty, 0}},
+ {1832, {wxTextCtrl, paste, 0}},
+ {1833, {wxTextCtrl, positionToXY, 3}},
+ {1834, {wxTextCtrl, redo, 0}},
+ {1835, {wxTextCtrl, remove, 2}},
+ {1836, {wxTextCtrl, replace, 3}},
+ {1837, {wxTextCtrl, saveFile, 1}},
+ {1838, {wxTextCtrl, setDefaultStyle, 1}},
+ {1839, {wxTextCtrl, setEditable, 1}},
+ {1840, {wxTextCtrl, setInsertionPoint, 1}},
+ {1841, {wxTextCtrl, setInsertionPointEnd, 0}},
+ {1843, {wxTextCtrl, setMaxLength, 1}},
+ {1844, {wxTextCtrl, setSelection, 2}},
+ {1845, {wxTextCtrl, setStyle, 3}},
+ {1846, {wxTextCtrl, setValue, 1}},
+ {1847, {wxTextCtrl, showPosition, 1}},
+ {1848, {wxTextCtrl, undo, 0}},
+ {1849, {wxTextCtrl, writeText, 1}},
+ {1850, {wxTextCtrl, xYToPosition, 2}},
+ {1853, {wxNotebook, new_0, 0}},
+ {1854, {wxNotebook, new_3, 3}},
+ {1855, {wxNotebook, destruct, 0}},
+ {1856, {wxNotebook, addPage, 3}},
+ {1857, {wxNotebook, advanceSelection, 1}},
+ {1858, {wxNotebook, assignImageList, 1}},
+ {1859, {wxNotebook, create, 3}},
+ {1860, {wxNotebook, deleteAllPages, 0}},
+ {1861, {wxNotebook, deletePage, 1}},
+ {1862, {wxNotebook, removePage, 1}},
+ {1863, {wxNotebook, getCurrentPage, 0}},
+ {1864, {wxNotebook, getImageList, 0}},
+ {1866, {wxNotebook, getPage, 1}},
+ {1867, {wxNotebook, getPageCount, 0}},
+ {1868, {wxNotebook, getPageImage, 1}},
+ {1869, {wxNotebook, getPageText, 1}},
+ {1870, {wxNotebook, getRowCount, 0}},
+ {1871, {wxNotebook, getSelection, 0}},
+ {1872, {wxNotebook, getThemeBackgroundColour, 0}},
+ {1874, {wxNotebook, hitTest, 2}},
+ {1876, {wxNotebook, insertPage, 4}},
+ {1877, {wxNotebook, setImageList, 1}},
+ {1878, {wxNotebook, setPadding, 1}},
+ {1879, {wxNotebook, setPageSize, 1}},
+ {1880, {wxNotebook, setPageImage, 2}},
+ {1881, {wxNotebook, setPageText, 2}},
+ {1882, {wxNotebook, setSelection, 1}},
+ {1883, {wxNotebook, changeSelection, 1}},
+ {1884, {wxChoicebook, new_0, 0}},
+ {1885, {wxChoicebook, new_3, 3}},
+ {1886, {wxChoicebook, addPage, 3}},
+ {1887, {wxChoicebook, advanceSelection, 1}},
+ {1888, {wxChoicebook, assignImageList, 1}},
+ {1889, {wxChoicebook, create, 3}},
+ {1890, {wxChoicebook, deleteAllPages, 0}},
+ {1891, {wxChoicebook, deletePage, 1}},
+ {1892, {wxChoicebook, removePage, 1}},
+ {1893, {wxChoicebook, getCurrentPage, 0}},
+ {1894, {wxChoicebook, getImageList, 0}},
+ {1896, {wxChoicebook, getPage, 1}},
+ {1897, {wxChoicebook, getPageCount, 0}},
+ {1898, {wxChoicebook, getPageImage, 1}},
+ {1899, {wxChoicebook, getPageText, 1}},
+ {1900, {wxChoicebook, getSelection, 0}},
+ {1901, {wxChoicebook, hitTest, 2}},
+ {1902, {wxChoicebook, insertPage, 4}},
+ {1903, {wxChoicebook, setImageList, 1}},
+ {1904, {wxChoicebook, setPageSize, 1}},
+ {1905, {wxChoicebook, setPageImage, 2}},
+ {1906, {wxChoicebook, setPageText, 2}},
+ {1907, {wxChoicebook, setSelection, 1}},
+ {1908, {wxChoicebook, changeSelection, 1}},
+ {1909, {wxChoicebook, 'Destroy', undefined}},
+ {1910, {wxToolbook, new_0, 0}},
+ {1911, {wxToolbook, new_3, 3}},
+ {1912, {wxToolbook, addPage, 3}},
+ {1913, {wxToolbook, advanceSelection, 1}},
+ {1914, {wxToolbook, assignImageList, 1}},
+ {1915, {wxToolbook, create, 3}},
+ {1916, {wxToolbook, deleteAllPages, 0}},
+ {1917, {wxToolbook, deletePage, 1}},
+ {1918, {wxToolbook, removePage, 1}},
+ {1919, {wxToolbook, getCurrentPage, 0}},
+ {1920, {wxToolbook, getImageList, 0}},
+ {1922, {wxToolbook, getPage, 1}},
+ {1923, {wxToolbook, getPageCount, 0}},
+ {1924, {wxToolbook, getPageImage, 1}},
+ {1925, {wxToolbook, getPageText, 1}},
+ {1926, {wxToolbook, getSelection, 0}},
+ {1928, {wxToolbook, hitTest, 2}},
+ {1929, {wxToolbook, insertPage, 4}},
+ {1930, {wxToolbook, setImageList, 1}},
+ {1931, {wxToolbook, setPageSize, 1}},
+ {1932, {wxToolbook, setPageImage, 2}},
+ {1933, {wxToolbook, setPageText, 2}},
+ {1934, {wxToolbook, setSelection, 1}},
+ {1935, {wxToolbook, changeSelection, 1}},
+ {1936, {wxToolbook, 'Destroy', undefined}},
+ {1937, {wxListbook, new_0, 0}},
+ {1938, {wxListbook, new_3, 3}},
+ {1939, {wxListbook, addPage, 3}},
+ {1940, {wxListbook, advanceSelection, 1}},
+ {1941, {wxListbook, assignImageList, 1}},
+ {1942, {wxListbook, create, 3}},
+ {1943, {wxListbook, deleteAllPages, 0}},
+ {1944, {wxListbook, deletePage, 1}},
+ {1945, {wxListbook, removePage, 1}},
+ {1946, {wxListbook, getCurrentPage, 0}},
+ {1947, {wxListbook, getImageList, 0}},
+ {1949, {wxListbook, getPage, 1}},
+ {1950, {wxListbook, getPageCount, 0}},
+ {1951, {wxListbook, getPageImage, 1}},
+ {1952, {wxListbook, getPageText, 1}},
+ {1953, {wxListbook, getSelection, 0}},
+ {1955, {wxListbook, hitTest, 2}},
+ {1956, {wxListbook, insertPage, 4}},
+ {1957, {wxListbook, setImageList, 1}},
+ {1958, {wxListbook, setPageSize, 1}},
+ {1959, {wxListbook, setPageImage, 2}},
+ {1960, {wxListbook, setPageText, 2}},
+ {1961, {wxListbook, setSelection, 1}},
+ {1962, {wxListbook, changeSelection, 1}},
+ {1963, {wxListbook, 'Destroy', undefined}},
+ {1964, {wxTreebook, new_0, 0}},
+ {1965, {wxTreebook, new_3, 3}},
+ {1966, {wxTreebook, addPage, 3}},
+ {1967, {wxTreebook, advanceSelection, 1}},
+ {1968, {wxTreebook, assignImageList, 1}},
+ {1969, {wxTreebook, create, 3}},
+ {1970, {wxTreebook, deleteAllPages, 0}},
+ {1971, {wxTreebook, deletePage, 1}},
+ {1972, {wxTreebook, removePage, 1}},
+ {1973, {wxTreebook, getCurrentPage, 0}},
+ {1974, {wxTreebook, getImageList, 0}},
+ {1976, {wxTreebook, getPage, 1}},
+ {1977, {wxTreebook, getPageCount, 0}},
+ {1978, {wxTreebook, getPageImage, 1}},
+ {1979, {wxTreebook, getPageText, 1}},
+ {1980, {wxTreebook, getSelection, 0}},
+ {1981, {wxTreebook, expandNode, 2}},
+ {1982, {wxTreebook, isNodeExpanded, 1}},
+ {1984, {wxTreebook, hitTest, 2}},
+ {1985, {wxTreebook, insertPage, 4}},
+ {1986, {wxTreebook, insertSubPage, 4}},
+ {1987, {wxTreebook, setImageList, 1}},
+ {1988, {wxTreebook, setPageSize, 1}},
+ {1989, {wxTreebook, setPageImage, 2}},
+ {1990, {wxTreebook, setPageText, 2}},
+ {1991, {wxTreebook, setSelection, 1}},
+ {1992, {wxTreebook, changeSelection, 1}},
+ {1993, {wxTreebook, 'Destroy', undefined}},
+ {1996, {wxTreeCtrl, new_2, 2}},
+ {1997, {wxTreeCtrl, new_0, 0}},
+ {1999, {wxTreeCtrl, destruct, 0}},
+ {2000, {wxTreeCtrl, addRoot, 2}},
+ {2001, {wxTreeCtrl, appendItem, 3}},
+ {2002, {wxTreeCtrl, assignImageList, 1}},
+ {2003, {wxTreeCtrl, assignStateImageList, 1}},
+ {2004, {wxTreeCtrl, collapse, 1}},
+ {2005, {wxTreeCtrl, collapseAndReset, 1}},
+ {2006, {wxTreeCtrl, create, 2}},
+ {2007, {wxTreeCtrl, delete, 1}},
+ {2008, {wxTreeCtrl, deleteAllItems, 0}},
+ {2009, {wxTreeCtrl, deleteChildren, 1}},
+ {2010, {wxTreeCtrl, ensureVisible, 1}},
+ {2011, {wxTreeCtrl, expand, 1}},
+ {2012, {wxTreeCtrl, getBoundingRect, 3}},
+ {2014, {wxTreeCtrl, getChildrenCount, 2}},
+ {2015, {wxTreeCtrl, getCount, 0}},
+ {2016, {wxTreeCtrl, getEditControl, 0}},
+ {2017, {wxTreeCtrl, getFirstChild, 2}},
+ {2018, {wxTreeCtrl, getNextChild, 2}},
+ {2019, {wxTreeCtrl, getFirstVisibleItem, 0}},
+ {2020, {wxTreeCtrl, getImageList, 0}},
+ {2021, {wxTreeCtrl, getIndent, 0}},
+ {2022, {wxTreeCtrl, getItemBackgroundColour, 1}},
+ {2023, {wxTreeCtrl, getItemData, 1}},
+ {2024, {wxTreeCtrl, getItemFont, 1}},
+ {2025, {wxTreeCtrl, getItemImage_1, 1}},
+ {2026, {wxTreeCtrl, getItemImage_2, 2}},
+ {2027, {wxTreeCtrl, getItemText, 1}},
+ {2028, {wxTreeCtrl, getItemTextColour, 1}},
+ {2029, {wxTreeCtrl, getLastChild, 1}},
+ {2030, {wxTreeCtrl, getNextSibling, 1}},
+ {2031, {wxTreeCtrl, getNextVisible, 1}},
+ {2032, {wxTreeCtrl, getItemParent, 1}},
+ {2033, {wxTreeCtrl, getPrevSibling, 1}},
+ {2034, {wxTreeCtrl, getPrevVisible, 1}},
+ {2035, {wxTreeCtrl, getRootItem, 0}},
+ {2036, {wxTreeCtrl, getSelection, 0}},
+ {2037, {wxTreeCtrl, getSelections, 1}},
+ {2038, {wxTreeCtrl, getStateImageList, 0}},
+ {2039, {wxTreeCtrl, hitTest, 1}},
+ {2041, {wxTreeCtrl, insertItem, 4}},
+ {2042, {wxTreeCtrl, isBold, 1}},
+ {2043, {wxTreeCtrl, isExpanded, 1}},
+ {2044, {wxTreeCtrl, isSelected, 1}},
+ {2045, {wxTreeCtrl, isVisible, 1}},
+ {2046, {wxTreeCtrl, itemHasChildren, 1}},
+ {2047, {wxTreeCtrl, prependItem, 3}},
+ {2048, {wxTreeCtrl, scrollTo, 1}},
+ {2049, {wxTreeCtrl, selectItem_1, 1}},
+ {2050, {wxTreeCtrl, selectItem_2, 2}},
+ {2051, {wxTreeCtrl, setIndent, 1}},
+ {2052, {wxTreeCtrl, setImageList, 1}},
+ {2053, {wxTreeCtrl, setItemBackgroundColour, 2}},
+ {2054, {wxTreeCtrl, setItemBold, 2}},
+ {2055, {wxTreeCtrl, setItemData, 2}},
+ {2056, {wxTreeCtrl, setItemDropHighlight, 2}},
+ {2057, {wxTreeCtrl, setItemFont, 2}},
+ {2058, {wxTreeCtrl, setItemHasChildren, 2}},
+ {2059, {wxTreeCtrl, setItemImage_2, 2}},
+ {2060, {wxTreeCtrl, setItemImage_3, 3}},
+ {2061, {wxTreeCtrl, setItemText, 2}},
+ {2062, {wxTreeCtrl, setItemTextColour, 2}},
+ {2063, {wxTreeCtrl, setStateImageList, 1}},
+ {2064, {wxTreeCtrl, setWindowStyle, 1}},
+ {2065, {wxTreeCtrl, sortChildren, 1}},
+ {2066, {wxTreeCtrl, toggle, 1}},
+ {2067, {wxTreeCtrl, toggleItemSelection, 1}},
+ {2068, {wxTreeCtrl, unselect, 0}},
+ {2069, {wxTreeCtrl, unselectAll, 0}},
+ {2070, {wxTreeCtrl, unselectItem, 1}},
+ {2071, {wxScrollBar, new_0, 0}},
+ {2072, {wxScrollBar, new_3, 3}},
+ {2073, {wxScrollBar, destruct, 0}},
+ {2074, {wxScrollBar, create, 3}},
+ {2075, {wxScrollBar, getRange, 0}},
+ {2076, {wxScrollBar, getPageSize, 0}},
+ {2077, {wxScrollBar, getThumbPosition, 0}},
+ {2078, {wxScrollBar, getThumbSize, 0}},
+ {2079, {wxScrollBar, setThumbPosition, 1}},
+ {2080, {wxScrollBar, setScrollbar, 5}},
+ {2082, {wxSpinButton, new_2, 2}},
+ {2083, {wxSpinButton, new_0, 0}},
+ {2084, {wxSpinButton, create, 2}},
+ {2085, {wxSpinButton, getMax, 0}},
+ {2086, {wxSpinButton, getMin, 0}},
+ {2087, {wxSpinButton, getValue, 0}},
+ {2088, {wxSpinButton, setRange, 2}},
+ {2089, {wxSpinButton, setValue, 1}},
+ {2090, {wxSpinButton, 'Destroy', undefined}},
+ {2091, {wxSpinCtrl, new_0, 0}},
+ {2092, {wxSpinCtrl, new_2, 2}},
+ {2094, {wxSpinCtrl, create, 2}},
+ {2097, {wxSpinCtrl, setValue_1_1, 1}},
+ {2098, {wxSpinCtrl, setValue_1_0, 1}},
+ {2100, {wxSpinCtrl, getValue, 0}},
+ {2102, {wxSpinCtrl, setRange, 2}},
+ {2103, {wxSpinCtrl, setSelection, 2}},
+ {2105, {wxSpinCtrl, getMin, 0}},
+ {2107, {wxSpinCtrl, getMax, 0}},
+ {2108, {wxSpinCtrl, 'Destroy', undefined}},
+ {2109, {wxStaticText, new_0, 0}},
+ {2110, {wxStaticText, new_4, 4}},
+ {2111, {wxStaticText, create, 4}},
+ {2112, {wxStaticText, getLabel, 0}},
+ {2113, {wxStaticText, setLabel, 1}},
+ {2114, {wxStaticText, wrap, 1}},
+ {2115, {wxStaticText, 'Destroy', undefined}},
+ {2116, {wxStaticBitmap, new_0, 0}},
+ {2117, {wxStaticBitmap, new_4, 4}},
+ {2118, {wxStaticBitmap, create, 4}},
+ {2119, {wxStaticBitmap, getBitmap, 0}},
+ {2120, {wxStaticBitmap, setBitmap, 1}},
+ {2121, {wxStaticBitmap, 'Destroy', undefined}},
+ {2122, {wxRadioBox, new, 7}},
+ {2124, {wxRadioBox, destruct, 0}},
+ {2125, {wxRadioBox, create, 7}},
+ {2126, {wxRadioBox, enable_2, 2}},
+ {2127, {wxRadioBox, enable_1, 1}},
+ {2128, {wxRadioBox, getSelection, 0}},
+ {2129, {wxRadioBox, getString, 1}},
+ {2130, {wxRadioBox, setSelection, 1}},
+ {2131, {wxRadioBox, show_2, 2}},
+ {2132, {wxRadioBox, show_1, 1}},
+ {2133, {wxRadioBox, getColumnCount, 0}},
+ {2134, {wxRadioBox, getItemHelpText, 1}},
+ {2135, {wxRadioBox, getItemToolTip, 1}},
+ {2137, {wxRadioBox, getItemFromPoint, 1}},
+ {2138, {wxRadioBox, getRowCount, 0}},
+ {2139, {wxRadioBox, isItemEnabled, 1}},
+ {2140, {wxRadioBox, isItemShown, 1}},
+ {2141, {wxRadioBox, setItemHelpText, 2}},
+ {2142, {wxRadioBox, setItemToolTip, 2}},
+ {2143, {wxRadioButton, new_0, 0}},
+ {2144, {wxRadioButton, new_4, 4}},
+ {2145, {wxRadioButton, create, 4}},
+ {2146, {wxRadioButton, getValue, 0}},
+ {2147, {wxRadioButton, setValue, 1}},
+ {2148, {wxRadioButton, 'Destroy', undefined}},
+ {2150, {wxSlider, new_6, 6}},
+ {2151, {wxSlider, new_0, 0}},
+ {2152, {wxSlider, create, 6}},
+ {2153, {wxSlider, getLineSize, 0}},
+ {2154, {wxSlider, getMax, 0}},
+ {2155, {wxSlider, getMin, 0}},
+ {2156, {wxSlider, getPageSize, 0}},
+ {2157, {wxSlider, getThumbLength, 0}},
+ {2158, {wxSlider, getValue, 0}},
+ {2159, {wxSlider, setLineSize, 1}},
+ {2160, {wxSlider, setPageSize, 1}},
+ {2161, {wxSlider, setRange, 2}},
+ {2162, {wxSlider, setThumbLength, 1}},
+ {2163, {wxSlider, setValue, 1}},
+ {2164, {wxSlider, 'Destroy', undefined}},
+ {2166, {wxDialog, new_4, 4}},
+ {2167, {wxDialog, new_0, 0}},
+ {2169, {wxDialog, destruct, 0}},
+ {2170, {wxDialog, create, 4}},
+ {2171, {wxDialog, createButtonSizer, 1}},
+ {2172, {wxDialog, createStdDialogButtonSizer, 1}},
+ {2173, {wxDialog, endModal, 1}},
+ {2174, {wxDialog, getAffirmativeId, 0}},
+ {2175, {wxDialog, getReturnCode, 0}},
+ {2176, {wxDialog, isModal, 0}},
+ {2177, {wxDialog, setAffirmativeId, 1}},
+ {2178, {wxDialog, setReturnCode, 1}},
+ {2179, {wxDialog, show, 1}},
+ {2180, {wxDialog, showModal, 0}},
+ {2181, {wxColourDialog, new_0, 0}},
+ {2182, {wxColourDialog, new_2, 2}},
+ {2183, {wxColourDialog, destruct, 0}},
+ {2184, {wxColourDialog, create, 2}},
+ {2185, {wxColourDialog, getColourData, 0}},
+ {2186, {wxColourData, new_0, 0}},
+ {2187, {wxColourData, new_1, 1}},
+ {2188, {wxColourData, destruct, 0}},
+ {2189, {wxColourData, getChooseFull, 0}},
+ {2190, {wxColourData, getColour, 0}},
+ {2192, {wxColourData, getCustomColour, 1}},
+ {2193, {wxColourData, setChooseFull, 1}},
+ {2194, {wxColourData, setColour, 1}},
+ {2195, {wxColourData, setCustomColour, 2}},
+ {2196, {wxPalette, new_0, 0}},
+ {2197, {wxPalette, new_4, 4}},
+ {2199, {wxPalette, destruct, 0}},
+ {2200, {wxPalette, create, 4}},
+ {2201, {wxPalette, getColoursCount, 0}},
+ {2202, {wxPalette, getPixel, 3}},
+ {2203, {wxPalette, getRGB, 4}},
+ {2204, {wxPalette, isOk, 0}},
+ {2208, {wxDirDialog, new, 2}},
+ {2209, {wxDirDialog, destruct, 0}},
+ {2210, {wxDirDialog, getPath, 0}},
+ {2211, {wxDirDialog, getMessage, 0}},
+ {2212, {wxDirDialog, setMessage, 1}},
+ {2213, {wxDirDialog, setPath, 1}},
+ {2217, {wxFileDialog, new, 2}},
+ {2218, {wxFileDialog, destruct, 0}},
+ {2219, {wxFileDialog, getDirectory, 0}},
+ {2220, {wxFileDialog, getFilename, 0}},
+ {2221, {wxFileDialog, getFilenames, 1}},
+ {2222, {wxFileDialog, getFilterIndex, 0}},
+ {2223, {wxFileDialog, getMessage, 0}},
+ {2224, {wxFileDialog, getPath, 0}},
+ {2225, {wxFileDialog, getPaths, 1}},
+ {2226, {wxFileDialog, getWildcard, 0}},
+ {2227, {wxFileDialog, setDirectory, 1}},
+ {2228, {wxFileDialog, setFilename, 1}},
+ {2229, {wxFileDialog, setFilterIndex, 1}},
+ {2230, {wxFileDialog, setMessage, 1}},
+ {2231, {wxFileDialog, setPath, 1}},
+ {2232, {wxFileDialog, setWildcard, 1}},
+ {2233, {wxPickerBase, setInternalMargin, 1}},
+ {2234, {wxPickerBase, getInternalMargin, 0}},
+ {2235, {wxPickerBase, setTextCtrlProportion, 1}},
+ {2236, {wxPickerBase, setPickerCtrlProportion, 1}},
+ {2237, {wxPickerBase, getTextCtrlProportion, 0}},
+ {2238, {wxPickerBase, getPickerCtrlProportion, 0}},
+ {2239, {wxPickerBase, hasTextCtrl, 0}},
+ {2240, {wxPickerBase, getTextCtrl, 0}},
+ {2241, {wxPickerBase, isTextCtrlGrowable, 0}},
+ {2242, {wxPickerBase, setPickerCtrlGrowable, 1}},
+ {2243, {wxPickerBase, setTextCtrlGrowable, 1}},
+ {2244, {wxPickerBase, isPickerCtrlGrowable, 0}},
+ {2245, {wxFilePickerCtrl, new_0, 0}},
+ {2246, {wxFilePickerCtrl, new_3, 3}},
+ {2247, {wxFilePickerCtrl, create, 3}},
+ {2248, {wxFilePickerCtrl, getPath, 0}},
+ {2249, {wxFilePickerCtrl, setPath, 1}},
+ {2250, {wxFilePickerCtrl, 'Destroy', undefined}},
+ {2251, {wxDirPickerCtrl, new_0, 0}},
+ {2252, {wxDirPickerCtrl, new_3, 3}},
+ {2253, {wxDirPickerCtrl, create, 3}},
+ {2254, {wxDirPickerCtrl, getPath, 0}},
+ {2255, {wxDirPickerCtrl, setPath, 1}},
+ {2256, {wxDirPickerCtrl, 'Destroy', undefined}},
+ {2257, {wxColourPickerCtrl, new_0, 0}},
+ {2258, {wxColourPickerCtrl, new_3, 3}},
+ {2259, {wxColourPickerCtrl, create, 3}},
+ {2260, {wxColourPickerCtrl, getColour, 0}},
+ {2261, {wxColourPickerCtrl, setColour_1_1, 1}},
+ {2262, {wxColourPickerCtrl, setColour_1_0, 1}},
+ {2263, {wxColourPickerCtrl, 'Destroy', undefined}},
+ {2264, {wxDatePickerCtrl, new_0, 0}},
+ {2265, {wxDatePickerCtrl, new_3, 3}},
+ {2266, {wxDatePickerCtrl, getRange, 2}},
+ {2267, {wxDatePickerCtrl, getValue, 0}},
+ {2268, {wxDatePickerCtrl, setRange, 2}},
+ {2269, {wxDatePickerCtrl, setValue, 1}},
+ {2270, {wxDatePickerCtrl, 'Destroy', undefined}},
+ {2271, {wxFontPickerCtrl, new_0, 0}},
+ {2272, {wxFontPickerCtrl, new_3, 3}},
+ {2273, {wxFontPickerCtrl, create, 3}},
+ {2274, {wxFontPickerCtrl, getSelectedFont, 0}},
+ {2275, {wxFontPickerCtrl, setSelectedFont, 1}},
+ {2276, {wxFontPickerCtrl, getMaxPointSize, 0}},
+ {2277, {wxFontPickerCtrl, setMaxPointSize, 1}},
+ {2278, {wxFontPickerCtrl, 'Destroy', undefined}},
+ {2281, {wxFindReplaceDialog, new_0, 0}},
+ {2282, {wxFindReplaceDialog, new_4, 4}},
+ {2283, {wxFindReplaceDialog, destruct, 0}},
+ {2284, {wxFindReplaceDialog, create, 4}},
+ {2285, {wxFindReplaceDialog, getData, 0}},
+ {2286, {wxFindReplaceData, new_0, 0}},
+ {2287, {wxFindReplaceData, new_1, 1}},
+ {2288, {wxFindReplaceData, getFindString, 0}},
+ {2289, {wxFindReplaceData, getReplaceString, 0}},
+ {2290, {wxFindReplaceData, getFlags, 0}},
+ {2291, {wxFindReplaceData, setFlags, 1}},
+ {2292, {wxFindReplaceData, setFindString, 1}},
+ {2293, {wxFindReplaceData, setReplaceString, 1}},
+ {2294, {wxFindReplaceData, 'Destroy', undefined}},
+ {2295, {wxMultiChoiceDialog, new_0, 0}},
+ {2297, {wxMultiChoiceDialog, new_5, 5}},
+ {2298, {wxMultiChoiceDialog, getSelections, 0}},
+ {2299, {wxMultiChoiceDialog, setSelections, 1}},
+ {2300, {wxMultiChoiceDialog, 'Destroy', undefined}},
+ {2301, {wxSingleChoiceDialog, new_0, 0}},
+ {2303, {wxSingleChoiceDialog, new_5, 5}},
+ {2304, {wxSingleChoiceDialog, getSelection, 0}},
+ {2305, {wxSingleChoiceDialog, getStringSelection, 0}},
+ {2306, {wxSingleChoiceDialog, setSelection, 1}},
+ {2307, {wxSingleChoiceDialog, 'Destroy', undefined}},
+ {2308, {wxTextEntryDialog, new, 3}},
+ {2309, {wxTextEntryDialog, getValue, 0}},
+ {2310, {wxTextEntryDialog, setValue, 1}},
+ {2311, {wxTextEntryDialog, 'Destroy', undefined}},
+ {2312, {wxPasswordEntryDialog, new, 3}},
+ {2313, {wxPasswordEntryDialog, 'Destroy', undefined}},
+ {2314, {wxFontData, new_0, 0}},
+ {2315, {wxFontData, new_1, 1}},
+ {2316, {wxFontData, destruct, 0}},
+ {2317, {wxFontData, enableEffects, 1}},
+ {2318, {wxFontData, getAllowSymbols, 0}},
+ {2319, {wxFontData, getColour, 0}},
+ {2320, {wxFontData, getChosenFont, 0}},
+ {2321, {wxFontData, getEnableEffects, 0}},
+ {2322, {wxFontData, getInitialFont, 0}},
+ {2323, {wxFontData, getShowHelp, 0}},
+ {2324, {wxFontData, setAllowSymbols, 1}},
+ {2325, {wxFontData, setChosenFont, 1}},
+ {2326, {wxFontData, setColour, 1}},
+ {2327, {wxFontData, setInitialFont, 1}},
+ {2328, {wxFontData, setRange, 2}},
+ {2329, {wxFontData, setShowHelp, 1}},
+ {2333, {wxFontDialog, new_0, 0}},
+ {2335, {wxFontDialog, new_2, 2}},
+ {2337, {wxFontDialog, create, 2}},
+ {2338, {wxFontDialog, getFontData, 0}},
+ {2340, {wxFontDialog, 'Destroy', undefined}},
+ {2341, {wxProgressDialog, new, 3}},
+ {2342, {wxProgressDialog, destruct, 0}},
+ {2343, {wxProgressDialog, resume, 0}},
+ {2344, {wxProgressDialog, update_2, 2}},
+ {2345, {wxProgressDialog, update_0, 0}},
+ {2346, {wxMessageDialog, new, 3}},
+ {2347, {wxMessageDialog, destruct, 0}},
+ {2348, {wxPageSetupDialog, new, 2}},
+ {2349, {wxPageSetupDialog, destruct, 0}},
+ {2350, {wxPageSetupDialog, getPageSetupData, 0}},
+ {2351, {wxPageSetupDialog, showModal, 0}},
+ {2352, {wxPageSetupDialogData, new_0, 0}},
+ {2353, {wxPageSetupDialogData, new_1_0, 1}},
+ {2354, {wxPageSetupDialogData, new_1_1, 1}},
+ {2355, {wxPageSetupDialogData, destruct, 0}},
+ {2356, {wxPageSetupDialogData, enableHelp, 1}},
+ {2357, {wxPageSetupDialogData, enableMargins, 1}},
+ {2358, {wxPageSetupDialogData, enableOrientation, 1}},
+ {2359, {wxPageSetupDialogData, enablePaper, 1}},
+ {2360, {wxPageSetupDialogData, enablePrinter, 1}},
+ {2361, {wxPageSetupDialogData, getDefaultMinMargins, 0}},
+ {2362, {wxPageSetupDialogData, getEnableMargins, 0}},
+ {2363, {wxPageSetupDialogData, getEnableOrientation, 0}},
+ {2364, {wxPageSetupDialogData, getEnablePaper, 0}},
+ {2365, {wxPageSetupDialogData, getEnablePrinter, 0}},
+ {2366, {wxPageSetupDialogData, getEnableHelp, 0}},
+ {2367, {wxPageSetupDialogData, getDefaultInfo, 0}},
+ {2368, {wxPageSetupDialogData, getMarginTopLeft, 0}},
+ {2369, {wxPageSetupDialogData, getMarginBottomRight, 0}},
+ {2370, {wxPageSetupDialogData, getMinMarginTopLeft, 0}},
+ {2371, {wxPageSetupDialogData, getMinMarginBottomRight, 0}},
+ {2372, {wxPageSetupDialogData, getPaperId, 0}},
+ {2373, {wxPageSetupDialogData, getPaperSize, 0}},
+ {2375, {wxPageSetupDialogData, getPrintData, 0}},
+ {2376, {wxPageSetupDialogData, isOk, 0}},
+ {2377, {wxPageSetupDialogData, setDefaultInfo, 1}},
+ {2378, {wxPageSetupDialogData, setDefaultMinMargins, 1}},
+ {2379, {wxPageSetupDialogData, setMarginTopLeft, 1}},
+ {2380, {wxPageSetupDialogData, setMarginBottomRight, 1}},
+ {2381, {wxPageSetupDialogData, setMinMarginTopLeft, 1}},
+ {2382, {wxPageSetupDialogData, setMinMarginBottomRight, 1}},
+ {2383, {wxPageSetupDialogData, setPaperId, 1}},
+ {2384, {wxPageSetupDialogData, setPaperSize_1_1, 1}},
+ {2385, {wxPageSetupDialogData, setPaperSize_1_0, 1}},
+ {2386, {wxPageSetupDialogData, setPrintData, 1}},
+ {2387, {wxPrintDialog, new_2_0, 2}},
+ {2388, {wxPrintDialog, new_2_1, 2}},
+ {2389, {wxPrintDialog, destruct, 0}},
+ {2390, {wxPrintDialog, getPrintDialogData, 0}},
+ {2391, {wxPrintDialog, getPrintDC, 0}},
+ {2392, {wxPrintDialogData, new_0, 0}},
+ {2393, {wxPrintDialogData, new_1_1, 1}},
+ {2394, {wxPrintDialogData, new_1_0, 1}},
+ {2395, {wxPrintDialogData, destruct, 0}},
+ {2396, {wxPrintDialogData, enableHelp, 1}},
+ {2397, {wxPrintDialogData, enablePageNumbers, 1}},
+ {2398, {wxPrintDialogData, enablePrintToFile, 1}},
+ {2399, {wxPrintDialogData, enableSelection, 1}},
+ {2400, {wxPrintDialogData, getAllPages, 0}},
+ {2401, {wxPrintDialogData, getCollate, 0}},
+ {2402, {wxPrintDialogData, getFromPage, 0}},
+ {2403, {wxPrintDialogData, getMaxPage, 0}},
+ {2404, {wxPrintDialogData, getMinPage, 0}},
+ {2405, {wxPrintDialogData, getNoCopies, 0}},
+ {2406, {wxPrintDialogData, getPrintData, 0}},
+ {2407, {wxPrintDialogData, getPrintToFile, 0}},
+ {2408, {wxPrintDialogData, getSelection, 0}},
+ {2409, {wxPrintDialogData, getToPage, 0}},
+ {2410, {wxPrintDialogData, isOk, 0}},
+ {2411, {wxPrintDialogData, setCollate, 1}},
+ {2412, {wxPrintDialogData, setFromPage, 1}},
+ {2413, {wxPrintDialogData, setMaxPage, 1}},
+ {2414, {wxPrintDialogData, setMinPage, 1}},
+ {2415, {wxPrintDialogData, setNoCopies, 1}},
+ {2416, {wxPrintDialogData, setPrintData, 1}},
+ {2417, {wxPrintDialogData, setPrintToFile, 1}},
+ {2418, {wxPrintDialogData, setSelection, 1}},
+ {2419, {wxPrintDialogData, setToPage, 1}},
+ {2420, {wxPrintData, new_0, 0}},
+ {2421, {wxPrintData, new_1, 1}},
+ {2422, {wxPrintData, destruct, 0}},
+ {2423, {wxPrintData, getCollate, 0}},
+ {2424, {wxPrintData, getBin, 0}},
+ {2425, {wxPrintData, getColour, 0}},
+ {2426, {wxPrintData, getDuplex, 0}},
+ {2427, {wxPrintData, getNoCopies, 0}},
+ {2428, {wxPrintData, getOrientation, 0}},
+ {2429, {wxPrintData, getPaperId, 0}},
+ {2430, {wxPrintData, getPrinterName, 0}},
+ {2431, {wxPrintData, getQuality, 0}},
+ {2432, {wxPrintData, isOk, 0}},
+ {2433, {wxPrintData, setBin, 1}},
+ {2434, {wxPrintData, setCollate, 1}},
+ {2435, {wxPrintData, setColour, 1}},
+ {2436, {wxPrintData, setDuplex, 1}},
+ {2437, {wxPrintData, setNoCopies, 1}},
+ {2438, {wxPrintData, setOrientation, 1}},
+ {2439, {wxPrintData, setPaperId, 1}},
+ {2440, {wxPrintData, setPrinterName, 1}},
+ {2441, {wxPrintData, setQuality, 1}},
+ {2444, {wxPrintPreview, new_2, 2}},
+ {2445, {wxPrintPreview, new_3, 3}},
+ {2447, {wxPrintPreview, destruct, 0}},
+ {2448, {wxPrintPreview, getCanvas, 0}},
+ {2449, {wxPrintPreview, getCurrentPage, 0}},
+ {2450, {wxPrintPreview, getFrame, 0}},
+ {2451, {wxPrintPreview, getMaxPage, 0}},
+ {2452, {wxPrintPreview, getMinPage, 0}},
+ {2453, {wxPrintPreview, getPrintout, 0}},
+ {2454, {wxPrintPreview, getPrintoutForPrinting, 0}},
+ {2455, {wxPrintPreview, isOk, 0}},
+ {2456, {wxPrintPreview, paintPage, 2}},
+ {2457, {wxPrintPreview, print, 1}},
+ {2458, {wxPrintPreview, renderPage, 1}},
+ {2459, {wxPrintPreview, setCanvas, 1}},
+ {2460, {wxPrintPreview, setCurrentPage, 1}},
+ {2461, {wxPrintPreview, setFrame, 1}},
+ {2462, {wxPrintPreview, setPrintout, 1}},
+ {2463, {wxPrintPreview, setZoom, 1}},
+ {2464, {wxPreviewFrame, new, 3}},
+ {2465, {wxPreviewFrame, destruct, 0}},
+ {2466, {wxPreviewFrame, createControlBar, 0}},
+ {2467, {wxPreviewFrame, createCanvas, 0}},
+ {2468, {wxPreviewFrame, initialize, 0}},
+ {2469, {wxPreviewFrame, onCloseWindow, 1}},
+ {2470, {wxPreviewControlBar, new, 4}},
+ {2471, {wxPreviewControlBar, destruct, 0}},
+ {2472, {wxPreviewControlBar, createButtons, 0}},
+ {2473, {wxPreviewControlBar, getPrintPreview, 0}},
+ {2474, {wxPreviewControlBar, getZoomControl, 0}},
+ {2475, {wxPreviewControlBar, setZoomControl, 1}},
+ {2477, {wxPrinter, new, 1}},
+ {2478, {wxPrinter, createAbortWindow, 2}},
+ {2479, {wxPrinter, getAbort, 0}},
+ {2480, {wxPrinter, getLastError, 0}},
+ {2481, {wxPrinter, getPrintDialogData, 0}},
+ {2482, {wxPrinter, print, 3}},
+ {2483, {wxPrinter, printDialog, 1}},
+ {2484, {wxPrinter, reportError, 3}},
+ {2485, {wxPrinter, setup, 1}},
+ {2486, {wxPrinter, 'Destroy', undefined}},
+ {2487, {wxXmlResource, new_1, 1}},
+ {2488, {wxXmlResource, new_2, 2}},
+ {2489, {wxXmlResource, destruct, 0}},
+ {2490, {wxXmlResource, attachUnknownControl, 3}},
+ {2491, {wxXmlResource, clearHandlers, 0}},
+ {2492, {wxXmlResource, compareVersion, 4}},
+ {2493, {wxXmlResource, get, 0}},
+ {2494, {wxXmlResource, getFlags, 0}},
+ {2495, {wxXmlResource, getVersion, 0}},
+ {2496, {wxXmlResource, getXRCID, 2}},
+ {2497, {wxXmlResource, initAllHandlers, 0}},
+ {2498, {wxXmlResource, load, 1}},
+ {2499, {wxXmlResource, loadBitmap, 1}},
+ {2500, {wxXmlResource, loadDialog_2, 2}},
+ {2501, {wxXmlResource, loadDialog_3, 3}},
+ {2502, {wxXmlResource, loadFrame_2, 2}},
+ {2503, {wxXmlResource, loadFrame_3, 3}},
+ {2504, {wxXmlResource, loadIcon, 1}},
+ {2505, {wxXmlResource, loadMenu, 1}},
+ {2506, {wxXmlResource, loadMenuBar_2, 2}},
+ {2507, {wxXmlResource, loadMenuBar_1, 1}},
+ {2508, {wxXmlResource, loadPanel_2, 2}},
+ {2509, {wxXmlResource, loadPanel_3, 3}},
+ {2510, {wxXmlResource, loadToolBar, 2}},
+ {2511, {wxXmlResource, set, 1}},
+ {2512, {wxXmlResource, setFlags, 1}},
+ {2513, {wxXmlResource, unload, 1}},
+ {2514, {wxXmlResource, xrcctrl, 3}},
+ {2515, {wxHtmlEasyPrinting, new, 1}},
+ {2516, {wxHtmlEasyPrinting, destruct, 0}},
+ {2517, {wxHtmlEasyPrinting, getPrintData, 0}},
+ {2518, {wxHtmlEasyPrinting, getPageSetupData, 0}},
+ {2519, {wxHtmlEasyPrinting, previewFile, 1}},
+ {2520, {wxHtmlEasyPrinting, previewText, 2}},
+ {2521, {wxHtmlEasyPrinting, printFile, 1}},
+ {2522, {wxHtmlEasyPrinting, printText, 2}},
+ {2523, {wxHtmlEasyPrinting, pageSetup, 0}},
+ {2524, {wxHtmlEasyPrinting, setFonts, 3}},
+ {2525, {wxHtmlEasyPrinting, setHeader, 2}},
+ {2526, {wxHtmlEasyPrinting, setFooter, 2}},
+ {2528, {wxGLCanvas, new_2, 2}},
+ {2529, {wxGLCanvas, new_3_1, 3}},
+ {2530, {wxGLCanvas, new_3_0, 3}},
+ {2531, {wxGLCanvas, getContext, 0}},
+ {2533, {wxGLCanvas, setCurrent, 0}},
+ {2534, {wxGLCanvas, swapBuffers, 0}},
+ {2535, {wxGLCanvas, 'Destroy', undefined}},
+ {2536, {wxAuiManager, new, 1}},
+ {2537, {wxAuiManager, destruct, 0}},
+ {2538, {wxAuiManager, addPane_2_1, 2}},
+ {2539, {wxAuiManager, addPane_3, 3}},
+ {2540, {wxAuiManager, addPane_2_0, 2}},
+ {2541, {wxAuiManager, detachPane, 1}},
+ {2542, {wxAuiManager, getAllPanes, 0}},
+ {2543, {wxAuiManager, getArtProvider, 0}},
+ {2544, {wxAuiManager, getDockSizeConstraint, 2}},
+ {2545, {wxAuiManager, getFlags, 0}},
+ {2546, {wxAuiManager, getManagedWindow, 0}},
+ {2547, {wxAuiManager, getManager, 1}},
+ {2548, {wxAuiManager, getPane_1_1, 1}},
+ {2549, {wxAuiManager, getPane_1_0, 1}},
+ {2550, {wxAuiManager, hideHint, 0}},
+ {2551, {wxAuiManager, insertPane, 3}},
+ {2552, {wxAuiManager, loadPaneInfo, 2}},
+ {2553, {wxAuiManager, loadPerspective, 2}},
+ {2554, {wxAuiManager, savePaneInfo, 1}},
+ {2555, {wxAuiManager, savePerspective, 0}},
+ {2556, {wxAuiManager, setArtProvider, 1}},
+ {2557, {wxAuiManager, setDockSizeConstraint, 2}},
+ {2558, {wxAuiManager, setFlags, 1}},
+ {2559, {wxAuiManager, setManagedWindow, 1}},
+ {2560, {wxAuiManager, showHint, 1}},
+ {2561, {wxAuiManager, unInit, 0}},
+ {2562, {wxAuiManager, update, 0}},
+ {2563, {wxAuiPaneInfo, new_0, 0}},
+ {2564, {wxAuiPaneInfo, new_1, 1}},
+ {2565, {wxAuiPaneInfo, destruct, 0}},
+ {2566, {wxAuiPaneInfo, bestSize_1, 1}},
+ {2567, {wxAuiPaneInfo, bestSize_2, 2}},
+ {2568, {wxAuiPaneInfo, bottom, 0}},
+ {2569, {wxAuiPaneInfo, bottomDockable, 1}},
+ {2570, {wxAuiPaneInfo, caption, 1}},
+ {2571, {wxAuiPaneInfo, captionVisible, 1}},
+ {2572, {wxAuiPaneInfo, centre, 0}},
+ {2573, {wxAuiPaneInfo, centrePane, 0}},
+ {2574, {wxAuiPaneInfo, closeButton, 1}},
+ {2575, {wxAuiPaneInfo, defaultPane, 0}},
+ {2576, {wxAuiPaneInfo, destroyOnClose, 1}},
+ {2577, {wxAuiPaneInfo, direction, 1}},
+ {2578, {wxAuiPaneInfo, dock, 0}},
+ {2579, {wxAuiPaneInfo, dockable, 1}},
+ {2580, {wxAuiPaneInfo, fixed, 0}},
+ {2581, {wxAuiPaneInfo, float, 0}},
+ {2582, {wxAuiPaneInfo, floatable, 1}},
+ {2583, {wxAuiPaneInfo, floatingPosition_1, 1}},
+ {2584, {wxAuiPaneInfo, floatingPosition_2, 2}},
+ {2585, {wxAuiPaneInfo, floatingSize_1, 1}},
+ {2586, {wxAuiPaneInfo, floatingSize_2, 2}},
+ {2587, {wxAuiPaneInfo, gripper, 1}},
+ {2588, {wxAuiPaneInfo, gripperTop, 1}},
+ {2589, {wxAuiPaneInfo, hasBorder, 0}},
+ {2590, {wxAuiPaneInfo, hasCaption, 0}},
+ {2591, {wxAuiPaneInfo, hasCloseButton, 0}},
+ {2592, {wxAuiPaneInfo, hasFlag, 1}},
+ {2593, {wxAuiPaneInfo, hasGripper, 0}},
+ {2594, {wxAuiPaneInfo, hasGripperTop, 0}},
+ {2595, {wxAuiPaneInfo, hasMaximizeButton, 0}},
+ {2596, {wxAuiPaneInfo, hasMinimizeButton, 0}},
+ {2597, {wxAuiPaneInfo, hasPinButton, 0}},
+ {2598, {wxAuiPaneInfo, hide, 0}},
+ {2599, {wxAuiPaneInfo, isBottomDockable, 0}},
+ {2600, {wxAuiPaneInfo, isDocked, 0}},
+ {2601, {wxAuiPaneInfo, isFixed, 0}},
+ {2602, {wxAuiPaneInfo, isFloatable, 0}},
+ {2603, {wxAuiPaneInfo, isFloating, 0}},
+ {2604, {wxAuiPaneInfo, isLeftDockable, 0}},
+ {2605, {wxAuiPaneInfo, isMovable, 0}},
+ {2606, {wxAuiPaneInfo, isOk, 0}},
+ {2607, {wxAuiPaneInfo, isResizable, 0}},
+ {2608, {wxAuiPaneInfo, isRightDockable, 0}},
+ {2609, {wxAuiPaneInfo, isShown, 0}},
+ {2610, {wxAuiPaneInfo, isToolbar, 0}},
+ {2611, {wxAuiPaneInfo, isTopDockable, 0}},
+ {2612, {wxAuiPaneInfo, layer, 1}},
+ {2613, {wxAuiPaneInfo, left, 0}},
+ {2614, {wxAuiPaneInfo, leftDockable, 1}},
+ {2615, {wxAuiPaneInfo, maxSize_1, 1}},
+ {2616, {wxAuiPaneInfo, maxSize_2, 2}},
+ {2617, {wxAuiPaneInfo, maximizeButton, 1}},
+ {2618, {wxAuiPaneInfo, minSize_1, 1}},
+ {2619, {wxAuiPaneInfo, minSize_2, 2}},
+ {2620, {wxAuiPaneInfo, minimizeButton, 1}},
+ {2621, {wxAuiPaneInfo, movable, 1}},
+ {2622, {wxAuiPaneInfo, name, 1}},
+ {2623, {wxAuiPaneInfo, paneBorder, 1}},
+ {2624, {wxAuiPaneInfo, pinButton, 1}},
+ {2625, {wxAuiPaneInfo, position, 1}},
+ {2626, {wxAuiPaneInfo, resizable, 1}},
+ {2627, {wxAuiPaneInfo, right, 0}},
+ {2628, {wxAuiPaneInfo, rightDockable, 1}},
+ {2629, {wxAuiPaneInfo, row, 1}},
+ {2630, {wxAuiPaneInfo, safeSet, 1}},
+ {2631, {wxAuiPaneInfo, setFlag, 2}},
+ {2632, {wxAuiPaneInfo, show, 1}},
+ {2633, {wxAuiPaneInfo, toolbarPane, 0}},
+ {2634, {wxAuiPaneInfo, top, 0}},
+ {2635, {wxAuiPaneInfo, topDockable, 1}},
+ {2636, {wxAuiPaneInfo, window, 1}},
+ {2637, {wxAuiNotebook, new_0, 0}},
+ {2638, {wxAuiNotebook, new_2, 2}},
+ {2639, {wxAuiNotebook, addPage, 3}},
+ {2640, {wxAuiNotebook, create, 2}},
+ {2641, {wxAuiNotebook, deletePage, 1}},
+ {2642, {wxAuiNotebook, getArtProvider, 0}},
+ {2643, {wxAuiNotebook, getPage, 1}},
+ {2644, {wxAuiNotebook, getPageBitmap, 1}},
+ {2645, {wxAuiNotebook, getPageCount, 0}},
+ {2646, {wxAuiNotebook, getPageIndex, 1}},
+ {2647, {wxAuiNotebook, getPageText, 1}},
+ {2648, {wxAuiNotebook, getSelection, 0}},
+ {2649, {wxAuiNotebook, insertPage, 4}},
+ {2650, {wxAuiNotebook, removePage, 1}},
+ {2651, {wxAuiNotebook, setArtProvider, 1}},
+ {2652, {wxAuiNotebook, setFont, 1}},
+ {2653, {wxAuiNotebook, setPageBitmap, 2}},
+ {2654, {wxAuiNotebook, setPageText, 2}},
+ {2655, {wxAuiNotebook, setSelection, 1}},
+ {2656, {wxAuiNotebook, setTabCtrlHeight, 1}},
+ {2657, {wxAuiNotebook, setUniformBitmapSize, 1}},
+ {2658, {wxAuiNotebook, 'Destroy', undefined}},
+ {2659, {wxMDIParentFrame, new_0, 0}},
+ {2660, {wxMDIParentFrame, new_4, 4}},
+ {2661, {wxMDIParentFrame, destruct, 0}},
+ {2662, {wxMDIParentFrame, activateNext, 0}},
+ {2663, {wxMDIParentFrame, activatePrevious, 0}},
+ {2664, {wxMDIParentFrame, arrangeIcons, 0}},
+ {2665, {wxMDIParentFrame, cascade, 0}},
+ {2666, {wxMDIParentFrame, create, 4}},
+ {2667, {wxMDIParentFrame, getActiveChild, 0}},
+ {2668, {wxMDIParentFrame, getClientWindow, 0}},
+ {2669, {wxMDIParentFrame, tile, 1}},
+ {2670, {wxMDIChildFrame, new_0, 0}},
+ {2671, {wxMDIChildFrame, new_4, 4}},
+ {2672, {wxMDIChildFrame, destruct, 0}},
+ {2673, {wxMDIChildFrame, activate, 0}},
+ {2674, {wxMDIChildFrame, create, 4}},
+ {2675, {wxMDIChildFrame, maximize, 1}},
+ {2676, {wxMDIChildFrame, restore, 0}},
+ {2677, {wxMDIClientWindow, new_0, 0}},
+ {2678, {wxMDIClientWindow, new_2, 2}},
+ {2679, {wxMDIClientWindow, destruct, 0}},
+ {2680, {wxMDIClientWindow, createClient, 2}},
+ {2681, {wxLayoutAlgorithm, new, 0}},
+ {2682, {wxLayoutAlgorithm, layoutFrame, 2}},
+ {2683, {wxLayoutAlgorithm, layoutMDIFrame, 2}},
+ {2684, {wxLayoutAlgorithm, layoutWindow, 2}},
+ {2685, {wxLayoutAlgorithm, 'Destroy', undefined}},
+ {2686, {wxEvent, getId, 0}},
+ {2687, {wxEvent, getSkipped, 0}},
+ {2688, {wxEvent, getTimestamp, 0}},
+ {2689, {wxEvent, isCommandEvent, 0}},
+ {2690, {wxEvent, resumePropagation, 1}},
+ {2691, {wxEvent, shouldPropagate, 0}},
+ {2692, {wxEvent, skip, 1}},
+ {2693, {wxEvent, stopPropagation, 0}},
+ {2694, {wxCommandEvent, getClientData, 0}},
+ {2695, {wxCommandEvent, getExtraLong, 0}},
+ {2696, {wxCommandEvent, getInt, 0}},
+ {2697, {wxCommandEvent, getSelection, 0}},
+ {2698, {wxCommandEvent, getString, 0}},
+ {2699, {wxCommandEvent, isChecked, 0}},
+ {2700, {wxCommandEvent, isSelection, 0}},
+ {2701, {wxCommandEvent, setInt, 1}},
+ {2702, {wxCommandEvent, setString, 1}},
+ {2703, {wxScrollEvent, getOrientation, 0}},
+ {2704, {wxScrollEvent, getPosition, 0}},
+ {2705, {wxScrollWinEvent, getOrientation, 0}},
+ {2706, {wxScrollWinEvent, getPosition, 0}},
+ {2707, {wxMouseEvent, altDown, 0}},
+ {2708, {wxMouseEvent, button, 1}},
+ {2709, {wxMouseEvent, buttonDClick, 1}},
+ {2710, {wxMouseEvent, buttonDown, 1}},
+ {2711, {wxMouseEvent, buttonUp, 1}},
+ {2712, {wxMouseEvent, cmdDown, 0}},
+ {2713, {wxMouseEvent, controlDown, 0}},
+ {2714, {wxMouseEvent, dragging, 0}},
+ {2715, {wxMouseEvent, entering, 0}},
+ {2716, {wxMouseEvent, getButton, 0}},
+ {2719, {wxMouseEvent, getPosition, 0}},
+ {2720, {wxMouseEvent, getLogicalPosition, 1}},
+ {2721, {wxMouseEvent, getLinesPerAction, 0}},
+ {2722, {wxMouseEvent, getWheelRotation, 0}},
+ {2723, {wxMouseEvent, getWheelDelta, 0}},
+ {2724, {wxMouseEvent, getX, 0}},
+ {2725, {wxMouseEvent, getY, 0}},
+ {2726, {wxMouseEvent, isButton, 0}},
+ {2727, {wxMouseEvent, isPageScroll, 0}},
+ {2728, {wxMouseEvent, leaving, 0}},
+ {2729, {wxMouseEvent, leftDClick, 0}},
+ {2730, {wxMouseEvent, leftDown, 0}},
+ {2731, {wxMouseEvent, leftIsDown, 0}},
+ {2732, {wxMouseEvent, leftUp, 0}},
+ {2733, {wxMouseEvent, metaDown, 0}},
+ {2734, {wxMouseEvent, middleDClick, 0}},
+ {2735, {wxMouseEvent, middleDown, 0}},
+ {2736, {wxMouseEvent, middleIsDown, 0}},
+ {2737, {wxMouseEvent, middleUp, 0}},
+ {2738, {wxMouseEvent, moving, 0}},
+ {2739, {wxMouseEvent, rightDClick, 0}},
+ {2740, {wxMouseEvent, rightDown, 0}},
+ {2741, {wxMouseEvent, rightIsDown, 0}},
+ {2742, {wxMouseEvent, rightUp, 0}},
+ {2743, {wxMouseEvent, shiftDown, 0}},
+ {2744, {wxSetCursorEvent, getCursor, 0}},
+ {2745, {wxSetCursorEvent, getX, 0}},
+ {2746, {wxSetCursorEvent, getY, 0}},
+ {2747, {wxSetCursorEvent, hasCursor, 0}},
+ {2748, {wxSetCursorEvent, setCursor, 1}},
+ {2749, {wxKeyEvent, altDown, 0}},
+ {2750, {wxKeyEvent, cmdDown, 0}},
+ {2751, {wxKeyEvent, controlDown, 0}},
+ {2752, {wxKeyEvent, getKeyCode, 0}},
+ {2753, {wxKeyEvent, getModifiers, 0}},
+ {2756, {wxKeyEvent, getPosition, 0}},
+ {2757, {wxKeyEvent, getRawKeyCode, 0}},
+ {2758, {wxKeyEvent, getRawKeyFlags, 0}},
+ {2759, {wxKeyEvent, getUnicodeKey, 0}},
+ {2760, {wxKeyEvent, getX, 0}},
+ {2761, {wxKeyEvent, getY, 0}},
+ {2762, {wxKeyEvent, hasModifiers, 0}},
+ {2763, {wxKeyEvent, metaDown, 0}},
+ {2764, {wxKeyEvent, shiftDown, 0}},
+ {2765, {wxSizeEvent, getSize, 0}},
+ {2766, {wxMoveEvent, getPosition, 0}},
+ {2767, {wxEraseEvent, getDC, 0}},
+ {2768, {wxFocusEvent, getWindow, 0}},
+ {2769, {wxChildFocusEvent, getWindow, 0}},
+ {2770, {wxMenuEvent, getMenu, 0}},
+ {2771, {wxMenuEvent, getMenuId, 0}},
+ {2772, {wxMenuEvent, isPopup, 0}},
+ {2773, {wxCloseEvent, canVeto, 0}},
+ {2774, {wxCloseEvent, getLoggingOff, 0}},
+ {2775, {wxCloseEvent, setCanVeto, 1}},
+ {2776, {wxCloseEvent, setLoggingOff, 1}},
+ {2777, {wxCloseEvent, veto, 1}},
+ {2778, {wxShowEvent, setShow, 1}},
+ {2779, {wxShowEvent, getShow, 0}},
+ {2780, {wxIconizeEvent, iconized, 0}},
+ {2781, {wxJoystickEvent, buttonDown, 1}},
+ {2782, {wxJoystickEvent, buttonIsDown, 1}},
+ {2783, {wxJoystickEvent, buttonUp, 1}},
+ {2784, {wxJoystickEvent, getButtonChange, 0}},
+ {2785, {wxJoystickEvent, getButtonState, 0}},
+ {2786, {wxJoystickEvent, getJoystick, 0}},
+ {2787, {wxJoystickEvent, getPosition, 0}},
+ {2788, {wxJoystickEvent, getZPosition, 0}},
+ {2789, {wxJoystickEvent, isButton, 0}},
+ {2790, {wxJoystickEvent, isMove, 0}},
+ {2791, {wxJoystickEvent, isZMove, 0}},
+ {2792, {wxUpdateUIEvent, canUpdate, 1}},
+ {2793, {wxUpdateUIEvent, check, 1}},
+ {2794, {wxUpdateUIEvent, enable, 1}},
+ {2795, {wxUpdateUIEvent, show, 1}},
+ {2796, {wxUpdateUIEvent, getChecked, 0}},
+ {2797, {wxUpdateUIEvent, getEnabled, 0}},
+ {2798, {wxUpdateUIEvent, getShown, 0}},
+ {2799, {wxUpdateUIEvent, getSetChecked, 0}},
+ {2800, {wxUpdateUIEvent, getSetEnabled, 0}},
+ {2801, {wxUpdateUIEvent, getSetShown, 0}},
+ {2802, {wxUpdateUIEvent, getSetText, 0}},
+ {2803, {wxUpdateUIEvent, getText, 0}},
+ {2804, {wxUpdateUIEvent, getMode, 0}},
+ {2805, {wxUpdateUIEvent, getUpdateInterval, 0}},
+ {2806, {wxUpdateUIEvent, resetUpdateTime, 0}},
+ {2807, {wxUpdateUIEvent, setMode, 1}},
+ {2808, {wxUpdateUIEvent, setText, 1}},
+ {2809, {wxUpdateUIEvent, setUpdateInterval, 1}},
+ {2810, {wxMouseCaptureChangedEvent, getCapturedWindow, 0}},
+ {2811, {wxPaletteChangedEvent, setChangedWindow, 1}},
+ {2812, {wxPaletteChangedEvent, getChangedWindow, 0}},
+ {2813, {wxQueryNewPaletteEvent, setPaletteRealized, 1}},
+ {2814, {wxQueryNewPaletteEvent, getPaletteRealized, 0}},
+ {2815, {wxNavigationKeyEvent, getDirection, 0}},
+ {2816, {wxNavigationKeyEvent, setDirection, 1}},
+ {2817, {wxNavigationKeyEvent, isWindowChange, 0}},
+ {2818, {wxNavigationKeyEvent, setWindowChange, 1}},
+ {2819, {wxNavigationKeyEvent, isFromTab, 0}},
+ {2820, {wxNavigationKeyEvent, setFromTab, 1}},
+ {2821, {wxNavigationKeyEvent, getCurrentFocus, 0}},
+ {2822, {wxNavigationKeyEvent, setCurrentFocus, 1}},
+ {2823, {wxHelpEvent, getOrigin, 0}},
+ {2824, {wxHelpEvent, getPosition, 0}},
+ {2825, {wxHelpEvent, setOrigin, 1}},
+ {2826, {wxHelpEvent, setPosition, 1}},
+ {2827, {wxContextMenuEvent, getPosition, 0}},
+ {2828, {wxContextMenuEvent, setPosition, 1}},
+ {2829, {wxIdleEvent, canSend, 1}},
+ {2830, {wxIdleEvent, getMode, 0}},
+ {2831, {wxIdleEvent, requestMore, 1}},
+ {2832, {wxIdleEvent, moreRequested, 0}},
+ {2833, {wxIdleEvent, setMode, 1}},
+ {2834, {wxGridEvent, altDown, 0}},
+ {2835, {wxGridEvent, controlDown, 0}},
+ {2836, {wxGridEvent, getCol, 0}},
+ {2837, {wxGridEvent, getPosition, 0}},
+ {2838, {wxGridEvent, getRow, 0}},
+ {2839, {wxGridEvent, metaDown, 0}},
+ {2840, {wxGridEvent, selecting, 0}},
+ {2841, {wxGridEvent, shiftDown, 0}},
+ {2842, {wxNotifyEvent, allow, 0}},
+ {2843, {wxNotifyEvent, isAllowed, 0}},
+ {2844, {wxNotifyEvent, veto, 0}},
+ {2845, {wxSashEvent, getEdge, 0}},
+ {2846, {wxSashEvent, getDragRect, 0}},
+ {2847, {wxSashEvent, getDragStatus, 0}},
+ {2848, {wxListEvent, getCacheFrom, 0}},
+ {2849, {wxListEvent, getCacheTo, 0}},
+ {2850, {wxListEvent, getKeyCode, 0}},
+ {2851, {wxListEvent, getIndex, 0}},
+ {2852, {wxListEvent, getColumn, 0}},
+ {2853, {wxListEvent, getPoint, 0}},
+ {2854, {wxListEvent, getLabel, 0}},
+ {2855, {wxListEvent, getText, 0}},
+ {2856, {wxListEvent, getImage, 0}},
+ {2857, {wxListEvent, getData, 0}},
+ {2858, {wxListEvent, getMask, 0}},
+ {2859, {wxListEvent, getItem, 0}},
+ {2860, {wxListEvent, isEditCancelled, 0}},
+ {2861, {wxDateEvent, getDate, 0}},
+ {2862, {wxCalendarEvent, getWeekDay, 0}},
+ {2863, {wxFileDirPickerEvent, getPath, 0}},
+ {2864, {wxColourPickerEvent, getColour, 0}},
+ {2865, {wxFontPickerEvent, getFont, 0}},
+ {2866, {wxStyledTextEvent, getPosition, 0}},
+ {2867, {wxStyledTextEvent, getKey, 0}},
+ {2868, {wxStyledTextEvent, getModifiers, 0}},
+ {2869, {wxStyledTextEvent, getModificationType, 0}},
+ {2870, {wxStyledTextEvent, getText, 0}},
+ {2871, {wxStyledTextEvent, getLength, 0}},
+ {2872, {wxStyledTextEvent, getLinesAdded, 0}},
+ {2873, {wxStyledTextEvent, getLine, 0}},
+ {2874, {wxStyledTextEvent, getFoldLevelNow, 0}},
+ {2875, {wxStyledTextEvent, getFoldLevelPrev, 0}},
+ {2876, {wxStyledTextEvent, getMargin, 0}},
+ {2877, {wxStyledTextEvent, getMessage, 0}},
+ {2878, {wxStyledTextEvent, getWParam, 0}},
+ {2879, {wxStyledTextEvent, getLParam, 0}},
+ {2880, {wxStyledTextEvent, getListType, 0}},
+ {2881, {wxStyledTextEvent, getX, 0}},
+ {2882, {wxStyledTextEvent, getY, 0}},
+ {2883, {wxStyledTextEvent, getDragText, 0}},
+ {2884, {wxStyledTextEvent, getDragAllowMove, 0}},
+ {2885, {wxStyledTextEvent, getDragResult, 0}},
+ {2886, {wxStyledTextEvent, getShift, 0}},
+ {2887, {wxStyledTextEvent, getControl, 0}},
+ {2888, {wxStyledTextEvent, getAlt, 0}},
+ {2889, {utils, getKeyState, 1}},
+ {2890, {utils, getMousePosition, 2}},
+ {2891, {utils, getMouseState, 0}},
+ {2892, {utils, setDetectableAutoRepeat, 1}},
+ {2893, {utils, bell, 0}},
+ {2894, {utils, findMenuItemId, 3}},
+ {2895, {utils, genericFindWindowAtPoint, 1}},
+ {2896, {utils, findWindowAtPoint, 1}},
+ {2897, {utils, beginBusyCursor, 1}},
+ {2898, {utils, endBusyCursor, 0}},
+ {2899, {utils, isBusy, 0}},
+ {2900, {utils, shutdown, 1}},
+ {2901, {utils, shell, 1}},
+ {2902, {utils, launchDefaultBrowser, 2}},
+ {2903, {utils, getEmailAddress, 0}},
+ {2904, {utils, getUserId, 0}},
+ {2905, {utils, getHomeDir, 0}},
+ {2906, {utils, newId, 0}},
+ {2907, {utils, registerId, 1}},
+ {2908, {utils, getCurrentId, 0}},
+ {2909, {utils, getOsDescription, 0}},
+ {2910, {utils, isPlatformLittleEndian, 0}},
+ {2911, {utils, isPlatform64Bit, 0}},
+ {2912, {wxPrintout, new, 1}},
+ {2913, {wxPrintout, destruct, 0}},
+ {2914, {wxPrintout, getDC, 0}},
+ {2915, {wxPrintout, getPageSizeMM, 2}},
+ {2916, {wxPrintout, getPageSizePixels, 2}},
+ {2917, {wxPrintout, getPaperRectPixels, 0}},
+ {2918, {wxPrintout, getPPIPrinter, 2}},
+ {2919, {wxPrintout, getPPIScreen, 2}},
+ {2920, {wxPrintout, getTitle, 0}},
+ {2921, {wxPrintout, isPreview, 0}},
+ {2922, {wxPrintout, fitThisSizeToPaper, 1}},
+ {2923, {wxPrintout, fitThisSizeToPage, 1}},
+ {2924, {wxPrintout, fitThisSizeToPageMargins, 2}},
+ {2925, {wxPrintout, mapScreenSizeToPaper, 0}},
+ {2926, {wxPrintout, mapScreenSizeToPage, 0}},
+ {2927, {wxPrintout, mapScreenSizeToPageMargins, 1}},
+ {2928, {wxPrintout, mapScreenSizeToDevice, 0}},
+ {2929, {wxPrintout, getLogicalPaperRect, 0}},
+ {2930, {wxPrintout, getLogicalPageRect, 0}},
+ {2931, {wxPrintout, getLogicalPageMarginsRect, 1}},
+ {2932, {wxPrintout, setLogicalOrigin, 2}},
+ {2933, {wxPrintout, offsetLogicalOrigin, 2}},
+ {2934, {wxStyledTextCtrl, new_2, 2}},
+ {2935, {wxStyledTextCtrl, new_0, 0}},
+ {2936, {wxStyledTextCtrl, destruct, 0}},
+ {2937, {wxStyledTextCtrl, create, 2}},
+ {2938, {wxStyledTextCtrl, addText, 1}},
+ {2939, {wxStyledTextCtrl, addStyledText, 1}},
+ {2940, {wxStyledTextCtrl, insertText, 2}},
+ {2941, {wxStyledTextCtrl, clearAll, 0}},
+ {2942, {wxStyledTextCtrl, clearDocumentStyle, 0}},
+ {2943, {wxStyledTextCtrl, getLength, 0}},
+ {2944, {wxStyledTextCtrl, getCharAt, 1}},
+ {2945, {wxStyledTextCtrl, getCurrentPos, 0}},
+ {2946, {wxStyledTextCtrl, getAnchor, 0}},
+ {2947, {wxStyledTextCtrl, getStyleAt, 1}},
+ {2948, {wxStyledTextCtrl, redo, 0}},
+ {2949, {wxStyledTextCtrl, setUndoCollection, 1}},
+ {2950, {wxStyledTextCtrl, selectAll, 0}},
+ {2951, {wxStyledTextCtrl, setSavePoint, 0}},
+ {2952, {wxStyledTextCtrl, getStyledText, 2}},
+ {2953, {wxStyledTextCtrl, canRedo, 0}},
+ {2954, {wxStyledTextCtrl, markerLineFromHandle, 1}},
+ {2955, {wxStyledTextCtrl, markerDeleteHandle, 1}},
+ {2956, {wxStyledTextCtrl, getUndoCollection, 0}},
+ {2957, {wxStyledTextCtrl, getViewWhiteSpace, 0}},
+ {2958, {wxStyledTextCtrl, setViewWhiteSpace, 1}},
+ {2959, {wxStyledTextCtrl, positionFromPoint, 1}},
+ {2960, {wxStyledTextCtrl, positionFromPointClose, 2}},
+ {2961, {wxStyledTextCtrl, gotoLine, 1}},
+ {2962, {wxStyledTextCtrl, gotoPos, 1}},
+ {2963, {wxStyledTextCtrl, setAnchor, 1}},
+ {2964, {wxStyledTextCtrl, getCurLine, 1}},
+ {2965, {wxStyledTextCtrl, getEndStyled, 0}},
+ {2966, {wxStyledTextCtrl, convertEOLs, 1}},
+ {2967, {wxStyledTextCtrl, getEOLMode, 0}},
+ {2968, {wxStyledTextCtrl, setEOLMode, 1}},
+ {2969, {wxStyledTextCtrl, startStyling, 2}},
+ {2970, {wxStyledTextCtrl, setStyling, 2}},
+ {2971, {wxStyledTextCtrl, getBufferedDraw, 0}},
+ {2972, {wxStyledTextCtrl, setBufferedDraw, 1}},
+ {2973, {wxStyledTextCtrl, setTabWidth, 1}},
+ {2974, {wxStyledTextCtrl, getTabWidth, 0}},
+ {2975, {wxStyledTextCtrl, setCodePage, 1}},
+ {2976, {wxStyledTextCtrl, markerDefine, 3}},
+ {2977, {wxStyledTextCtrl, markerSetForeground, 2}},
+ {2978, {wxStyledTextCtrl, markerSetBackground, 2}},
+ {2979, {wxStyledTextCtrl, markerAdd, 2}},
+ {2980, {wxStyledTextCtrl, markerDelete, 2}},
+ {2981, {wxStyledTextCtrl, markerDeleteAll, 1}},
+ {2982, {wxStyledTextCtrl, markerGet, 1}},
+ {2983, {wxStyledTextCtrl, markerNext, 2}},
+ {2984, {wxStyledTextCtrl, markerPrevious, 2}},
+ {2985, {wxStyledTextCtrl, markerDefineBitmap, 2}},
+ {2986, {wxStyledTextCtrl, markerAddSet, 2}},
+ {2987, {wxStyledTextCtrl, markerSetAlpha, 2}},
+ {2988, {wxStyledTextCtrl, setMarginType, 2}},
+ {2989, {wxStyledTextCtrl, getMarginType, 1}},
+ {2990, {wxStyledTextCtrl, setMarginWidth, 2}},
+ {2991, {wxStyledTextCtrl, getMarginWidth, 1}},
+ {2992, {wxStyledTextCtrl, setMarginMask, 2}},
+ {2993, {wxStyledTextCtrl, getMarginMask, 1}},
+ {2994, {wxStyledTextCtrl, setMarginSensitive, 2}},
+ {2995, {wxStyledTextCtrl, getMarginSensitive, 1}},
+ {2996, {wxStyledTextCtrl, styleClearAll, 0}},
+ {2997, {wxStyledTextCtrl, styleSetForeground, 2}},
+ {2998, {wxStyledTextCtrl, styleSetBackground, 2}},
+ {2999, {wxStyledTextCtrl, styleSetBold, 2}},
+ {3000, {wxStyledTextCtrl, styleSetItalic, 2}},
+ {3001, {wxStyledTextCtrl, styleSetSize, 2}},
+ {3002, {wxStyledTextCtrl, styleSetFaceName, 2}},
+ {3003, {wxStyledTextCtrl, styleSetEOLFilled, 2}},
+ {3004, {wxStyledTextCtrl, styleResetDefault, 0}},
+ {3005, {wxStyledTextCtrl, styleSetUnderline, 2}},
+ {3006, {wxStyledTextCtrl, styleSetCase, 2}},
+ {3007, {wxStyledTextCtrl, styleSetHotSpot, 2}},
+ {3008, {wxStyledTextCtrl, setSelForeground, 2}},
+ {3009, {wxStyledTextCtrl, setSelBackground, 2}},
+ {3010, {wxStyledTextCtrl, getSelAlpha, 0}},
+ {3011, {wxStyledTextCtrl, setSelAlpha, 1}},
+ {3012, {wxStyledTextCtrl, setCaretForeground, 1}},
+ {3013, {wxStyledTextCtrl, cmdKeyAssign, 3}},
+ {3014, {wxStyledTextCtrl, cmdKeyClear, 2}},
+ {3015, {wxStyledTextCtrl, cmdKeyClearAll, 0}},
+ {3016, {wxStyledTextCtrl, setStyleBytes, 2}},
+ {3017, {wxStyledTextCtrl, styleSetVisible, 2}},
+ {3018, {wxStyledTextCtrl, getCaretPeriod, 0}},
+ {3019, {wxStyledTextCtrl, setCaretPeriod, 1}},
+ {3020, {wxStyledTextCtrl, setWordChars, 1}},
+ {3021, {wxStyledTextCtrl, beginUndoAction, 0}},
+ {3022, {wxStyledTextCtrl, endUndoAction, 0}},
+ {3023, {wxStyledTextCtrl, indicatorSetStyle, 2}},
+ {3024, {wxStyledTextCtrl, indicatorGetStyle, 1}},
+ {3025, {wxStyledTextCtrl, indicatorSetForeground, 2}},
+ {3026, {wxStyledTextCtrl, indicatorGetForeground, 1}},
+ {3027, {wxStyledTextCtrl, setWhitespaceForeground, 2}},
+ {3028, {wxStyledTextCtrl, setWhitespaceBackground, 2}},
+ {3029, {wxStyledTextCtrl, getStyleBits, 0}},
+ {3030, {wxStyledTextCtrl, setLineState, 2}},
+ {3031, {wxStyledTextCtrl, getLineState, 1}},
+ {3032, {wxStyledTextCtrl, getMaxLineState, 0}},
+ {3033, {wxStyledTextCtrl, getCaretLineVisible, 0}},
+ {3034, {wxStyledTextCtrl, setCaretLineVisible, 1}},
+ {3035, {wxStyledTextCtrl, getCaretLineBackground, 0}},
+ {3036, {wxStyledTextCtrl, setCaretLineBackground, 1}},
+ {3037, {wxStyledTextCtrl, autoCompShow, 2}},
+ {3038, {wxStyledTextCtrl, autoCompCancel, 0}},
+ {3039, {wxStyledTextCtrl, autoCompActive, 0}},
+ {3040, {wxStyledTextCtrl, autoCompPosStart, 0}},
+ {3041, {wxStyledTextCtrl, autoCompComplete, 0}},
+ {3042, {wxStyledTextCtrl, autoCompStops, 1}},
+ {3043, {wxStyledTextCtrl, autoCompSetSeparator, 1}},
+ {3044, {wxStyledTextCtrl, autoCompGetSeparator, 0}},
+ {3045, {wxStyledTextCtrl, autoCompSelect, 1}},
+ {3046, {wxStyledTextCtrl, autoCompSetCancelAtStart, 1}},
+ {3047, {wxStyledTextCtrl, autoCompGetCancelAtStart, 0}},
+ {3048, {wxStyledTextCtrl, autoCompSetFillUps, 1}},
+ {3049, {wxStyledTextCtrl, autoCompSetChooseSingle, 1}},
+ {3050, {wxStyledTextCtrl, autoCompGetChooseSingle, 0}},
+ {3051, {wxStyledTextCtrl, autoCompSetIgnoreCase, 1}},
+ {3052, {wxStyledTextCtrl, autoCompGetIgnoreCase, 0}},
+ {3053, {wxStyledTextCtrl, userListShow, 2}},
+ {3054, {wxStyledTextCtrl, autoCompSetAutoHide, 1}},
+ {3055, {wxStyledTextCtrl, autoCompGetAutoHide, 0}},
+ {3056, {wxStyledTextCtrl, autoCompSetDropRestOfWord, 1}},
+ {3057, {wxStyledTextCtrl, autoCompGetDropRestOfWord, 0}},
+ {3058, {wxStyledTextCtrl, registerImage, 2}},
+ {3059, {wxStyledTextCtrl, clearRegisteredImages, 0}},
+ {3060, {wxStyledTextCtrl, autoCompGetTypeSeparator, 0}},
+ {3061, {wxStyledTextCtrl, autoCompSetTypeSeparator, 1}},
+ {3062, {wxStyledTextCtrl, autoCompSetMaxWidth, 1}},
+ {3063, {wxStyledTextCtrl, autoCompGetMaxWidth, 0}},
+ {3064, {wxStyledTextCtrl, autoCompSetMaxHeight, 1}},
+ {3065, {wxStyledTextCtrl, autoCompGetMaxHeight, 0}},
+ {3066, {wxStyledTextCtrl, setIndent, 1}},
+ {3067, {wxStyledTextCtrl, getIndent, 0}},
+ {3068, {wxStyledTextCtrl, setUseTabs, 1}},
+ {3069, {wxStyledTextCtrl, getUseTabs, 0}},
+ {3070, {wxStyledTextCtrl, setLineIndentation, 2}},
+ {3071, {wxStyledTextCtrl, getLineIndentation, 1}},
+ {3072, {wxStyledTextCtrl, getLineIndentPosition, 1}},
+ {3073, {wxStyledTextCtrl, getColumn, 1}},
+ {3074, {wxStyledTextCtrl, setUseHorizontalScrollBar, 1}},
+ {3075, {wxStyledTextCtrl, getUseHorizontalScrollBar, 0}},
+ {3076, {wxStyledTextCtrl, setIndentationGuides, 1}},
+ {3077, {wxStyledTextCtrl, getIndentationGuides, 0}},
+ {3078, {wxStyledTextCtrl, setHighlightGuide, 1}},
+ {3079, {wxStyledTextCtrl, getHighlightGuide, 0}},
+ {3080, {wxStyledTextCtrl, getLineEndPosition, 1}},
+ {3081, {wxStyledTextCtrl, getCodePage, 0}},
+ {3082, {wxStyledTextCtrl, getCaretForeground, 0}},
+ {3083, {wxStyledTextCtrl, getReadOnly, 0}},
+ {3084, {wxStyledTextCtrl, setCurrentPos, 1}},
+ {3085, {wxStyledTextCtrl, setSelectionStart, 1}},
+ {3086, {wxStyledTextCtrl, getSelectionStart, 0}},
+ {3087, {wxStyledTextCtrl, setSelectionEnd, 1}},
+ {3088, {wxStyledTextCtrl, getSelectionEnd, 0}},
+ {3089, {wxStyledTextCtrl, setPrintMagnification, 1}},
+ {3090, {wxStyledTextCtrl, getPrintMagnification, 0}},
+ {3091, {wxStyledTextCtrl, setPrintColourMode, 1}},
+ {3092, {wxStyledTextCtrl, getPrintColourMode, 0}},
+ {3093, {wxStyledTextCtrl, findText, 4}},
+ {3094, {wxStyledTextCtrl, formatRange, 7}},
+ {3095, {wxStyledTextCtrl, getFirstVisibleLine, 0}},
+ {3096, {wxStyledTextCtrl, getLine, 1}},
+ {3097, {wxStyledTextCtrl, getLineCount, 0}},
+ {3098, {wxStyledTextCtrl, setMarginLeft, 1}},
+ {3099, {wxStyledTextCtrl, getMarginLeft, 0}},
+ {3100, {wxStyledTextCtrl, setMarginRight, 1}},
+ {3101, {wxStyledTextCtrl, getMarginRight, 0}},
+ {3102, {wxStyledTextCtrl, getModify, 0}},
+ {3103, {wxStyledTextCtrl, setSelection, 2}},
+ {3104, {wxStyledTextCtrl, getSelectedText, 0}},
+ {3105, {wxStyledTextCtrl, getTextRange, 2}},
+ {3106, {wxStyledTextCtrl, hideSelection, 1}},
+ {3107, {wxStyledTextCtrl, lineFromPosition, 1}},
+ {3108, {wxStyledTextCtrl, positionFromLine, 1}},
+ {3109, {wxStyledTextCtrl, lineScroll, 2}},
+ {3110, {wxStyledTextCtrl, ensureCaretVisible, 0}},
+ {3111, {wxStyledTextCtrl, replaceSelection, 1}},
+ {3112, {wxStyledTextCtrl, setReadOnly, 1}},
+ {3113, {wxStyledTextCtrl, canPaste, 0}},
+ {3114, {wxStyledTextCtrl, canUndo, 0}},
+ {3115, {wxStyledTextCtrl, emptyUndoBuffer, 0}},
+ {3116, {wxStyledTextCtrl, undo, 0}},
+ {3117, {wxStyledTextCtrl, cut, 0}},
+ {3118, {wxStyledTextCtrl, copy, 0}},
+ {3119, {wxStyledTextCtrl, paste, 0}},
+ {3120, {wxStyledTextCtrl, clear, 0}},
+ {3121, {wxStyledTextCtrl, setText, 1}},
+ {3122, {wxStyledTextCtrl, getText, 0}},
+ {3123, {wxStyledTextCtrl, getTextLength, 0}},
+ {3124, {wxStyledTextCtrl, getOvertype, 0}},
+ {3125, {wxStyledTextCtrl, setCaretWidth, 1}},
+ {3126, {wxStyledTextCtrl, getCaretWidth, 0}},
+ {3127, {wxStyledTextCtrl, setTargetStart, 1}},
+ {3128, {wxStyledTextCtrl, getTargetStart, 0}},
+ {3129, {wxStyledTextCtrl, setTargetEnd, 1}},
+ {3130, {wxStyledTextCtrl, getTargetEnd, 0}},
+ {3131, {wxStyledTextCtrl, replaceTarget, 1}},
+ {3132, {wxStyledTextCtrl, searchInTarget, 1}},
+ {3133, {wxStyledTextCtrl, setSearchFlags, 1}},
+ {3134, {wxStyledTextCtrl, getSearchFlags, 0}},
+ {3135, {wxStyledTextCtrl, callTipShow, 2}},
+ {3136, {wxStyledTextCtrl, callTipCancel, 0}},
+ {3137, {wxStyledTextCtrl, callTipActive, 0}},
+ {3138, {wxStyledTextCtrl, callTipPosAtStart, 0}},
+ {3139, {wxStyledTextCtrl, callTipSetHighlight, 2}},
+ {3140, {wxStyledTextCtrl, callTipSetBackground, 1}},
+ {3141, {wxStyledTextCtrl, callTipSetForeground, 1}},
+ {3142, {wxStyledTextCtrl, callTipSetForegroundHighlight, 1}},
+ {3143, {wxStyledTextCtrl, callTipUseStyle, 1}},
+ {3144, {wxStyledTextCtrl, visibleFromDocLine, 1}},
+ {3145, {wxStyledTextCtrl, docLineFromVisible, 1}},
+ {3146, {wxStyledTextCtrl, wrapCount, 1}},
+ {3147, {wxStyledTextCtrl, setFoldLevel, 2}},
+ {3148, {wxStyledTextCtrl, getFoldLevel, 1}},
+ {3149, {wxStyledTextCtrl, getLastChild, 2}},
+ {3150, {wxStyledTextCtrl, getFoldParent, 1}},
+ {3151, {wxStyledTextCtrl, showLines, 2}},
+ {3152, {wxStyledTextCtrl, hideLines, 2}},
+ {3153, {wxStyledTextCtrl, getLineVisible, 1}},
+ {3154, {wxStyledTextCtrl, setFoldExpanded, 2}},
+ {3155, {wxStyledTextCtrl, getFoldExpanded, 1}},
+ {3156, {wxStyledTextCtrl, toggleFold, 1}},
+ {3157, {wxStyledTextCtrl, ensureVisible, 1}},
+ {3158, {wxStyledTextCtrl, setFoldFlags, 1}},
+ {3159, {wxStyledTextCtrl, ensureVisibleEnforcePolicy, 1}},
+ {3160, {wxStyledTextCtrl, setTabIndents, 1}},
+ {3161, {wxStyledTextCtrl, getTabIndents, 0}},
+ {3162, {wxStyledTextCtrl, setBackSpaceUnIndents, 1}},
+ {3163, {wxStyledTextCtrl, getBackSpaceUnIndents, 0}},
+ {3164, {wxStyledTextCtrl, setMouseDwellTime, 1}},
+ {3165, {wxStyledTextCtrl, getMouseDwellTime, 0}},
+ {3166, {wxStyledTextCtrl, wordStartPosition, 2}},
+ {3167, {wxStyledTextCtrl, wordEndPosition, 2}},
+ {3168, {wxStyledTextCtrl, setWrapMode, 1}},
+ {3169, {wxStyledTextCtrl, getWrapMode, 0}},
+ {3170, {wxStyledTextCtrl, setWrapVisualFlags, 1}},
+ {3171, {wxStyledTextCtrl, getWrapVisualFlags, 0}},
+ {3172, {wxStyledTextCtrl, setWrapVisualFlagsLocation, 1}},
+ {3173, {wxStyledTextCtrl, getWrapVisualFlagsLocation, 0}},
+ {3174, {wxStyledTextCtrl, setWrapStartIndent, 1}},
+ {3175, {wxStyledTextCtrl, getWrapStartIndent, 0}},
+ {3176, {wxStyledTextCtrl, setLayoutCache, 1}},
+ {3177, {wxStyledTextCtrl, getLayoutCache, 0}},
+ {3178, {wxStyledTextCtrl, setScrollWidth, 1}},
+ {3179, {wxStyledTextCtrl, getScrollWidth, 0}},
+ {3180, {wxStyledTextCtrl, textWidth, 2}},
+ {3181, {wxStyledTextCtrl, getEndAtLastLine, 0}},
+ {3182, {wxStyledTextCtrl, textHeight, 1}},
+ {3183, {wxStyledTextCtrl, setUseVerticalScrollBar, 1}},
+ {3184, {wxStyledTextCtrl, getUseVerticalScrollBar, 0}},
+ {3185, {wxStyledTextCtrl, appendText, 1}},
+ {3186, {wxStyledTextCtrl, getTwoPhaseDraw, 0}},
+ {3187, {wxStyledTextCtrl, setTwoPhaseDraw, 1}},
+ {3188, {wxStyledTextCtrl, targetFromSelection, 0}},
+ {3189, {wxStyledTextCtrl, linesJoin, 0}},
+ {3190, {wxStyledTextCtrl, linesSplit, 1}},
+ {3191, {wxStyledTextCtrl, setFoldMarginColour, 2}},
+ {3192, {wxStyledTextCtrl, setFoldMarginHiColour, 2}},
+ {3193, {wxStyledTextCtrl, lineDown, 0}},
+ {3194, {wxStyledTextCtrl, lineDownExtend, 0}},
+ {3195, {wxStyledTextCtrl, lineUp, 0}},
+ {3196, {wxStyledTextCtrl, lineUpExtend, 0}},
+ {3197, {wxStyledTextCtrl, charLeft, 0}},
+ {3198, {wxStyledTextCtrl, charLeftExtend, 0}},
+ {3199, {wxStyledTextCtrl, charRight, 0}},
+ {3200, {wxStyledTextCtrl, charRightExtend, 0}},
+ {3201, {wxStyledTextCtrl, wordLeft, 0}},
+ {3202, {wxStyledTextCtrl, wordLeftExtend, 0}},
+ {3203, {wxStyledTextCtrl, wordRight, 0}},
+ {3204, {wxStyledTextCtrl, wordRightExtend, 0}},
+ {3205, {wxStyledTextCtrl, home, 0}},
+ {3206, {wxStyledTextCtrl, homeExtend, 0}},
+ {3207, {wxStyledTextCtrl, lineEnd, 0}},
+ {3208, {wxStyledTextCtrl, lineEndExtend, 0}},
+ {3209, {wxStyledTextCtrl, documentStart, 0}},
+ {3210, {wxStyledTextCtrl, documentStartExtend, 0}},
+ {3211, {wxStyledTextCtrl, documentEnd, 0}},
+ {3212, {wxStyledTextCtrl, documentEndExtend, 0}},
+ {3213, {wxStyledTextCtrl, pageUp, 0}},
+ {3214, {wxStyledTextCtrl, pageUpExtend, 0}},
+ {3215, {wxStyledTextCtrl, pageDown, 0}},
+ {3216, {wxStyledTextCtrl, pageDownExtend, 0}},
+ {3217, {wxStyledTextCtrl, editToggleOvertype, 0}},
+ {3218, {wxStyledTextCtrl, cancel, 0}},
+ {3219, {wxStyledTextCtrl, deleteBack, 0}},
+ {3220, {wxStyledTextCtrl, tab, 0}},
+ {3221, {wxStyledTextCtrl, backTab, 0}},
+ {3222, {wxStyledTextCtrl, newLine, 0}},
+ {3223, {wxStyledTextCtrl, formFeed, 0}},
+ {3224, {wxStyledTextCtrl, vCHome, 0}},
+ {3225, {wxStyledTextCtrl, vCHomeExtend, 0}},
+ {3226, {wxStyledTextCtrl, zoomIn, 0}},
+ {3227, {wxStyledTextCtrl, zoomOut, 0}},
+ {3228, {wxStyledTextCtrl, delWordLeft, 0}},
+ {3229, {wxStyledTextCtrl, delWordRight, 0}},
+ {3230, {wxStyledTextCtrl, lineCut, 0}},
+ {3231, {wxStyledTextCtrl, lineDelete, 0}},
+ {3232, {wxStyledTextCtrl, lineTranspose, 0}},
+ {3233, {wxStyledTextCtrl, lineDuplicate, 0}},
+ {3234, {wxStyledTextCtrl, lowerCase, 0}},
+ {3235, {wxStyledTextCtrl, upperCase, 0}},
+ {3236, {wxStyledTextCtrl, lineScrollDown, 0}},
+ {3237, {wxStyledTextCtrl, lineScrollUp, 0}},
+ {3238, {wxStyledTextCtrl, deleteBackNotLine, 0}},
+ {3239, {wxStyledTextCtrl, homeDisplay, 0}},
+ {3240, {wxStyledTextCtrl, homeDisplayExtend, 0}},
+ {3241, {wxStyledTextCtrl, lineEndDisplay, 0}},
+ {3242, {wxStyledTextCtrl, lineEndDisplayExtend, 0}},
+ {3243, {wxStyledTextCtrl, homeWrapExtend, 0}},
+ {3244, {wxStyledTextCtrl, lineEndWrap, 0}},
+ {3245, {wxStyledTextCtrl, lineEndWrapExtend, 0}},
+ {3246, {wxStyledTextCtrl, vCHomeWrap, 0}},
+ {3247, {wxStyledTextCtrl, vCHomeWrapExtend, 0}},
+ {3248, {wxStyledTextCtrl, lineCopy, 0}},
+ {3249, {wxStyledTextCtrl, moveCaretInsideView, 0}},
+ {3250, {wxStyledTextCtrl, lineLength, 1}},
+ {3251, {wxStyledTextCtrl, braceHighlight, 2}},
+ {3252, {wxStyledTextCtrl, braceBadLight, 1}},
+ {3253, {wxStyledTextCtrl, braceMatch, 1}},
+ {3254, {wxStyledTextCtrl, getViewEOL, 0}},
+ {3255, {wxStyledTextCtrl, setViewEOL, 1}},
+ {3256, {wxStyledTextCtrl, setModEventMask, 1}},
+ {3257, {wxStyledTextCtrl, getEdgeColumn, 0}},
+ {3258, {wxStyledTextCtrl, setEdgeColumn, 1}},
+ {3259, {wxStyledTextCtrl, getEdgeMode, 0}},
+ {3260, {wxStyledTextCtrl, getEdgeColour, 0}},
+ {3261, {wxStyledTextCtrl, setEdgeColour, 1}},
+ {3262, {wxStyledTextCtrl, searchAnchor, 0}},
+ {3263, {wxStyledTextCtrl, searchNext, 2}},
+ {3264, {wxStyledTextCtrl, searchPrev, 2}},
+ {3265, {wxStyledTextCtrl, linesOnScreen, 0}},
+ {3266, {wxStyledTextCtrl, usePopUp, 1}},
+ {3267, {wxStyledTextCtrl, selectionIsRectangle, 0}},
+ {3268, {wxStyledTextCtrl, setZoom, 1}},
+ {3269, {wxStyledTextCtrl, getZoom, 0}},
+ {3270, {wxStyledTextCtrl, getModEventMask, 0}},
+ {3271, {wxStyledTextCtrl, setSTCFocus, 1}},
+ {3272, {wxStyledTextCtrl, getSTCFocus, 0}},
+ {3273, {wxStyledTextCtrl, setStatus, 1}},
+ {3274, {wxStyledTextCtrl, getStatus, 0}},
+ {3275, {wxStyledTextCtrl, setMouseDownCaptures, 1}},
+ {3276, {wxStyledTextCtrl, getMouseDownCaptures, 0}},
+ {3277, {wxStyledTextCtrl, setSTCCursor, 1}},
+ {3278, {wxStyledTextCtrl, getSTCCursor, 0}},
+ {3279, {wxStyledTextCtrl, setControlCharSymbol, 1}},
+ {3280, {wxStyledTextCtrl, getControlCharSymbol, 0}},
+ {3281, {wxStyledTextCtrl, wordPartLeft, 0}},
+ {3282, {wxStyledTextCtrl, wordPartLeftExtend, 0}},
+ {3283, {wxStyledTextCtrl, wordPartRight, 0}},
+ {3284, {wxStyledTextCtrl, wordPartRightExtend, 0}},
+ {3285, {wxStyledTextCtrl, setVisiblePolicy, 2}},
+ {3286, {wxStyledTextCtrl, delLineLeft, 0}},
+ {3287, {wxStyledTextCtrl, delLineRight, 0}},
+ {3288, {wxStyledTextCtrl, getXOffset, 0}},
+ {3289, {wxStyledTextCtrl, chooseCaretX, 0}},
+ {3290, {wxStyledTextCtrl, setXCaretPolicy, 2}},
+ {3291, {wxStyledTextCtrl, setYCaretPolicy, 2}},
+ {3292, {wxStyledTextCtrl, getPrintWrapMode, 0}},
+ {3293, {wxStyledTextCtrl, setHotspotActiveForeground, 2}},
+ {3294, {wxStyledTextCtrl, setHotspotActiveBackground, 2}},
+ {3295, {wxStyledTextCtrl, setHotspotActiveUnderline, 1}},
+ {3296, {wxStyledTextCtrl, setHotspotSingleLine, 1}},
+ {3297, {wxStyledTextCtrl, paraDownExtend, 0}},
+ {3298, {wxStyledTextCtrl, paraUp, 0}},
+ {3299, {wxStyledTextCtrl, paraUpExtend, 0}},
+ {3300, {wxStyledTextCtrl, positionBefore, 1}},
+ {3301, {wxStyledTextCtrl, positionAfter, 1}},
+ {3302, {wxStyledTextCtrl, copyRange, 2}},
+ {3303, {wxStyledTextCtrl, copyText, 2}},
+ {3304, {wxStyledTextCtrl, setSelectionMode, 1}},
+ {3305, {wxStyledTextCtrl, getSelectionMode, 0}},
+ {3306, {wxStyledTextCtrl, lineDownRectExtend, 0}},
+ {3307, {wxStyledTextCtrl, lineUpRectExtend, 0}},
+ {3308, {wxStyledTextCtrl, charLeftRectExtend, 0}},
+ {3309, {wxStyledTextCtrl, charRightRectExtend, 0}},
+ {3310, {wxStyledTextCtrl, homeRectExtend, 0}},
+ {3311, {wxStyledTextCtrl, vCHomeRectExtend, 0}},
+ {3312, {wxStyledTextCtrl, lineEndRectExtend, 0}},
+ {3313, {wxStyledTextCtrl, pageUpRectExtend, 0}},
+ {3314, {wxStyledTextCtrl, pageDownRectExtend, 0}},
+ {3315, {wxStyledTextCtrl, stutteredPageUp, 0}},
+ {3316, {wxStyledTextCtrl, stutteredPageUpExtend, 0}},
+ {3317, {wxStyledTextCtrl, stutteredPageDown, 0}},
+ {3318, {wxStyledTextCtrl, stutteredPageDownExtend, 0}},
+ {3319, {wxStyledTextCtrl, wordLeftEnd, 0}},
+ {3320, {wxStyledTextCtrl, wordLeftEndExtend, 0}},
+ {3321, {wxStyledTextCtrl, wordRightEnd, 0}},
+ {3322, {wxStyledTextCtrl, wordRightEndExtend, 0}},
+ {3323, {wxStyledTextCtrl, setWhitespaceChars, 1}},
+ {3324, {wxStyledTextCtrl, setCharsDefault, 0}},
+ {3325, {wxStyledTextCtrl, autoCompGetCurrent, 0}},
+ {3326, {wxStyledTextCtrl, allocate, 1}},
+ {3327, {wxStyledTextCtrl, findColumn, 2}},
+ {3328, {wxStyledTextCtrl, getCaretSticky, 0}},
+ {3329, {wxStyledTextCtrl, setCaretSticky, 1}},
+ {3330, {wxStyledTextCtrl, toggleCaretSticky, 0}},
+ {3331, {wxStyledTextCtrl, setPasteConvertEndings, 1}},
+ {3332, {wxStyledTextCtrl, getPasteConvertEndings, 0}},
+ {3333, {wxStyledTextCtrl, selectionDuplicate, 0}},
+ {3334, {wxStyledTextCtrl, setCaretLineBackAlpha, 1}},
+ {3335, {wxStyledTextCtrl, getCaretLineBackAlpha, 0}},
+ {3336, {wxStyledTextCtrl, startRecord, 0}},
+ {3337, {wxStyledTextCtrl, stopRecord, 0}},
+ {3338, {wxStyledTextCtrl, setLexer, 1}},
+ {3339, {wxStyledTextCtrl, getLexer, 0}},
+ {3340, {wxStyledTextCtrl, colourise, 2}},
+ {3341, {wxStyledTextCtrl, setProperty, 2}},
+ {3342, {wxStyledTextCtrl, setKeyWords, 2}},
+ {3343, {wxStyledTextCtrl, setLexerLanguage, 1}},
+ {3344, {wxStyledTextCtrl, getProperty, 1}},
+ {3345, {wxStyledTextCtrl, getStyleBitsNeeded, 0}},
+ {3346, {wxStyledTextCtrl, getCurrentLine, 0}},
+ {3347, {wxStyledTextCtrl, styleSetSpec, 2}},
+ {3348, {wxStyledTextCtrl, styleSetFont, 2}},
+ {3349, {wxStyledTextCtrl, styleSetFontAttr, 7}},
+ {3350, {wxStyledTextCtrl, styleSetCharacterSet, 2}},
+ {3351, {wxStyledTextCtrl, styleSetFontEncoding, 2}},
+ {3352, {wxStyledTextCtrl, cmdKeyExecute, 1}},
+ {3353, {wxStyledTextCtrl, setMargins, 2}},
+ {3354, {wxStyledTextCtrl, getSelection, 2}},
+ {3355, {wxStyledTextCtrl, pointFromPosition, 1}},
+ {3356, {wxStyledTextCtrl, scrollToLine, 1}},
+ {3357, {wxStyledTextCtrl, scrollToColumn, 1}},
+ {3358, {wxStyledTextCtrl, sendMsg, 2}},
+ {3359, {wxStyledTextCtrl, setVScrollBar, 1}},
+ {3360, {wxStyledTextCtrl, setHScrollBar, 1}},
+ {3361, {wxStyledTextCtrl, getLastKeydownProcessed, 0}},
+ {3362, {wxStyledTextCtrl, setLastKeydownProcessed, 1}},
+ {3363, {wxStyledTextCtrl, saveFile, 1}},
+ {3364, {wxStyledTextCtrl, loadFile, 1}},
+ {3365, {wxStyledTextCtrl, doDragOver, 3}},
+ {3366, {wxStyledTextCtrl, doDropText, 3}},
+ {3367, {wxStyledTextCtrl, getUseAntiAliasing, 0}},
+ {3368, {wxStyledTextCtrl, addTextRaw, 1}},
+ {3369, {wxStyledTextCtrl, insertTextRaw, 2}},
+ {3370, {wxStyledTextCtrl, getCurLineRaw, 1}},
+ {3371, {wxStyledTextCtrl, getLineRaw, 1}},
+ {3372, {wxStyledTextCtrl, getSelectedTextRaw, 0}},
+ {3373, {wxStyledTextCtrl, getTextRangeRaw, 2}},
+ {3374, {wxStyledTextCtrl, setTextRaw, 1}},
+ {3375, {wxStyledTextCtrl, getTextRaw, 0}},
+ {3376, {wxStyledTextCtrl, appendTextRaw, 1}},
+ {3377, {wxArtProvider, getBitmap, 2}},
+ {3378, {wxArtProvider, getIcon, 2}},
+ {3379, {wxTreeEvent, getKeyCode, 0}},
+ {3380, {wxTreeEvent, getItem, 0}},
+ {3381, {wxTreeEvent, getKeyEvent, 0}},
+ {3382, {wxTreeEvent, getLabel, 0}},
+ {3383, {wxTreeEvent, getOldItem, 0}},
+ {3384, {wxTreeEvent, getPoint, 0}},
+ {3385, {wxTreeEvent, isEditCancelled, 0}},
+ {3386, {wxTreeEvent, setToolTip, 1}},
+ {3387, {wxNotebookEvent, getOldSelection, 0}},
+ {3388, {wxNotebookEvent, getSelection, 0}},
+ {3389, {wxNotebookEvent, setOldSelection, 1}},
+ {3390, {wxNotebookEvent, setSelection, 1}},
+ {3391, {wxFileDataObject, new, 0}},
+ {3392, {wxFileDataObject, addFile, 1}},
+ {3393, {wxFileDataObject, getFilenames, 0}},
+ {3394, {wxFileDataObject, 'Destroy', undefined}},
+ {3395, {wxTextDataObject, new, 1}},
+ {3396, {wxTextDataObject, getTextLength, 0}},
+ {3397, {wxTextDataObject, getText, 0}},
+ {3398, {wxTextDataObject, setText, 1}},
+ {3399, {wxTextDataObject, 'Destroy', undefined}},
+ {3400, {wxBitmapDataObject, new_1_1, 1}},
+ {3401, {wxBitmapDataObject, new_1_0, 1}},
+ {3402, {wxBitmapDataObject, getBitmap, 0}},
+ {3403, {wxBitmapDataObject, setBitmap, 1}},
+ {3404, {wxBitmapDataObject, 'Destroy', undefined}},
+ {3406, {wxClipboard, new, 0}},
+ {3407, {wxClipboard, destruct, 0}},
+ {3408, {wxClipboard, addData, 1}},
+ {3409, {wxClipboard, clear, 0}},
+ {3410, {wxClipboard, close, 0}},
+ {3411, {wxClipboard, flush, 0}},
+ {3412, {wxClipboard, getData, 1}},
+ {3413, {wxClipboard, isOpened, 0}},
+ {3414, {wxClipboard, open, 0}},
+ {3415, {wxClipboard, setData, 1}},
+ {3417, {wxClipboard, usePrimarySelection, 1}},
+ {3418, {wxClipboard, isSupported, 1}},
+ {3419, {wxClipboard, get, 0}},
+ {3420, {wxSpinEvent, getPosition, 0}},
+ {3421, {wxSpinEvent, setPosition, 1}},
+ {3422, {wxSplitterWindow, new_0, 0}},
+ {3423, {wxSplitterWindow, new_2, 2}},
+ {3424, {wxSplitterWindow, destruct, 0}},
+ {3425, {wxSplitterWindow, create, 2}},
+ {3426, {wxSplitterWindow, getMinimumPaneSize, 0}},
+ {3427, {wxSplitterWindow, getSashGravity, 0}},
+ {3428, {wxSplitterWindow, getSashPosition, 0}},
+ {3429, {wxSplitterWindow, getSplitMode, 0}},
+ {3430, {wxSplitterWindow, getWindow1, 0}},
+ {3431, {wxSplitterWindow, getWindow2, 0}},
+ {3432, {wxSplitterWindow, initialize, 1}},
+ {3433, {wxSplitterWindow, isSplit, 0}},
+ {3434, {wxSplitterWindow, replaceWindow, 2}},
+ {3435, {wxSplitterWindow, setSashGravity, 1}},
+ {3436, {wxSplitterWindow, setSashPosition, 2}},
+ {3437, {wxSplitterWindow, setSashSize, 1}},
+ {3438, {wxSplitterWindow, setMinimumPaneSize, 1}},
+ {3439, {wxSplitterWindow, setSplitMode, 1}},
+ {3440, {wxSplitterWindow, splitHorizontally, 3}},
+ {3441, {wxSplitterWindow, splitVertically, 3}},
+ {3442, {wxSplitterWindow, unsplit, 1}},
+ {3443, {wxSplitterWindow, updateSize, 0}},
+ {3444, {wxSplitterEvent, getSashPosition, 0}},
+ {3445, {wxSplitterEvent, getX, 0}},
+ {3446, {wxSplitterEvent, getY, 0}},
+ {3447, {wxSplitterEvent, getWindowBeingRemoved, 0}},
+ {3448, {wxSplitterEvent, setSashPosition, 1}},
+ {3449, {wxHtmlWindow, new_0, 0}},
+ {3450, {wxHtmlWindow, new_2, 2}},
+ {3451, {wxHtmlWindow, appendToPage, 1}},
+ {3452, {wxHtmlWindow, getOpenedAnchor, 0}},
+ {3453, {wxHtmlWindow, getOpenedPage, 0}},
+ {3454, {wxHtmlWindow, getOpenedPageTitle, 0}},
+ {3455, {wxHtmlWindow, getRelatedFrame, 0}},
+ {3456, {wxHtmlWindow, historyBack, 0}},
+ {3457, {wxHtmlWindow, historyCanBack, 0}},
+ {3458, {wxHtmlWindow, historyCanForward, 0}},
+ {3459, {wxHtmlWindow, historyClear, 0}},
+ {3460, {wxHtmlWindow, historyForward, 0}},
+ {3461, {wxHtmlWindow, loadFile, 1}},
+ {3462, {wxHtmlWindow, loadPage, 1}},
+ {3463, {wxHtmlWindow, selectAll, 0}},
+ {3464, {wxHtmlWindow, selectionToText, 0}},
+ {3465, {wxHtmlWindow, selectLine, 1}},
+ {3466, {wxHtmlWindow, selectWord, 1}},
+ {3467, {wxHtmlWindow, setBorders, 1}},
+ {3468, {wxHtmlWindow, setFonts, 3}},
+ {3469, {wxHtmlWindow, setPage, 1}},
+ {3470, {wxHtmlWindow, setRelatedFrame, 2}},
+ {3471, {wxHtmlWindow, setRelatedStatusBar, 1}},
+ {3472, {wxHtmlWindow, toText, 0}},
+ {3473, {wxHtmlWindow, 'Destroy', undefined}},
+ {3474, {wxHtmlLinkEvent, getLinkInfo, 0}},
+ {3475, {wxAuiNotebookEvent, setSelection, 1}},
+ {3476, {wxAuiNotebookEvent, getSelection, 0}},
+ {3477, {wxAuiNotebookEvent, setOldSelection, 1}},
+ {3478, {wxAuiNotebookEvent, getOldSelection, 0}},
+ {3479, {wxAuiNotebookEvent, setDragSource, 1}},
+ {3480, {wxAuiNotebookEvent, getDragSource, 0}},
+ {3481, {wxAuiManagerEvent, setManager, 1}},
+ {3482, {wxAuiManagerEvent, getManager, 0}},
+ {3483, {wxAuiManagerEvent, setPane, 1}},
+ {3484, {wxAuiManagerEvent, getPane, 0}},
+ {3485, {wxAuiManagerEvent, setButton, 1}},
+ {3486, {wxAuiManagerEvent, getButton, 0}},
+ {3487, {wxAuiManagerEvent, setDC, 1}},
+ {3488, {wxAuiManagerEvent, getDC, 0}},
+ {3489, {wxAuiManagerEvent, veto, 1}},
+ {3490, {wxAuiManagerEvent, getVeto, 0}},
+ {3491, {wxAuiManagerEvent, setCanVeto, 1}},
+ {3492, {wxAuiManagerEvent, canVeto, 0}},
+ {3493, {wxLogNull, new, 0}},
+ {3494, {wxLogNull, 'Destroy', undefined}},
{-1, {mod, func, -1}}
].
diff --git a/lib/wx/src/gen/wxe_funcs.hrl b/lib/wx/src/gen/wxe_funcs.hrl
index b1d5e50647..7b5ca229c8 100644
--- a/lib/wx/src/gen/wxe_funcs.hrl
+++ b/lib/wx/src/gen/wxe_funcs.hrl
@@ -767,2509 +767,2509 @@
-define(wxControlWithItems_Clear, 882).
-define(wxControlWithItems_Delete, 883).
-define(wxControlWithItems_FindString, 884).
--define(wxControlWithItems_getClientData, 886).
--define(wxControlWithItems_setClientData, 888).
--define(wxControlWithItems_GetCount, 889).
--define(wxControlWithItems_GetSelection, 890).
--define(wxControlWithItems_GetString, 891).
--define(wxControlWithItems_GetStringSelection, 892).
--define(wxControlWithItems_Insert_2, 893).
--define(wxControlWithItems_Insert_3, 894).
--define(wxControlWithItems_IsEmpty, 895).
--define(wxControlWithItems_Select, 896).
--define(wxControlWithItems_SetSelection, 897).
--define(wxControlWithItems_SetString, 898).
--define(wxControlWithItems_SetStringSelection, 899).
--define(wxMenu_new_2, 902).
--define(wxMenu_new_1, 903).
--define(wxMenu_destruct, 905).
--define(wxMenu_Append_3, 906).
--define(wxMenu_Append_1, 907).
--define(wxMenu_Append_4_0, 908).
--define(wxMenu_Append_4_1, 909).
--define(wxMenu_AppendCheckItem, 910).
--define(wxMenu_AppendRadioItem, 911).
--define(wxMenu_AppendSeparator, 912).
--define(wxMenu_Break, 913).
--define(wxMenu_Check, 914).
--define(wxMenu_Delete_1_0, 915).
--define(wxMenu_Delete_1_1, 916).
--define(wxMenu_Destroy_1_0, 917).
--define(wxMenu_Destroy_1_1, 918).
--define(wxMenu_Enable, 919).
--define(wxMenu_FindItem_1, 920).
--define(wxMenu_FindItem_2, 921).
--define(wxMenu_FindItemByPosition, 922).
--define(wxMenu_GetHelpString, 923).
--define(wxMenu_GetLabel, 924).
--define(wxMenu_GetMenuItemCount, 925).
--define(wxMenu_GetMenuItems, 926).
--define(wxMenu_GetTitle, 928).
--define(wxMenu_Insert_2, 929).
--define(wxMenu_Insert_3, 930).
--define(wxMenu_Insert_5_1, 931).
--define(wxMenu_Insert_5_0, 932).
--define(wxMenu_InsertCheckItem, 933).
--define(wxMenu_InsertRadioItem, 934).
--define(wxMenu_InsertSeparator, 935).
--define(wxMenu_IsChecked, 936).
--define(wxMenu_IsEnabled, 937).
--define(wxMenu_Prepend_1, 938).
--define(wxMenu_Prepend_2, 939).
--define(wxMenu_Prepend_4_1, 940).
--define(wxMenu_Prepend_4_0, 941).
--define(wxMenu_PrependCheckItem, 942).
--define(wxMenu_PrependRadioItem, 943).
--define(wxMenu_PrependSeparator, 944).
--define(wxMenu_Remove_1_0, 945).
--define(wxMenu_Remove_1_1, 946).
--define(wxMenu_SetHelpString, 947).
--define(wxMenu_SetLabel, 948).
--define(wxMenu_SetTitle, 949).
--define(wxMenuItem_new, 950).
--define(wxMenuItem_destruct, 952).
--define(wxMenuItem_Check, 953).
--define(wxMenuItem_Enable, 954).
--define(wxMenuItem_GetBitmap, 955).
--define(wxMenuItem_GetHelp, 956).
--define(wxMenuItem_GetId, 957).
--define(wxMenuItem_GetKind, 958).
--define(wxMenuItem_GetLabel, 959).
--define(wxMenuItem_GetLabelFromText, 960).
--define(wxMenuItem_GetMenu, 961).
--define(wxMenuItem_GetText, 962).
--define(wxMenuItem_GetSubMenu, 963).
--define(wxMenuItem_IsCheckable, 964).
--define(wxMenuItem_IsChecked, 965).
--define(wxMenuItem_IsEnabled, 966).
--define(wxMenuItem_IsSeparator, 967).
--define(wxMenuItem_IsSubMenu, 968).
--define(wxMenuItem_SetBitmap, 969).
--define(wxMenuItem_SetHelp, 970).
--define(wxMenuItem_SetMenu, 971).
--define(wxMenuItem_SetSubMenu, 972).
--define(wxMenuItem_SetText, 973).
--define(wxToolBar_AddControl, 974).
--define(wxToolBar_AddSeparator, 975).
--define(wxToolBar_AddTool_5, 976).
--define(wxToolBar_AddTool_4_0, 977).
--define(wxToolBar_AddTool_1, 978).
--define(wxToolBar_AddTool_4_1, 979).
--define(wxToolBar_AddTool_3, 980).
--define(wxToolBar_AddTool_6, 981).
--define(wxToolBar_AddCheckTool, 982).
--define(wxToolBar_AddRadioTool, 983).
--define(wxToolBar_DeleteTool, 984).
--define(wxToolBar_DeleteToolByPos, 985).
--define(wxToolBar_EnableTool, 986).
--define(wxToolBar_FindById, 987).
--define(wxToolBar_FindControl, 988).
--define(wxToolBar_FindToolForPosition, 989).
--define(wxToolBar_GetToolSize, 990).
--define(wxToolBar_GetToolBitmapSize, 991).
--define(wxToolBar_GetMargins, 992).
--define(wxToolBar_GetToolEnabled, 993).
--define(wxToolBar_GetToolLongHelp, 994).
--define(wxToolBar_GetToolPacking, 995).
--define(wxToolBar_GetToolPos, 996).
--define(wxToolBar_GetToolSeparation, 997).
--define(wxToolBar_GetToolShortHelp, 998).
--define(wxToolBar_GetToolState, 999).
--define(wxToolBar_InsertControl, 1000).
--define(wxToolBar_InsertSeparator, 1001).
--define(wxToolBar_InsertTool_5, 1002).
--define(wxToolBar_InsertTool_2, 1003).
--define(wxToolBar_InsertTool_4, 1004).
--define(wxToolBar_Realize, 1005).
--define(wxToolBar_RemoveTool, 1006).
--define(wxToolBar_SetMargins, 1007).
--define(wxToolBar_SetToolBitmapSize, 1008).
--define(wxToolBar_SetToolLongHelp, 1009).
--define(wxToolBar_SetToolPacking, 1010).
--define(wxToolBar_SetToolShortHelp, 1011).
--define(wxToolBar_SetToolSeparation, 1012).
--define(wxToolBar_ToggleTool, 1013).
--define(wxStatusBar_new_0, 1015).
--define(wxStatusBar_new_2, 1016).
--define(wxStatusBar_destruct, 1018).
--define(wxStatusBar_Create, 1019).
--define(wxStatusBar_GetFieldRect, 1020).
--define(wxStatusBar_GetFieldsCount, 1021).
--define(wxStatusBar_GetStatusText, 1022).
--define(wxStatusBar_PopStatusText, 1023).
--define(wxStatusBar_PushStatusText, 1024).
--define(wxStatusBar_SetFieldsCount, 1025).
--define(wxStatusBar_SetMinHeight, 1026).
--define(wxStatusBar_SetStatusText, 1027).
--define(wxStatusBar_SetStatusWidths, 1028).
--define(wxStatusBar_SetStatusStyles, 1029).
--define(wxBitmap_new_0, 1030).
--define(wxBitmap_new_3, 1031).
--define(wxBitmap_new_4, 1032).
--define(wxBitmap_new_2_0, 1033).
--define(wxBitmap_new_2_1, 1034).
--define(wxBitmap_destruct, 1035).
--define(wxBitmap_ConvertToImage, 1036).
--define(wxBitmap_CopyFromIcon, 1037).
--define(wxBitmap_Create, 1038).
--define(wxBitmap_GetDepth, 1039).
--define(wxBitmap_GetHeight, 1040).
--define(wxBitmap_GetPalette, 1041).
--define(wxBitmap_GetMask, 1042).
--define(wxBitmap_GetWidth, 1043).
--define(wxBitmap_GetSubBitmap, 1044).
--define(wxBitmap_LoadFile, 1045).
--define(wxBitmap_Ok, 1046).
--define(wxBitmap_SaveFile, 1047).
--define(wxBitmap_SetDepth, 1048).
--define(wxBitmap_SetHeight, 1049).
--define(wxBitmap_SetMask, 1050).
--define(wxBitmap_SetPalette, 1051).
--define(wxBitmap_SetWidth, 1052).
--define(wxIcon_new_0, 1053).
--define(wxIcon_new_2, 1054).
--define(wxIcon_new_1, 1055).
--define(wxIcon_CopyFromBitmap, 1056).
--define(wxIcon_destroy, 1057).
--define(wxIconBundle_new_0, 1058).
--define(wxIconBundle_new_2, 1059).
--define(wxIconBundle_new_1_0, 1060).
--define(wxIconBundle_new_1_1, 1061).
--define(wxIconBundle_destruct, 1062).
--define(wxIconBundle_AddIcon_2, 1063).
--define(wxIconBundle_AddIcon_1, 1064).
--define(wxIconBundle_GetIcon_1_1, 1065).
--define(wxIconBundle_GetIcon_1_0, 1066).
--define(wxCursor_new_0, 1067).
--define(wxCursor_new_1_0, 1068).
--define(wxCursor_new_1_1, 1069).
--define(wxCursor_new_4, 1070).
--define(wxCursor_destruct, 1071).
--define(wxCursor_Ok, 1072).
--define(wxMask_new_0, 1073).
--define(wxMask_new_2_1, 1074).
--define(wxMask_new_2_0, 1075).
--define(wxMask_new_1, 1076).
--define(wxMask_destruct, 1077).
--define(wxMask_Create_2_1, 1078).
--define(wxMask_Create_2_0, 1079).
--define(wxMask_Create_1, 1080).
--define(wxImage_new_0, 1081).
--define(wxImage_new_3_0, 1082).
--define(wxImage_new_4, 1083).
--define(wxImage_new_5, 1084).
--define(wxImage_new_2, 1085).
--define(wxImage_new_3_1, 1086).
--define(wxImage_Blur, 1087).
--define(wxImage_BlurHorizontal, 1088).
--define(wxImage_BlurVertical, 1089).
--define(wxImage_ConvertAlphaToMask, 1090).
--define(wxImage_ConvertToGreyscale, 1091).
--define(wxImage_ConvertToMono, 1092).
--define(wxImage_Copy, 1093).
--define(wxImage_Create_3, 1094).
--define(wxImage_Create_4, 1095).
--define(wxImage_Create_5, 1096).
--define(wxImage_Destroy, 1097).
--define(wxImage_FindFirstUnusedColour, 1098).
--define(wxImage_GetImageExtWildcard, 1099).
--define(wxImage_GetAlpha_2, 1100).
--define(wxImage_GetAlpha_0, 1101).
--define(wxImage_GetBlue, 1102).
--define(wxImage_GetData, 1103).
--define(wxImage_GetGreen, 1104).
--define(wxImage_GetImageCount, 1105).
--define(wxImage_GetHeight, 1106).
--define(wxImage_GetMaskBlue, 1107).
--define(wxImage_GetMaskGreen, 1108).
--define(wxImage_GetMaskRed, 1109).
--define(wxImage_GetOrFindMaskColour, 1110).
--define(wxImage_GetPalette, 1111).
--define(wxImage_GetRed, 1112).
--define(wxImage_GetSubImage, 1113).
--define(wxImage_GetWidth, 1114).
--define(wxImage_HasAlpha, 1115).
--define(wxImage_HasMask, 1116).
--define(wxImage_GetOption, 1117).
--define(wxImage_GetOptionInt, 1118).
--define(wxImage_HasOption, 1119).
--define(wxImage_InitAlpha, 1120).
--define(wxImage_InitStandardHandlers, 1121).
--define(wxImage_IsTransparent, 1122).
--define(wxImage_LoadFile_2, 1123).
--define(wxImage_LoadFile_3, 1124).
--define(wxImage_Ok, 1125).
--define(wxImage_RemoveHandler, 1126).
--define(wxImage_Mirror, 1127).
--define(wxImage_Replace, 1128).
--define(wxImage_Rescale, 1129).
--define(wxImage_Resize, 1130).
--define(wxImage_Rotate, 1131).
--define(wxImage_RotateHue, 1132).
--define(wxImage_Rotate90, 1133).
--define(wxImage_SaveFile_1, 1134).
--define(wxImage_SaveFile_2_0, 1135).
--define(wxImage_SaveFile_2_1, 1136).
--define(wxImage_Scale, 1137).
--define(wxImage_Size, 1138).
--define(wxImage_SetAlpha_3, 1139).
--define(wxImage_SetAlpha_2, 1140).
--define(wxImage_SetData_2, 1141).
--define(wxImage_SetData_4, 1142).
--define(wxImage_SetMask, 1143).
--define(wxImage_SetMaskColour, 1144).
--define(wxImage_SetMaskFromImage, 1145).
--define(wxImage_SetOption_2_1, 1146).
--define(wxImage_SetOption_2_0, 1147).
--define(wxImage_SetPalette, 1148).
--define(wxImage_SetRGB_5, 1149).
--define(wxImage_SetRGB_4, 1150).
--define(wxImage_destroy, 1151).
--define(wxBrush_new_0, 1152).
--define(wxBrush_new_2, 1153).
--define(wxBrush_new_1, 1154).
--define(wxBrush_destruct, 1156).
--define(wxBrush_GetColour, 1157).
--define(wxBrush_GetStipple, 1158).
--define(wxBrush_GetStyle, 1159).
--define(wxBrush_IsHatch, 1160).
--define(wxBrush_IsOk, 1161).
--define(wxBrush_SetColour_1, 1162).
--define(wxBrush_SetColour_3, 1163).
--define(wxBrush_SetStipple, 1164).
--define(wxBrush_SetStyle, 1165).
--define(wxPen_new_0, 1166).
--define(wxPen_new_2, 1167).
--define(wxPen_destruct, 1168).
--define(wxPen_GetCap, 1169).
--define(wxPen_GetColour, 1170).
--define(wxPen_GetJoin, 1171).
--define(wxPen_GetStyle, 1172).
--define(wxPen_GetWidth, 1173).
--define(wxPen_IsOk, 1174).
--define(wxPen_SetCap, 1175).
--define(wxPen_SetColour_1, 1176).
--define(wxPen_SetColour_3, 1177).
--define(wxPen_SetJoin, 1178).
--define(wxPen_SetStyle, 1179).
--define(wxPen_SetWidth, 1180).
--define(wxRegion_new_0, 1181).
--define(wxRegion_new_4, 1182).
--define(wxRegion_new_2, 1183).
--define(wxRegion_new_1_1, 1184).
--define(wxRegion_new_1_0, 1186).
--define(wxRegion_destruct, 1188).
--define(wxRegion_Clear, 1189).
--define(wxRegion_Contains_2, 1190).
--define(wxRegion_Contains_1_0, 1191).
--define(wxRegion_Contains_4, 1192).
--define(wxRegion_Contains_1_1, 1193).
--define(wxRegion_ConvertToBitmap, 1194).
--define(wxRegion_GetBox, 1195).
--define(wxRegion_Intersect_4, 1196).
--define(wxRegion_Intersect_1_1, 1197).
--define(wxRegion_Intersect_1_0, 1198).
--define(wxRegion_IsEmpty, 1199).
--define(wxRegion_Subtract_4, 1200).
--define(wxRegion_Subtract_1_1, 1201).
--define(wxRegion_Subtract_1_0, 1202).
--define(wxRegion_Offset_2, 1203).
--define(wxRegion_Offset_1, 1204).
--define(wxRegion_Union_4, 1205).
--define(wxRegion_Union_1_2, 1206).
--define(wxRegion_Union_1_1, 1207).
--define(wxRegion_Union_1_0, 1208).
--define(wxRegion_Union_3, 1209).
--define(wxRegion_Xor_4, 1210).
--define(wxRegion_Xor_1_1, 1211).
--define(wxRegion_Xor_1_0, 1212).
--define(wxAcceleratorTable_new_0, 1213).
--define(wxAcceleratorTable_new_2, 1214).
--define(wxAcceleratorTable_destruct, 1215).
--define(wxAcceleratorTable_Ok, 1216).
--define(wxAcceleratorEntry_new_1_0, 1217).
--define(wxAcceleratorEntry_new_1_1, 1218).
--define(wxAcceleratorEntry_GetCommand, 1219).
--define(wxAcceleratorEntry_GetFlags, 1220).
--define(wxAcceleratorEntry_GetKeyCode, 1221).
--define(wxAcceleratorEntry_Set, 1222).
--define(wxAcceleratorEntry_destroy, 1223).
--define(wxCaret_new_3, 1228).
--define(wxCaret_new_2, 1229).
--define(wxCaret_destruct, 1231).
--define(wxCaret_Create_3, 1232).
--define(wxCaret_Create_2, 1233).
--define(wxCaret_GetBlinkTime, 1234).
--define(wxCaret_GetPosition, 1236).
--define(wxCaret_GetSize, 1238).
--define(wxCaret_GetWindow, 1239).
--define(wxCaret_Hide, 1240).
--define(wxCaret_IsOk, 1241).
--define(wxCaret_IsVisible, 1242).
--define(wxCaret_Move_2, 1243).
--define(wxCaret_Move_1, 1244).
--define(wxCaret_SetBlinkTime, 1245).
--define(wxCaret_SetSize_2, 1246).
--define(wxCaret_SetSize_1, 1247).
--define(wxCaret_Show, 1248).
--define(wxSizer_Add_2_1, 1249).
--define(wxSizer_Add_2_0, 1250).
--define(wxSizer_Add_3, 1251).
--define(wxSizer_Add_2_3, 1252).
--define(wxSizer_Add_2_2, 1253).
--define(wxSizer_AddSpacer, 1254).
--define(wxSizer_AddStretchSpacer, 1255).
--define(wxSizer_CalcMin, 1256).
--define(wxSizer_Clear, 1257).
--define(wxSizer_Detach_1_2, 1258).
--define(wxSizer_Detach_1_1, 1259).
--define(wxSizer_Detach_1_0, 1260).
--define(wxSizer_Fit, 1261).
--define(wxSizer_FitInside, 1262).
--define(wxSizer_GetChildren, 1263).
--define(wxSizer_GetItem_2_1, 1264).
--define(wxSizer_GetItem_2_0, 1265).
--define(wxSizer_GetItem_1, 1266).
--define(wxSizer_GetSize, 1267).
--define(wxSizer_GetPosition, 1268).
--define(wxSizer_GetMinSize, 1269).
--define(wxSizer_Hide_2_0, 1270).
--define(wxSizer_Hide_2_1, 1271).
--define(wxSizer_Hide_1, 1272).
--define(wxSizer_Insert_3_1, 1273).
--define(wxSizer_Insert_3_0, 1274).
--define(wxSizer_Insert_4, 1275).
--define(wxSizer_Insert_3_3, 1276).
--define(wxSizer_Insert_3_2, 1277).
--define(wxSizer_Insert_2, 1278).
--define(wxSizer_InsertSpacer, 1279).
--define(wxSizer_InsertStretchSpacer, 1280).
--define(wxSizer_IsShown_1_2, 1281).
--define(wxSizer_IsShown_1_1, 1282).
--define(wxSizer_IsShown_1_0, 1283).
--define(wxSizer_Layout, 1284).
--define(wxSizer_Prepend_2_1, 1285).
--define(wxSizer_Prepend_2_0, 1286).
--define(wxSizer_Prepend_3, 1287).
--define(wxSizer_Prepend_2_3, 1288).
--define(wxSizer_Prepend_2_2, 1289).
--define(wxSizer_Prepend_1, 1290).
--define(wxSizer_PrependSpacer, 1291).
--define(wxSizer_PrependStretchSpacer, 1292).
--define(wxSizer_RecalcSizes, 1293).
--define(wxSizer_Remove_1_1, 1294).
--define(wxSizer_Remove_1_0, 1295).
--define(wxSizer_Replace_3_1, 1296).
--define(wxSizer_Replace_3_0, 1297).
--define(wxSizer_Replace_2, 1298).
--define(wxSizer_SetDimension, 1299).
--define(wxSizer_SetMinSize_2, 1300).
--define(wxSizer_SetMinSize_1, 1301).
--define(wxSizer_SetItemMinSize_3_2, 1302).
--define(wxSizer_SetItemMinSize_2_2, 1303).
--define(wxSizer_SetItemMinSize_3_1, 1304).
--define(wxSizer_SetItemMinSize_2_1, 1305).
--define(wxSizer_SetItemMinSize_3_0, 1306).
--define(wxSizer_SetItemMinSize_2_0, 1307).
--define(wxSizer_SetSizeHints, 1308).
--define(wxSizer_SetVirtualSizeHints, 1309).
--define(wxSizer_Show_2_2, 1310).
--define(wxSizer_Show_2_1, 1311).
--define(wxSizer_Show_2_0, 1312).
--define(wxSizer_Show_1, 1313).
--define(wxSizerFlags_new, 1314).
--define(wxSizerFlags_Align, 1315).
--define(wxSizerFlags_Border_2, 1316).
--define(wxSizerFlags_Border_1, 1317).
--define(wxSizerFlags_Center, 1318).
--define(wxSizerFlags_Centre, 1319).
--define(wxSizerFlags_Expand, 1320).
--define(wxSizerFlags_Left, 1321).
--define(wxSizerFlags_Proportion, 1322).
--define(wxSizerFlags_Right, 1323).
--define(wxSizerFlags_destroy, 1324).
--define(wxSizerItem_new_5_1, 1325).
--define(wxSizerItem_new_2_1, 1326).
--define(wxSizerItem_new_5_0, 1327).
--define(wxSizerItem_new_2_0, 1328).
--define(wxSizerItem_new_6, 1329).
--define(wxSizerItem_new_3, 1330).
--define(wxSizerItem_new_0, 1331).
--define(wxSizerItem_destruct, 1332).
--define(wxSizerItem_CalcMin, 1333).
--define(wxSizerItem_DeleteWindows, 1334).
--define(wxSizerItem_DetachSizer, 1335).
--define(wxSizerItem_GetBorder, 1336).
--define(wxSizerItem_GetFlag, 1337).
--define(wxSizerItem_GetMinSize, 1338).
--define(wxSizerItem_GetPosition, 1339).
--define(wxSizerItem_GetProportion, 1340).
--define(wxSizerItem_GetRatio, 1341).
--define(wxSizerItem_GetRect, 1342).
--define(wxSizerItem_GetSize, 1343).
--define(wxSizerItem_GetSizer, 1344).
--define(wxSizerItem_GetSpacer, 1345).
--define(wxSizerItem_GetUserData, 1346).
--define(wxSizerItem_GetWindow, 1347).
--define(wxSizerItem_IsSizer, 1348).
--define(wxSizerItem_IsShown, 1349).
--define(wxSizerItem_IsSpacer, 1350).
--define(wxSizerItem_IsWindow, 1351).
--define(wxSizerItem_SetBorder, 1352).
--define(wxSizerItem_SetDimension, 1353).
--define(wxSizerItem_SetFlag, 1354).
--define(wxSizerItem_SetInitSize, 1355).
--define(wxSizerItem_SetMinSize_1, 1356).
--define(wxSizerItem_SetMinSize_2, 1357).
--define(wxSizerItem_SetProportion, 1358).
--define(wxSizerItem_SetRatio_2, 1359).
--define(wxSizerItem_SetRatio_1_1, 1360).
--define(wxSizerItem_SetRatio_1_0, 1361).
--define(wxSizerItem_SetSizer, 1362).
--define(wxSizerItem_SetSpacer_1, 1363).
--define(wxSizerItem_SetSpacer_2, 1364).
--define(wxSizerItem_SetWindow, 1365).
--define(wxSizerItem_Show, 1366).
--define(wxBoxSizer_new, 1367).
--define(wxBoxSizer_GetOrientation, 1368).
--define(wxBoxSizer_destroy, 1369).
--define(wxStaticBoxSizer_new_2, 1370).
--define(wxStaticBoxSizer_new_3, 1371).
--define(wxStaticBoxSizer_GetStaticBox, 1372).
--define(wxStaticBoxSizer_destroy, 1373).
--define(wxGridSizer_new_4, 1374).
--define(wxGridSizer_new_2, 1375).
--define(wxGridSizer_GetCols, 1376).
--define(wxGridSizer_GetHGap, 1377).
--define(wxGridSizer_GetRows, 1378).
--define(wxGridSizer_GetVGap, 1379).
--define(wxGridSizer_SetCols, 1380).
--define(wxGridSizer_SetHGap, 1381).
--define(wxGridSizer_SetRows, 1382).
--define(wxGridSizer_SetVGap, 1383).
--define(wxGridSizer_destroy, 1384).
--define(wxFlexGridSizer_new_4, 1385).
--define(wxFlexGridSizer_new_2, 1386).
--define(wxFlexGridSizer_AddGrowableCol, 1387).
--define(wxFlexGridSizer_AddGrowableRow, 1388).
--define(wxFlexGridSizer_GetFlexibleDirection, 1389).
--define(wxFlexGridSizer_GetNonFlexibleGrowMode, 1390).
--define(wxFlexGridSizer_RemoveGrowableCol, 1391).
--define(wxFlexGridSizer_RemoveGrowableRow, 1392).
--define(wxFlexGridSizer_SetFlexibleDirection, 1393).
--define(wxFlexGridSizer_SetNonFlexibleGrowMode, 1394).
--define(wxFlexGridSizer_destroy, 1395).
--define(wxGridBagSizer_new, 1396).
--define(wxGridBagSizer_Add_3_2, 1397).
--define(wxGridBagSizer_Add_3_1, 1398).
--define(wxGridBagSizer_Add_4, 1399).
--define(wxGridBagSizer_Add_1_0, 1400).
--define(wxGridBagSizer_Add_2_1, 1401).
--define(wxGridBagSizer_Add_2_0, 1402).
--define(wxGridBagSizer_Add_3_0, 1403).
--define(wxGridBagSizer_Add_1_1, 1404).
--define(wxGridBagSizer_CalcMin, 1405).
--define(wxGridBagSizer_CheckForIntersection_2, 1406).
--define(wxGridBagSizer_CheckForIntersection_3, 1407).
--define(wxGridBagSizer_FindItem_1_1, 1408).
--define(wxGridBagSizer_FindItem_1_0, 1409).
--define(wxGridBagSizer_FindItemAtPoint, 1410).
--define(wxGridBagSizer_FindItemAtPosition, 1411).
--define(wxGridBagSizer_FindItemWithData, 1412).
--define(wxGridBagSizer_GetCellSize, 1413).
--define(wxGridBagSizer_GetEmptyCellSize, 1414).
--define(wxGridBagSizer_GetItemPosition_1_2, 1415).
--define(wxGridBagSizer_GetItemPosition_1_1, 1416).
--define(wxGridBagSizer_GetItemPosition_1_0, 1417).
--define(wxGridBagSizer_GetItemSpan_1_2, 1418).
--define(wxGridBagSizer_GetItemSpan_1_1, 1419).
--define(wxGridBagSizer_GetItemSpan_1_0, 1420).
--define(wxGridBagSizer_SetEmptyCellSize, 1421).
--define(wxGridBagSizer_SetItemPosition_2_2, 1422).
--define(wxGridBagSizer_SetItemPosition_2_1, 1423).
--define(wxGridBagSizer_SetItemPosition_2_0, 1424).
--define(wxGridBagSizer_SetItemSpan_2_2, 1425).
--define(wxGridBagSizer_SetItemSpan_2_1, 1426).
--define(wxGridBagSizer_SetItemSpan_2_0, 1427).
--define(wxGridBagSizer_destroy, 1428).
--define(wxStdDialogButtonSizer_new, 1429).
--define(wxStdDialogButtonSizer_AddButton, 1430).
--define(wxStdDialogButtonSizer_Realize, 1431).
--define(wxStdDialogButtonSizer_SetAffirmativeButton, 1432).
--define(wxStdDialogButtonSizer_SetCancelButton, 1433).
--define(wxStdDialogButtonSizer_SetNegativeButton, 1434).
--define(wxStdDialogButtonSizer_destroy, 1435).
--define(wxFont_new_0, 1436).
--define(wxFont_new_1, 1437).
--define(wxFont_new_5, 1438).
--define(wxFont_destruct, 1440).
--define(wxFont_IsFixedWidth, 1441).
--define(wxFont_GetDefaultEncoding, 1442).
--define(wxFont_GetFaceName, 1443).
--define(wxFont_GetFamily, 1444).
--define(wxFont_GetNativeFontInfoDesc, 1445).
--define(wxFont_GetNativeFontInfoUserDesc, 1446).
--define(wxFont_GetPointSize, 1447).
--define(wxFont_GetStyle, 1448).
--define(wxFont_GetUnderlined, 1449).
--define(wxFont_GetWeight, 1450).
--define(wxFont_Ok, 1451).
--define(wxFont_SetDefaultEncoding, 1452).
--define(wxFont_SetFaceName, 1453).
--define(wxFont_SetFamily, 1454).
--define(wxFont_SetPointSize, 1455).
--define(wxFont_SetStyle, 1456).
--define(wxFont_SetUnderlined, 1457).
--define(wxFont_SetWeight, 1458).
--define(wxToolTip_Enable, 1459).
--define(wxToolTip_SetDelay, 1460).
--define(wxToolTip_new, 1461).
--define(wxToolTip_SetTip, 1462).
--define(wxToolTip_GetTip, 1463).
--define(wxToolTip_GetWindow, 1464).
--define(wxToolTip_destroy, 1465).
--define(wxButton_new_3, 1467).
--define(wxButton_new_0, 1468).
--define(wxButton_destruct, 1469).
--define(wxButton_Create, 1470).
--define(wxButton_GetDefaultSize, 1471).
--define(wxButton_SetDefault, 1472).
--define(wxButton_SetLabel, 1473).
--define(wxBitmapButton_new_4, 1475).
--define(wxBitmapButton_new_0, 1476).
--define(wxBitmapButton_Create, 1477).
--define(wxBitmapButton_GetBitmapDisabled, 1478).
--define(wxBitmapButton_GetBitmapFocus, 1480).
--define(wxBitmapButton_GetBitmapLabel, 1482).
--define(wxBitmapButton_GetBitmapSelected, 1484).
--define(wxBitmapButton_SetBitmapDisabled, 1486).
--define(wxBitmapButton_SetBitmapFocus, 1487).
--define(wxBitmapButton_SetBitmapLabel, 1488).
--define(wxBitmapButton_SetBitmapSelected, 1489).
--define(wxBitmapButton_destroy, 1490).
--define(wxToggleButton_new_0, 1491).
--define(wxToggleButton_new_4, 1492).
--define(wxToggleButton_Create, 1493).
--define(wxToggleButton_GetValue, 1494).
--define(wxToggleButton_SetValue, 1495).
--define(wxToggleButton_destroy, 1496).
--define(wxCalendarCtrl_new_0, 1497).
--define(wxCalendarCtrl_new_3, 1498).
--define(wxCalendarCtrl_Create, 1499).
--define(wxCalendarCtrl_destruct, 1500).
--define(wxCalendarCtrl_SetDate, 1501).
--define(wxCalendarCtrl_GetDate, 1502).
--define(wxCalendarCtrl_EnableYearChange, 1503).
--define(wxCalendarCtrl_EnableMonthChange, 1504).
--define(wxCalendarCtrl_EnableHolidayDisplay, 1505).
--define(wxCalendarCtrl_SetHeaderColours, 1506).
--define(wxCalendarCtrl_GetHeaderColourFg, 1507).
--define(wxCalendarCtrl_GetHeaderColourBg, 1508).
--define(wxCalendarCtrl_SetHighlightColours, 1509).
--define(wxCalendarCtrl_GetHighlightColourFg, 1510).
--define(wxCalendarCtrl_GetHighlightColourBg, 1511).
--define(wxCalendarCtrl_SetHolidayColours, 1512).
--define(wxCalendarCtrl_GetHolidayColourFg, 1513).
--define(wxCalendarCtrl_GetHolidayColourBg, 1514).
--define(wxCalendarCtrl_GetAttr, 1515).
--define(wxCalendarCtrl_SetAttr, 1516).
--define(wxCalendarCtrl_SetHoliday, 1517).
--define(wxCalendarCtrl_ResetAttr, 1518).
--define(wxCalendarCtrl_HitTest, 1519).
--define(wxCalendarDateAttr_new_0, 1520).
--define(wxCalendarDateAttr_new_2_1, 1521).
--define(wxCalendarDateAttr_new_2_0, 1522).
--define(wxCalendarDateAttr_SetTextColour, 1523).
--define(wxCalendarDateAttr_SetBackgroundColour, 1524).
--define(wxCalendarDateAttr_SetBorderColour, 1525).
--define(wxCalendarDateAttr_SetFont, 1526).
--define(wxCalendarDateAttr_SetBorder, 1527).
--define(wxCalendarDateAttr_SetHoliday, 1528).
--define(wxCalendarDateAttr_HasTextColour, 1529).
--define(wxCalendarDateAttr_HasBackgroundColour, 1530).
--define(wxCalendarDateAttr_HasBorderColour, 1531).
--define(wxCalendarDateAttr_HasFont, 1532).
--define(wxCalendarDateAttr_HasBorder, 1533).
--define(wxCalendarDateAttr_IsHoliday, 1534).
--define(wxCalendarDateAttr_GetTextColour, 1535).
--define(wxCalendarDateAttr_GetBackgroundColour, 1536).
--define(wxCalendarDateAttr_GetBorderColour, 1537).
--define(wxCalendarDateAttr_GetFont, 1538).
--define(wxCalendarDateAttr_GetBorder, 1539).
--define(wxCalendarDateAttr_destroy, 1540).
--define(wxCheckBox_new_4, 1542).
--define(wxCheckBox_new_0, 1543).
--define(wxCheckBox_Create, 1544).
--define(wxCheckBox_GetValue, 1545).
--define(wxCheckBox_Get3StateValue, 1546).
--define(wxCheckBox_Is3rdStateAllowedForUser, 1547).
--define(wxCheckBox_Is3State, 1548).
--define(wxCheckBox_IsChecked, 1549).
--define(wxCheckBox_SetValue, 1550).
--define(wxCheckBox_Set3StateValue, 1551).
--define(wxCheckBox_destroy, 1552).
--define(wxCheckListBox_new_0, 1553).
--define(wxCheckListBox_new_3, 1555).
--define(wxCheckListBox_Check, 1556).
--define(wxCheckListBox_IsChecked, 1557).
--define(wxCheckListBox_destroy, 1558).
--define(wxChoice_new_3, 1561).
--define(wxChoice_new_0, 1562).
--define(wxChoice_destruct, 1564).
--define(wxChoice_Create, 1566).
--define(wxChoice_Delete, 1567).
--define(wxChoice_GetColumns, 1568).
--define(wxChoice_SetColumns, 1569).
--define(wxComboBox_new_0, 1570).
--define(wxComboBox_new_3, 1572).
--define(wxComboBox_destruct, 1573).
--define(wxComboBox_Create, 1575).
--define(wxComboBox_CanCopy, 1576).
--define(wxComboBox_CanCut, 1577).
--define(wxComboBox_CanPaste, 1578).
--define(wxComboBox_CanRedo, 1579).
--define(wxComboBox_CanUndo, 1580).
--define(wxComboBox_Copy, 1581).
--define(wxComboBox_Cut, 1582).
--define(wxComboBox_GetInsertionPoint, 1583).
--define(wxComboBox_GetLastPosition, 1584).
--define(wxComboBox_GetValue, 1585).
--define(wxComboBox_Paste, 1586).
--define(wxComboBox_Redo, 1587).
--define(wxComboBox_Replace, 1588).
--define(wxComboBox_Remove, 1589).
--define(wxComboBox_SetInsertionPoint, 1590).
--define(wxComboBox_SetInsertionPointEnd, 1591).
--define(wxComboBox_SetSelection_1, 1592).
--define(wxComboBox_SetSelection_2, 1593).
--define(wxComboBox_SetValue, 1594).
--define(wxComboBox_Undo, 1595).
--define(wxGauge_new_0, 1596).
--define(wxGauge_new_4, 1597).
--define(wxGauge_Create, 1598).
--define(wxGauge_GetBezelFace, 1599).
--define(wxGauge_GetRange, 1600).
--define(wxGauge_GetShadowWidth, 1601).
--define(wxGauge_GetValue, 1602).
--define(wxGauge_IsVertical, 1603).
--define(wxGauge_SetBezelFace, 1604).
--define(wxGauge_SetRange, 1605).
--define(wxGauge_SetShadowWidth, 1606).
--define(wxGauge_SetValue, 1607).
--define(wxGauge_Pulse, 1608).
--define(wxGauge_destroy, 1609).
--define(wxGenericDirCtrl_new_0, 1610).
--define(wxGenericDirCtrl_new_2, 1611).
--define(wxGenericDirCtrl_destruct, 1612).
--define(wxGenericDirCtrl_Create, 1613).
--define(wxGenericDirCtrl_Init, 1614).
--define(wxGenericDirCtrl_CollapseTree, 1615).
--define(wxGenericDirCtrl_ExpandPath, 1616).
--define(wxGenericDirCtrl_GetDefaultPath, 1617).
--define(wxGenericDirCtrl_GetPath, 1618).
--define(wxGenericDirCtrl_GetFilePath, 1619).
--define(wxGenericDirCtrl_GetFilter, 1620).
--define(wxGenericDirCtrl_GetFilterIndex, 1621).
--define(wxGenericDirCtrl_GetRootId, 1622).
--define(wxGenericDirCtrl_GetTreeCtrl, 1623).
--define(wxGenericDirCtrl_ReCreateTree, 1624).
--define(wxGenericDirCtrl_SetDefaultPath, 1625).
--define(wxGenericDirCtrl_SetFilter, 1626).
--define(wxGenericDirCtrl_SetFilterIndex, 1627).
--define(wxGenericDirCtrl_SetPath, 1628).
--define(wxStaticBox_new_4, 1630).
--define(wxStaticBox_new_0, 1631).
--define(wxStaticBox_Create, 1632).
--define(wxStaticBox_destroy, 1633).
--define(wxStaticLine_new_2, 1635).
--define(wxStaticLine_new_0, 1636).
--define(wxStaticLine_Create, 1637).
--define(wxStaticLine_IsVertical, 1638).
--define(wxStaticLine_GetDefaultSize, 1639).
--define(wxStaticLine_destroy, 1640).
--define(wxListBox_new_3, 1643).
--define(wxListBox_new_0, 1644).
--define(wxListBox_destruct, 1646).
--define(wxListBox_Create, 1648).
--define(wxListBox_Deselect, 1649).
--define(wxListBox_GetSelections, 1650).
--define(wxListBox_InsertItems, 1651).
--define(wxListBox_IsSelected, 1652).
--define(wxListBox_Set, 1654).
--define(wxListBox_HitTest, 1655).
--define(wxListBox_SetFirstItem_1_0, 1656).
--define(wxListBox_SetFirstItem_1_1, 1657).
--define(wxListCtrl_new_0, 1658).
--define(wxListCtrl_new_2, 1659).
--define(wxListCtrl_Arrange, 1660).
--define(wxListCtrl_AssignImageList, 1661).
--define(wxListCtrl_ClearAll, 1662).
--define(wxListCtrl_Create, 1663).
--define(wxListCtrl_DeleteAllItems, 1664).
--define(wxListCtrl_DeleteColumn, 1665).
--define(wxListCtrl_DeleteItem, 1666).
--define(wxListCtrl_EditLabel, 1667).
--define(wxListCtrl_EnsureVisible, 1668).
--define(wxListCtrl_FindItem_3_0, 1669).
--define(wxListCtrl_FindItem_3_1, 1670).
--define(wxListCtrl_GetColumn, 1671).
--define(wxListCtrl_GetColumnCount, 1672).
--define(wxListCtrl_GetColumnWidth, 1673).
--define(wxListCtrl_GetCountPerPage, 1674).
--define(wxListCtrl_GetEditControl, 1675).
--define(wxListCtrl_GetImageList, 1676).
--define(wxListCtrl_GetItem, 1677).
--define(wxListCtrl_GetItemBackgroundColour, 1678).
--define(wxListCtrl_GetItemCount, 1679).
--define(wxListCtrl_GetItemData, 1680).
--define(wxListCtrl_GetItemFont, 1681).
--define(wxListCtrl_GetItemPosition, 1682).
--define(wxListCtrl_GetItemRect, 1683).
--define(wxListCtrl_GetItemSpacing, 1684).
--define(wxListCtrl_GetItemState, 1685).
--define(wxListCtrl_GetItemText, 1686).
--define(wxListCtrl_GetItemTextColour, 1687).
--define(wxListCtrl_GetNextItem, 1688).
--define(wxListCtrl_GetSelectedItemCount, 1689).
--define(wxListCtrl_GetTextColour, 1690).
--define(wxListCtrl_GetTopItem, 1691).
--define(wxListCtrl_GetViewRect, 1692).
--define(wxListCtrl_HitTest, 1693).
--define(wxListCtrl_InsertColumn_2, 1694).
--define(wxListCtrl_InsertColumn_3, 1695).
--define(wxListCtrl_InsertItem_1, 1696).
--define(wxListCtrl_InsertItem_2_1, 1697).
--define(wxListCtrl_InsertItem_2_0, 1698).
--define(wxListCtrl_InsertItem_3, 1699).
--define(wxListCtrl_RefreshItem, 1700).
--define(wxListCtrl_RefreshItems, 1701).
--define(wxListCtrl_ScrollList, 1702).
--define(wxListCtrl_SetBackgroundColour, 1703).
--define(wxListCtrl_SetColumn, 1704).
--define(wxListCtrl_SetColumnWidth, 1705).
--define(wxListCtrl_SetImageList, 1706).
--define(wxListCtrl_SetItem_1, 1707).
--define(wxListCtrl_SetItem_4, 1708).
--define(wxListCtrl_SetItemBackgroundColour, 1709).
--define(wxListCtrl_SetItemCount, 1710).
--define(wxListCtrl_SetItemData, 1711).
--define(wxListCtrl_SetItemFont, 1712).
--define(wxListCtrl_SetItemImage, 1713).
--define(wxListCtrl_SetItemColumnImage, 1714).
--define(wxListCtrl_SetItemPosition, 1715).
--define(wxListCtrl_SetItemState, 1716).
--define(wxListCtrl_SetItemText, 1717).
--define(wxListCtrl_SetItemTextColour, 1718).
--define(wxListCtrl_SetSingleStyle, 1719).
--define(wxListCtrl_SetTextColour, 1720).
--define(wxListCtrl_SetWindowStyleFlag, 1721).
--define(wxListCtrl_SortItems, 1722).
--define(wxListCtrl_destroy, 1723).
--define(wxListView_ClearColumnImage, 1724).
--define(wxListView_Focus, 1725).
--define(wxListView_GetFirstSelected, 1726).
--define(wxListView_GetFocusedItem, 1727).
--define(wxListView_GetNextSelected, 1728).
--define(wxListView_IsSelected, 1729).
--define(wxListView_Select, 1730).
--define(wxListView_SetColumnImage, 1731).
--define(wxListItem_new_0, 1732).
--define(wxListItem_new_1, 1733).
--define(wxListItem_destruct, 1734).
--define(wxListItem_Clear, 1735).
--define(wxListItem_GetAlign, 1736).
--define(wxListItem_GetBackgroundColour, 1737).
--define(wxListItem_GetColumn, 1738).
--define(wxListItem_GetFont, 1739).
--define(wxListItem_GetId, 1740).
--define(wxListItem_GetImage, 1741).
--define(wxListItem_GetMask, 1742).
--define(wxListItem_GetState, 1743).
--define(wxListItem_GetText, 1744).
--define(wxListItem_GetTextColour, 1745).
--define(wxListItem_GetWidth, 1746).
--define(wxListItem_SetAlign, 1747).
--define(wxListItem_SetBackgroundColour, 1748).
--define(wxListItem_SetColumn, 1749).
--define(wxListItem_SetFont, 1750).
--define(wxListItem_SetId, 1751).
--define(wxListItem_SetImage, 1752).
--define(wxListItem_SetMask, 1753).
--define(wxListItem_SetState, 1754).
--define(wxListItem_SetStateMask, 1755).
--define(wxListItem_SetText, 1756).
--define(wxListItem_SetTextColour, 1757).
--define(wxListItem_SetWidth, 1758).
--define(wxImageList_new_0, 1759).
--define(wxImageList_new_3, 1760).
--define(wxImageList_Add_1, 1761).
--define(wxImageList_Add_2_0, 1762).
--define(wxImageList_Add_2_1, 1763).
--define(wxImageList_Create, 1764).
--define(wxImageList_Draw, 1766).
--define(wxImageList_GetBitmap, 1767).
--define(wxImageList_GetIcon, 1768).
--define(wxImageList_GetImageCount, 1769).
--define(wxImageList_GetSize, 1770).
--define(wxImageList_Remove, 1771).
--define(wxImageList_RemoveAll, 1772).
--define(wxImageList_Replace_2, 1773).
--define(wxImageList_Replace_3, 1774).
--define(wxImageList_destroy, 1775).
--define(wxTextAttr_new_0, 1776).
--define(wxTextAttr_new_2, 1777).
--define(wxTextAttr_GetAlignment, 1778).
--define(wxTextAttr_GetBackgroundColour, 1779).
--define(wxTextAttr_GetFont, 1780).
--define(wxTextAttr_GetLeftIndent, 1781).
--define(wxTextAttr_GetLeftSubIndent, 1782).
--define(wxTextAttr_GetRightIndent, 1783).
--define(wxTextAttr_GetTabs, 1784).
--define(wxTextAttr_GetTextColour, 1785).
--define(wxTextAttr_HasBackgroundColour, 1786).
--define(wxTextAttr_HasFont, 1787).
--define(wxTextAttr_HasTextColour, 1788).
--define(wxTextAttr_GetFlags, 1789).
--define(wxTextAttr_IsDefault, 1790).
--define(wxTextAttr_SetAlignment, 1791).
--define(wxTextAttr_SetBackgroundColour, 1792).
--define(wxTextAttr_SetFlags, 1793).
--define(wxTextAttr_SetFont, 1794).
--define(wxTextAttr_SetLeftIndent, 1795).
--define(wxTextAttr_SetRightIndent, 1796).
--define(wxTextAttr_SetTabs, 1797).
--define(wxTextAttr_SetTextColour, 1798).
--define(wxTextAttr_destroy, 1799).
--define(wxTextCtrl_new_3, 1801).
--define(wxTextCtrl_new_0, 1802).
--define(wxTextCtrl_destruct, 1804).
--define(wxTextCtrl_AppendText, 1805).
--define(wxTextCtrl_CanCopy, 1806).
--define(wxTextCtrl_CanCut, 1807).
--define(wxTextCtrl_CanPaste, 1808).
--define(wxTextCtrl_CanRedo, 1809).
--define(wxTextCtrl_CanUndo, 1810).
--define(wxTextCtrl_Clear, 1811).
--define(wxTextCtrl_Copy, 1812).
--define(wxTextCtrl_Create, 1813).
--define(wxTextCtrl_Cut, 1814).
--define(wxTextCtrl_DiscardEdits, 1815).
--define(wxTextCtrl_EmulateKeyPress, 1816).
--define(wxTextCtrl_GetDefaultStyle, 1817).
--define(wxTextCtrl_GetInsertionPoint, 1818).
--define(wxTextCtrl_GetLastPosition, 1819).
--define(wxTextCtrl_GetLineLength, 1820).
--define(wxTextCtrl_GetLineText, 1821).
--define(wxTextCtrl_GetNumberOfLines, 1822).
--define(wxTextCtrl_GetRange, 1823).
--define(wxTextCtrl_GetSelection, 1824).
--define(wxTextCtrl_GetStringSelection, 1825).
--define(wxTextCtrl_GetStyle, 1826).
--define(wxTextCtrl_GetValue, 1827).
--define(wxTextCtrl_IsEditable, 1828).
--define(wxTextCtrl_IsModified, 1829).
--define(wxTextCtrl_IsMultiLine, 1830).
--define(wxTextCtrl_IsSingleLine, 1831).
--define(wxTextCtrl_LoadFile, 1832).
--define(wxTextCtrl_MarkDirty, 1833).
--define(wxTextCtrl_Paste, 1834).
--define(wxTextCtrl_PositionToXY, 1835).
--define(wxTextCtrl_Redo, 1836).
--define(wxTextCtrl_Remove, 1837).
--define(wxTextCtrl_Replace, 1838).
--define(wxTextCtrl_SaveFile, 1839).
--define(wxTextCtrl_SetDefaultStyle, 1840).
--define(wxTextCtrl_SetEditable, 1841).
--define(wxTextCtrl_SetInsertionPoint, 1842).
--define(wxTextCtrl_SetInsertionPointEnd, 1843).
--define(wxTextCtrl_SetMaxLength, 1845).
--define(wxTextCtrl_SetSelection, 1846).
--define(wxTextCtrl_SetStyle, 1847).
--define(wxTextCtrl_SetValue, 1848).
--define(wxTextCtrl_ShowPosition, 1849).
--define(wxTextCtrl_Undo, 1850).
--define(wxTextCtrl_WriteText, 1851).
--define(wxTextCtrl_XYToPosition, 1852).
--define(wxNotebook_new_0, 1855).
--define(wxNotebook_new_3, 1856).
--define(wxNotebook_destruct, 1857).
--define(wxNotebook_AddPage, 1858).
--define(wxNotebook_AdvanceSelection, 1859).
--define(wxNotebook_AssignImageList, 1860).
--define(wxNotebook_Create, 1861).
--define(wxNotebook_DeleteAllPages, 1862).
--define(wxNotebook_DeletePage, 1863).
--define(wxNotebook_RemovePage, 1864).
--define(wxNotebook_GetCurrentPage, 1865).
--define(wxNotebook_GetImageList, 1866).
--define(wxNotebook_GetPage, 1868).
--define(wxNotebook_GetPageCount, 1869).
--define(wxNotebook_GetPageImage, 1870).
--define(wxNotebook_GetPageText, 1871).
--define(wxNotebook_GetRowCount, 1872).
--define(wxNotebook_GetSelection, 1873).
--define(wxNotebook_GetThemeBackgroundColour, 1874).
--define(wxNotebook_HitTest, 1876).
--define(wxNotebook_InsertPage, 1878).
--define(wxNotebook_SetImageList, 1879).
--define(wxNotebook_SetPadding, 1880).
--define(wxNotebook_SetPageSize, 1881).
--define(wxNotebook_SetPageImage, 1882).
--define(wxNotebook_SetPageText, 1883).
--define(wxNotebook_SetSelection, 1884).
--define(wxNotebook_ChangeSelection, 1885).
--define(wxChoicebook_new_0, 1886).
--define(wxChoicebook_new_3, 1887).
--define(wxChoicebook_AddPage, 1888).
--define(wxChoicebook_AdvanceSelection, 1889).
--define(wxChoicebook_AssignImageList, 1890).
--define(wxChoicebook_Create, 1891).
--define(wxChoicebook_DeleteAllPages, 1892).
--define(wxChoicebook_DeletePage, 1893).
--define(wxChoicebook_RemovePage, 1894).
--define(wxChoicebook_GetCurrentPage, 1895).
--define(wxChoicebook_GetImageList, 1896).
--define(wxChoicebook_GetPage, 1898).
--define(wxChoicebook_GetPageCount, 1899).
--define(wxChoicebook_GetPageImage, 1900).
--define(wxChoicebook_GetPageText, 1901).
--define(wxChoicebook_GetSelection, 1902).
--define(wxChoicebook_HitTest, 1903).
--define(wxChoicebook_InsertPage, 1904).
--define(wxChoicebook_SetImageList, 1905).
--define(wxChoicebook_SetPageSize, 1906).
--define(wxChoicebook_SetPageImage, 1907).
--define(wxChoicebook_SetPageText, 1908).
--define(wxChoicebook_SetSelection, 1909).
--define(wxChoicebook_ChangeSelection, 1910).
--define(wxChoicebook_destroy, 1911).
--define(wxToolbook_new_0, 1912).
--define(wxToolbook_new_3, 1913).
--define(wxToolbook_AddPage, 1914).
--define(wxToolbook_AdvanceSelection, 1915).
--define(wxToolbook_AssignImageList, 1916).
--define(wxToolbook_Create, 1917).
--define(wxToolbook_DeleteAllPages, 1918).
--define(wxToolbook_DeletePage, 1919).
--define(wxToolbook_RemovePage, 1920).
--define(wxToolbook_GetCurrentPage, 1921).
--define(wxToolbook_GetImageList, 1922).
--define(wxToolbook_GetPage, 1924).
--define(wxToolbook_GetPageCount, 1925).
--define(wxToolbook_GetPageImage, 1926).
--define(wxToolbook_GetPageText, 1927).
--define(wxToolbook_GetSelection, 1928).
--define(wxToolbook_HitTest, 1930).
--define(wxToolbook_InsertPage, 1931).
--define(wxToolbook_SetImageList, 1932).
--define(wxToolbook_SetPageSize, 1933).
--define(wxToolbook_SetPageImage, 1934).
--define(wxToolbook_SetPageText, 1935).
--define(wxToolbook_SetSelection, 1936).
--define(wxToolbook_ChangeSelection, 1937).
--define(wxToolbook_destroy, 1938).
--define(wxListbook_new_0, 1939).
--define(wxListbook_new_3, 1940).
--define(wxListbook_AddPage, 1941).
--define(wxListbook_AdvanceSelection, 1942).
--define(wxListbook_AssignImageList, 1943).
--define(wxListbook_Create, 1944).
--define(wxListbook_DeleteAllPages, 1945).
--define(wxListbook_DeletePage, 1946).
--define(wxListbook_RemovePage, 1947).
--define(wxListbook_GetCurrentPage, 1948).
--define(wxListbook_GetImageList, 1949).
--define(wxListbook_GetPage, 1951).
--define(wxListbook_GetPageCount, 1952).
--define(wxListbook_GetPageImage, 1953).
--define(wxListbook_GetPageText, 1954).
--define(wxListbook_GetSelection, 1955).
--define(wxListbook_HitTest, 1957).
--define(wxListbook_InsertPage, 1958).
--define(wxListbook_SetImageList, 1959).
--define(wxListbook_SetPageSize, 1960).
--define(wxListbook_SetPageImage, 1961).
--define(wxListbook_SetPageText, 1962).
--define(wxListbook_SetSelection, 1963).
--define(wxListbook_ChangeSelection, 1964).
--define(wxListbook_destroy, 1965).
--define(wxTreebook_new_0, 1966).
--define(wxTreebook_new_3, 1967).
--define(wxTreebook_AddPage, 1968).
--define(wxTreebook_AdvanceSelection, 1969).
--define(wxTreebook_AssignImageList, 1970).
--define(wxTreebook_Create, 1971).
--define(wxTreebook_DeleteAllPages, 1972).
--define(wxTreebook_DeletePage, 1973).
--define(wxTreebook_RemovePage, 1974).
--define(wxTreebook_GetCurrentPage, 1975).
--define(wxTreebook_GetImageList, 1976).
--define(wxTreebook_GetPage, 1978).
--define(wxTreebook_GetPageCount, 1979).
--define(wxTreebook_GetPageImage, 1980).
--define(wxTreebook_GetPageText, 1981).
--define(wxTreebook_GetSelection, 1982).
--define(wxTreebook_ExpandNode, 1983).
--define(wxTreebook_IsNodeExpanded, 1984).
--define(wxTreebook_HitTest, 1986).
--define(wxTreebook_InsertPage, 1987).
--define(wxTreebook_InsertSubPage, 1988).
--define(wxTreebook_SetImageList, 1989).
--define(wxTreebook_SetPageSize, 1990).
--define(wxTreebook_SetPageImage, 1991).
--define(wxTreebook_SetPageText, 1992).
--define(wxTreebook_SetSelection, 1993).
--define(wxTreebook_ChangeSelection, 1994).
--define(wxTreebook_destroy, 1995).
--define(wxTreeCtrl_new_2, 1998).
--define(wxTreeCtrl_new_0, 1999).
--define(wxTreeCtrl_destruct, 2001).
--define(wxTreeCtrl_AddRoot, 2002).
--define(wxTreeCtrl_AppendItem, 2003).
--define(wxTreeCtrl_AssignImageList, 2004).
--define(wxTreeCtrl_AssignStateImageList, 2005).
--define(wxTreeCtrl_Collapse, 2006).
--define(wxTreeCtrl_CollapseAndReset, 2007).
--define(wxTreeCtrl_Create, 2008).
--define(wxTreeCtrl_Delete, 2009).
--define(wxTreeCtrl_DeleteAllItems, 2010).
--define(wxTreeCtrl_DeleteChildren, 2011).
--define(wxTreeCtrl_EnsureVisible, 2012).
--define(wxTreeCtrl_Expand, 2013).
--define(wxTreeCtrl_GetBoundingRect, 2014).
--define(wxTreeCtrl_GetChildrenCount, 2016).
--define(wxTreeCtrl_GetCount, 2017).
--define(wxTreeCtrl_GetEditControl, 2018).
--define(wxTreeCtrl_GetFirstChild, 2019).
--define(wxTreeCtrl_GetNextChild, 2020).
--define(wxTreeCtrl_GetFirstVisibleItem, 2021).
--define(wxTreeCtrl_GetImageList, 2022).
--define(wxTreeCtrl_GetIndent, 2023).
--define(wxTreeCtrl_GetItemBackgroundColour, 2024).
--define(wxTreeCtrl_GetItemData, 2025).
--define(wxTreeCtrl_GetItemFont, 2026).
--define(wxTreeCtrl_GetItemImage_1, 2027).
--define(wxTreeCtrl_GetItemImage_2, 2028).
--define(wxTreeCtrl_GetItemText, 2029).
--define(wxTreeCtrl_GetItemTextColour, 2030).
--define(wxTreeCtrl_GetLastChild, 2031).
--define(wxTreeCtrl_GetNextSibling, 2032).
--define(wxTreeCtrl_GetNextVisible, 2033).
--define(wxTreeCtrl_GetItemParent, 2034).
--define(wxTreeCtrl_GetPrevSibling, 2035).
--define(wxTreeCtrl_GetPrevVisible, 2036).
--define(wxTreeCtrl_GetRootItem, 2037).
--define(wxTreeCtrl_GetSelection, 2038).
--define(wxTreeCtrl_GetSelections, 2039).
--define(wxTreeCtrl_GetStateImageList, 2040).
--define(wxTreeCtrl_HitTest, 2041).
--define(wxTreeCtrl_InsertItem, 2043).
--define(wxTreeCtrl_IsBold, 2044).
--define(wxTreeCtrl_IsExpanded, 2045).
--define(wxTreeCtrl_IsSelected, 2046).
--define(wxTreeCtrl_IsVisible, 2047).
--define(wxTreeCtrl_ItemHasChildren, 2048).
--define(wxTreeCtrl_PrependItem, 2049).
--define(wxTreeCtrl_ScrollTo, 2050).
--define(wxTreeCtrl_SelectItem_1, 2051).
--define(wxTreeCtrl_SelectItem_2, 2052).
--define(wxTreeCtrl_SetIndent, 2053).
--define(wxTreeCtrl_SetImageList, 2054).
--define(wxTreeCtrl_SetItemBackgroundColour, 2055).
--define(wxTreeCtrl_SetItemBold, 2056).
--define(wxTreeCtrl_SetItemData, 2057).
--define(wxTreeCtrl_SetItemDropHighlight, 2058).
--define(wxTreeCtrl_SetItemFont, 2059).
--define(wxTreeCtrl_SetItemHasChildren, 2060).
--define(wxTreeCtrl_SetItemImage_2, 2061).
--define(wxTreeCtrl_SetItemImage_3, 2062).
--define(wxTreeCtrl_SetItemText, 2063).
--define(wxTreeCtrl_SetItemTextColour, 2064).
--define(wxTreeCtrl_SetStateImageList, 2065).
--define(wxTreeCtrl_SetWindowStyle, 2066).
--define(wxTreeCtrl_SortChildren, 2067).
--define(wxTreeCtrl_Toggle, 2068).
--define(wxTreeCtrl_ToggleItemSelection, 2069).
--define(wxTreeCtrl_Unselect, 2070).
--define(wxTreeCtrl_UnselectAll, 2071).
--define(wxTreeCtrl_UnselectItem, 2072).
--define(wxScrollBar_new_0, 2073).
--define(wxScrollBar_new_3, 2074).
--define(wxScrollBar_destruct, 2075).
--define(wxScrollBar_Create, 2076).
--define(wxScrollBar_GetRange, 2077).
--define(wxScrollBar_GetPageSize, 2078).
--define(wxScrollBar_GetThumbPosition, 2079).
--define(wxScrollBar_GetThumbSize, 2080).
--define(wxScrollBar_SetThumbPosition, 2081).
--define(wxScrollBar_SetScrollbar, 2082).
--define(wxSpinButton_new_2, 2084).
--define(wxSpinButton_new_0, 2085).
--define(wxSpinButton_Create, 2086).
--define(wxSpinButton_GetMax, 2087).
--define(wxSpinButton_GetMin, 2088).
--define(wxSpinButton_GetValue, 2089).
--define(wxSpinButton_SetRange, 2090).
--define(wxSpinButton_SetValue, 2091).
--define(wxSpinButton_destroy, 2092).
--define(wxSpinCtrl_new_0, 2093).
--define(wxSpinCtrl_new_2, 2094).
--define(wxSpinCtrl_Create, 2096).
--define(wxSpinCtrl_SetValue_1_1, 2099).
--define(wxSpinCtrl_SetValue_1_0, 2100).
--define(wxSpinCtrl_GetValue, 2102).
--define(wxSpinCtrl_SetRange, 2104).
--define(wxSpinCtrl_SetSelection, 2105).
--define(wxSpinCtrl_GetMin, 2107).
--define(wxSpinCtrl_GetMax, 2109).
--define(wxSpinCtrl_destroy, 2110).
--define(wxStaticText_new_0, 2111).
--define(wxStaticText_new_4, 2112).
--define(wxStaticText_Create, 2113).
--define(wxStaticText_GetLabel, 2114).
--define(wxStaticText_SetLabel, 2115).
--define(wxStaticText_Wrap, 2116).
--define(wxStaticText_destroy, 2117).
--define(wxStaticBitmap_new_0, 2118).
--define(wxStaticBitmap_new_4, 2119).
--define(wxStaticBitmap_Create, 2120).
--define(wxStaticBitmap_GetBitmap, 2121).
--define(wxStaticBitmap_SetBitmap, 2122).
--define(wxStaticBitmap_destroy, 2123).
--define(wxRadioBox_new, 2124).
--define(wxRadioBox_destruct, 2126).
--define(wxRadioBox_Create, 2127).
--define(wxRadioBox_Enable_2, 2128).
--define(wxRadioBox_Enable_1, 2129).
--define(wxRadioBox_GetSelection, 2130).
--define(wxRadioBox_GetString, 2131).
--define(wxRadioBox_SetSelection, 2132).
--define(wxRadioBox_Show_2, 2133).
--define(wxRadioBox_Show_1, 2134).
--define(wxRadioBox_GetColumnCount, 2135).
--define(wxRadioBox_GetItemHelpText, 2136).
--define(wxRadioBox_GetItemToolTip, 2137).
--define(wxRadioBox_GetItemFromPoint, 2139).
--define(wxRadioBox_GetRowCount, 2140).
--define(wxRadioBox_IsItemEnabled, 2141).
--define(wxRadioBox_IsItemShown, 2142).
--define(wxRadioBox_SetItemHelpText, 2143).
--define(wxRadioBox_SetItemToolTip, 2144).
--define(wxRadioButton_new_0, 2145).
--define(wxRadioButton_new_4, 2146).
--define(wxRadioButton_Create, 2147).
--define(wxRadioButton_GetValue, 2148).
--define(wxRadioButton_SetValue, 2149).
--define(wxRadioButton_destroy, 2150).
--define(wxSlider_new_6, 2152).
--define(wxSlider_new_0, 2153).
--define(wxSlider_Create, 2154).
--define(wxSlider_GetLineSize, 2155).
--define(wxSlider_GetMax, 2156).
--define(wxSlider_GetMin, 2157).
--define(wxSlider_GetPageSize, 2158).
--define(wxSlider_GetThumbLength, 2159).
--define(wxSlider_GetValue, 2160).
--define(wxSlider_SetLineSize, 2161).
--define(wxSlider_SetPageSize, 2162).
--define(wxSlider_SetRange, 2163).
--define(wxSlider_SetThumbLength, 2164).
--define(wxSlider_SetValue, 2165).
--define(wxSlider_destroy, 2166).
--define(wxDialog_new_4, 2168).
--define(wxDialog_new_0, 2169).
--define(wxDialog_destruct, 2171).
--define(wxDialog_Create, 2172).
--define(wxDialog_CreateButtonSizer, 2173).
--define(wxDialog_CreateStdDialogButtonSizer, 2174).
--define(wxDialog_EndModal, 2175).
--define(wxDialog_GetAffirmativeId, 2176).
--define(wxDialog_GetReturnCode, 2177).
--define(wxDialog_IsModal, 2178).
--define(wxDialog_SetAffirmativeId, 2179).
--define(wxDialog_SetReturnCode, 2180).
--define(wxDialog_Show, 2181).
--define(wxDialog_ShowModal, 2182).
--define(wxColourDialog_new_0, 2183).
--define(wxColourDialog_new_2, 2184).
--define(wxColourDialog_destruct, 2185).
--define(wxColourDialog_Create, 2186).
--define(wxColourDialog_GetColourData, 2187).
--define(wxColourData_new_0, 2188).
--define(wxColourData_new_1, 2189).
--define(wxColourData_destruct, 2190).
--define(wxColourData_GetChooseFull, 2191).
--define(wxColourData_GetColour, 2192).
--define(wxColourData_GetCustomColour, 2194).
--define(wxColourData_SetChooseFull, 2195).
--define(wxColourData_SetColour, 2196).
--define(wxColourData_SetCustomColour, 2197).
--define(wxPalette_new_0, 2198).
--define(wxPalette_new_4, 2199).
--define(wxPalette_destruct, 2201).
--define(wxPalette_Create, 2202).
--define(wxPalette_GetColoursCount, 2203).
--define(wxPalette_GetPixel, 2204).
--define(wxPalette_GetRGB, 2205).
--define(wxPalette_IsOk, 2206).
--define(wxDirDialog_new, 2210).
--define(wxDirDialog_destruct, 2211).
--define(wxDirDialog_GetPath, 2212).
--define(wxDirDialog_GetMessage, 2213).
--define(wxDirDialog_SetMessage, 2214).
--define(wxDirDialog_SetPath, 2215).
--define(wxFileDialog_new, 2219).
--define(wxFileDialog_destruct, 2220).
--define(wxFileDialog_GetDirectory, 2221).
--define(wxFileDialog_GetFilename, 2222).
--define(wxFileDialog_GetFilenames, 2223).
--define(wxFileDialog_GetFilterIndex, 2224).
--define(wxFileDialog_GetMessage, 2225).
--define(wxFileDialog_GetPath, 2226).
--define(wxFileDialog_GetPaths, 2227).
--define(wxFileDialog_GetWildcard, 2228).
--define(wxFileDialog_SetDirectory, 2229).
--define(wxFileDialog_SetFilename, 2230).
--define(wxFileDialog_SetFilterIndex, 2231).
--define(wxFileDialog_SetMessage, 2232).
--define(wxFileDialog_SetPath, 2233).
--define(wxFileDialog_SetWildcard, 2234).
--define(wxPickerBase_SetInternalMargin, 2235).
--define(wxPickerBase_GetInternalMargin, 2236).
--define(wxPickerBase_SetTextCtrlProportion, 2237).
--define(wxPickerBase_SetPickerCtrlProportion, 2238).
--define(wxPickerBase_GetTextCtrlProportion, 2239).
--define(wxPickerBase_GetPickerCtrlProportion, 2240).
--define(wxPickerBase_HasTextCtrl, 2241).
--define(wxPickerBase_GetTextCtrl, 2242).
--define(wxPickerBase_IsTextCtrlGrowable, 2243).
--define(wxPickerBase_SetPickerCtrlGrowable, 2244).
--define(wxPickerBase_SetTextCtrlGrowable, 2245).
--define(wxPickerBase_IsPickerCtrlGrowable, 2246).
--define(wxFilePickerCtrl_new_0, 2247).
--define(wxFilePickerCtrl_new_3, 2248).
--define(wxFilePickerCtrl_Create, 2249).
--define(wxFilePickerCtrl_GetPath, 2250).
--define(wxFilePickerCtrl_SetPath, 2251).
--define(wxFilePickerCtrl_destroy, 2252).
--define(wxDirPickerCtrl_new_0, 2253).
--define(wxDirPickerCtrl_new_3, 2254).
--define(wxDirPickerCtrl_Create, 2255).
--define(wxDirPickerCtrl_GetPath, 2256).
--define(wxDirPickerCtrl_SetPath, 2257).
--define(wxDirPickerCtrl_destroy, 2258).
--define(wxColourPickerCtrl_new_0, 2259).
--define(wxColourPickerCtrl_new_3, 2260).
--define(wxColourPickerCtrl_Create, 2261).
--define(wxColourPickerCtrl_GetColour, 2262).
--define(wxColourPickerCtrl_SetColour_1_1, 2263).
--define(wxColourPickerCtrl_SetColour_1_0, 2264).
--define(wxColourPickerCtrl_destroy, 2265).
--define(wxDatePickerCtrl_new_0, 2266).
--define(wxDatePickerCtrl_new_3, 2267).
--define(wxDatePickerCtrl_GetRange, 2268).
--define(wxDatePickerCtrl_GetValue, 2269).
--define(wxDatePickerCtrl_SetRange, 2270).
--define(wxDatePickerCtrl_SetValue, 2271).
--define(wxDatePickerCtrl_destroy, 2272).
--define(wxFontPickerCtrl_new_0, 2273).
--define(wxFontPickerCtrl_new_3, 2274).
--define(wxFontPickerCtrl_Create, 2275).
--define(wxFontPickerCtrl_GetSelectedFont, 2276).
--define(wxFontPickerCtrl_SetSelectedFont, 2277).
--define(wxFontPickerCtrl_GetMaxPointSize, 2278).
--define(wxFontPickerCtrl_SetMaxPointSize, 2279).
--define(wxFontPickerCtrl_destroy, 2280).
--define(wxFindReplaceDialog_new_0, 2283).
--define(wxFindReplaceDialog_new_4, 2284).
--define(wxFindReplaceDialog_destruct, 2285).
--define(wxFindReplaceDialog_Create, 2286).
--define(wxFindReplaceDialog_GetData, 2287).
--define(wxFindReplaceData_new_0, 2288).
--define(wxFindReplaceData_new_1, 2289).
--define(wxFindReplaceData_GetFindString, 2290).
--define(wxFindReplaceData_GetReplaceString, 2291).
--define(wxFindReplaceData_GetFlags, 2292).
--define(wxFindReplaceData_SetFlags, 2293).
--define(wxFindReplaceData_SetFindString, 2294).
--define(wxFindReplaceData_SetReplaceString, 2295).
--define(wxFindReplaceData_destroy, 2296).
--define(wxMultiChoiceDialog_new_0, 2297).
--define(wxMultiChoiceDialog_new_5, 2299).
--define(wxMultiChoiceDialog_GetSelections, 2300).
--define(wxMultiChoiceDialog_SetSelections, 2301).
--define(wxMultiChoiceDialog_destroy, 2302).
--define(wxSingleChoiceDialog_new_0, 2303).
--define(wxSingleChoiceDialog_new_5, 2305).
--define(wxSingleChoiceDialog_GetSelection, 2306).
--define(wxSingleChoiceDialog_GetStringSelection, 2307).
--define(wxSingleChoiceDialog_SetSelection, 2308).
--define(wxSingleChoiceDialog_destroy, 2309).
--define(wxTextEntryDialog_new, 2310).
--define(wxTextEntryDialog_GetValue, 2311).
--define(wxTextEntryDialog_SetValue, 2312).
--define(wxTextEntryDialog_destroy, 2313).
--define(wxPasswordEntryDialog_new, 2314).
--define(wxPasswordEntryDialog_destroy, 2315).
--define(wxFontData_new_0, 2316).
--define(wxFontData_new_1, 2317).
--define(wxFontData_destruct, 2318).
--define(wxFontData_EnableEffects, 2319).
--define(wxFontData_GetAllowSymbols, 2320).
--define(wxFontData_GetColour, 2321).
--define(wxFontData_GetChosenFont, 2322).
--define(wxFontData_GetEnableEffects, 2323).
--define(wxFontData_GetInitialFont, 2324).
--define(wxFontData_GetShowHelp, 2325).
--define(wxFontData_SetAllowSymbols, 2326).
--define(wxFontData_SetChosenFont, 2327).
--define(wxFontData_SetColour, 2328).
--define(wxFontData_SetInitialFont, 2329).
--define(wxFontData_SetRange, 2330).
--define(wxFontData_SetShowHelp, 2331).
--define(wxFontDialog_new_0, 2335).
--define(wxFontDialog_new_2, 2337).
--define(wxFontDialog_Create, 2339).
--define(wxFontDialog_GetFontData, 2340).
--define(wxFontDialog_destroy, 2342).
--define(wxProgressDialog_new, 2343).
--define(wxProgressDialog_destruct, 2344).
--define(wxProgressDialog_Resume, 2345).
--define(wxProgressDialog_Update_2, 2346).
--define(wxProgressDialog_Update_0, 2347).
--define(wxMessageDialog_new, 2348).
--define(wxMessageDialog_destruct, 2349).
--define(wxPageSetupDialog_new, 2350).
--define(wxPageSetupDialog_destruct, 2351).
--define(wxPageSetupDialog_GetPageSetupData, 2352).
--define(wxPageSetupDialog_ShowModal, 2353).
--define(wxPageSetupDialogData_new_0, 2354).
--define(wxPageSetupDialogData_new_1_0, 2355).
--define(wxPageSetupDialogData_new_1_1, 2356).
--define(wxPageSetupDialogData_destruct, 2357).
--define(wxPageSetupDialogData_EnableHelp, 2358).
--define(wxPageSetupDialogData_EnableMargins, 2359).
--define(wxPageSetupDialogData_EnableOrientation, 2360).
--define(wxPageSetupDialogData_EnablePaper, 2361).
--define(wxPageSetupDialogData_EnablePrinter, 2362).
--define(wxPageSetupDialogData_GetDefaultMinMargins, 2363).
--define(wxPageSetupDialogData_GetEnableMargins, 2364).
--define(wxPageSetupDialogData_GetEnableOrientation, 2365).
--define(wxPageSetupDialogData_GetEnablePaper, 2366).
--define(wxPageSetupDialogData_GetEnablePrinter, 2367).
--define(wxPageSetupDialogData_GetEnableHelp, 2368).
--define(wxPageSetupDialogData_GetDefaultInfo, 2369).
--define(wxPageSetupDialogData_GetMarginTopLeft, 2370).
--define(wxPageSetupDialogData_GetMarginBottomRight, 2371).
--define(wxPageSetupDialogData_GetMinMarginTopLeft, 2372).
--define(wxPageSetupDialogData_GetMinMarginBottomRight, 2373).
--define(wxPageSetupDialogData_GetPaperId, 2374).
--define(wxPageSetupDialogData_GetPaperSize, 2375).
--define(wxPageSetupDialogData_GetPrintData, 2377).
--define(wxPageSetupDialogData_IsOk, 2378).
--define(wxPageSetupDialogData_SetDefaultInfo, 2379).
--define(wxPageSetupDialogData_SetDefaultMinMargins, 2380).
--define(wxPageSetupDialogData_SetMarginTopLeft, 2381).
--define(wxPageSetupDialogData_SetMarginBottomRight, 2382).
--define(wxPageSetupDialogData_SetMinMarginTopLeft, 2383).
--define(wxPageSetupDialogData_SetMinMarginBottomRight, 2384).
--define(wxPageSetupDialogData_SetPaperId, 2385).
--define(wxPageSetupDialogData_SetPaperSize_1_1, 2386).
--define(wxPageSetupDialogData_SetPaperSize_1_0, 2387).
--define(wxPageSetupDialogData_SetPrintData, 2388).
--define(wxPrintDialog_new_2_0, 2389).
--define(wxPrintDialog_new_2_1, 2390).
--define(wxPrintDialog_destruct, 2391).
--define(wxPrintDialog_GetPrintDialogData, 2392).
--define(wxPrintDialog_GetPrintDC, 2393).
--define(wxPrintDialogData_new_0, 2394).
--define(wxPrintDialogData_new_1_1, 2395).
--define(wxPrintDialogData_new_1_0, 2396).
--define(wxPrintDialogData_destruct, 2397).
--define(wxPrintDialogData_EnableHelp, 2398).
--define(wxPrintDialogData_EnablePageNumbers, 2399).
--define(wxPrintDialogData_EnablePrintToFile, 2400).
--define(wxPrintDialogData_EnableSelection, 2401).
--define(wxPrintDialogData_GetAllPages, 2402).
--define(wxPrintDialogData_GetCollate, 2403).
--define(wxPrintDialogData_GetFromPage, 2404).
--define(wxPrintDialogData_GetMaxPage, 2405).
--define(wxPrintDialogData_GetMinPage, 2406).
--define(wxPrintDialogData_GetNoCopies, 2407).
--define(wxPrintDialogData_GetPrintData, 2408).
--define(wxPrintDialogData_GetPrintToFile, 2409).
--define(wxPrintDialogData_GetSelection, 2410).
--define(wxPrintDialogData_GetToPage, 2411).
--define(wxPrintDialogData_IsOk, 2412).
--define(wxPrintDialogData_SetCollate, 2413).
--define(wxPrintDialogData_SetFromPage, 2414).
--define(wxPrintDialogData_SetMaxPage, 2415).
--define(wxPrintDialogData_SetMinPage, 2416).
--define(wxPrintDialogData_SetNoCopies, 2417).
--define(wxPrintDialogData_SetPrintData, 2418).
--define(wxPrintDialogData_SetPrintToFile, 2419).
--define(wxPrintDialogData_SetSelection, 2420).
--define(wxPrintDialogData_SetToPage, 2421).
--define(wxPrintData_new_0, 2422).
--define(wxPrintData_new_1, 2423).
--define(wxPrintData_destruct, 2424).
--define(wxPrintData_GetCollate, 2425).
--define(wxPrintData_GetBin, 2426).
--define(wxPrintData_GetColour, 2427).
--define(wxPrintData_GetDuplex, 2428).
--define(wxPrintData_GetNoCopies, 2429).
--define(wxPrintData_GetOrientation, 2430).
--define(wxPrintData_GetPaperId, 2431).
--define(wxPrintData_GetPrinterName, 2432).
--define(wxPrintData_GetQuality, 2433).
--define(wxPrintData_IsOk, 2434).
--define(wxPrintData_SetBin, 2435).
--define(wxPrintData_SetCollate, 2436).
--define(wxPrintData_SetColour, 2437).
--define(wxPrintData_SetDuplex, 2438).
--define(wxPrintData_SetNoCopies, 2439).
--define(wxPrintData_SetOrientation, 2440).
--define(wxPrintData_SetPaperId, 2441).
--define(wxPrintData_SetPrinterName, 2442).
--define(wxPrintData_SetQuality, 2443).
--define(wxPrintPreview_new_2, 2446).
--define(wxPrintPreview_new_3, 2447).
--define(wxPrintPreview_destruct, 2449).
--define(wxPrintPreview_GetCanvas, 2450).
--define(wxPrintPreview_GetCurrentPage, 2451).
--define(wxPrintPreview_GetFrame, 2452).
--define(wxPrintPreview_GetMaxPage, 2453).
--define(wxPrintPreview_GetMinPage, 2454).
--define(wxPrintPreview_GetPrintout, 2455).
--define(wxPrintPreview_GetPrintoutForPrinting, 2456).
--define(wxPrintPreview_IsOk, 2457).
--define(wxPrintPreview_PaintPage, 2458).
--define(wxPrintPreview_Print, 2459).
--define(wxPrintPreview_RenderPage, 2460).
--define(wxPrintPreview_SetCanvas, 2461).
--define(wxPrintPreview_SetCurrentPage, 2462).
--define(wxPrintPreview_SetFrame, 2463).
--define(wxPrintPreview_SetPrintout, 2464).
--define(wxPrintPreview_SetZoom, 2465).
--define(wxPreviewFrame_new, 2466).
--define(wxPreviewFrame_destruct, 2467).
--define(wxPreviewFrame_CreateControlBar, 2468).
--define(wxPreviewFrame_CreateCanvas, 2469).
--define(wxPreviewFrame_Initialize, 2470).
--define(wxPreviewFrame_OnCloseWindow, 2471).
--define(wxPreviewControlBar_new, 2472).
--define(wxPreviewControlBar_destruct, 2473).
--define(wxPreviewControlBar_CreateButtons, 2474).
--define(wxPreviewControlBar_GetPrintPreview, 2475).
--define(wxPreviewControlBar_GetZoomControl, 2476).
--define(wxPreviewControlBar_SetZoomControl, 2477).
--define(wxPrinter_new, 2479).
--define(wxPrinter_CreateAbortWindow, 2480).
--define(wxPrinter_GetAbort, 2481).
--define(wxPrinter_GetLastError, 2482).
--define(wxPrinter_GetPrintDialogData, 2483).
--define(wxPrinter_Print, 2484).
--define(wxPrinter_PrintDialog, 2485).
--define(wxPrinter_ReportError, 2486).
--define(wxPrinter_Setup, 2487).
--define(wxPrinter_destroy, 2488).
--define(wxXmlResource_new_1, 2489).
--define(wxXmlResource_new_2, 2490).
--define(wxXmlResource_destruct, 2491).
--define(wxXmlResource_AttachUnknownControl, 2492).
--define(wxXmlResource_ClearHandlers, 2493).
--define(wxXmlResource_CompareVersion, 2494).
--define(wxXmlResource_Get, 2495).
--define(wxXmlResource_GetFlags, 2496).
--define(wxXmlResource_GetVersion, 2497).
--define(wxXmlResource_GetXRCID, 2498).
--define(wxXmlResource_InitAllHandlers, 2499).
--define(wxXmlResource_Load, 2500).
--define(wxXmlResource_LoadBitmap, 2501).
--define(wxXmlResource_LoadDialog_2, 2502).
--define(wxXmlResource_LoadDialog_3, 2503).
--define(wxXmlResource_LoadFrame_2, 2504).
--define(wxXmlResource_LoadFrame_3, 2505).
--define(wxXmlResource_LoadIcon, 2506).
--define(wxXmlResource_LoadMenu, 2507).
--define(wxXmlResource_LoadMenuBar_2, 2508).
--define(wxXmlResource_LoadMenuBar_1, 2509).
--define(wxXmlResource_LoadPanel_2, 2510).
--define(wxXmlResource_LoadPanel_3, 2511).
--define(wxXmlResource_LoadToolBar, 2512).
--define(wxXmlResource_Set, 2513).
--define(wxXmlResource_SetFlags, 2514).
--define(wxXmlResource_Unload, 2515).
--define(wxXmlResource_xrcctrl, 2516).
--define(wxHtmlEasyPrinting_new, 2517).
--define(wxHtmlEasyPrinting_destruct, 2518).
--define(wxHtmlEasyPrinting_GetPrintData, 2519).
--define(wxHtmlEasyPrinting_GetPageSetupData, 2520).
--define(wxHtmlEasyPrinting_PreviewFile, 2521).
--define(wxHtmlEasyPrinting_PreviewText, 2522).
--define(wxHtmlEasyPrinting_PrintFile, 2523).
--define(wxHtmlEasyPrinting_PrintText, 2524).
--define(wxHtmlEasyPrinting_PageSetup, 2525).
--define(wxHtmlEasyPrinting_SetFonts, 2526).
--define(wxHtmlEasyPrinting_SetHeader, 2527).
--define(wxHtmlEasyPrinting_SetFooter, 2528).
--define(wxGLCanvas_new_2, 2530).
--define(wxGLCanvas_new_3_1, 2531).
--define(wxGLCanvas_new_3_0, 2532).
--define(wxGLCanvas_GetContext, 2533).
--define(wxGLCanvas_SetCurrent, 2535).
--define(wxGLCanvas_SwapBuffers, 2536).
--define(wxGLCanvas_destroy, 2537).
--define(wxAuiManager_new, 2538).
--define(wxAuiManager_destruct, 2539).
--define(wxAuiManager_AddPane_2_1, 2540).
--define(wxAuiManager_AddPane_3, 2541).
--define(wxAuiManager_AddPane_2_0, 2542).
--define(wxAuiManager_DetachPane, 2543).
--define(wxAuiManager_GetAllPanes, 2544).
--define(wxAuiManager_GetArtProvider, 2545).
--define(wxAuiManager_GetDockSizeConstraint, 2546).
--define(wxAuiManager_GetFlags, 2547).
--define(wxAuiManager_GetManagedWindow, 2548).
--define(wxAuiManager_GetManager, 2549).
--define(wxAuiManager_GetPane_1_1, 2550).
--define(wxAuiManager_GetPane_1_0, 2551).
--define(wxAuiManager_HideHint, 2552).
--define(wxAuiManager_InsertPane, 2553).
--define(wxAuiManager_LoadPaneInfo, 2554).
--define(wxAuiManager_LoadPerspective, 2555).
--define(wxAuiManager_SavePaneInfo, 2556).
--define(wxAuiManager_SavePerspective, 2557).
--define(wxAuiManager_SetArtProvider, 2558).
--define(wxAuiManager_SetDockSizeConstraint, 2559).
--define(wxAuiManager_SetFlags, 2560).
--define(wxAuiManager_SetManagedWindow, 2561).
--define(wxAuiManager_ShowHint, 2562).
--define(wxAuiManager_UnInit, 2563).
--define(wxAuiManager_Update, 2564).
--define(wxAuiPaneInfo_new_0, 2565).
--define(wxAuiPaneInfo_new_1, 2566).
--define(wxAuiPaneInfo_destruct, 2567).
--define(wxAuiPaneInfo_BestSize_1, 2568).
--define(wxAuiPaneInfo_BestSize_2, 2569).
--define(wxAuiPaneInfo_Bottom, 2570).
--define(wxAuiPaneInfo_BottomDockable, 2571).
--define(wxAuiPaneInfo_Caption, 2572).
--define(wxAuiPaneInfo_CaptionVisible, 2573).
--define(wxAuiPaneInfo_Centre, 2574).
--define(wxAuiPaneInfo_CentrePane, 2575).
--define(wxAuiPaneInfo_CloseButton, 2576).
--define(wxAuiPaneInfo_DefaultPane, 2577).
--define(wxAuiPaneInfo_DestroyOnClose, 2578).
--define(wxAuiPaneInfo_Direction, 2579).
--define(wxAuiPaneInfo_Dock, 2580).
--define(wxAuiPaneInfo_Dockable, 2581).
--define(wxAuiPaneInfo_Fixed, 2582).
--define(wxAuiPaneInfo_Float, 2583).
--define(wxAuiPaneInfo_Floatable, 2584).
--define(wxAuiPaneInfo_FloatingPosition_1, 2585).
--define(wxAuiPaneInfo_FloatingPosition_2, 2586).
--define(wxAuiPaneInfo_FloatingSize_1, 2587).
--define(wxAuiPaneInfo_FloatingSize_2, 2588).
--define(wxAuiPaneInfo_Gripper, 2589).
--define(wxAuiPaneInfo_GripperTop, 2590).
--define(wxAuiPaneInfo_HasBorder, 2591).
--define(wxAuiPaneInfo_HasCaption, 2592).
--define(wxAuiPaneInfo_HasCloseButton, 2593).
--define(wxAuiPaneInfo_HasFlag, 2594).
--define(wxAuiPaneInfo_HasGripper, 2595).
--define(wxAuiPaneInfo_HasGripperTop, 2596).
--define(wxAuiPaneInfo_HasMaximizeButton, 2597).
--define(wxAuiPaneInfo_HasMinimizeButton, 2598).
--define(wxAuiPaneInfo_HasPinButton, 2599).
--define(wxAuiPaneInfo_Hide, 2600).
--define(wxAuiPaneInfo_IsBottomDockable, 2601).
--define(wxAuiPaneInfo_IsDocked, 2602).
--define(wxAuiPaneInfo_IsFixed, 2603).
--define(wxAuiPaneInfo_IsFloatable, 2604).
--define(wxAuiPaneInfo_IsFloating, 2605).
--define(wxAuiPaneInfo_IsLeftDockable, 2606).
--define(wxAuiPaneInfo_IsMovable, 2607).
--define(wxAuiPaneInfo_IsOk, 2608).
--define(wxAuiPaneInfo_IsResizable, 2609).
--define(wxAuiPaneInfo_IsRightDockable, 2610).
--define(wxAuiPaneInfo_IsShown, 2611).
--define(wxAuiPaneInfo_IsToolbar, 2612).
--define(wxAuiPaneInfo_IsTopDockable, 2613).
--define(wxAuiPaneInfo_Layer, 2614).
--define(wxAuiPaneInfo_Left, 2615).
--define(wxAuiPaneInfo_LeftDockable, 2616).
--define(wxAuiPaneInfo_MaxSize_1, 2617).
--define(wxAuiPaneInfo_MaxSize_2, 2618).
--define(wxAuiPaneInfo_MaximizeButton, 2619).
--define(wxAuiPaneInfo_MinSize_1, 2620).
--define(wxAuiPaneInfo_MinSize_2, 2621).
--define(wxAuiPaneInfo_MinimizeButton, 2622).
--define(wxAuiPaneInfo_Movable, 2623).
--define(wxAuiPaneInfo_Name, 2624).
--define(wxAuiPaneInfo_PaneBorder, 2625).
--define(wxAuiPaneInfo_PinButton, 2626).
--define(wxAuiPaneInfo_Position, 2627).
--define(wxAuiPaneInfo_Resizable, 2628).
--define(wxAuiPaneInfo_Right, 2629).
--define(wxAuiPaneInfo_RightDockable, 2630).
--define(wxAuiPaneInfo_Row, 2631).
--define(wxAuiPaneInfo_SafeSet, 2632).
--define(wxAuiPaneInfo_SetFlag, 2633).
--define(wxAuiPaneInfo_Show, 2634).
--define(wxAuiPaneInfo_ToolbarPane, 2635).
--define(wxAuiPaneInfo_Top, 2636).
--define(wxAuiPaneInfo_TopDockable, 2637).
--define(wxAuiPaneInfo_Window, 2638).
--define(wxAuiNotebook_new_0, 2639).
--define(wxAuiNotebook_new_2, 2640).
--define(wxAuiNotebook_AddPage, 2641).
--define(wxAuiNotebook_Create, 2642).
--define(wxAuiNotebook_DeletePage, 2643).
--define(wxAuiNotebook_GetArtProvider, 2644).
--define(wxAuiNotebook_GetPage, 2645).
--define(wxAuiNotebook_GetPageBitmap, 2646).
--define(wxAuiNotebook_GetPageCount, 2647).
--define(wxAuiNotebook_GetPageIndex, 2648).
--define(wxAuiNotebook_GetPageText, 2649).
--define(wxAuiNotebook_GetSelection, 2650).
--define(wxAuiNotebook_InsertPage, 2651).
--define(wxAuiNotebook_RemovePage, 2652).
--define(wxAuiNotebook_SetArtProvider, 2653).
--define(wxAuiNotebook_SetFont, 2654).
--define(wxAuiNotebook_SetPageBitmap, 2655).
--define(wxAuiNotebook_SetPageText, 2656).
--define(wxAuiNotebook_SetSelection, 2657).
--define(wxAuiNotebook_SetTabCtrlHeight, 2658).
--define(wxAuiNotebook_SetUniformBitmapSize, 2659).
--define(wxAuiNotebook_destroy, 2660).
--define(wxMDIParentFrame_new_0, 2661).
--define(wxMDIParentFrame_new_4, 2662).
--define(wxMDIParentFrame_destruct, 2663).
--define(wxMDIParentFrame_ActivateNext, 2664).
--define(wxMDIParentFrame_ActivatePrevious, 2665).
--define(wxMDIParentFrame_ArrangeIcons, 2666).
--define(wxMDIParentFrame_Cascade, 2667).
--define(wxMDIParentFrame_Create, 2668).
--define(wxMDIParentFrame_GetActiveChild, 2669).
--define(wxMDIParentFrame_GetClientWindow, 2670).
--define(wxMDIParentFrame_Tile, 2671).
--define(wxMDIChildFrame_new_0, 2672).
--define(wxMDIChildFrame_new_4, 2673).
--define(wxMDIChildFrame_destruct, 2674).
--define(wxMDIChildFrame_Activate, 2675).
--define(wxMDIChildFrame_Create, 2676).
--define(wxMDIChildFrame_Maximize, 2677).
--define(wxMDIChildFrame_Restore, 2678).
--define(wxMDIClientWindow_new_0, 2679).
--define(wxMDIClientWindow_new_2, 2680).
--define(wxMDIClientWindow_destruct, 2681).
--define(wxMDIClientWindow_CreateClient, 2682).
--define(wxLayoutAlgorithm_new, 2683).
--define(wxLayoutAlgorithm_LayoutFrame, 2684).
--define(wxLayoutAlgorithm_LayoutMDIFrame, 2685).
--define(wxLayoutAlgorithm_LayoutWindow, 2686).
--define(wxLayoutAlgorithm_destroy, 2687).
--define(wxEvent_GetId, 2688).
--define(wxEvent_GetSkipped, 2689).
--define(wxEvent_GetTimestamp, 2690).
--define(wxEvent_IsCommandEvent, 2691).
--define(wxEvent_ResumePropagation, 2692).
--define(wxEvent_ShouldPropagate, 2693).
--define(wxEvent_Skip, 2694).
--define(wxEvent_StopPropagation, 2695).
--define(wxCommandEvent_getClientData, 2696).
--define(wxCommandEvent_GetExtraLong, 2697).
--define(wxCommandEvent_GetInt, 2698).
--define(wxCommandEvent_GetSelection, 2699).
--define(wxCommandEvent_GetString, 2700).
--define(wxCommandEvent_IsChecked, 2701).
--define(wxCommandEvent_IsSelection, 2702).
--define(wxCommandEvent_SetInt, 2703).
--define(wxCommandEvent_SetString, 2704).
--define(wxScrollEvent_GetOrientation, 2705).
--define(wxScrollEvent_GetPosition, 2706).
--define(wxScrollWinEvent_GetOrientation, 2707).
--define(wxScrollWinEvent_GetPosition, 2708).
--define(wxMouseEvent_AltDown, 2709).
--define(wxMouseEvent_Button, 2710).
--define(wxMouseEvent_ButtonDClick, 2711).
--define(wxMouseEvent_ButtonDown, 2712).
--define(wxMouseEvent_ButtonUp, 2713).
--define(wxMouseEvent_CmdDown, 2714).
--define(wxMouseEvent_ControlDown, 2715).
--define(wxMouseEvent_Dragging, 2716).
--define(wxMouseEvent_Entering, 2717).
--define(wxMouseEvent_GetButton, 2718).
--define(wxMouseEvent_GetPosition, 2721).
--define(wxMouseEvent_GetLogicalPosition, 2722).
--define(wxMouseEvent_GetLinesPerAction, 2723).
--define(wxMouseEvent_GetWheelRotation, 2724).
--define(wxMouseEvent_GetWheelDelta, 2725).
--define(wxMouseEvent_GetX, 2726).
--define(wxMouseEvent_GetY, 2727).
--define(wxMouseEvent_IsButton, 2728).
--define(wxMouseEvent_IsPageScroll, 2729).
--define(wxMouseEvent_Leaving, 2730).
--define(wxMouseEvent_LeftDClick, 2731).
--define(wxMouseEvent_LeftDown, 2732).
--define(wxMouseEvent_LeftIsDown, 2733).
--define(wxMouseEvent_LeftUp, 2734).
--define(wxMouseEvent_MetaDown, 2735).
--define(wxMouseEvent_MiddleDClick, 2736).
--define(wxMouseEvent_MiddleDown, 2737).
--define(wxMouseEvent_MiddleIsDown, 2738).
--define(wxMouseEvent_MiddleUp, 2739).
--define(wxMouseEvent_Moving, 2740).
--define(wxMouseEvent_RightDClick, 2741).
--define(wxMouseEvent_RightDown, 2742).
--define(wxMouseEvent_RightIsDown, 2743).
--define(wxMouseEvent_RightUp, 2744).
--define(wxMouseEvent_ShiftDown, 2745).
--define(wxSetCursorEvent_GetCursor, 2746).
--define(wxSetCursorEvent_GetX, 2747).
--define(wxSetCursorEvent_GetY, 2748).
--define(wxSetCursorEvent_HasCursor, 2749).
--define(wxSetCursorEvent_SetCursor, 2750).
--define(wxKeyEvent_AltDown, 2751).
--define(wxKeyEvent_CmdDown, 2752).
--define(wxKeyEvent_ControlDown, 2753).
--define(wxKeyEvent_GetKeyCode, 2754).
--define(wxKeyEvent_GetModifiers, 2755).
--define(wxKeyEvent_GetPosition, 2758).
--define(wxKeyEvent_GetRawKeyCode, 2759).
--define(wxKeyEvent_GetRawKeyFlags, 2760).
--define(wxKeyEvent_GetUnicodeKey, 2761).
--define(wxKeyEvent_GetX, 2762).
--define(wxKeyEvent_GetY, 2763).
--define(wxKeyEvent_HasModifiers, 2764).
--define(wxKeyEvent_MetaDown, 2765).
--define(wxKeyEvent_ShiftDown, 2766).
--define(wxSizeEvent_GetSize, 2767).
--define(wxMoveEvent_GetPosition, 2768).
--define(wxEraseEvent_GetDC, 2769).
--define(wxFocusEvent_GetWindow, 2770).
--define(wxChildFocusEvent_GetWindow, 2771).
--define(wxMenuEvent_GetMenu, 2772).
--define(wxMenuEvent_GetMenuId, 2773).
--define(wxMenuEvent_IsPopup, 2774).
--define(wxCloseEvent_CanVeto, 2775).
--define(wxCloseEvent_GetLoggingOff, 2776).
--define(wxCloseEvent_SetCanVeto, 2777).
--define(wxCloseEvent_SetLoggingOff, 2778).
--define(wxCloseEvent_Veto, 2779).
--define(wxShowEvent_SetShow, 2780).
--define(wxShowEvent_GetShow, 2781).
--define(wxIconizeEvent_Iconized, 2782).
--define(wxJoystickEvent_ButtonDown, 2783).
--define(wxJoystickEvent_ButtonIsDown, 2784).
--define(wxJoystickEvent_ButtonUp, 2785).
--define(wxJoystickEvent_GetButtonChange, 2786).
--define(wxJoystickEvent_GetButtonState, 2787).
--define(wxJoystickEvent_GetJoystick, 2788).
--define(wxJoystickEvent_GetPosition, 2789).
--define(wxJoystickEvent_GetZPosition, 2790).
--define(wxJoystickEvent_IsButton, 2791).
--define(wxJoystickEvent_IsMove, 2792).
--define(wxJoystickEvent_IsZMove, 2793).
--define(wxUpdateUIEvent_CanUpdate, 2794).
--define(wxUpdateUIEvent_Check, 2795).
--define(wxUpdateUIEvent_Enable, 2796).
--define(wxUpdateUIEvent_Show, 2797).
--define(wxUpdateUIEvent_GetChecked, 2798).
--define(wxUpdateUIEvent_GetEnabled, 2799).
--define(wxUpdateUIEvent_GetShown, 2800).
--define(wxUpdateUIEvent_GetSetChecked, 2801).
--define(wxUpdateUIEvent_GetSetEnabled, 2802).
--define(wxUpdateUIEvent_GetSetShown, 2803).
--define(wxUpdateUIEvent_GetSetText, 2804).
--define(wxUpdateUIEvent_GetText, 2805).
--define(wxUpdateUIEvent_GetMode, 2806).
--define(wxUpdateUIEvent_GetUpdateInterval, 2807).
--define(wxUpdateUIEvent_ResetUpdateTime, 2808).
--define(wxUpdateUIEvent_SetMode, 2809).
--define(wxUpdateUIEvent_SetText, 2810).
--define(wxUpdateUIEvent_SetUpdateInterval, 2811).
--define(wxMouseCaptureChangedEvent_GetCapturedWindow, 2812).
--define(wxPaletteChangedEvent_SetChangedWindow, 2813).
--define(wxPaletteChangedEvent_GetChangedWindow, 2814).
--define(wxQueryNewPaletteEvent_SetPaletteRealized, 2815).
--define(wxQueryNewPaletteEvent_GetPaletteRealized, 2816).
--define(wxNavigationKeyEvent_GetDirection, 2817).
--define(wxNavigationKeyEvent_SetDirection, 2818).
--define(wxNavigationKeyEvent_IsWindowChange, 2819).
--define(wxNavigationKeyEvent_SetWindowChange, 2820).
--define(wxNavigationKeyEvent_IsFromTab, 2821).
--define(wxNavigationKeyEvent_SetFromTab, 2822).
--define(wxNavigationKeyEvent_GetCurrentFocus, 2823).
--define(wxNavigationKeyEvent_SetCurrentFocus, 2824).
--define(wxHelpEvent_GetOrigin, 2825).
--define(wxHelpEvent_GetPosition, 2826).
--define(wxHelpEvent_SetOrigin, 2827).
--define(wxHelpEvent_SetPosition, 2828).
--define(wxContextMenuEvent_GetPosition, 2829).
--define(wxContextMenuEvent_SetPosition, 2830).
--define(wxIdleEvent_CanSend, 2831).
--define(wxIdleEvent_GetMode, 2832).
--define(wxIdleEvent_RequestMore, 2833).
--define(wxIdleEvent_MoreRequested, 2834).
--define(wxIdleEvent_SetMode, 2835).
--define(wxGridEvent_AltDown, 2836).
--define(wxGridEvent_ControlDown, 2837).
--define(wxGridEvent_GetCol, 2838).
--define(wxGridEvent_GetPosition, 2839).
--define(wxGridEvent_GetRow, 2840).
--define(wxGridEvent_MetaDown, 2841).
--define(wxGridEvent_Selecting, 2842).
--define(wxGridEvent_ShiftDown, 2843).
--define(wxNotifyEvent_Allow, 2844).
--define(wxNotifyEvent_IsAllowed, 2845).
--define(wxNotifyEvent_Veto, 2846).
--define(wxSashEvent_GetEdge, 2847).
--define(wxSashEvent_GetDragRect, 2848).
--define(wxSashEvent_GetDragStatus, 2849).
--define(wxListEvent_GetCacheFrom, 2850).
--define(wxListEvent_GetCacheTo, 2851).
--define(wxListEvent_GetKeyCode, 2852).
--define(wxListEvent_GetIndex, 2853).
--define(wxListEvent_GetColumn, 2854).
--define(wxListEvent_GetPoint, 2855).
--define(wxListEvent_GetLabel, 2856).
--define(wxListEvent_GetText, 2857).
--define(wxListEvent_GetImage, 2858).
--define(wxListEvent_GetData, 2859).
--define(wxListEvent_GetMask, 2860).
--define(wxListEvent_GetItem, 2861).
--define(wxListEvent_IsEditCancelled, 2862).
--define(wxDateEvent_GetDate, 2863).
--define(wxCalendarEvent_GetWeekDay, 2864).
--define(wxFileDirPickerEvent_GetPath, 2865).
--define(wxColourPickerEvent_GetColour, 2866).
--define(wxFontPickerEvent_GetFont, 2867).
--define(wxStyledTextEvent_GetPosition, 2868).
--define(wxStyledTextEvent_GetKey, 2869).
--define(wxStyledTextEvent_GetModifiers, 2870).
--define(wxStyledTextEvent_GetModificationType, 2871).
--define(wxStyledTextEvent_GetText, 2872).
--define(wxStyledTextEvent_GetLength, 2873).
--define(wxStyledTextEvent_GetLinesAdded, 2874).
--define(wxStyledTextEvent_GetLine, 2875).
--define(wxStyledTextEvent_GetFoldLevelNow, 2876).
--define(wxStyledTextEvent_GetFoldLevelPrev, 2877).
--define(wxStyledTextEvent_GetMargin, 2878).
--define(wxStyledTextEvent_GetMessage, 2879).
--define(wxStyledTextEvent_GetWParam, 2880).
--define(wxStyledTextEvent_GetLParam, 2881).
--define(wxStyledTextEvent_GetListType, 2882).
--define(wxStyledTextEvent_GetX, 2883).
--define(wxStyledTextEvent_GetY, 2884).
--define(wxStyledTextEvent_GetDragText, 2885).
--define(wxStyledTextEvent_GetDragAllowMove, 2886).
--define(wxStyledTextEvent_GetDragResult, 2887).
--define(wxStyledTextEvent_GetShift, 2888).
--define(wxStyledTextEvent_GetControl, 2889).
--define(wxStyledTextEvent_GetAlt, 2890).
--define(utils_wxGetKeyState, 2891).
--define(utils_wxGetMousePosition, 2892).
--define(utils_wxGetMouseState, 2893).
--define(utils_wxSetDetectableAutoRepeat, 2894).
--define(utils_wxBell, 2895).
--define(utils_wxFindMenuItemId, 2896).
--define(utils_wxGenericFindWindowAtPoint, 2897).
--define(utils_wxFindWindowAtPoint, 2898).
--define(utils_wxBeginBusyCursor, 2899).
--define(utils_wxEndBusyCursor, 2900).
--define(utils_wxIsBusy, 2901).
--define(utils_wxShutdown, 2902).
--define(utils_wxShell, 2903).
--define(utils_wxLaunchDefaultBrowser, 2904).
--define(utils_wxGetEmailAddress, 2905).
--define(utils_wxGetUserId, 2906).
--define(utils_wxGetHomeDir, 2907).
--define(utils_wxNewId, 2908).
--define(utils_wxRegisterId, 2909).
--define(utils_wxGetCurrentId, 2910).
--define(utils_wxGetOsDescription, 2911).
--define(utils_wxIsPlatformLittleEndian, 2912).
--define(utils_wxIsPlatform64Bit, 2913).
--define(wxPrintout_new, 2914).
--define(wxPrintout_destruct, 2915).
--define(wxPrintout_GetDC, 2916).
--define(wxPrintout_GetPageSizeMM, 2917).
--define(wxPrintout_GetPageSizePixels, 2918).
--define(wxPrintout_GetPaperRectPixels, 2919).
--define(wxPrintout_GetPPIPrinter, 2920).
--define(wxPrintout_GetPPIScreen, 2921).
--define(wxPrintout_GetTitle, 2922).
--define(wxPrintout_IsPreview, 2923).
--define(wxPrintout_FitThisSizeToPaper, 2924).
--define(wxPrintout_FitThisSizeToPage, 2925).
--define(wxPrintout_FitThisSizeToPageMargins, 2926).
--define(wxPrintout_MapScreenSizeToPaper, 2927).
--define(wxPrintout_MapScreenSizeToPage, 2928).
--define(wxPrintout_MapScreenSizeToPageMargins, 2929).
--define(wxPrintout_MapScreenSizeToDevice, 2930).
--define(wxPrintout_GetLogicalPaperRect, 2931).
--define(wxPrintout_GetLogicalPageRect, 2932).
--define(wxPrintout_GetLogicalPageMarginsRect, 2933).
--define(wxPrintout_SetLogicalOrigin, 2934).
--define(wxPrintout_OffsetLogicalOrigin, 2935).
--define(wxStyledTextCtrl_new_2, 2936).
--define(wxStyledTextCtrl_new_0, 2937).
--define(wxStyledTextCtrl_destruct, 2938).
--define(wxStyledTextCtrl_Create, 2939).
--define(wxStyledTextCtrl_AddText, 2940).
--define(wxStyledTextCtrl_AddStyledText, 2941).
--define(wxStyledTextCtrl_InsertText, 2942).
--define(wxStyledTextCtrl_ClearAll, 2943).
--define(wxStyledTextCtrl_ClearDocumentStyle, 2944).
--define(wxStyledTextCtrl_GetLength, 2945).
--define(wxStyledTextCtrl_GetCharAt, 2946).
--define(wxStyledTextCtrl_GetCurrentPos, 2947).
--define(wxStyledTextCtrl_GetAnchor, 2948).
--define(wxStyledTextCtrl_GetStyleAt, 2949).
--define(wxStyledTextCtrl_Redo, 2950).
--define(wxStyledTextCtrl_SetUndoCollection, 2951).
--define(wxStyledTextCtrl_SelectAll, 2952).
--define(wxStyledTextCtrl_SetSavePoint, 2953).
--define(wxStyledTextCtrl_GetStyledText, 2954).
--define(wxStyledTextCtrl_CanRedo, 2955).
--define(wxStyledTextCtrl_MarkerLineFromHandle, 2956).
--define(wxStyledTextCtrl_MarkerDeleteHandle, 2957).
--define(wxStyledTextCtrl_GetUndoCollection, 2958).
--define(wxStyledTextCtrl_GetViewWhiteSpace, 2959).
--define(wxStyledTextCtrl_SetViewWhiteSpace, 2960).
--define(wxStyledTextCtrl_PositionFromPoint, 2961).
--define(wxStyledTextCtrl_PositionFromPointClose, 2962).
--define(wxStyledTextCtrl_GotoLine, 2963).
--define(wxStyledTextCtrl_GotoPos, 2964).
--define(wxStyledTextCtrl_SetAnchor, 2965).
--define(wxStyledTextCtrl_GetCurLine, 2966).
--define(wxStyledTextCtrl_GetEndStyled, 2967).
--define(wxStyledTextCtrl_ConvertEOLs, 2968).
--define(wxStyledTextCtrl_GetEOLMode, 2969).
--define(wxStyledTextCtrl_SetEOLMode, 2970).
--define(wxStyledTextCtrl_StartStyling, 2971).
--define(wxStyledTextCtrl_SetStyling, 2972).
--define(wxStyledTextCtrl_GetBufferedDraw, 2973).
--define(wxStyledTextCtrl_SetBufferedDraw, 2974).
--define(wxStyledTextCtrl_SetTabWidth, 2975).
--define(wxStyledTextCtrl_GetTabWidth, 2976).
--define(wxStyledTextCtrl_SetCodePage, 2977).
--define(wxStyledTextCtrl_MarkerDefine, 2978).
--define(wxStyledTextCtrl_MarkerSetForeground, 2979).
--define(wxStyledTextCtrl_MarkerSetBackground, 2980).
--define(wxStyledTextCtrl_MarkerAdd, 2981).
--define(wxStyledTextCtrl_MarkerDelete, 2982).
--define(wxStyledTextCtrl_MarkerDeleteAll, 2983).
--define(wxStyledTextCtrl_MarkerGet, 2984).
--define(wxStyledTextCtrl_MarkerNext, 2985).
--define(wxStyledTextCtrl_MarkerPrevious, 2986).
--define(wxStyledTextCtrl_MarkerDefineBitmap, 2987).
--define(wxStyledTextCtrl_MarkerAddSet, 2988).
--define(wxStyledTextCtrl_MarkerSetAlpha, 2989).
--define(wxStyledTextCtrl_SetMarginType, 2990).
--define(wxStyledTextCtrl_GetMarginType, 2991).
--define(wxStyledTextCtrl_SetMarginWidth, 2992).
--define(wxStyledTextCtrl_GetMarginWidth, 2993).
--define(wxStyledTextCtrl_SetMarginMask, 2994).
--define(wxStyledTextCtrl_GetMarginMask, 2995).
--define(wxStyledTextCtrl_SetMarginSensitive, 2996).
--define(wxStyledTextCtrl_GetMarginSensitive, 2997).
--define(wxStyledTextCtrl_StyleClearAll, 2998).
--define(wxStyledTextCtrl_StyleSetForeground, 2999).
--define(wxStyledTextCtrl_StyleSetBackground, 3000).
--define(wxStyledTextCtrl_StyleSetBold, 3001).
--define(wxStyledTextCtrl_StyleSetItalic, 3002).
--define(wxStyledTextCtrl_StyleSetSize, 3003).
--define(wxStyledTextCtrl_StyleSetFaceName, 3004).
--define(wxStyledTextCtrl_StyleSetEOLFilled, 3005).
--define(wxStyledTextCtrl_StyleResetDefault, 3006).
--define(wxStyledTextCtrl_StyleSetUnderline, 3007).
--define(wxStyledTextCtrl_StyleSetCase, 3008).
--define(wxStyledTextCtrl_StyleSetHotSpot, 3009).
--define(wxStyledTextCtrl_SetSelForeground, 3010).
--define(wxStyledTextCtrl_SetSelBackground, 3011).
--define(wxStyledTextCtrl_GetSelAlpha, 3012).
--define(wxStyledTextCtrl_SetSelAlpha, 3013).
--define(wxStyledTextCtrl_SetCaretForeground, 3014).
--define(wxStyledTextCtrl_CmdKeyAssign, 3015).
--define(wxStyledTextCtrl_CmdKeyClear, 3016).
--define(wxStyledTextCtrl_CmdKeyClearAll, 3017).
--define(wxStyledTextCtrl_SetStyleBytes, 3018).
--define(wxStyledTextCtrl_StyleSetVisible, 3019).
--define(wxStyledTextCtrl_GetCaretPeriod, 3020).
--define(wxStyledTextCtrl_SetCaretPeriod, 3021).
--define(wxStyledTextCtrl_SetWordChars, 3022).
--define(wxStyledTextCtrl_BeginUndoAction, 3023).
--define(wxStyledTextCtrl_EndUndoAction, 3024).
--define(wxStyledTextCtrl_IndicatorSetStyle, 3025).
--define(wxStyledTextCtrl_IndicatorGetStyle, 3026).
--define(wxStyledTextCtrl_IndicatorSetForeground, 3027).
--define(wxStyledTextCtrl_IndicatorGetForeground, 3028).
--define(wxStyledTextCtrl_SetWhitespaceForeground, 3029).
--define(wxStyledTextCtrl_SetWhitespaceBackground, 3030).
--define(wxStyledTextCtrl_GetStyleBits, 3031).
--define(wxStyledTextCtrl_SetLineState, 3032).
--define(wxStyledTextCtrl_GetLineState, 3033).
--define(wxStyledTextCtrl_GetMaxLineState, 3034).
--define(wxStyledTextCtrl_GetCaretLineVisible, 3035).
--define(wxStyledTextCtrl_SetCaretLineVisible, 3036).
--define(wxStyledTextCtrl_GetCaretLineBackground, 3037).
--define(wxStyledTextCtrl_SetCaretLineBackground, 3038).
--define(wxStyledTextCtrl_AutoCompShow, 3039).
--define(wxStyledTextCtrl_AutoCompCancel, 3040).
--define(wxStyledTextCtrl_AutoCompActive, 3041).
--define(wxStyledTextCtrl_AutoCompPosStart, 3042).
--define(wxStyledTextCtrl_AutoCompComplete, 3043).
--define(wxStyledTextCtrl_AutoCompStops, 3044).
--define(wxStyledTextCtrl_AutoCompSetSeparator, 3045).
--define(wxStyledTextCtrl_AutoCompGetSeparator, 3046).
--define(wxStyledTextCtrl_AutoCompSelect, 3047).
--define(wxStyledTextCtrl_AutoCompSetCancelAtStart, 3048).
--define(wxStyledTextCtrl_AutoCompGetCancelAtStart, 3049).
--define(wxStyledTextCtrl_AutoCompSetFillUps, 3050).
--define(wxStyledTextCtrl_AutoCompSetChooseSingle, 3051).
--define(wxStyledTextCtrl_AutoCompGetChooseSingle, 3052).
--define(wxStyledTextCtrl_AutoCompSetIgnoreCase, 3053).
--define(wxStyledTextCtrl_AutoCompGetIgnoreCase, 3054).
--define(wxStyledTextCtrl_UserListShow, 3055).
--define(wxStyledTextCtrl_AutoCompSetAutoHide, 3056).
--define(wxStyledTextCtrl_AutoCompGetAutoHide, 3057).
--define(wxStyledTextCtrl_AutoCompSetDropRestOfWord, 3058).
--define(wxStyledTextCtrl_AutoCompGetDropRestOfWord, 3059).
--define(wxStyledTextCtrl_RegisterImage, 3060).
--define(wxStyledTextCtrl_ClearRegisteredImages, 3061).
--define(wxStyledTextCtrl_AutoCompGetTypeSeparator, 3062).
--define(wxStyledTextCtrl_AutoCompSetTypeSeparator, 3063).
--define(wxStyledTextCtrl_AutoCompSetMaxWidth, 3064).
--define(wxStyledTextCtrl_AutoCompGetMaxWidth, 3065).
--define(wxStyledTextCtrl_AutoCompSetMaxHeight, 3066).
--define(wxStyledTextCtrl_AutoCompGetMaxHeight, 3067).
--define(wxStyledTextCtrl_SetIndent, 3068).
--define(wxStyledTextCtrl_GetIndent, 3069).
--define(wxStyledTextCtrl_SetUseTabs, 3070).
--define(wxStyledTextCtrl_GetUseTabs, 3071).
--define(wxStyledTextCtrl_SetLineIndentation, 3072).
--define(wxStyledTextCtrl_GetLineIndentation, 3073).
--define(wxStyledTextCtrl_GetLineIndentPosition, 3074).
--define(wxStyledTextCtrl_GetColumn, 3075).
--define(wxStyledTextCtrl_SetUseHorizontalScrollBar, 3076).
--define(wxStyledTextCtrl_GetUseHorizontalScrollBar, 3077).
--define(wxStyledTextCtrl_SetIndentationGuides, 3078).
--define(wxStyledTextCtrl_GetIndentationGuides, 3079).
--define(wxStyledTextCtrl_SetHighlightGuide, 3080).
--define(wxStyledTextCtrl_GetHighlightGuide, 3081).
--define(wxStyledTextCtrl_GetLineEndPosition, 3082).
--define(wxStyledTextCtrl_GetCodePage, 3083).
--define(wxStyledTextCtrl_GetCaretForeground, 3084).
--define(wxStyledTextCtrl_GetReadOnly, 3085).
--define(wxStyledTextCtrl_SetCurrentPos, 3086).
--define(wxStyledTextCtrl_SetSelectionStart, 3087).
--define(wxStyledTextCtrl_GetSelectionStart, 3088).
--define(wxStyledTextCtrl_SetSelectionEnd, 3089).
--define(wxStyledTextCtrl_GetSelectionEnd, 3090).
--define(wxStyledTextCtrl_SetPrintMagnification, 3091).
--define(wxStyledTextCtrl_GetPrintMagnification, 3092).
--define(wxStyledTextCtrl_SetPrintColourMode, 3093).
--define(wxStyledTextCtrl_GetPrintColourMode, 3094).
--define(wxStyledTextCtrl_FindText, 3095).
--define(wxStyledTextCtrl_FormatRange, 3096).
--define(wxStyledTextCtrl_GetFirstVisibleLine, 3097).
--define(wxStyledTextCtrl_GetLine, 3098).
--define(wxStyledTextCtrl_GetLineCount, 3099).
--define(wxStyledTextCtrl_SetMarginLeft, 3100).
--define(wxStyledTextCtrl_GetMarginLeft, 3101).
--define(wxStyledTextCtrl_SetMarginRight, 3102).
--define(wxStyledTextCtrl_GetMarginRight, 3103).
--define(wxStyledTextCtrl_GetModify, 3104).
--define(wxStyledTextCtrl_SetSelection, 3105).
--define(wxStyledTextCtrl_GetSelectedText, 3106).
--define(wxStyledTextCtrl_GetTextRange, 3107).
--define(wxStyledTextCtrl_HideSelection, 3108).
--define(wxStyledTextCtrl_LineFromPosition, 3109).
--define(wxStyledTextCtrl_PositionFromLine, 3110).
--define(wxStyledTextCtrl_LineScroll, 3111).
--define(wxStyledTextCtrl_EnsureCaretVisible, 3112).
--define(wxStyledTextCtrl_ReplaceSelection, 3113).
--define(wxStyledTextCtrl_SetReadOnly, 3114).
--define(wxStyledTextCtrl_CanPaste, 3115).
--define(wxStyledTextCtrl_CanUndo, 3116).
--define(wxStyledTextCtrl_EmptyUndoBuffer, 3117).
--define(wxStyledTextCtrl_Undo, 3118).
--define(wxStyledTextCtrl_Cut, 3119).
--define(wxStyledTextCtrl_Copy, 3120).
--define(wxStyledTextCtrl_Paste, 3121).
--define(wxStyledTextCtrl_Clear, 3122).
--define(wxStyledTextCtrl_SetText, 3123).
--define(wxStyledTextCtrl_GetText, 3124).
--define(wxStyledTextCtrl_GetTextLength, 3125).
--define(wxStyledTextCtrl_GetOvertype, 3126).
--define(wxStyledTextCtrl_SetCaretWidth, 3127).
--define(wxStyledTextCtrl_GetCaretWidth, 3128).
--define(wxStyledTextCtrl_SetTargetStart, 3129).
--define(wxStyledTextCtrl_GetTargetStart, 3130).
--define(wxStyledTextCtrl_SetTargetEnd, 3131).
--define(wxStyledTextCtrl_GetTargetEnd, 3132).
--define(wxStyledTextCtrl_ReplaceTarget, 3133).
--define(wxStyledTextCtrl_SearchInTarget, 3134).
--define(wxStyledTextCtrl_SetSearchFlags, 3135).
--define(wxStyledTextCtrl_GetSearchFlags, 3136).
--define(wxStyledTextCtrl_CallTipShow, 3137).
--define(wxStyledTextCtrl_CallTipCancel, 3138).
--define(wxStyledTextCtrl_CallTipActive, 3139).
--define(wxStyledTextCtrl_CallTipPosAtStart, 3140).
--define(wxStyledTextCtrl_CallTipSetHighlight, 3141).
--define(wxStyledTextCtrl_CallTipSetBackground, 3142).
--define(wxStyledTextCtrl_CallTipSetForeground, 3143).
--define(wxStyledTextCtrl_CallTipSetForegroundHighlight, 3144).
--define(wxStyledTextCtrl_CallTipUseStyle, 3145).
--define(wxStyledTextCtrl_VisibleFromDocLine, 3146).
--define(wxStyledTextCtrl_DocLineFromVisible, 3147).
--define(wxStyledTextCtrl_WrapCount, 3148).
--define(wxStyledTextCtrl_SetFoldLevel, 3149).
--define(wxStyledTextCtrl_GetFoldLevel, 3150).
--define(wxStyledTextCtrl_GetLastChild, 3151).
--define(wxStyledTextCtrl_GetFoldParent, 3152).
--define(wxStyledTextCtrl_ShowLines, 3153).
--define(wxStyledTextCtrl_HideLines, 3154).
--define(wxStyledTextCtrl_GetLineVisible, 3155).
--define(wxStyledTextCtrl_SetFoldExpanded, 3156).
--define(wxStyledTextCtrl_GetFoldExpanded, 3157).
--define(wxStyledTextCtrl_ToggleFold, 3158).
--define(wxStyledTextCtrl_EnsureVisible, 3159).
--define(wxStyledTextCtrl_SetFoldFlags, 3160).
--define(wxStyledTextCtrl_EnsureVisibleEnforcePolicy, 3161).
--define(wxStyledTextCtrl_SetTabIndents, 3162).
--define(wxStyledTextCtrl_GetTabIndents, 3163).
--define(wxStyledTextCtrl_SetBackSpaceUnIndents, 3164).
--define(wxStyledTextCtrl_GetBackSpaceUnIndents, 3165).
--define(wxStyledTextCtrl_SetMouseDwellTime, 3166).
--define(wxStyledTextCtrl_GetMouseDwellTime, 3167).
--define(wxStyledTextCtrl_WordStartPosition, 3168).
--define(wxStyledTextCtrl_WordEndPosition, 3169).
--define(wxStyledTextCtrl_SetWrapMode, 3170).
--define(wxStyledTextCtrl_GetWrapMode, 3171).
--define(wxStyledTextCtrl_SetWrapVisualFlags, 3172).
--define(wxStyledTextCtrl_GetWrapVisualFlags, 3173).
--define(wxStyledTextCtrl_SetWrapVisualFlagsLocation, 3174).
--define(wxStyledTextCtrl_GetWrapVisualFlagsLocation, 3175).
--define(wxStyledTextCtrl_SetWrapStartIndent, 3176).
--define(wxStyledTextCtrl_GetWrapStartIndent, 3177).
--define(wxStyledTextCtrl_SetLayoutCache, 3178).
--define(wxStyledTextCtrl_GetLayoutCache, 3179).
--define(wxStyledTextCtrl_SetScrollWidth, 3180).
--define(wxStyledTextCtrl_GetScrollWidth, 3181).
--define(wxStyledTextCtrl_TextWidth, 3182).
--define(wxStyledTextCtrl_GetEndAtLastLine, 3183).
--define(wxStyledTextCtrl_TextHeight, 3184).
--define(wxStyledTextCtrl_SetUseVerticalScrollBar, 3185).
--define(wxStyledTextCtrl_GetUseVerticalScrollBar, 3186).
--define(wxStyledTextCtrl_AppendText, 3187).
--define(wxStyledTextCtrl_GetTwoPhaseDraw, 3188).
--define(wxStyledTextCtrl_SetTwoPhaseDraw, 3189).
--define(wxStyledTextCtrl_TargetFromSelection, 3190).
--define(wxStyledTextCtrl_LinesJoin, 3191).
--define(wxStyledTextCtrl_LinesSplit, 3192).
--define(wxStyledTextCtrl_SetFoldMarginColour, 3193).
--define(wxStyledTextCtrl_SetFoldMarginHiColour, 3194).
--define(wxStyledTextCtrl_LineDown, 3195).
--define(wxStyledTextCtrl_LineDownExtend, 3196).
--define(wxStyledTextCtrl_LineUp, 3197).
--define(wxStyledTextCtrl_LineUpExtend, 3198).
--define(wxStyledTextCtrl_CharLeft, 3199).
--define(wxStyledTextCtrl_CharLeftExtend, 3200).
--define(wxStyledTextCtrl_CharRight, 3201).
--define(wxStyledTextCtrl_CharRightExtend, 3202).
--define(wxStyledTextCtrl_WordLeft, 3203).
--define(wxStyledTextCtrl_WordLeftExtend, 3204).
--define(wxStyledTextCtrl_WordRight, 3205).
--define(wxStyledTextCtrl_WordRightExtend, 3206).
--define(wxStyledTextCtrl_Home, 3207).
--define(wxStyledTextCtrl_HomeExtend, 3208).
--define(wxStyledTextCtrl_LineEnd, 3209).
--define(wxStyledTextCtrl_LineEndExtend, 3210).
--define(wxStyledTextCtrl_DocumentStart, 3211).
--define(wxStyledTextCtrl_DocumentStartExtend, 3212).
--define(wxStyledTextCtrl_DocumentEnd, 3213).
--define(wxStyledTextCtrl_DocumentEndExtend, 3214).
--define(wxStyledTextCtrl_PageUp, 3215).
--define(wxStyledTextCtrl_PageUpExtend, 3216).
--define(wxStyledTextCtrl_PageDown, 3217).
--define(wxStyledTextCtrl_PageDownExtend, 3218).
--define(wxStyledTextCtrl_EditToggleOvertype, 3219).
--define(wxStyledTextCtrl_Cancel, 3220).
--define(wxStyledTextCtrl_DeleteBack, 3221).
--define(wxStyledTextCtrl_Tab, 3222).
--define(wxStyledTextCtrl_BackTab, 3223).
--define(wxStyledTextCtrl_NewLine, 3224).
--define(wxStyledTextCtrl_FormFeed, 3225).
--define(wxStyledTextCtrl_VCHome, 3226).
--define(wxStyledTextCtrl_VCHomeExtend, 3227).
--define(wxStyledTextCtrl_ZoomIn, 3228).
--define(wxStyledTextCtrl_ZoomOut, 3229).
--define(wxStyledTextCtrl_DelWordLeft, 3230).
--define(wxStyledTextCtrl_DelWordRight, 3231).
--define(wxStyledTextCtrl_LineCut, 3232).
--define(wxStyledTextCtrl_LineDelete, 3233).
--define(wxStyledTextCtrl_LineTranspose, 3234).
--define(wxStyledTextCtrl_LineDuplicate, 3235).
--define(wxStyledTextCtrl_LowerCase, 3236).
--define(wxStyledTextCtrl_UpperCase, 3237).
--define(wxStyledTextCtrl_LineScrollDown, 3238).
--define(wxStyledTextCtrl_LineScrollUp, 3239).
--define(wxStyledTextCtrl_DeleteBackNotLine, 3240).
--define(wxStyledTextCtrl_HomeDisplay, 3241).
--define(wxStyledTextCtrl_HomeDisplayExtend, 3242).
--define(wxStyledTextCtrl_LineEndDisplay, 3243).
--define(wxStyledTextCtrl_LineEndDisplayExtend, 3244).
--define(wxStyledTextCtrl_HomeWrapExtend, 3245).
--define(wxStyledTextCtrl_LineEndWrap, 3246).
--define(wxStyledTextCtrl_LineEndWrapExtend, 3247).
--define(wxStyledTextCtrl_VCHomeWrap, 3248).
--define(wxStyledTextCtrl_VCHomeWrapExtend, 3249).
--define(wxStyledTextCtrl_LineCopy, 3250).
--define(wxStyledTextCtrl_MoveCaretInsideView, 3251).
--define(wxStyledTextCtrl_LineLength, 3252).
--define(wxStyledTextCtrl_BraceHighlight, 3253).
--define(wxStyledTextCtrl_BraceBadLight, 3254).
--define(wxStyledTextCtrl_BraceMatch, 3255).
--define(wxStyledTextCtrl_GetViewEOL, 3256).
--define(wxStyledTextCtrl_SetViewEOL, 3257).
--define(wxStyledTextCtrl_SetModEventMask, 3258).
--define(wxStyledTextCtrl_GetEdgeColumn, 3259).
--define(wxStyledTextCtrl_SetEdgeColumn, 3260).
--define(wxStyledTextCtrl_GetEdgeMode, 3261).
--define(wxStyledTextCtrl_GetEdgeColour, 3262).
--define(wxStyledTextCtrl_SetEdgeColour, 3263).
--define(wxStyledTextCtrl_SearchAnchor, 3264).
--define(wxStyledTextCtrl_SearchNext, 3265).
--define(wxStyledTextCtrl_SearchPrev, 3266).
--define(wxStyledTextCtrl_LinesOnScreen, 3267).
--define(wxStyledTextCtrl_UsePopUp, 3268).
--define(wxStyledTextCtrl_SelectionIsRectangle, 3269).
--define(wxStyledTextCtrl_SetZoom, 3270).
--define(wxStyledTextCtrl_GetZoom, 3271).
--define(wxStyledTextCtrl_GetModEventMask, 3272).
--define(wxStyledTextCtrl_SetSTCFocus, 3273).
--define(wxStyledTextCtrl_GetSTCFocus, 3274).
--define(wxStyledTextCtrl_SetStatus, 3275).
--define(wxStyledTextCtrl_GetStatus, 3276).
--define(wxStyledTextCtrl_SetMouseDownCaptures, 3277).
--define(wxStyledTextCtrl_GetMouseDownCaptures, 3278).
--define(wxStyledTextCtrl_SetSTCCursor, 3279).
--define(wxStyledTextCtrl_GetSTCCursor, 3280).
--define(wxStyledTextCtrl_SetControlCharSymbol, 3281).
--define(wxStyledTextCtrl_GetControlCharSymbol, 3282).
--define(wxStyledTextCtrl_WordPartLeft, 3283).
--define(wxStyledTextCtrl_WordPartLeftExtend, 3284).
--define(wxStyledTextCtrl_WordPartRight, 3285).
--define(wxStyledTextCtrl_WordPartRightExtend, 3286).
--define(wxStyledTextCtrl_SetVisiblePolicy, 3287).
--define(wxStyledTextCtrl_DelLineLeft, 3288).
--define(wxStyledTextCtrl_DelLineRight, 3289).
--define(wxStyledTextCtrl_GetXOffset, 3290).
--define(wxStyledTextCtrl_ChooseCaretX, 3291).
--define(wxStyledTextCtrl_SetXCaretPolicy, 3292).
--define(wxStyledTextCtrl_SetYCaretPolicy, 3293).
--define(wxStyledTextCtrl_GetPrintWrapMode, 3294).
--define(wxStyledTextCtrl_SetHotspotActiveForeground, 3295).
--define(wxStyledTextCtrl_SetHotspotActiveBackground, 3296).
--define(wxStyledTextCtrl_SetHotspotActiveUnderline, 3297).
--define(wxStyledTextCtrl_SetHotspotSingleLine, 3298).
--define(wxStyledTextCtrl_ParaDownExtend, 3299).
--define(wxStyledTextCtrl_ParaUp, 3300).
--define(wxStyledTextCtrl_ParaUpExtend, 3301).
--define(wxStyledTextCtrl_PositionBefore, 3302).
--define(wxStyledTextCtrl_PositionAfter, 3303).
--define(wxStyledTextCtrl_CopyRange, 3304).
--define(wxStyledTextCtrl_CopyText, 3305).
--define(wxStyledTextCtrl_SetSelectionMode, 3306).
--define(wxStyledTextCtrl_GetSelectionMode, 3307).
--define(wxStyledTextCtrl_LineDownRectExtend, 3308).
--define(wxStyledTextCtrl_LineUpRectExtend, 3309).
--define(wxStyledTextCtrl_CharLeftRectExtend, 3310).
--define(wxStyledTextCtrl_CharRightRectExtend, 3311).
--define(wxStyledTextCtrl_HomeRectExtend, 3312).
--define(wxStyledTextCtrl_VCHomeRectExtend, 3313).
--define(wxStyledTextCtrl_LineEndRectExtend, 3314).
--define(wxStyledTextCtrl_PageUpRectExtend, 3315).
--define(wxStyledTextCtrl_PageDownRectExtend, 3316).
--define(wxStyledTextCtrl_StutteredPageUp, 3317).
--define(wxStyledTextCtrl_StutteredPageUpExtend, 3318).
--define(wxStyledTextCtrl_StutteredPageDown, 3319).
--define(wxStyledTextCtrl_StutteredPageDownExtend, 3320).
--define(wxStyledTextCtrl_WordLeftEnd, 3321).
--define(wxStyledTextCtrl_WordLeftEndExtend, 3322).
--define(wxStyledTextCtrl_WordRightEnd, 3323).
--define(wxStyledTextCtrl_WordRightEndExtend, 3324).
--define(wxStyledTextCtrl_SetWhitespaceChars, 3325).
--define(wxStyledTextCtrl_SetCharsDefault, 3326).
--define(wxStyledTextCtrl_AutoCompGetCurrent, 3327).
--define(wxStyledTextCtrl_Allocate, 3328).
--define(wxStyledTextCtrl_FindColumn, 3329).
--define(wxStyledTextCtrl_GetCaretSticky, 3330).
--define(wxStyledTextCtrl_SetCaretSticky, 3331).
--define(wxStyledTextCtrl_ToggleCaretSticky, 3332).
--define(wxStyledTextCtrl_SetPasteConvertEndings, 3333).
--define(wxStyledTextCtrl_GetPasteConvertEndings, 3334).
--define(wxStyledTextCtrl_SelectionDuplicate, 3335).
--define(wxStyledTextCtrl_SetCaretLineBackAlpha, 3336).
--define(wxStyledTextCtrl_GetCaretLineBackAlpha, 3337).
--define(wxStyledTextCtrl_StartRecord, 3338).
--define(wxStyledTextCtrl_StopRecord, 3339).
--define(wxStyledTextCtrl_SetLexer, 3340).
--define(wxStyledTextCtrl_GetLexer, 3341).
--define(wxStyledTextCtrl_Colourise, 3342).
--define(wxStyledTextCtrl_SetProperty, 3343).
--define(wxStyledTextCtrl_SetKeyWords, 3344).
--define(wxStyledTextCtrl_SetLexerLanguage, 3345).
--define(wxStyledTextCtrl_GetProperty, 3346).
--define(wxStyledTextCtrl_GetStyleBitsNeeded, 3347).
--define(wxStyledTextCtrl_GetCurrentLine, 3348).
--define(wxStyledTextCtrl_StyleSetSpec, 3349).
--define(wxStyledTextCtrl_StyleSetFont, 3350).
--define(wxStyledTextCtrl_StyleSetFontAttr, 3351).
--define(wxStyledTextCtrl_StyleSetCharacterSet, 3352).
--define(wxStyledTextCtrl_StyleSetFontEncoding, 3353).
--define(wxStyledTextCtrl_CmdKeyExecute, 3354).
--define(wxStyledTextCtrl_SetMargins, 3355).
--define(wxStyledTextCtrl_GetSelection, 3356).
--define(wxStyledTextCtrl_PointFromPosition, 3357).
--define(wxStyledTextCtrl_ScrollToLine, 3358).
--define(wxStyledTextCtrl_ScrollToColumn, 3359).
--define(wxStyledTextCtrl_SendMsg, 3360).
--define(wxStyledTextCtrl_SetVScrollBar, 3361).
--define(wxStyledTextCtrl_SetHScrollBar, 3362).
--define(wxStyledTextCtrl_GetLastKeydownProcessed, 3363).
--define(wxStyledTextCtrl_SetLastKeydownProcessed, 3364).
--define(wxStyledTextCtrl_SaveFile, 3365).
--define(wxStyledTextCtrl_LoadFile, 3366).
--define(wxStyledTextCtrl_DoDragOver, 3367).
--define(wxStyledTextCtrl_DoDropText, 3368).
--define(wxStyledTextCtrl_GetUseAntiAliasing, 3369).
--define(wxStyledTextCtrl_AddTextRaw, 3370).
--define(wxStyledTextCtrl_InsertTextRaw, 3371).
--define(wxStyledTextCtrl_GetCurLineRaw, 3372).
--define(wxStyledTextCtrl_GetLineRaw, 3373).
--define(wxStyledTextCtrl_GetSelectedTextRaw, 3374).
--define(wxStyledTextCtrl_GetTextRangeRaw, 3375).
--define(wxStyledTextCtrl_SetTextRaw, 3376).
--define(wxStyledTextCtrl_GetTextRaw, 3377).
--define(wxStyledTextCtrl_AppendTextRaw, 3378).
--define(wxArtProvider_GetBitmap, 3379).
--define(wxArtProvider_GetIcon, 3380).
--define(wxTreeEvent_GetKeyCode, 3381).
--define(wxTreeEvent_GetItem, 3382).
--define(wxTreeEvent_GetKeyEvent, 3383).
--define(wxTreeEvent_GetLabel, 3384).
--define(wxTreeEvent_GetOldItem, 3385).
--define(wxTreeEvent_GetPoint, 3386).
--define(wxTreeEvent_IsEditCancelled, 3387).
--define(wxTreeEvent_SetToolTip, 3388).
--define(wxNotebookEvent_GetOldSelection, 3389).
--define(wxNotebookEvent_GetSelection, 3390).
--define(wxNotebookEvent_SetOldSelection, 3391).
--define(wxNotebookEvent_SetSelection, 3392).
--define(wxFileDataObject_new, 3393).
--define(wxFileDataObject_AddFile, 3394).
--define(wxFileDataObject_GetFilenames, 3395).
--define(wxFileDataObject_destroy, 3396).
--define(wxTextDataObject_new, 3397).
--define(wxTextDataObject_GetTextLength, 3398).
--define(wxTextDataObject_GetText, 3399).
--define(wxTextDataObject_SetText, 3400).
--define(wxTextDataObject_destroy, 3401).
--define(wxBitmapDataObject_new_1_1, 3402).
--define(wxBitmapDataObject_new_1_0, 3403).
--define(wxBitmapDataObject_GetBitmap, 3404).
--define(wxBitmapDataObject_SetBitmap, 3405).
--define(wxBitmapDataObject_destroy, 3406).
--define(wxClipboard_new, 3408).
--define(wxClipboard_destruct, 3409).
--define(wxClipboard_AddData, 3410).
--define(wxClipboard_Clear, 3411).
--define(wxClipboard_Close, 3412).
--define(wxClipboard_Flush, 3413).
--define(wxClipboard_GetData, 3414).
--define(wxClipboard_IsOpened, 3415).
--define(wxClipboard_Open, 3416).
--define(wxClipboard_SetData, 3417).
--define(wxClipboard_UsePrimarySelection, 3419).
--define(wxClipboard_IsSupported, 3420).
--define(wxClipboard_Get, 3421).
--define(wxSpinEvent_GetPosition, 3422).
--define(wxSpinEvent_SetPosition, 3423).
--define(wxSplitterWindow_new_0, 3424).
--define(wxSplitterWindow_new_2, 3425).
--define(wxSplitterWindow_destruct, 3426).
--define(wxSplitterWindow_Create, 3427).
--define(wxSplitterWindow_GetMinimumPaneSize, 3428).
--define(wxSplitterWindow_GetSashGravity, 3429).
--define(wxSplitterWindow_GetSashPosition, 3430).
--define(wxSplitterWindow_GetSplitMode, 3431).
--define(wxSplitterWindow_GetWindow1, 3432).
--define(wxSplitterWindow_GetWindow2, 3433).
--define(wxSplitterWindow_Initialize, 3434).
--define(wxSplitterWindow_IsSplit, 3435).
--define(wxSplitterWindow_ReplaceWindow, 3436).
--define(wxSplitterWindow_SetSashGravity, 3437).
--define(wxSplitterWindow_SetSashPosition, 3438).
--define(wxSplitterWindow_SetSashSize, 3439).
--define(wxSplitterWindow_SetMinimumPaneSize, 3440).
--define(wxSplitterWindow_SetSplitMode, 3441).
--define(wxSplitterWindow_SplitHorizontally, 3442).
--define(wxSplitterWindow_SplitVertically, 3443).
--define(wxSplitterWindow_Unsplit, 3444).
--define(wxSplitterWindow_UpdateSize, 3445).
--define(wxSplitterEvent_GetSashPosition, 3446).
--define(wxSplitterEvent_GetX, 3447).
--define(wxSplitterEvent_GetY, 3448).
--define(wxSplitterEvent_GetWindowBeingRemoved, 3449).
--define(wxSplitterEvent_SetSashPosition, 3450).
--define(wxHtmlWindow_new_0, 3451).
--define(wxHtmlWindow_new_2, 3452).
--define(wxHtmlWindow_AppendToPage, 3453).
--define(wxHtmlWindow_GetOpenedAnchor, 3454).
--define(wxHtmlWindow_GetOpenedPage, 3455).
--define(wxHtmlWindow_GetOpenedPageTitle, 3456).
--define(wxHtmlWindow_GetRelatedFrame, 3457).
--define(wxHtmlWindow_HistoryBack, 3458).
--define(wxHtmlWindow_HistoryCanBack, 3459).
--define(wxHtmlWindow_HistoryCanForward, 3460).
--define(wxHtmlWindow_HistoryClear, 3461).
--define(wxHtmlWindow_HistoryForward, 3462).
--define(wxHtmlWindow_LoadFile, 3463).
--define(wxHtmlWindow_LoadPage, 3464).
--define(wxHtmlWindow_SelectAll, 3465).
--define(wxHtmlWindow_SelectionToText, 3466).
--define(wxHtmlWindow_SelectLine, 3467).
--define(wxHtmlWindow_SelectWord, 3468).
--define(wxHtmlWindow_SetBorders, 3469).
--define(wxHtmlWindow_SetFonts, 3470).
--define(wxHtmlWindow_SetPage, 3471).
--define(wxHtmlWindow_SetRelatedFrame, 3472).
--define(wxHtmlWindow_SetRelatedStatusBar, 3473).
--define(wxHtmlWindow_ToText, 3474).
--define(wxHtmlWindow_destroy, 3475).
--define(wxHtmlLinkEvent_GetLinkInfo, 3476).
--define(wxAuiNotebookEvent_SetSelection, 3477).
--define(wxAuiNotebookEvent_GetSelection, 3478).
--define(wxAuiNotebookEvent_SetOldSelection, 3479).
--define(wxAuiNotebookEvent_GetOldSelection, 3480).
--define(wxAuiNotebookEvent_SetDragSource, 3481).
--define(wxAuiNotebookEvent_GetDragSource, 3482).
--define(wxAuiManagerEvent_SetManager, 3483).
--define(wxAuiManagerEvent_GetManager, 3484).
--define(wxAuiManagerEvent_SetPane, 3485).
--define(wxAuiManagerEvent_GetPane, 3486).
--define(wxAuiManagerEvent_SetButton, 3487).
--define(wxAuiManagerEvent_GetButton, 3488).
--define(wxAuiManagerEvent_SetDC, 3489).
--define(wxAuiManagerEvent_GetDC, 3490).
--define(wxAuiManagerEvent_Veto, 3491).
--define(wxAuiManagerEvent_GetVeto, 3492).
--define(wxAuiManagerEvent_SetCanVeto, 3493).
--define(wxAuiManagerEvent_CanVeto, 3494).
--define(wxLogNull_new, 3495).
--define(wxLogNull_destroy, 3496).
+-define(wxControlWithItems_getClientData, 885).
+-define(wxControlWithItems_setClientData, 886).
+-define(wxControlWithItems_GetCount, 887).
+-define(wxControlWithItems_GetSelection, 888).
+-define(wxControlWithItems_GetString, 889).
+-define(wxControlWithItems_GetStringSelection, 890).
+-define(wxControlWithItems_Insert_2, 891).
+-define(wxControlWithItems_Insert_3, 892).
+-define(wxControlWithItems_IsEmpty, 893).
+-define(wxControlWithItems_Select, 894).
+-define(wxControlWithItems_SetSelection, 895).
+-define(wxControlWithItems_SetString, 896).
+-define(wxControlWithItems_SetStringSelection, 897).
+-define(wxMenu_new_2, 900).
+-define(wxMenu_new_1, 901).
+-define(wxMenu_destruct, 903).
+-define(wxMenu_Append_3, 904).
+-define(wxMenu_Append_1, 905).
+-define(wxMenu_Append_4_0, 906).
+-define(wxMenu_Append_4_1, 907).
+-define(wxMenu_AppendCheckItem, 908).
+-define(wxMenu_AppendRadioItem, 909).
+-define(wxMenu_AppendSeparator, 910).
+-define(wxMenu_Break, 911).
+-define(wxMenu_Check, 912).
+-define(wxMenu_Delete_1_0, 913).
+-define(wxMenu_Delete_1_1, 914).
+-define(wxMenu_Destroy_1_0, 915).
+-define(wxMenu_Destroy_1_1, 916).
+-define(wxMenu_Enable, 917).
+-define(wxMenu_FindItem_1, 918).
+-define(wxMenu_FindItem_2, 919).
+-define(wxMenu_FindItemByPosition, 920).
+-define(wxMenu_GetHelpString, 921).
+-define(wxMenu_GetLabel, 922).
+-define(wxMenu_GetMenuItemCount, 923).
+-define(wxMenu_GetMenuItems, 924).
+-define(wxMenu_GetTitle, 926).
+-define(wxMenu_Insert_2, 927).
+-define(wxMenu_Insert_3, 928).
+-define(wxMenu_Insert_5_1, 929).
+-define(wxMenu_Insert_5_0, 930).
+-define(wxMenu_InsertCheckItem, 931).
+-define(wxMenu_InsertRadioItem, 932).
+-define(wxMenu_InsertSeparator, 933).
+-define(wxMenu_IsChecked, 934).
+-define(wxMenu_IsEnabled, 935).
+-define(wxMenu_Prepend_1, 936).
+-define(wxMenu_Prepend_2, 937).
+-define(wxMenu_Prepend_4_1, 938).
+-define(wxMenu_Prepend_4_0, 939).
+-define(wxMenu_PrependCheckItem, 940).
+-define(wxMenu_PrependRadioItem, 941).
+-define(wxMenu_PrependSeparator, 942).
+-define(wxMenu_Remove_1_0, 943).
+-define(wxMenu_Remove_1_1, 944).
+-define(wxMenu_SetHelpString, 945).
+-define(wxMenu_SetLabel, 946).
+-define(wxMenu_SetTitle, 947).
+-define(wxMenuItem_new, 948).
+-define(wxMenuItem_destruct, 950).
+-define(wxMenuItem_Check, 951).
+-define(wxMenuItem_Enable, 952).
+-define(wxMenuItem_GetBitmap, 953).
+-define(wxMenuItem_GetHelp, 954).
+-define(wxMenuItem_GetId, 955).
+-define(wxMenuItem_GetKind, 956).
+-define(wxMenuItem_GetLabel, 957).
+-define(wxMenuItem_GetLabelFromText, 958).
+-define(wxMenuItem_GetMenu, 959).
+-define(wxMenuItem_GetText, 960).
+-define(wxMenuItem_GetSubMenu, 961).
+-define(wxMenuItem_IsCheckable, 962).
+-define(wxMenuItem_IsChecked, 963).
+-define(wxMenuItem_IsEnabled, 964).
+-define(wxMenuItem_IsSeparator, 965).
+-define(wxMenuItem_IsSubMenu, 966).
+-define(wxMenuItem_SetBitmap, 967).
+-define(wxMenuItem_SetHelp, 968).
+-define(wxMenuItem_SetMenu, 969).
+-define(wxMenuItem_SetSubMenu, 970).
+-define(wxMenuItem_SetText, 971).
+-define(wxToolBar_AddControl, 972).
+-define(wxToolBar_AddSeparator, 973).
+-define(wxToolBar_AddTool_5, 974).
+-define(wxToolBar_AddTool_4_0, 975).
+-define(wxToolBar_AddTool_1, 976).
+-define(wxToolBar_AddTool_4_1, 977).
+-define(wxToolBar_AddTool_3, 978).
+-define(wxToolBar_AddTool_6, 979).
+-define(wxToolBar_AddCheckTool, 980).
+-define(wxToolBar_AddRadioTool, 981).
+-define(wxToolBar_DeleteTool, 982).
+-define(wxToolBar_DeleteToolByPos, 983).
+-define(wxToolBar_EnableTool, 984).
+-define(wxToolBar_FindById, 985).
+-define(wxToolBar_FindControl, 986).
+-define(wxToolBar_FindToolForPosition, 987).
+-define(wxToolBar_GetToolSize, 988).
+-define(wxToolBar_GetToolBitmapSize, 989).
+-define(wxToolBar_GetMargins, 990).
+-define(wxToolBar_GetToolEnabled, 991).
+-define(wxToolBar_GetToolLongHelp, 992).
+-define(wxToolBar_GetToolPacking, 993).
+-define(wxToolBar_GetToolPos, 994).
+-define(wxToolBar_GetToolSeparation, 995).
+-define(wxToolBar_GetToolShortHelp, 996).
+-define(wxToolBar_GetToolState, 997).
+-define(wxToolBar_InsertControl, 998).
+-define(wxToolBar_InsertSeparator, 999).
+-define(wxToolBar_InsertTool_5, 1000).
+-define(wxToolBar_InsertTool_2, 1001).
+-define(wxToolBar_InsertTool_4, 1002).
+-define(wxToolBar_Realize, 1003).
+-define(wxToolBar_RemoveTool, 1004).
+-define(wxToolBar_SetMargins, 1005).
+-define(wxToolBar_SetToolBitmapSize, 1006).
+-define(wxToolBar_SetToolLongHelp, 1007).
+-define(wxToolBar_SetToolPacking, 1008).
+-define(wxToolBar_SetToolShortHelp, 1009).
+-define(wxToolBar_SetToolSeparation, 1010).
+-define(wxToolBar_ToggleTool, 1011).
+-define(wxStatusBar_new_0, 1013).
+-define(wxStatusBar_new_2, 1014).
+-define(wxStatusBar_destruct, 1016).
+-define(wxStatusBar_Create, 1017).
+-define(wxStatusBar_GetFieldRect, 1018).
+-define(wxStatusBar_GetFieldsCount, 1019).
+-define(wxStatusBar_GetStatusText, 1020).
+-define(wxStatusBar_PopStatusText, 1021).
+-define(wxStatusBar_PushStatusText, 1022).
+-define(wxStatusBar_SetFieldsCount, 1023).
+-define(wxStatusBar_SetMinHeight, 1024).
+-define(wxStatusBar_SetStatusText, 1025).
+-define(wxStatusBar_SetStatusWidths, 1026).
+-define(wxStatusBar_SetStatusStyles, 1027).
+-define(wxBitmap_new_0, 1028).
+-define(wxBitmap_new_3, 1029).
+-define(wxBitmap_new_4, 1030).
+-define(wxBitmap_new_2_0, 1031).
+-define(wxBitmap_new_2_1, 1032).
+-define(wxBitmap_destruct, 1033).
+-define(wxBitmap_ConvertToImage, 1034).
+-define(wxBitmap_CopyFromIcon, 1035).
+-define(wxBitmap_Create, 1036).
+-define(wxBitmap_GetDepth, 1037).
+-define(wxBitmap_GetHeight, 1038).
+-define(wxBitmap_GetPalette, 1039).
+-define(wxBitmap_GetMask, 1040).
+-define(wxBitmap_GetWidth, 1041).
+-define(wxBitmap_GetSubBitmap, 1042).
+-define(wxBitmap_LoadFile, 1043).
+-define(wxBitmap_Ok, 1044).
+-define(wxBitmap_SaveFile, 1045).
+-define(wxBitmap_SetDepth, 1046).
+-define(wxBitmap_SetHeight, 1047).
+-define(wxBitmap_SetMask, 1048).
+-define(wxBitmap_SetPalette, 1049).
+-define(wxBitmap_SetWidth, 1050).
+-define(wxIcon_new_0, 1051).
+-define(wxIcon_new_2, 1052).
+-define(wxIcon_new_1, 1053).
+-define(wxIcon_CopyFromBitmap, 1054).
+-define(wxIcon_destroy, 1055).
+-define(wxIconBundle_new_0, 1056).
+-define(wxIconBundle_new_2, 1057).
+-define(wxIconBundle_new_1_0, 1058).
+-define(wxIconBundle_new_1_1, 1059).
+-define(wxIconBundle_destruct, 1060).
+-define(wxIconBundle_AddIcon_2, 1061).
+-define(wxIconBundle_AddIcon_1, 1062).
+-define(wxIconBundle_GetIcon_1_1, 1063).
+-define(wxIconBundle_GetIcon_1_0, 1064).
+-define(wxCursor_new_0, 1065).
+-define(wxCursor_new_1_0, 1066).
+-define(wxCursor_new_1_1, 1067).
+-define(wxCursor_new_4, 1068).
+-define(wxCursor_destruct, 1069).
+-define(wxCursor_Ok, 1070).
+-define(wxMask_new_0, 1071).
+-define(wxMask_new_2_1, 1072).
+-define(wxMask_new_2_0, 1073).
+-define(wxMask_new_1, 1074).
+-define(wxMask_destruct, 1075).
+-define(wxMask_Create_2_1, 1076).
+-define(wxMask_Create_2_0, 1077).
+-define(wxMask_Create_1, 1078).
+-define(wxImage_new_0, 1079).
+-define(wxImage_new_3_0, 1080).
+-define(wxImage_new_4, 1081).
+-define(wxImage_new_5, 1082).
+-define(wxImage_new_2, 1083).
+-define(wxImage_new_3_1, 1084).
+-define(wxImage_Blur, 1085).
+-define(wxImage_BlurHorizontal, 1086).
+-define(wxImage_BlurVertical, 1087).
+-define(wxImage_ConvertAlphaToMask, 1088).
+-define(wxImage_ConvertToGreyscale, 1089).
+-define(wxImage_ConvertToMono, 1090).
+-define(wxImage_Copy, 1091).
+-define(wxImage_Create_3, 1092).
+-define(wxImage_Create_4, 1093).
+-define(wxImage_Create_5, 1094).
+-define(wxImage_Destroy, 1095).
+-define(wxImage_FindFirstUnusedColour, 1096).
+-define(wxImage_GetImageExtWildcard, 1097).
+-define(wxImage_GetAlpha_2, 1098).
+-define(wxImage_GetAlpha_0, 1099).
+-define(wxImage_GetBlue, 1100).
+-define(wxImage_GetData, 1101).
+-define(wxImage_GetGreen, 1102).
+-define(wxImage_GetImageCount, 1103).
+-define(wxImage_GetHeight, 1104).
+-define(wxImage_GetMaskBlue, 1105).
+-define(wxImage_GetMaskGreen, 1106).
+-define(wxImage_GetMaskRed, 1107).
+-define(wxImage_GetOrFindMaskColour, 1108).
+-define(wxImage_GetPalette, 1109).
+-define(wxImage_GetRed, 1110).
+-define(wxImage_GetSubImage, 1111).
+-define(wxImage_GetWidth, 1112).
+-define(wxImage_HasAlpha, 1113).
+-define(wxImage_HasMask, 1114).
+-define(wxImage_GetOption, 1115).
+-define(wxImage_GetOptionInt, 1116).
+-define(wxImage_HasOption, 1117).
+-define(wxImage_InitAlpha, 1118).
+-define(wxImage_InitStandardHandlers, 1119).
+-define(wxImage_IsTransparent, 1120).
+-define(wxImage_LoadFile_2, 1121).
+-define(wxImage_LoadFile_3, 1122).
+-define(wxImage_Ok, 1123).
+-define(wxImage_RemoveHandler, 1124).
+-define(wxImage_Mirror, 1125).
+-define(wxImage_Replace, 1126).
+-define(wxImage_Rescale, 1127).
+-define(wxImage_Resize, 1128).
+-define(wxImage_Rotate, 1129).
+-define(wxImage_RotateHue, 1130).
+-define(wxImage_Rotate90, 1131).
+-define(wxImage_SaveFile_1, 1132).
+-define(wxImage_SaveFile_2_0, 1133).
+-define(wxImage_SaveFile_2_1, 1134).
+-define(wxImage_Scale, 1135).
+-define(wxImage_Size, 1136).
+-define(wxImage_SetAlpha_3, 1137).
+-define(wxImage_SetAlpha_2, 1138).
+-define(wxImage_SetData_2, 1139).
+-define(wxImage_SetData_4, 1140).
+-define(wxImage_SetMask, 1141).
+-define(wxImage_SetMaskColour, 1142).
+-define(wxImage_SetMaskFromImage, 1143).
+-define(wxImage_SetOption_2_1, 1144).
+-define(wxImage_SetOption_2_0, 1145).
+-define(wxImage_SetPalette, 1146).
+-define(wxImage_SetRGB_5, 1147).
+-define(wxImage_SetRGB_4, 1148).
+-define(wxImage_destroy, 1149).
+-define(wxBrush_new_0, 1150).
+-define(wxBrush_new_2, 1151).
+-define(wxBrush_new_1, 1152).
+-define(wxBrush_destruct, 1154).
+-define(wxBrush_GetColour, 1155).
+-define(wxBrush_GetStipple, 1156).
+-define(wxBrush_GetStyle, 1157).
+-define(wxBrush_IsHatch, 1158).
+-define(wxBrush_IsOk, 1159).
+-define(wxBrush_SetColour_1, 1160).
+-define(wxBrush_SetColour_3, 1161).
+-define(wxBrush_SetStipple, 1162).
+-define(wxBrush_SetStyle, 1163).
+-define(wxPen_new_0, 1164).
+-define(wxPen_new_2, 1165).
+-define(wxPen_destruct, 1166).
+-define(wxPen_GetCap, 1167).
+-define(wxPen_GetColour, 1168).
+-define(wxPen_GetJoin, 1169).
+-define(wxPen_GetStyle, 1170).
+-define(wxPen_GetWidth, 1171).
+-define(wxPen_IsOk, 1172).
+-define(wxPen_SetCap, 1173).
+-define(wxPen_SetColour_1, 1174).
+-define(wxPen_SetColour_3, 1175).
+-define(wxPen_SetJoin, 1176).
+-define(wxPen_SetStyle, 1177).
+-define(wxPen_SetWidth, 1178).
+-define(wxRegion_new_0, 1179).
+-define(wxRegion_new_4, 1180).
+-define(wxRegion_new_2, 1181).
+-define(wxRegion_new_1_1, 1182).
+-define(wxRegion_new_1_0, 1184).
+-define(wxRegion_destruct, 1186).
+-define(wxRegion_Clear, 1187).
+-define(wxRegion_Contains_2, 1188).
+-define(wxRegion_Contains_1_0, 1189).
+-define(wxRegion_Contains_4, 1190).
+-define(wxRegion_Contains_1_1, 1191).
+-define(wxRegion_ConvertToBitmap, 1192).
+-define(wxRegion_GetBox, 1193).
+-define(wxRegion_Intersect_4, 1194).
+-define(wxRegion_Intersect_1_1, 1195).
+-define(wxRegion_Intersect_1_0, 1196).
+-define(wxRegion_IsEmpty, 1197).
+-define(wxRegion_Subtract_4, 1198).
+-define(wxRegion_Subtract_1_1, 1199).
+-define(wxRegion_Subtract_1_0, 1200).
+-define(wxRegion_Offset_2, 1201).
+-define(wxRegion_Offset_1, 1202).
+-define(wxRegion_Union_4, 1203).
+-define(wxRegion_Union_1_2, 1204).
+-define(wxRegion_Union_1_1, 1205).
+-define(wxRegion_Union_1_0, 1206).
+-define(wxRegion_Union_3, 1207).
+-define(wxRegion_Xor_4, 1208).
+-define(wxRegion_Xor_1_1, 1209).
+-define(wxRegion_Xor_1_0, 1210).
+-define(wxAcceleratorTable_new_0, 1211).
+-define(wxAcceleratorTable_new_2, 1212).
+-define(wxAcceleratorTable_destruct, 1213).
+-define(wxAcceleratorTable_Ok, 1214).
+-define(wxAcceleratorEntry_new_1_0, 1215).
+-define(wxAcceleratorEntry_new_1_1, 1216).
+-define(wxAcceleratorEntry_GetCommand, 1217).
+-define(wxAcceleratorEntry_GetFlags, 1218).
+-define(wxAcceleratorEntry_GetKeyCode, 1219).
+-define(wxAcceleratorEntry_Set, 1220).
+-define(wxAcceleratorEntry_destroy, 1221).
+-define(wxCaret_new_3, 1226).
+-define(wxCaret_new_2, 1227).
+-define(wxCaret_destruct, 1229).
+-define(wxCaret_Create_3, 1230).
+-define(wxCaret_Create_2, 1231).
+-define(wxCaret_GetBlinkTime, 1232).
+-define(wxCaret_GetPosition, 1234).
+-define(wxCaret_GetSize, 1236).
+-define(wxCaret_GetWindow, 1237).
+-define(wxCaret_Hide, 1238).
+-define(wxCaret_IsOk, 1239).
+-define(wxCaret_IsVisible, 1240).
+-define(wxCaret_Move_2, 1241).
+-define(wxCaret_Move_1, 1242).
+-define(wxCaret_SetBlinkTime, 1243).
+-define(wxCaret_SetSize_2, 1244).
+-define(wxCaret_SetSize_1, 1245).
+-define(wxCaret_Show, 1246).
+-define(wxSizer_Add_2_1, 1247).
+-define(wxSizer_Add_2_0, 1248).
+-define(wxSizer_Add_3, 1249).
+-define(wxSizer_Add_2_3, 1250).
+-define(wxSizer_Add_2_2, 1251).
+-define(wxSizer_AddSpacer, 1252).
+-define(wxSizer_AddStretchSpacer, 1253).
+-define(wxSizer_CalcMin, 1254).
+-define(wxSizer_Clear, 1255).
+-define(wxSizer_Detach_1_2, 1256).
+-define(wxSizer_Detach_1_1, 1257).
+-define(wxSizer_Detach_1_0, 1258).
+-define(wxSizer_Fit, 1259).
+-define(wxSizer_FitInside, 1260).
+-define(wxSizer_GetChildren, 1261).
+-define(wxSizer_GetItem_2_1, 1262).
+-define(wxSizer_GetItem_2_0, 1263).
+-define(wxSizer_GetItem_1, 1264).
+-define(wxSizer_GetSize, 1265).
+-define(wxSizer_GetPosition, 1266).
+-define(wxSizer_GetMinSize, 1267).
+-define(wxSizer_Hide_2_0, 1268).
+-define(wxSizer_Hide_2_1, 1269).
+-define(wxSizer_Hide_1, 1270).
+-define(wxSizer_Insert_3_1, 1271).
+-define(wxSizer_Insert_3_0, 1272).
+-define(wxSizer_Insert_4, 1273).
+-define(wxSizer_Insert_3_3, 1274).
+-define(wxSizer_Insert_3_2, 1275).
+-define(wxSizer_Insert_2, 1276).
+-define(wxSizer_InsertSpacer, 1277).
+-define(wxSizer_InsertStretchSpacer, 1278).
+-define(wxSizer_IsShown_1_2, 1279).
+-define(wxSizer_IsShown_1_1, 1280).
+-define(wxSizer_IsShown_1_0, 1281).
+-define(wxSizer_Layout, 1282).
+-define(wxSizer_Prepend_2_1, 1283).
+-define(wxSizer_Prepend_2_0, 1284).
+-define(wxSizer_Prepend_3, 1285).
+-define(wxSizer_Prepend_2_3, 1286).
+-define(wxSizer_Prepend_2_2, 1287).
+-define(wxSizer_Prepend_1, 1288).
+-define(wxSizer_PrependSpacer, 1289).
+-define(wxSizer_PrependStretchSpacer, 1290).
+-define(wxSizer_RecalcSizes, 1291).
+-define(wxSizer_Remove_1_1, 1292).
+-define(wxSizer_Remove_1_0, 1293).
+-define(wxSizer_Replace_3_1, 1294).
+-define(wxSizer_Replace_3_0, 1295).
+-define(wxSizer_Replace_2, 1296).
+-define(wxSizer_SetDimension, 1297).
+-define(wxSizer_SetMinSize_2, 1298).
+-define(wxSizer_SetMinSize_1, 1299).
+-define(wxSizer_SetItemMinSize_3_2, 1300).
+-define(wxSizer_SetItemMinSize_2_2, 1301).
+-define(wxSizer_SetItemMinSize_3_1, 1302).
+-define(wxSizer_SetItemMinSize_2_1, 1303).
+-define(wxSizer_SetItemMinSize_3_0, 1304).
+-define(wxSizer_SetItemMinSize_2_0, 1305).
+-define(wxSizer_SetSizeHints, 1306).
+-define(wxSizer_SetVirtualSizeHints, 1307).
+-define(wxSizer_Show_2_2, 1308).
+-define(wxSizer_Show_2_1, 1309).
+-define(wxSizer_Show_2_0, 1310).
+-define(wxSizer_Show_1, 1311).
+-define(wxSizerFlags_new, 1312).
+-define(wxSizerFlags_Align, 1313).
+-define(wxSizerFlags_Border_2, 1314).
+-define(wxSizerFlags_Border_1, 1315).
+-define(wxSizerFlags_Center, 1316).
+-define(wxSizerFlags_Centre, 1317).
+-define(wxSizerFlags_Expand, 1318).
+-define(wxSizerFlags_Left, 1319).
+-define(wxSizerFlags_Proportion, 1320).
+-define(wxSizerFlags_Right, 1321).
+-define(wxSizerFlags_destroy, 1322).
+-define(wxSizerItem_new_5_1, 1323).
+-define(wxSizerItem_new_2_1, 1324).
+-define(wxSizerItem_new_5_0, 1325).
+-define(wxSizerItem_new_2_0, 1326).
+-define(wxSizerItem_new_6, 1327).
+-define(wxSizerItem_new_3, 1328).
+-define(wxSizerItem_new_0, 1329).
+-define(wxSizerItem_destruct, 1330).
+-define(wxSizerItem_CalcMin, 1331).
+-define(wxSizerItem_DeleteWindows, 1332).
+-define(wxSizerItem_DetachSizer, 1333).
+-define(wxSizerItem_GetBorder, 1334).
+-define(wxSizerItem_GetFlag, 1335).
+-define(wxSizerItem_GetMinSize, 1336).
+-define(wxSizerItem_GetPosition, 1337).
+-define(wxSizerItem_GetProportion, 1338).
+-define(wxSizerItem_GetRatio, 1339).
+-define(wxSizerItem_GetRect, 1340).
+-define(wxSizerItem_GetSize, 1341).
+-define(wxSizerItem_GetSizer, 1342).
+-define(wxSizerItem_GetSpacer, 1343).
+-define(wxSizerItem_GetUserData, 1344).
+-define(wxSizerItem_GetWindow, 1345).
+-define(wxSizerItem_IsSizer, 1346).
+-define(wxSizerItem_IsShown, 1347).
+-define(wxSizerItem_IsSpacer, 1348).
+-define(wxSizerItem_IsWindow, 1349).
+-define(wxSizerItem_SetBorder, 1350).
+-define(wxSizerItem_SetDimension, 1351).
+-define(wxSizerItem_SetFlag, 1352).
+-define(wxSizerItem_SetInitSize, 1353).
+-define(wxSizerItem_SetMinSize_1, 1354).
+-define(wxSizerItem_SetMinSize_2, 1355).
+-define(wxSizerItem_SetProportion, 1356).
+-define(wxSizerItem_SetRatio_2, 1357).
+-define(wxSizerItem_SetRatio_1_1, 1358).
+-define(wxSizerItem_SetRatio_1_0, 1359).
+-define(wxSizerItem_SetSizer, 1360).
+-define(wxSizerItem_SetSpacer_1, 1361).
+-define(wxSizerItem_SetSpacer_2, 1362).
+-define(wxSizerItem_SetWindow, 1363).
+-define(wxSizerItem_Show, 1364).
+-define(wxBoxSizer_new, 1365).
+-define(wxBoxSizer_GetOrientation, 1366).
+-define(wxBoxSizer_destroy, 1367).
+-define(wxStaticBoxSizer_new_2, 1368).
+-define(wxStaticBoxSizer_new_3, 1369).
+-define(wxStaticBoxSizer_GetStaticBox, 1370).
+-define(wxStaticBoxSizer_destroy, 1371).
+-define(wxGridSizer_new_4, 1372).
+-define(wxGridSizer_new_2, 1373).
+-define(wxGridSizer_GetCols, 1374).
+-define(wxGridSizer_GetHGap, 1375).
+-define(wxGridSizer_GetRows, 1376).
+-define(wxGridSizer_GetVGap, 1377).
+-define(wxGridSizer_SetCols, 1378).
+-define(wxGridSizer_SetHGap, 1379).
+-define(wxGridSizer_SetRows, 1380).
+-define(wxGridSizer_SetVGap, 1381).
+-define(wxGridSizer_destroy, 1382).
+-define(wxFlexGridSizer_new_4, 1383).
+-define(wxFlexGridSizer_new_2, 1384).
+-define(wxFlexGridSizer_AddGrowableCol, 1385).
+-define(wxFlexGridSizer_AddGrowableRow, 1386).
+-define(wxFlexGridSizer_GetFlexibleDirection, 1387).
+-define(wxFlexGridSizer_GetNonFlexibleGrowMode, 1388).
+-define(wxFlexGridSizer_RemoveGrowableCol, 1389).
+-define(wxFlexGridSizer_RemoveGrowableRow, 1390).
+-define(wxFlexGridSizer_SetFlexibleDirection, 1391).
+-define(wxFlexGridSizer_SetNonFlexibleGrowMode, 1392).
+-define(wxFlexGridSizer_destroy, 1393).
+-define(wxGridBagSizer_new, 1394).
+-define(wxGridBagSizer_Add_3_2, 1395).
+-define(wxGridBagSizer_Add_3_1, 1396).
+-define(wxGridBagSizer_Add_4, 1397).
+-define(wxGridBagSizer_Add_1_0, 1398).
+-define(wxGridBagSizer_Add_2_1, 1399).
+-define(wxGridBagSizer_Add_2_0, 1400).
+-define(wxGridBagSizer_Add_3_0, 1401).
+-define(wxGridBagSizer_Add_1_1, 1402).
+-define(wxGridBagSizer_CalcMin, 1403).
+-define(wxGridBagSizer_CheckForIntersection_2, 1404).
+-define(wxGridBagSizer_CheckForIntersection_3, 1405).
+-define(wxGridBagSizer_FindItem_1_1, 1406).
+-define(wxGridBagSizer_FindItem_1_0, 1407).
+-define(wxGridBagSizer_FindItemAtPoint, 1408).
+-define(wxGridBagSizer_FindItemAtPosition, 1409).
+-define(wxGridBagSizer_FindItemWithData, 1410).
+-define(wxGridBagSizer_GetCellSize, 1411).
+-define(wxGridBagSizer_GetEmptyCellSize, 1412).
+-define(wxGridBagSizer_GetItemPosition_1_2, 1413).
+-define(wxGridBagSizer_GetItemPosition_1_1, 1414).
+-define(wxGridBagSizer_GetItemPosition_1_0, 1415).
+-define(wxGridBagSizer_GetItemSpan_1_2, 1416).
+-define(wxGridBagSizer_GetItemSpan_1_1, 1417).
+-define(wxGridBagSizer_GetItemSpan_1_0, 1418).
+-define(wxGridBagSizer_SetEmptyCellSize, 1419).
+-define(wxGridBagSizer_SetItemPosition_2_2, 1420).
+-define(wxGridBagSizer_SetItemPosition_2_1, 1421).
+-define(wxGridBagSizer_SetItemPosition_2_0, 1422).
+-define(wxGridBagSizer_SetItemSpan_2_2, 1423).
+-define(wxGridBagSizer_SetItemSpan_2_1, 1424).
+-define(wxGridBagSizer_SetItemSpan_2_0, 1425).
+-define(wxGridBagSizer_destroy, 1426).
+-define(wxStdDialogButtonSizer_new, 1427).
+-define(wxStdDialogButtonSizer_AddButton, 1428).
+-define(wxStdDialogButtonSizer_Realize, 1429).
+-define(wxStdDialogButtonSizer_SetAffirmativeButton, 1430).
+-define(wxStdDialogButtonSizer_SetCancelButton, 1431).
+-define(wxStdDialogButtonSizer_SetNegativeButton, 1432).
+-define(wxStdDialogButtonSizer_destroy, 1433).
+-define(wxFont_new_0, 1434).
+-define(wxFont_new_1, 1435).
+-define(wxFont_new_5, 1436).
+-define(wxFont_destruct, 1438).
+-define(wxFont_IsFixedWidth, 1439).
+-define(wxFont_GetDefaultEncoding, 1440).
+-define(wxFont_GetFaceName, 1441).
+-define(wxFont_GetFamily, 1442).
+-define(wxFont_GetNativeFontInfoDesc, 1443).
+-define(wxFont_GetNativeFontInfoUserDesc, 1444).
+-define(wxFont_GetPointSize, 1445).
+-define(wxFont_GetStyle, 1446).
+-define(wxFont_GetUnderlined, 1447).
+-define(wxFont_GetWeight, 1448).
+-define(wxFont_Ok, 1449).
+-define(wxFont_SetDefaultEncoding, 1450).
+-define(wxFont_SetFaceName, 1451).
+-define(wxFont_SetFamily, 1452).
+-define(wxFont_SetPointSize, 1453).
+-define(wxFont_SetStyle, 1454).
+-define(wxFont_SetUnderlined, 1455).
+-define(wxFont_SetWeight, 1456).
+-define(wxToolTip_Enable, 1457).
+-define(wxToolTip_SetDelay, 1458).
+-define(wxToolTip_new, 1459).
+-define(wxToolTip_SetTip, 1460).
+-define(wxToolTip_GetTip, 1461).
+-define(wxToolTip_GetWindow, 1462).
+-define(wxToolTip_destroy, 1463).
+-define(wxButton_new_3, 1465).
+-define(wxButton_new_0, 1466).
+-define(wxButton_destruct, 1467).
+-define(wxButton_Create, 1468).
+-define(wxButton_GetDefaultSize, 1469).
+-define(wxButton_SetDefault, 1470).
+-define(wxButton_SetLabel, 1471).
+-define(wxBitmapButton_new_4, 1473).
+-define(wxBitmapButton_new_0, 1474).
+-define(wxBitmapButton_Create, 1475).
+-define(wxBitmapButton_GetBitmapDisabled, 1476).
+-define(wxBitmapButton_GetBitmapFocus, 1478).
+-define(wxBitmapButton_GetBitmapLabel, 1480).
+-define(wxBitmapButton_GetBitmapSelected, 1482).
+-define(wxBitmapButton_SetBitmapDisabled, 1484).
+-define(wxBitmapButton_SetBitmapFocus, 1485).
+-define(wxBitmapButton_SetBitmapLabel, 1486).
+-define(wxBitmapButton_SetBitmapSelected, 1487).
+-define(wxBitmapButton_destroy, 1488).
+-define(wxToggleButton_new_0, 1489).
+-define(wxToggleButton_new_4, 1490).
+-define(wxToggleButton_Create, 1491).
+-define(wxToggleButton_GetValue, 1492).
+-define(wxToggleButton_SetValue, 1493).
+-define(wxToggleButton_destroy, 1494).
+-define(wxCalendarCtrl_new_0, 1495).
+-define(wxCalendarCtrl_new_3, 1496).
+-define(wxCalendarCtrl_Create, 1497).
+-define(wxCalendarCtrl_destruct, 1498).
+-define(wxCalendarCtrl_SetDate, 1499).
+-define(wxCalendarCtrl_GetDate, 1500).
+-define(wxCalendarCtrl_EnableYearChange, 1501).
+-define(wxCalendarCtrl_EnableMonthChange, 1502).
+-define(wxCalendarCtrl_EnableHolidayDisplay, 1503).
+-define(wxCalendarCtrl_SetHeaderColours, 1504).
+-define(wxCalendarCtrl_GetHeaderColourFg, 1505).
+-define(wxCalendarCtrl_GetHeaderColourBg, 1506).
+-define(wxCalendarCtrl_SetHighlightColours, 1507).
+-define(wxCalendarCtrl_GetHighlightColourFg, 1508).
+-define(wxCalendarCtrl_GetHighlightColourBg, 1509).
+-define(wxCalendarCtrl_SetHolidayColours, 1510).
+-define(wxCalendarCtrl_GetHolidayColourFg, 1511).
+-define(wxCalendarCtrl_GetHolidayColourBg, 1512).
+-define(wxCalendarCtrl_GetAttr, 1513).
+-define(wxCalendarCtrl_SetAttr, 1514).
+-define(wxCalendarCtrl_SetHoliday, 1515).
+-define(wxCalendarCtrl_ResetAttr, 1516).
+-define(wxCalendarCtrl_HitTest, 1517).
+-define(wxCalendarDateAttr_new_0, 1518).
+-define(wxCalendarDateAttr_new_2_1, 1519).
+-define(wxCalendarDateAttr_new_2_0, 1520).
+-define(wxCalendarDateAttr_SetTextColour, 1521).
+-define(wxCalendarDateAttr_SetBackgroundColour, 1522).
+-define(wxCalendarDateAttr_SetBorderColour, 1523).
+-define(wxCalendarDateAttr_SetFont, 1524).
+-define(wxCalendarDateAttr_SetBorder, 1525).
+-define(wxCalendarDateAttr_SetHoliday, 1526).
+-define(wxCalendarDateAttr_HasTextColour, 1527).
+-define(wxCalendarDateAttr_HasBackgroundColour, 1528).
+-define(wxCalendarDateAttr_HasBorderColour, 1529).
+-define(wxCalendarDateAttr_HasFont, 1530).
+-define(wxCalendarDateAttr_HasBorder, 1531).
+-define(wxCalendarDateAttr_IsHoliday, 1532).
+-define(wxCalendarDateAttr_GetTextColour, 1533).
+-define(wxCalendarDateAttr_GetBackgroundColour, 1534).
+-define(wxCalendarDateAttr_GetBorderColour, 1535).
+-define(wxCalendarDateAttr_GetFont, 1536).
+-define(wxCalendarDateAttr_GetBorder, 1537).
+-define(wxCalendarDateAttr_destroy, 1538).
+-define(wxCheckBox_new_4, 1540).
+-define(wxCheckBox_new_0, 1541).
+-define(wxCheckBox_Create, 1542).
+-define(wxCheckBox_GetValue, 1543).
+-define(wxCheckBox_Get3StateValue, 1544).
+-define(wxCheckBox_Is3rdStateAllowedForUser, 1545).
+-define(wxCheckBox_Is3State, 1546).
+-define(wxCheckBox_IsChecked, 1547).
+-define(wxCheckBox_SetValue, 1548).
+-define(wxCheckBox_Set3StateValue, 1549).
+-define(wxCheckBox_destroy, 1550).
+-define(wxCheckListBox_new_0, 1551).
+-define(wxCheckListBox_new_3, 1553).
+-define(wxCheckListBox_Check, 1554).
+-define(wxCheckListBox_IsChecked, 1555).
+-define(wxCheckListBox_destroy, 1556).
+-define(wxChoice_new_3, 1559).
+-define(wxChoice_new_0, 1560).
+-define(wxChoice_destruct, 1562).
+-define(wxChoice_Create, 1564).
+-define(wxChoice_Delete, 1565).
+-define(wxChoice_GetColumns, 1566).
+-define(wxChoice_SetColumns, 1567).
+-define(wxComboBox_new_0, 1568).
+-define(wxComboBox_new_3, 1570).
+-define(wxComboBox_destruct, 1571).
+-define(wxComboBox_Create, 1573).
+-define(wxComboBox_CanCopy, 1574).
+-define(wxComboBox_CanCut, 1575).
+-define(wxComboBox_CanPaste, 1576).
+-define(wxComboBox_CanRedo, 1577).
+-define(wxComboBox_CanUndo, 1578).
+-define(wxComboBox_Copy, 1579).
+-define(wxComboBox_Cut, 1580).
+-define(wxComboBox_GetInsertionPoint, 1581).
+-define(wxComboBox_GetLastPosition, 1582).
+-define(wxComboBox_GetValue, 1583).
+-define(wxComboBox_Paste, 1584).
+-define(wxComboBox_Redo, 1585).
+-define(wxComboBox_Replace, 1586).
+-define(wxComboBox_Remove, 1587).
+-define(wxComboBox_SetInsertionPoint, 1588).
+-define(wxComboBox_SetInsertionPointEnd, 1589).
+-define(wxComboBox_SetSelection_1, 1590).
+-define(wxComboBox_SetSelection_2, 1591).
+-define(wxComboBox_SetValue, 1592).
+-define(wxComboBox_Undo, 1593).
+-define(wxGauge_new_0, 1594).
+-define(wxGauge_new_4, 1595).
+-define(wxGauge_Create, 1596).
+-define(wxGauge_GetBezelFace, 1597).
+-define(wxGauge_GetRange, 1598).
+-define(wxGauge_GetShadowWidth, 1599).
+-define(wxGauge_GetValue, 1600).
+-define(wxGauge_IsVertical, 1601).
+-define(wxGauge_SetBezelFace, 1602).
+-define(wxGauge_SetRange, 1603).
+-define(wxGauge_SetShadowWidth, 1604).
+-define(wxGauge_SetValue, 1605).
+-define(wxGauge_Pulse, 1606).
+-define(wxGauge_destroy, 1607).
+-define(wxGenericDirCtrl_new_0, 1608).
+-define(wxGenericDirCtrl_new_2, 1609).
+-define(wxGenericDirCtrl_destruct, 1610).
+-define(wxGenericDirCtrl_Create, 1611).
+-define(wxGenericDirCtrl_Init, 1612).
+-define(wxGenericDirCtrl_CollapseTree, 1613).
+-define(wxGenericDirCtrl_ExpandPath, 1614).
+-define(wxGenericDirCtrl_GetDefaultPath, 1615).
+-define(wxGenericDirCtrl_GetPath, 1616).
+-define(wxGenericDirCtrl_GetFilePath, 1617).
+-define(wxGenericDirCtrl_GetFilter, 1618).
+-define(wxGenericDirCtrl_GetFilterIndex, 1619).
+-define(wxGenericDirCtrl_GetRootId, 1620).
+-define(wxGenericDirCtrl_GetTreeCtrl, 1621).
+-define(wxGenericDirCtrl_ReCreateTree, 1622).
+-define(wxGenericDirCtrl_SetDefaultPath, 1623).
+-define(wxGenericDirCtrl_SetFilter, 1624).
+-define(wxGenericDirCtrl_SetFilterIndex, 1625).
+-define(wxGenericDirCtrl_SetPath, 1626).
+-define(wxStaticBox_new_4, 1628).
+-define(wxStaticBox_new_0, 1629).
+-define(wxStaticBox_Create, 1630).
+-define(wxStaticBox_destroy, 1631).
+-define(wxStaticLine_new_2, 1633).
+-define(wxStaticLine_new_0, 1634).
+-define(wxStaticLine_Create, 1635).
+-define(wxStaticLine_IsVertical, 1636).
+-define(wxStaticLine_GetDefaultSize, 1637).
+-define(wxStaticLine_destroy, 1638).
+-define(wxListBox_new_3, 1641).
+-define(wxListBox_new_0, 1642).
+-define(wxListBox_destruct, 1644).
+-define(wxListBox_Create, 1646).
+-define(wxListBox_Deselect, 1647).
+-define(wxListBox_GetSelections, 1648).
+-define(wxListBox_InsertItems, 1649).
+-define(wxListBox_IsSelected, 1650).
+-define(wxListBox_Set, 1652).
+-define(wxListBox_HitTest, 1653).
+-define(wxListBox_SetFirstItem_1_0, 1654).
+-define(wxListBox_SetFirstItem_1_1, 1655).
+-define(wxListCtrl_new_0, 1656).
+-define(wxListCtrl_new_2, 1657).
+-define(wxListCtrl_Arrange, 1658).
+-define(wxListCtrl_AssignImageList, 1659).
+-define(wxListCtrl_ClearAll, 1660).
+-define(wxListCtrl_Create, 1661).
+-define(wxListCtrl_DeleteAllItems, 1662).
+-define(wxListCtrl_DeleteColumn, 1663).
+-define(wxListCtrl_DeleteItem, 1664).
+-define(wxListCtrl_EditLabel, 1665).
+-define(wxListCtrl_EnsureVisible, 1666).
+-define(wxListCtrl_FindItem_3_0, 1667).
+-define(wxListCtrl_FindItem_3_1, 1668).
+-define(wxListCtrl_GetColumn, 1669).
+-define(wxListCtrl_GetColumnCount, 1670).
+-define(wxListCtrl_GetColumnWidth, 1671).
+-define(wxListCtrl_GetCountPerPage, 1672).
+-define(wxListCtrl_GetEditControl, 1673).
+-define(wxListCtrl_GetImageList, 1674).
+-define(wxListCtrl_GetItem, 1675).
+-define(wxListCtrl_GetItemBackgroundColour, 1676).
+-define(wxListCtrl_GetItemCount, 1677).
+-define(wxListCtrl_GetItemData, 1678).
+-define(wxListCtrl_GetItemFont, 1679).
+-define(wxListCtrl_GetItemPosition, 1680).
+-define(wxListCtrl_GetItemRect, 1681).
+-define(wxListCtrl_GetItemSpacing, 1682).
+-define(wxListCtrl_GetItemState, 1683).
+-define(wxListCtrl_GetItemText, 1684).
+-define(wxListCtrl_GetItemTextColour, 1685).
+-define(wxListCtrl_GetNextItem, 1686).
+-define(wxListCtrl_GetSelectedItemCount, 1687).
+-define(wxListCtrl_GetTextColour, 1688).
+-define(wxListCtrl_GetTopItem, 1689).
+-define(wxListCtrl_GetViewRect, 1690).
+-define(wxListCtrl_HitTest, 1691).
+-define(wxListCtrl_InsertColumn_2, 1692).
+-define(wxListCtrl_InsertColumn_3, 1693).
+-define(wxListCtrl_InsertItem_1, 1694).
+-define(wxListCtrl_InsertItem_2_1, 1695).
+-define(wxListCtrl_InsertItem_2_0, 1696).
+-define(wxListCtrl_InsertItem_3, 1697).
+-define(wxListCtrl_RefreshItem, 1698).
+-define(wxListCtrl_RefreshItems, 1699).
+-define(wxListCtrl_ScrollList, 1700).
+-define(wxListCtrl_SetBackgroundColour, 1701).
+-define(wxListCtrl_SetColumn, 1702).
+-define(wxListCtrl_SetColumnWidth, 1703).
+-define(wxListCtrl_SetImageList, 1704).
+-define(wxListCtrl_SetItem_1, 1705).
+-define(wxListCtrl_SetItem_4, 1706).
+-define(wxListCtrl_SetItemBackgroundColour, 1707).
+-define(wxListCtrl_SetItemCount, 1708).
+-define(wxListCtrl_SetItemData, 1709).
+-define(wxListCtrl_SetItemFont, 1710).
+-define(wxListCtrl_SetItemImage, 1711).
+-define(wxListCtrl_SetItemColumnImage, 1712).
+-define(wxListCtrl_SetItemPosition, 1713).
+-define(wxListCtrl_SetItemState, 1714).
+-define(wxListCtrl_SetItemText, 1715).
+-define(wxListCtrl_SetItemTextColour, 1716).
+-define(wxListCtrl_SetSingleStyle, 1717).
+-define(wxListCtrl_SetTextColour, 1718).
+-define(wxListCtrl_SetWindowStyleFlag, 1719).
+-define(wxListCtrl_SortItems, 1720).
+-define(wxListCtrl_destroy, 1721).
+-define(wxListView_ClearColumnImage, 1722).
+-define(wxListView_Focus, 1723).
+-define(wxListView_GetFirstSelected, 1724).
+-define(wxListView_GetFocusedItem, 1725).
+-define(wxListView_GetNextSelected, 1726).
+-define(wxListView_IsSelected, 1727).
+-define(wxListView_Select, 1728).
+-define(wxListView_SetColumnImage, 1729).
+-define(wxListItem_new_0, 1730).
+-define(wxListItem_new_1, 1731).
+-define(wxListItem_destruct, 1732).
+-define(wxListItem_Clear, 1733).
+-define(wxListItem_GetAlign, 1734).
+-define(wxListItem_GetBackgroundColour, 1735).
+-define(wxListItem_GetColumn, 1736).
+-define(wxListItem_GetFont, 1737).
+-define(wxListItem_GetId, 1738).
+-define(wxListItem_GetImage, 1739).
+-define(wxListItem_GetMask, 1740).
+-define(wxListItem_GetState, 1741).
+-define(wxListItem_GetText, 1742).
+-define(wxListItem_GetTextColour, 1743).
+-define(wxListItem_GetWidth, 1744).
+-define(wxListItem_SetAlign, 1745).
+-define(wxListItem_SetBackgroundColour, 1746).
+-define(wxListItem_SetColumn, 1747).
+-define(wxListItem_SetFont, 1748).
+-define(wxListItem_SetId, 1749).
+-define(wxListItem_SetImage, 1750).
+-define(wxListItem_SetMask, 1751).
+-define(wxListItem_SetState, 1752).
+-define(wxListItem_SetStateMask, 1753).
+-define(wxListItem_SetText, 1754).
+-define(wxListItem_SetTextColour, 1755).
+-define(wxListItem_SetWidth, 1756).
+-define(wxImageList_new_0, 1757).
+-define(wxImageList_new_3, 1758).
+-define(wxImageList_Add_1, 1759).
+-define(wxImageList_Add_2_0, 1760).
+-define(wxImageList_Add_2_1, 1761).
+-define(wxImageList_Create, 1762).
+-define(wxImageList_Draw, 1764).
+-define(wxImageList_GetBitmap, 1765).
+-define(wxImageList_GetIcon, 1766).
+-define(wxImageList_GetImageCount, 1767).
+-define(wxImageList_GetSize, 1768).
+-define(wxImageList_Remove, 1769).
+-define(wxImageList_RemoveAll, 1770).
+-define(wxImageList_Replace_2, 1771).
+-define(wxImageList_Replace_3, 1772).
+-define(wxImageList_destroy, 1773).
+-define(wxTextAttr_new_0, 1774).
+-define(wxTextAttr_new_2, 1775).
+-define(wxTextAttr_GetAlignment, 1776).
+-define(wxTextAttr_GetBackgroundColour, 1777).
+-define(wxTextAttr_GetFont, 1778).
+-define(wxTextAttr_GetLeftIndent, 1779).
+-define(wxTextAttr_GetLeftSubIndent, 1780).
+-define(wxTextAttr_GetRightIndent, 1781).
+-define(wxTextAttr_GetTabs, 1782).
+-define(wxTextAttr_GetTextColour, 1783).
+-define(wxTextAttr_HasBackgroundColour, 1784).
+-define(wxTextAttr_HasFont, 1785).
+-define(wxTextAttr_HasTextColour, 1786).
+-define(wxTextAttr_GetFlags, 1787).
+-define(wxTextAttr_IsDefault, 1788).
+-define(wxTextAttr_SetAlignment, 1789).
+-define(wxTextAttr_SetBackgroundColour, 1790).
+-define(wxTextAttr_SetFlags, 1791).
+-define(wxTextAttr_SetFont, 1792).
+-define(wxTextAttr_SetLeftIndent, 1793).
+-define(wxTextAttr_SetRightIndent, 1794).
+-define(wxTextAttr_SetTabs, 1795).
+-define(wxTextAttr_SetTextColour, 1796).
+-define(wxTextAttr_destroy, 1797).
+-define(wxTextCtrl_new_3, 1799).
+-define(wxTextCtrl_new_0, 1800).
+-define(wxTextCtrl_destruct, 1802).
+-define(wxTextCtrl_AppendText, 1803).
+-define(wxTextCtrl_CanCopy, 1804).
+-define(wxTextCtrl_CanCut, 1805).
+-define(wxTextCtrl_CanPaste, 1806).
+-define(wxTextCtrl_CanRedo, 1807).
+-define(wxTextCtrl_CanUndo, 1808).
+-define(wxTextCtrl_Clear, 1809).
+-define(wxTextCtrl_Copy, 1810).
+-define(wxTextCtrl_Create, 1811).
+-define(wxTextCtrl_Cut, 1812).
+-define(wxTextCtrl_DiscardEdits, 1813).
+-define(wxTextCtrl_EmulateKeyPress, 1814).
+-define(wxTextCtrl_GetDefaultStyle, 1815).
+-define(wxTextCtrl_GetInsertionPoint, 1816).
+-define(wxTextCtrl_GetLastPosition, 1817).
+-define(wxTextCtrl_GetLineLength, 1818).
+-define(wxTextCtrl_GetLineText, 1819).
+-define(wxTextCtrl_GetNumberOfLines, 1820).
+-define(wxTextCtrl_GetRange, 1821).
+-define(wxTextCtrl_GetSelection, 1822).
+-define(wxTextCtrl_GetStringSelection, 1823).
+-define(wxTextCtrl_GetStyle, 1824).
+-define(wxTextCtrl_GetValue, 1825).
+-define(wxTextCtrl_IsEditable, 1826).
+-define(wxTextCtrl_IsModified, 1827).
+-define(wxTextCtrl_IsMultiLine, 1828).
+-define(wxTextCtrl_IsSingleLine, 1829).
+-define(wxTextCtrl_LoadFile, 1830).
+-define(wxTextCtrl_MarkDirty, 1831).
+-define(wxTextCtrl_Paste, 1832).
+-define(wxTextCtrl_PositionToXY, 1833).
+-define(wxTextCtrl_Redo, 1834).
+-define(wxTextCtrl_Remove, 1835).
+-define(wxTextCtrl_Replace, 1836).
+-define(wxTextCtrl_SaveFile, 1837).
+-define(wxTextCtrl_SetDefaultStyle, 1838).
+-define(wxTextCtrl_SetEditable, 1839).
+-define(wxTextCtrl_SetInsertionPoint, 1840).
+-define(wxTextCtrl_SetInsertionPointEnd, 1841).
+-define(wxTextCtrl_SetMaxLength, 1843).
+-define(wxTextCtrl_SetSelection, 1844).
+-define(wxTextCtrl_SetStyle, 1845).
+-define(wxTextCtrl_SetValue, 1846).
+-define(wxTextCtrl_ShowPosition, 1847).
+-define(wxTextCtrl_Undo, 1848).
+-define(wxTextCtrl_WriteText, 1849).
+-define(wxTextCtrl_XYToPosition, 1850).
+-define(wxNotebook_new_0, 1853).
+-define(wxNotebook_new_3, 1854).
+-define(wxNotebook_destruct, 1855).
+-define(wxNotebook_AddPage, 1856).
+-define(wxNotebook_AdvanceSelection, 1857).
+-define(wxNotebook_AssignImageList, 1858).
+-define(wxNotebook_Create, 1859).
+-define(wxNotebook_DeleteAllPages, 1860).
+-define(wxNotebook_DeletePage, 1861).
+-define(wxNotebook_RemovePage, 1862).
+-define(wxNotebook_GetCurrentPage, 1863).
+-define(wxNotebook_GetImageList, 1864).
+-define(wxNotebook_GetPage, 1866).
+-define(wxNotebook_GetPageCount, 1867).
+-define(wxNotebook_GetPageImage, 1868).
+-define(wxNotebook_GetPageText, 1869).
+-define(wxNotebook_GetRowCount, 1870).
+-define(wxNotebook_GetSelection, 1871).
+-define(wxNotebook_GetThemeBackgroundColour, 1872).
+-define(wxNotebook_HitTest, 1874).
+-define(wxNotebook_InsertPage, 1876).
+-define(wxNotebook_SetImageList, 1877).
+-define(wxNotebook_SetPadding, 1878).
+-define(wxNotebook_SetPageSize, 1879).
+-define(wxNotebook_SetPageImage, 1880).
+-define(wxNotebook_SetPageText, 1881).
+-define(wxNotebook_SetSelection, 1882).
+-define(wxNotebook_ChangeSelection, 1883).
+-define(wxChoicebook_new_0, 1884).
+-define(wxChoicebook_new_3, 1885).
+-define(wxChoicebook_AddPage, 1886).
+-define(wxChoicebook_AdvanceSelection, 1887).
+-define(wxChoicebook_AssignImageList, 1888).
+-define(wxChoicebook_Create, 1889).
+-define(wxChoicebook_DeleteAllPages, 1890).
+-define(wxChoicebook_DeletePage, 1891).
+-define(wxChoicebook_RemovePage, 1892).
+-define(wxChoicebook_GetCurrentPage, 1893).
+-define(wxChoicebook_GetImageList, 1894).
+-define(wxChoicebook_GetPage, 1896).
+-define(wxChoicebook_GetPageCount, 1897).
+-define(wxChoicebook_GetPageImage, 1898).
+-define(wxChoicebook_GetPageText, 1899).
+-define(wxChoicebook_GetSelection, 1900).
+-define(wxChoicebook_HitTest, 1901).
+-define(wxChoicebook_InsertPage, 1902).
+-define(wxChoicebook_SetImageList, 1903).
+-define(wxChoicebook_SetPageSize, 1904).
+-define(wxChoicebook_SetPageImage, 1905).
+-define(wxChoicebook_SetPageText, 1906).
+-define(wxChoicebook_SetSelection, 1907).
+-define(wxChoicebook_ChangeSelection, 1908).
+-define(wxChoicebook_destroy, 1909).
+-define(wxToolbook_new_0, 1910).
+-define(wxToolbook_new_3, 1911).
+-define(wxToolbook_AddPage, 1912).
+-define(wxToolbook_AdvanceSelection, 1913).
+-define(wxToolbook_AssignImageList, 1914).
+-define(wxToolbook_Create, 1915).
+-define(wxToolbook_DeleteAllPages, 1916).
+-define(wxToolbook_DeletePage, 1917).
+-define(wxToolbook_RemovePage, 1918).
+-define(wxToolbook_GetCurrentPage, 1919).
+-define(wxToolbook_GetImageList, 1920).
+-define(wxToolbook_GetPage, 1922).
+-define(wxToolbook_GetPageCount, 1923).
+-define(wxToolbook_GetPageImage, 1924).
+-define(wxToolbook_GetPageText, 1925).
+-define(wxToolbook_GetSelection, 1926).
+-define(wxToolbook_HitTest, 1928).
+-define(wxToolbook_InsertPage, 1929).
+-define(wxToolbook_SetImageList, 1930).
+-define(wxToolbook_SetPageSize, 1931).
+-define(wxToolbook_SetPageImage, 1932).
+-define(wxToolbook_SetPageText, 1933).
+-define(wxToolbook_SetSelection, 1934).
+-define(wxToolbook_ChangeSelection, 1935).
+-define(wxToolbook_destroy, 1936).
+-define(wxListbook_new_0, 1937).
+-define(wxListbook_new_3, 1938).
+-define(wxListbook_AddPage, 1939).
+-define(wxListbook_AdvanceSelection, 1940).
+-define(wxListbook_AssignImageList, 1941).
+-define(wxListbook_Create, 1942).
+-define(wxListbook_DeleteAllPages, 1943).
+-define(wxListbook_DeletePage, 1944).
+-define(wxListbook_RemovePage, 1945).
+-define(wxListbook_GetCurrentPage, 1946).
+-define(wxListbook_GetImageList, 1947).
+-define(wxListbook_GetPage, 1949).
+-define(wxListbook_GetPageCount, 1950).
+-define(wxListbook_GetPageImage, 1951).
+-define(wxListbook_GetPageText, 1952).
+-define(wxListbook_GetSelection, 1953).
+-define(wxListbook_HitTest, 1955).
+-define(wxListbook_InsertPage, 1956).
+-define(wxListbook_SetImageList, 1957).
+-define(wxListbook_SetPageSize, 1958).
+-define(wxListbook_SetPageImage, 1959).
+-define(wxListbook_SetPageText, 1960).
+-define(wxListbook_SetSelection, 1961).
+-define(wxListbook_ChangeSelection, 1962).
+-define(wxListbook_destroy, 1963).
+-define(wxTreebook_new_0, 1964).
+-define(wxTreebook_new_3, 1965).
+-define(wxTreebook_AddPage, 1966).
+-define(wxTreebook_AdvanceSelection, 1967).
+-define(wxTreebook_AssignImageList, 1968).
+-define(wxTreebook_Create, 1969).
+-define(wxTreebook_DeleteAllPages, 1970).
+-define(wxTreebook_DeletePage, 1971).
+-define(wxTreebook_RemovePage, 1972).
+-define(wxTreebook_GetCurrentPage, 1973).
+-define(wxTreebook_GetImageList, 1974).
+-define(wxTreebook_GetPage, 1976).
+-define(wxTreebook_GetPageCount, 1977).
+-define(wxTreebook_GetPageImage, 1978).
+-define(wxTreebook_GetPageText, 1979).
+-define(wxTreebook_GetSelection, 1980).
+-define(wxTreebook_ExpandNode, 1981).
+-define(wxTreebook_IsNodeExpanded, 1982).
+-define(wxTreebook_HitTest, 1984).
+-define(wxTreebook_InsertPage, 1985).
+-define(wxTreebook_InsertSubPage, 1986).
+-define(wxTreebook_SetImageList, 1987).
+-define(wxTreebook_SetPageSize, 1988).
+-define(wxTreebook_SetPageImage, 1989).
+-define(wxTreebook_SetPageText, 1990).
+-define(wxTreebook_SetSelection, 1991).
+-define(wxTreebook_ChangeSelection, 1992).
+-define(wxTreebook_destroy, 1993).
+-define(wxTreeCtrl_new_2, 1996).
+-define(wxTreeCtrl_new_0, 1997).
+-define(wxTreeCtrl_destruct, 1999).
+-define(wxTreeCtrl_AddRoot, 2000).
+-define(wxTreeCtrl_AppendItem, 2001).
+-define(wxTreeCtrl_AssignImageList, 2002).
+-define(wxTreeCtrl_AssignStateImageList, 2003).
+-define(wxTreeCtrl_Collapse, 2004).
+-define(wxTreeCtrl_CollapseAndReset, 2005).
+-define(wxTreeCtrl_Create, 2006).
+-define(wxTreeCtrl_Delete, 2007).
+-define(wxTreeCtrl_DeleteAllItems, 2008).
+-define(wxTreeCtrl_DeleteChildren, 2009).
+-define(wxTreeCtrl_EnsureVisible, 2010).
+-define(wxTreeCtrl_Expand, 2011).
+-define(wxTreeCtrl_GetBoundingRect, 2012).
+-define(wxTreeCtrl_GetChildrenCount, 2014).
+-define(wxTreeCtrl_GetCount, 2015).
+-define(wxTreeCtrl_GetEditControl, 2016).
+-define(wxTreeCtrl_GetFirstChild, 2017).
+-define(wxTreeCtrl_GetNextChild, 2018).
+-define(wxTreeCtrl_GetFirstVisibleItem, 2019).
+-define(wxTreeCtrl_GetImageList, 2020).
+-define(wxTreeCtrl_GetIndent, 2021).
+-define(wxTreeCtrl_GetItemBackgroundColour, 2022).
+-define(wxTreeCtrl_GetItemData, 2023).
+-define(wxTreeCtrl_GetItemFont, 2024).
+-define(wxTreeCtrl_GetItemImage_1, 2025).
+-define(wxTreeCtrl_GetItemImage_2, 2026).
+-define(wxTreeCtrl_GetItemText, 2027).
+-define(wxTreeCtrl_GetItemTextColour, 2028).
+-define(wxTreeCtrl_GetLastChild, 2029).
+-define(wxTreeCtrl_GetNextSibling, 2030).
+-define(wxTreeCtrl_GetNextVisible, 2031).
+-define(wxTreeCtrl_GetItemParent, 2032).
+-define(wxTreeCtrl_GetPrevSibling, 2033).
+-define(wxTreeCtrl_GetPrevVisible, 2034).
+-define(wxTreeCtrl_GetRootItem, 2035).
+-define(wxTreeCtrl_GetSelection, 2036).
+-define(wxTreeCtrl_GetSelections, 2037).
+-define(wxTreeCtrl_GetStateImageList, 2038).
+-define(wxTreeCtrl_HitTest, 2039).
+-define(wxTreeCtrl_InsertItem, 2041).
+-define(wxTreeCtrl_IsBold, 2042).
+-define(wxTreeCtrl_IsExpanded, 2043).
+-define(wxTreeCtrl_IsSelected, 2044).
+-define(wxTreeCtrl_IsVisible, 2045).
+-define(wxTreeCtrl_ItemHasChildren, 2046).
+-define(wxTreeCtrl_PrependItem, 2047).
+-define(wxTreeCtrl_ScrollTo, 2048).
+-define(wxTreeCtrl_SelectItem_1, 2049).
+-define(wxTreeCtrl_SelectItem_2, 2050).
+-define(wxTreeCtrl_SetIndent, 2051).
+-define(wxTreeCtrl_SetImageList, 2052).
+-define(wxTreeCtrl_SetItemBackgroundColour, 2053).
+-define(wxTreeCtrl_SetItemBold, 2054).
+-define(wxTreeCtrl_SetItemData, 2055).
+-define(wxTreeCtrl_SetItemDropHighlight, 2056).
+-define(wxTreeCtrl_SetItemFont, 2057).
+-define(wxTreeCtrl_SetItemHasChildren, 2058).
+-define(wxTreeCtrl_SetItemImage_2, 2059).
+-define(wxTreeCtrl_SetItemImage_3, 2060).
+-define(wxTreeCtrl_SetItemText, 2061).
+-define(wxTreeCtrl_SetItemTextColour, 2062).
+-define(wxTreeCtrl_SetStateImageList, 2063).
+-define(wxTreeCtrl_SetWindowStyle, 2064).
+-define(wxTreeCtrl_SortChildren, 2065).
+-define(wxTreeCtrl_Toggle, 2066).
+-define(wxTreeCtrl_ToggleItemSelection, 2067).
+-define(wxTreeCtrl_Unselect, 2068).
+-define(wxTreeCtrl_UnselectAll, 2069).
+-define(wxTreeCtrl_UnselectItem, 2070).
+-define(wxScrollBar_new_0, 2071).
+-define(wxScrollBar_new_3, 2072).
+-define(wxScrollBar_destruct, 2073).
+-define(wxScrollBar_Create, 2074).
+-define(wxScrollBar_GetRange, 2075).
+-define(wxScrollBar_GetPageSize, 2076).
+-define(wxScrollBar_GetThumbPosition, 2077).
+-define(wxScrollBar_GetThumbSize, 2078).
+-define(wxScrollBar_SetThumbPosition, 2079).
+-define(wxScrollBar_SetScrollbar, 2080).
+-define(wxSpinButton_new_2, 2082).
+-define(wxSpinButton_new_0, 2083).
+-define(wxSpinButton_Create, 2084).
+-define(wxSpinButton_GetMax, 2085).
+-define(wxSpinButton_GetMin, 2086).
+-define(wxSpinButton_GetValue, 2087).
+-define(wxSpinButton_SetRange, 2088).
+-define(wxSpinButton_SetValue, 2089).
+-define(wxSpinButton_destroy, 2090).
+-define(wxSpinCtrl_new_0, 2091).
+-define(wxSpinCtrl_new_2, 2092).
+-define(wxSpinCtrl_Create, 2094).
+-define(wxSpinCtrl_SetValue_1_1, 2097).
+-define(wxSpinCtrl_SetValue_1_0, 2098).
+-define(wxSpinCtrl_GetValue, 2100).
+-define(wxSpinCtrl_SetRange, 2102).
+-define(wxSpinCtrl_SetSelection, 2103).
+-define(wxSpinCtrl_GetMin, 2105).
+-define(wxSpinCtrl_GetMax, 2107).
+-define(wxSpinCtrl_destroy, 2108).
+-define(wxStaticText_new_0, 2109).
+-define(wxStaticText_new_4, 2110).
+-define(wxStaticText_Create, 2111).
+-define(wxStaticText_GetLabel, 2112).
+-define(wxStaticText_SetLabel, 2113).
+-define(wxStaticText_Wrap, 2114).
+-define(wxStaticText_destroy, 2115).
+-define(wxStaticBitmap_new_0, 2116).
+-define(wxStaticBitmap_new_4, 2117).
+-define(wxStaticBitmap_Create, 2118).
+-define(wxStaticBitmap_GetBitmap, 2119).
+-define(wxStaticBitmap_SetBitmap, 2120).
+-define(wxStaticBitmap_destroy, 2121).
+-define(wxRadioBox_new, 2122).
+-define(wxRadioBox_destruct, 2124).
+-define(wxRadioBox_Create, 2125).
+-define(wxRadioBox_Enable_2, 2126).
+-define(wxRadioBox_Enable_1, 2127).
+-define(wxRadioBox_GetSelection, 2128).
+-define(wxRadioBox_GetString, 2129).
+-define(wxRadioBox_SetSelection, 2130).
+-define(wxRadioBox_Show_2, 2131).
+-define(wxRadioBox_Show_1, 2132).
+-define(wxRadioBox_GetColumnCount, 2133).
+-define(wxRadioBox_GetItemHelpText, 2134).
+-define(wxRadioBox_GetItemToolTip, 2135).
+-define(wxRadioBox_GetItemFromPoint, 2137).
+-define(wxRadioBox_GetRowCount, 2138).
+-define(wxRadioBox_IsItemEnabled, 2139).
+-define(wxRadioBox_IsItemShown, 2140).
+-define(wxRadioBox_SetItemHelpText, 2141).
+-define(wxRadioBox_SetItemToolTip, 2142).
+-define(wxRadioButton_new_0, 2143).
+-define(wxRadioButton_new_4, 2144).
+-define(wxRadioButton_Create, 2145).
+-define(wxRadioButton_GetValue, 2146).
+-define(wxRadioButton_SetValue, 2147).
+-define(wxRadioButton_destroy, 2148).
+-define(wxSlider_new_6, 2150).
+-define(wxSlider_new_0, 2151).
+-define(wxSlider_Create, 2152).
+-define(wxSlider_GetLineSize, 2153).
+-define(wxSlider_GetMax, 2154).
+-define(wxSlider_GetMin, 2155).
+-define(wxSlider_GetPageSize, 2156).
+-define(wxSlider_GetThumbLength, 2157).
+-define(wxSlider_GetValue, 2158).
+-define(wxSlider_SetLineSize, 2159).
+-define(wxSlider_SetPageSize, 2160).
+-define(wxSlider_SetRange, 2161).
+-define(wxSlider_SetThumbLength, 2162).
+-define(wxSlider_SetValue, 2163).
+-define(wxSlider_destroy, 2164).
+-define(wxDialog_new_4, 2166).
+-define(wxDialog_new_0, 2167).
+-define(wxDialog_destruct, 2169).
+-define(wxDialog_Create, 2170).
+-define(wxDialog_CreateButtonSizer, 2171).
+-define(wxDialog_CreateStdDialogButtonSizer, 2172).
+-define(wxDialog_EndModal, 2173).
+-define(wxDialog_GetAffirmativeId, 2174).
+-define(wxDialog_GetReturnCode, 2175).
+-define(wxDialog_IsModal, 2176).
+-define(wxDialog_SetAffirmativeId, 2177).
+-define(wxDialog_SetReturnCode, 2178).
+-define(wxDialog_Show, 2179).
+-define(wxDialog_ShowModal, 2180).
+-define(wxColourDialog_new_0, 2181).
+-define(wxColourDialog_new_2, 2182).
+-define(wxColourDialog_destruct, 2183).
+-define(wxColourDialog_Create, 2184).
+-define(wxColourDialog_GetColourData, 2185).
+-define(wxColourData_new_0, 2186).
+-define(wxColourData_new_1, 2187).
+-define(wxColourData_destruct, 2188).
+-define(wxColourData_GetChooseFull, 2189).
+-define(wxColourData_GetColour, 2190).
+-define(wxColourData_GetCustomColour, 2192).
+-define(wxColourData_SetChooseFull, 2193).
+-define(wxColourData_SetColour, 2194).
+-define(wxColourData_SetCustomColour, 2195).
+-define(wxPalette_new_0, 2196).
+-define(wxPalette_new_4, 2197).
+-define(wxPalette_destruct, 2199).
+-define(wxPalette_Create, 2200).
+-define(wxPalette_GetColoursCount, 2201).
+-define(wxPalette_GetPixel, 2202).
+-define(wxPalette_GetRGB, 2203).
+-define(wxPalette_IsOk, 2204).
+-define(wxDirDialog_new, 2208).
+-define(wxDirDialog_destruct, 2209).
+-define(wxDirDialog_GetPath, 2210).
+-define(wxDirDialog_GetMessage, 2211).
+-define(wxDirDialog_SetMessage, 2212).
+-define(wxDirDialog_SetPath, 2213).
+-define(wxFileDialog_new, 2217).
+-define(wxFileDialog_destruct, 2218).
+-define(wxFileDialog_GetDirectory, 2219).
+-define(wxFileDialog_GetFilename, 2220).
+-define(wxFileDialog_GetFilenames, 2221).
+-define(wxFileDialog_GetFilterIndex, 2222).
+-define(wxFileDialog_GetMessage, 2223).
+-define(wxFileDialog_GetPath, 2224).
+-define(wxFileDialog_GetPaths, 2225).
+-define(wxFileDialog_GetWildcard, 2226).
+-define(wxFileDialog_SetDirectory, 2227).
+-define(wxFileDialog_SetFilename, 2228).
+-define(wxFileDialog_SetFilterIndex, 2229).
+-define(wxFileDialog_SetMessage, 2230).
+-define(wxFileDialog_SetPath, 2231).
+-define(wxFileDialog_SetWildcard, 2232).
+-define(wxPickerBase_SetInternalMargin, 2233).
+-define(wxPickerBase_GetInternalMargin, 2234).
+-define(wxPickerBase_SetTextCtrlProportion, 2235).
+-define(wxPickerBase_SetPickerCtrlProportion, 2236).
+-define(wxPickerBase_GetTextCtrlProportion, 2237).
+-define(wxPickerBase_GetPickerCtrlProportion, 2238).
+-define(wxPickerBase_HasTextCtrl, 2239).
+-define(wxPickerBase_GetTextCtrl, 2240).
+-define(wxPickerBase_IsTextCtrlGrowable, 2241).
+-define(wxPickerBase_SetPickerCtrlGrowable, 2242).
+-define(wxPickerBase_SetTextCtrlGrowable, 2243).
+-define(wxPickerBase_IsPickerCtrlGrowable, 2244).
+-define(wxFilePickerCtrl_new_0, 2245).
+-define(wxFilePickerCtrl_new_3, 2246).
+-define(wxFilePickerCtrl_Create, 2247).
+-define(wxFilePickerCtrl_GetPath, 2248).
+-define(wxFilePickerCtrl_SetPath, 2249).
+-define(wxFilePickerCtrl_destroy, 2250).
+-define(wxDirPickerCtrl_new_0, 2251).
+-define(wxDirPickerCtrl_new_3, 2252).
+-define(wxDirPickerCtrl_Create, 2253).
+-define(wxDirPickerCtrl_GetPath, 2254).
+-define(wxDirPickerCtrl_SetPath, 2255).
+-define(wxDirPickerCtrl_destroy, 2256).
+-define(wxColourPickerCtrl_new_0, 2257).
+-define(wxColourPickerCtrl_new_3, 2258).
+-define(wxColourPickerCtrl_Create, 2259).
+-define(wxColourPickerCtrl_GetColour, 2260).
+-define(wxColourPickerCtrl_SetColour_1_1, 2261).
+-define(wxColourPickerCtrl_SetColour_1_0, 2262).
+-define(wxColourPickerCtrl_destroy, 2263).
+-define(wxDatePickerCtrl_new_0, 2264).
+-define(wxDatePickerCtrl_new_3, 2265).
+-define(wxDatePickerCtrl_GetRange, 2266).
+-define(wxDatePickerCtrl_GetValue, 2267).
+-define(wxDatePickerCtrl_SetRange, 2268).
+-define(wxDatePickerCtrl_SetValue, 2269).
+-define(wxDatePickerCtrl_destroy, 2270).
+-define(wxFontPickerCtrl_new_0, 2271).
+-define(wxFontPickerCtrl_new_3, 2272).
+-define(wxFontPickerCtrl_Create, 2273).
+-define(wxFontPickerCtrl_GetSelectedFont, 2274).
+-define(wxFontPickerCtrl_SetSelectedFont, 2275).
+-define(wxFontPickerCtrl_GetMaxPointSize, 2276).
+-define(wxFontPickerCtrl_SetMaxPointSize, 2277).
+-define(wxFontPickerCtrl_destroy, 2278).
+-define(wxFindReplaceDialog_new_0, 2281).
+-define(wxFindReplaceDialog_new_4, 2282).
+-define(wxFindReplaceDialog_destruct, 2283).
+-define(wxFindReplaceDialog_Create, 2284).
+-define(wxFindReplaceDialog_GetData, 2285).
+-define(wxFindReplaceData_new_0, 2286).
+-define(wxFindReplaceData_new_1, 2287).
+-define(wxFindReplaceData_GetFindString, 2288).
+-define(wxFindReplaceData_GetReplaceString, 2289).
+-define(wxFindReplaceData_GetFlags, 2290).
+-define(wxFindReplaceData_SetFlags, 2291).
+-define(wxFindReplaceData_SetFindString, 2292).
+-define(wxFindReplaceData_SetReplaceString, 2293).
+-define(wxFindReplaceData_destroy, 2294).
+-define(wxMultiChoiceDialog_new_0, 2295).
+-define(wxMultiChoiceDialog_new_5, 2297).
+-define(wxMultiChoiceDialog_GetSelections, 2298).
+-define(wxMultiChoiceDialog_SetSelections, 2299).
+-define(wxMultiChoiceDialog_destroy, 2300).
+-define(wxSingleChoiceDialog_new_0, 2301).
+-define(wxSingleChoiceDialog_new_5, 2303).
+-define(wxSingleChoiceDialog_GetSelection, 2304).
+-define(wxSingleChoiceDialog_GetStringSelection, 2305).
+-define(wxSingleChoiceDialog_SetSelection, 2306).
+-define(wxSingleChoiceDialog_destroy, 2307).
+-define(wxTextEntryDialog_new, 2308).
+-define(wxTextEntryDialog_GetValue, 2309).
+-define(wxTextEntryDialog_SetValue, 2310).
+-define(wxTextEntryDialog_destroy, 2311).
+-define(wxPasswordEntryDialog_new, 2312).
+-define(wxPasswordEntryDialog_destroy, 2313).
+-define(wxFontData_new_0, 2314).
+-define(wxFontData_new_1, 2315).
+-define(wxFontData_destruct, 2316).
+-define(wxFontData_EnableEffects, 2317).
+-define(wxFontData_GetAllowSymbols, 2318).
+-define(wxFontData_GetColour, 2319).
+-define(wxFontData_GetChosenFont, 2320).
+-define(wxFontData_GetEnableEffects, 2321).
+-define(wxFontData_GetInitialFont, 2322).
+-define(wxFontData_GetShowHelp, 2323).
+-define(wxFontData_SetAllowSymbols, 2324).
+-define(wxFontData_SetChosenFont, 2325).
+-define(wxFontData_SetColour, 2326).
+-define(wxFontData_SetInitialFont, 2327).
+-define(wxFontData_SetRange, 2328).
+-define(wxFontData_SetShowHelp, 2329).
+-define(wxFontDialog_new_0, 2333).
+-define(wxFontDialog_new_2, 2335).
+-define(wxFontDialog_Create, 2337).
+-define(wxFontDialog_GetFontData, 2338).
+-define(wxFontDialog_destroy, 2340).
+-define(wxProgressDialog_new, 2341).
+-define(wxProgressDialog_destruct, 2342).
+-define(wxProgressDialog_Resume, 2343).
+-define(wxProgressDialog_Update_2, 2344).
+-define(wxProgressDialog_Update_0, 2345).
+-define(wxMessageDialog_new, 2346).
+-define(wxMessageDialog_destruct, 2347).
+-define(wxPageSetupDialog_new, 2348).
+-define(wxPageSetupDialog_destruct, 2349).
+-define(wxPageSetupDialog_GetPageSetupData, 2350).
+-define(wxPageSetupDialog_ShowModal, 2351).
+-define(wxPageSetupDialogData_new_0, 2352).
+-define(wxPageSetupDialogData_new_1_0, 2353).
+-define(wxPageSetupDialogData_new_1_1, 2354).
+-define(wxPageSetupDialogData_destruct, 2355).
+-define(wxPageSetupDialogData_EnableHelp, 2356).
+-define(wxPageSetupDialogData_EnableMargins, 2357).
+-define(wxPageSetupDialogData_EnableOrientation, 2358).
+-define(wxPageSetupDialogData_EnablePaper, 2359).
+-define(wxPageSetupDialogData_EnablePrinter, 2360).
+-define(wxPageSetupDialogData_GetDefaultMinMargins, 2361).
+-define(wxPageSetupDialogData_GetEnableMargins, 2362).
+-define(wxPageSetupDialogData_GetEnableOrientation, 2363).
+-define(wxPageSetupDialogData_GetEnablePaper, 2364).
+-define(wxPageSetupDialogData_GetEnablePrinter, 2365).
+-define(wxPageSetupDialogData_GetEnableHelp, 2366).
+-define(wxPageSetupDialogData_GetDefaultInfo, 2367).
+-define(wxPageSetupDialogData_GetMarginTopLeft, 2368).
+-define(wxPageSetupDialogData_GetMarginBottomRight, 2369).
+-define(wxPageSetupDialogData_GetMinMarginTopLeft, 2370).
+-define(wxPageSetupDialogData_GetMinMarginBottomRight, 2371).
+-define(wxPageSetupDialogData_GetPaperId, 2372).
+-define(wxPageSetupDialogData_GetPaperSize, 2373).
+-define(wxPageSetupDialogData_GetPrintData, 2375).
+-define(wxPageSetupDialogData_IsOk, 2376).
+-define(wxPageSetupDialogData_SetDefaultInfo, 2377).
+-define(wxPageSetupDialogData_SetDefaultMinMargins, 2378).
+-define(wxPageSetupDialogData_SetMarginTopLeft, 2379).
+-define(wxPageSetupDialogData_SetMarginBottomRight, 2380).
+-define(wxPageSetupDialogData_SetMinMarginTopLeft, 2381).
+-define(wxPageSetupDialogData_SetMinMarginBottomRight, 2382).
+-define(wxPageSetupDialogData_SetPaperId, 2383).
+-define(wxPageSetupDialogData_SetPaperSize_1_1, 2384).
+-define(wxPageSetupDialogData_SetPaperSize_1_0, 2385).
+-define(wxPageSetupDialogData_SetPrintData, 2386).
+-define(wxPrintDialog_new_2_0, 2387).
+-define(wxPrintDialog_new_2_1, 2388).
+-define(wxPrintDialog_destruct, 2389).
+-define(wxPrintDialog_GetPrintDialogData, 2390).
+-define(wxPrintDialog_GetPrintDC, 2391).
+-define(wxPrintDialogData_new_0, 2392).
+-define(wxPrintDialogData_new_1_1, 2393).
+-define(wxPrintDialogData_new_1_0, 2394).
+-define(wxPrintDialogData_destruct, 2395).
+-define(wxPrintDialogData_EnableHelp, 2396).
+-define(wxPrintDialogData_EnablePageNumbers, 2397).
+-define(wxPrintDialogData_EnablePrintToFile, 2398).
+-define(wxPrintDialogData_EnableSelection, 2399).
+-define(wxPrintDialogData_GetAllPages, 2400).
+-define(wxPrintDialogData_GetCollate, 2401).
+-define(wxPrintDialogData_GetFromPage, 2402).
+-define(wxPrintDialogData_GetMaxPage, 2403).
+-define(wxPrintDialogData_GetMinPage, 2404).
+-define(wxPrintDialogData_GetNoCopies, 2405).
+-define(wxPrintDialogData_GetPrintData, 2406).
+-define(wxPrintDialogData_GetPrintToFile, 2407).
+-define(wxPrintDialogData_GetSelection, 2408).
+-define(wxPrintDialogData_GetToPage, 2409).
+-define(wxPrintDialogData_IsOk, 2410).
+-define(wxPrintDialogData_SetCollate, 2411).
+-define(wxPrintDialogData_SetFromPage, 2412).
+-define(wxPrintDialogData_SetMaxPage, 2413).
+-define(wxPrintDialogData_SetMinPage, 2414).
+-define(wxPrintDialogData_SetNoCopies, 2415).
+-define(wxPrintDialogData_SetPrintData, 2416).
+-define(wxPrintDialogData_SetPrintToFile, 2417).
+-define(wxPrintDialogData_SetSelection, 2418).
+-define(wxPrintDialogData_SetToPage, 2419).
+-define(wxPrintData_new_0, 2420).
+-define(wxPrintData_new_1, 2421).
+-define(wxPrintData_destruct, 2422).
+-define(wxPrintData_GetCollate, 2423).
+-define(wxPrintData_GetBin, 2424).
+-define(wxPrintData_GetColour, 2425).
+-define(wxPrintData_GetDuplex, 2426).
+-define(wxPrintData_GetNoCopies, 2427).
+-define(wxPrintData_GetOrientation, 2428).
+-define(wxPrintData_GetPaperId, 2429).
+-define(wxPrintData_GetPrinterName, 2430).
+-define(wxPrintData_GetQuality, 2431).
+-define(wxPrintData_IsOk, 2432).
+-define(wxPrintData_SetBin, 2433).
+-define(wxPrintData_SetCollate, 2434).
+-define(wxPrintData_SetColour, 2435).
+-define(wxPrintData_SetDuplex, 2436).
+-define(wxPrintData_SetNoCopies, 2437).
+-define(wxPrintData_SetOrientation, 2438).
+-define(wxPrintData_SetPaperId, 2439).
+-define(wxPrintData_SetPrinterName, 2440).
+-define(wxPrintData_SetQuality, 2441).
+-define(wxPrintPreview_new_2, 2444).
+-define(wxPrintPreview_new_3, 2445).
+-define(wxPrintPreview_destruct, 2447).
+-define(wxPrintPreview_GetCanvas, 2448).
+-define(wxPrintPreview_GetCurrentPage, 2449).
+-define(wxPrintPreview_GetFrame, 2450).
+-define(wxPrintPreview_GetMaxPage, 2451).
+-define(wxPrintPreview_GetMinPage, 2452).
+-define(wxPrintPreview_GetPrintout, 2453).
+-define(wxPrintPreview_GetPrintoutForPrinting, 2454).
+-define(wxPrintPreview_IsOk, 2455).
+-define(wxPrintPreview_PaintPage, 2456).
+-define(wxPrintPreview_Print, 2457).
+-define(wxPrintPreview_RenderPage, 2458).
+-define(wxPrintPreview_SetCanvas, 2459).
+-define(wxPrintPreview_SetCurrentPage, 2460).
+-define(wxPrintPreview_SetFrame, 2461).
+-define(wxPrintPreview_SetPrintout, 2462).
+-define(wxPrintPreview_SetZoom, 2463).
+-define(wxPreviewFrame_new, 2464).
+-define(wxPreviewFrame_destruct, 2465).
+-define(wxPreviewFrame_CreateControlBar, 2466).
+-define(wxPreviewFrame_CreateCanvas, 2467).
+-define(wxPreviewFrame_Initialize, 2468).
+-define(wxPreviewFrame_OnCloseWindow, 2469).
+-define(wxPreviewControlBar_new, 2470).
+-define(wxPreviewControlBar_destruct, 2471).
+-define(wxPreviewControlBar_CreateButtons, 2472).
+-define(wxPreviewControlBar_GetPrintPreview, 2473).
+-define(wxPreviewControlBar_GetZoomControl, 2474).
+-define(wxPreviewControlBar_SetZoomControl, 2475).
+-define(wxPrinter_new, 2477).
+-define(wxPrinter_CreateAbortWindow, 2478).
+-define(wxPrinter_GetAbort, 2479).
+-define(wxPrinter_GetLastError, 2480).
+-define(wxPrinter_GetPrintDialogData, 2481).
+-define(wxPrinter_Print, 2482).
+-define(wxPrinter_PrintDialog, 2483).
+-define(wxPrinter_ReportError, 2484).
+-define(wxPrinter_Setup, 2485).
+-define(wxPrinter_destroy, 2486).
+-define(wxXmlResource_new_1, 2487).
+-define(wxXmlResource_new_2, 2488).
+-define(wxXmlResource_destruct, 2489).
+-define(wxXmlResource_AttachUnknownControl, 2490).
+-define(wxXmlResource_ClearHandlers, 2491).
+-define(wxXmlResource_CompareVersion, 2492).
+-define(wxXmlResource_Get, 2493).
+-define(wxXmlResource_GetFlags, 2494).
+-define(wxXmlResource_GetVersion, 2495).
+-define(wxXmlResource_GetXRCID, 2496).
+-define(wxXmlResource_InitAllHandlers, 2497).
+-define(wxXmlResource_Load, 2498).
+-define(wxXmlResource_LoadBitmap, 2499).
+-define(wxXmlResource_LoadDialog_2, 2500).
+-define(wxXmlResource_LoadDialog_3, 2501).
+-define(wxXmlResource_LoadFrame_2, 2502).
+-define(wxXmlResource_LoadFrame_3, 2503).
+-define(wxXmlResource_LoadIcon, 2504).
+-define(wxXmlResource_LoadMenu, 2505).
+-define(wxXmlResource_LoadMenuBar_2, 2506).
+-define(wxXmlResource_LoadMenuBar_1, 2507).
+-define(wxXmlResource_LoadPanel_2, 2508).
+-define(wxXmlResource_LoadPanel_3, 2509).
+-define(wxXmlResource_LoadToolBar, 2510).
+-define(wxXmlResource_Set, 2511).
+-define(wxXmlResource_SetFlags, 2512).
+-define(wxXmlResource_Unload, 2513).
+-define(wxXmlResource_xrcctrl, 2514).
+-define(wxHtmlEasyPrinting_new, 2515).
+-define(wxHtmlEasyPrinting_destruct, 2516).
+-define(wxHtmlEasyPrinting_GetPrintData, 2517).
+-define(wxHtmlEasyPrinting_GetPageSetupData, 2518).
+-define(wxHtmlEasyPrinting_PreviewFile, 2519).
+-define(wxHtmlEasyPrinting_PreviewText, 2520).
+-define(wxHtmlEasyPrinting_PrintFile, 2521).
+-define(wxHtmlEasyPrinting_PrintText, 2522).
+-define(wxHtmlEasyPrinting_PageSetup, 2523).
+-define(wxHtmlEasyPrinting_SetFonts, 2524).
+-define(wxHtmlEasyPrinting_SetHeader, 2525).
+-define(wxHtmlEasyPrinting_SetFooter, 2526).
+-define(wxGLCanvas_new_2, 2528).
+-define(wxGLCanvas_new_3_1, 2529).
+-define(wxGLCanvas_new_3_0, 2530).
+-define(wxGLCanvas_GetContext, 2531).
+-define(wxGLCanvas_SetCurrent, 2533).
+-define(wxGLCanvas_SwapBuffers, 2534).
+-define(wxGLCanvas_destroy, 2535).
+-define(wxAuiManager_new, 2536).
+-define(wxAuiManager_destruct, 2537).
+-define(wxAuiManager_AddPane_2_1, 2538).
+-define(wxAuiManager_AddPane_3, 2539).
+-define(wxAuiManager_AddPane_2_0, 2540).
+-define(wxAuiManager_DetachPane, 2541).
+-define(wxAuiManager_GetAllPanes, 2542).
+-define(wxAuiManager_GetArtProvider, 2543).
+-define(wxAuiManager_GetDockSizeConstraint, 2544).
+-define(wxAuiManager_GetFlags, 2545).
+-define(wxAuiManager_GetManagedWindow, 2546).
+-define(wxAuiManager_GetManager, 2547).
+-define(wxAuiManager_GetPane_1_1, 2548).
+-define(wxAuiManager_GetPane_1_0, 2549).
+-define(wxAuiManager_HideHint, 2550).
+-define(wxAuiManager_InsertPane, 2551).
+-define(wxAuiManager_LoadPaneInfo, 2552).
+-define(wxAuiManager_LoadPerspective, 2553).
+-define(wxAuiManager_SavePaneInfo, 2554).
+-define(wxAuiManager_SavePerspective, 2555).
+-define(wxAuiManager_SetArtProvider, 2556).
+-define(wxAuiManager_SetDockSizeConstraint, 2557).
+-define(wxAuiManager_SetFlags, 2558).
+-define(wxAuiManager_SetManagedWindow, 2559).
+-define(wxAuiManager_ShowHint, 2560).
+-define(wxAuiManager_UnInit, 2561).
+-define(wxAuiManager_Update, 2562).
+-define(wxAuiPaneInfo_new_0, 2563).
+-define(wxAuiPaneInfo_new_1, 2564).
+-define(wxAuiPaneInfo_destruct, 2565).
+-define(wxAuiPaneInfo_BestSize_1, 2566).
+-define(wxAuiPaneInfo_BestSize_2, 2567).
+-define(wxAuiPaneInfo_Bottom, 2568).
+-define(wxAuiPaneInfo_BottomDockable, 2569).
+-define(wxAuiPaneInfo_Caption, 2570).
+-define(wxAuiPaneInfo_CaptionVisible, 2571).
+-define(wxAuiPaneInfo_Centre, 2572).
+-define(wxAuiPaneInfo_CentrePane, 2573).
+-define(wxAuiPaneInfo_CloseButton, 2574).
+-define(wxAuiPaneInfo_DefaultPane, 2575).
+-define(wxAuiPaneInfo_DestroyOnClose, 2576).
+-define(wxAuiPaneInfo_Direction, 2577).
+-define(wxAuiPaneInfo_Dock, 2578).
+-define(wxAuiPaneInfo_Dockable, 2579).
+-define(wxAuiPaneInfo_Fixed, 2580).
+-define(wxAuiPaneInfo_Float, 2581).
+-define(wxAuiPaneInfo_Floatable, 2582).
+-define(wxAuiPaneInfo_FloatingPosition_1, 2583).
+-define(wxAuiPaneInfo_FloatingPosition_2, 2584).
+-define(wxAuiPaneInfo_FloatingSize_1, 2585).
+-define(wxAuiPaneInfo_FloatingSize_2, 2586).
+-define(wxAuiPaneInfo_Gripper, 2587).
+-define(wxAuiPaneInfo_GripperTop, 2588).
+-define(wxAuiPaneInfo_HasBorder, 2589).
+-define(wxAuiPaneInfo_HasCaption, 2590).
+-define(wxAuiPaneInfo_HasCloseButton, 2591).
+-define(wxAuiPaneInfo_HasFlag, 2592).
+-define(wxAuiPaneInfo_HasGripper, 2593).
+-define(wxAuiPaneInfo_HasGripperTop, 2594).
+-define(wxAuiPaneInfo_HasMaximizeButton, 2595).
+-define(wxAuiPaneInfo_HasMinimizeButton, 2596).
+-define(wxAuiPaneInfo_HasPinButton, 2597).
+-define(wxAuiPaneInfo_Hide, 2598).
+-define(wxAuiPaneInfo_IsBottomDockable, 2599).
+-define(wxAuiPaneInfo_IsDocked, 2600).
+-define(wxAuiPaneInfo_IsFixed, 2601).
+-define(wxAuiPaneInfo_IsFloatable, 2602).
+-define(wxAuiPaneInfo_IsFloating, 2603).
+-define(wxAuiPaneInfo_IsLeftDockable, 2604).
+-define(wxAuiPaneInfo_IsMovable, 2605).
+-define(wxAuiPaneInfo_IsOk, 2606).
+-define(wxAuiPaneInfo_IsResizable, 2607).
+-define(wxAuiPaneInfo_IsRightDockable, 2608).
+-define(wxAuiPaneInfo_IsShown, 2609).
+-define(wxAuiPaneInfo_IsToolbar, 2610).
+-define(wxAuiPaneInfo_IsTopDockable, 2611).
+-define(wxAuiPaneInfo_Layer, 2612).
+-define(wxAuiPaneInfo_Left, 2613).
+-define(wxAuiPaneInfo_LeftDockable, 2614).
+-define(wxAuiPaneInfo_MaxSize_1, 2615).
+-define(wxAuiPaneInfo_MaxSize_2, 2616).
+-define(wxAuiPaneInfo_MaximizeButton, 2617).
+-define(wxAuiPaneInfo_MinSize_1, 2618).
+-define(wxAuiPaneInfo_MinSize_2, 2619).
+-define(wxAuiPaneInfo_MinimizeButton, 2620).
+-define(wxAuiPaneInfo_Movable, 2621).
+-define(wxAuiPaneInfo_Name, 2622).
+-define(wxAuiPaneInfo_PaneBorder, 2623).
+-define(wxAuiPaneInfo_PinButton, 2624).
+-define(wxAuiPaneInfo_Position, 2625).
+-define(wxAuiPaneInfo_Resizable, 2626).
+-define(wxAuiPaneInfo_Right, 2627).
+-define(wxAuiPaneInfo_RightDockable, 2628).
+-define(wxAuiPaneInfo_Row, 2629).
+-define(wxAuiPaneInfo_SafeSet, 2630).
+-define(wxAuiPaneInfo_SetFlag, 2631).
+-define(wxAuiPaneInfo_Show, 2632).
+-define(wxAuiPaneInfo_ToolbarPane, 2633).
+-define(wxAuiPaneInfo_Top, 2634).
+-define(wxAuiPaneInfo_TopDockable, 2635).
+-define(wxAuiPaneInfo_Window, 2636).
+-define(wxAuiNotebook_new_0, 2637).
+-define(wxAuiNotebook_new_2, 2638).
+-define(wxAuiNotebook_AddPage, 2639).
+-define(wxAuiNotebook_Create, 2640).
+-define(wxAuiNotebook_DeletePage, 2641).
+-define(wxAuiNotebook_GetArtProvider, 2642).
+-define(wxAuiNotebook_GetPage, 2643).
+-define(wxAuiNotebook_GetPageBitmap, 2644).
+-define(wxAuiNotebook_GetPageCount, 2645).
+-define(wxAuiNotebook_GetPageIndex, 2646).
+-define(wxAuiNotebook_GetPageText, 2647).
+-define(wxAuiNotebook_GetSelection, 2648).
+-define(wxAuiNotebook_InsertPage, 2649).
+-define(wxAuiNotebook_RemovePage, 2650).
+-define(wxAuiNotebook_SetArtProvider, 2651).
+-define(wxAuiNotebook_SetFont, 2652).
+-define(wxAuiNotebook_SetPageBitmap, 2653).
+-define(wxAuiNotebook_SetPageText, 2654).
+-define(wxAuiNotebook_SetSelection, 2655).
+-define(wxAuiNotebook_SetTabCtrlHeight, 2656).
+-define(wxAuiNotebook_SetUniformBitmapSize, 2657).
+-define(wxAuiNotebook_destroy, 2658).
+-define(wxMDIParentFrame_new_0, 2659).
+-define(wxMDIParentFrame_new_4, 2660).
+-define(wxMDIParentFrame_destruct, 2661).
+-define(wxMDIParentFrame_ActivateNext, 2662).
+-define(wxMDIParentFrame_ActivatePrevious, 2663).
+-define(wxMDIParentFrame_ArrangeIcons, 2664).
+-define(wxMDIParentFrame_Cascade, 2665).
+-define(wxMDIParentFrame_Create, 2666).
+-define(wxMDIParentFrame_GetActiveChild, 2667).
+-define(wxMDIParentFrame_GetClientWindow, 2668).
+-define(wxMDIParentFrame_Tile, 2669).
+-define(wxMDIChildFrame_new_0, 2670).
+-define(wxMDIChildFrame_new_4, 2671).
+-define(wxMDIChildFrame_destruct, 2672).
+-define(wxMDIChildFrame_Activate, 2673).
+-define(wxMDIChildFrame_Create, 2674).
+-define(wxMDIChildFrame_Maximize, 2675).
+-define(wxMDIChildFrame_Restore, 2676).
+-define(wxMDIClientWindow_new_0, 2677).
+-define(wxMDIClientWindow_new_2, 2678).
+-define(wxMDIClientWindow_destruct, 2679).
+-define(wxMDIClientWindow_CreateClient, 2680).
+-define(wxLayoutAlgorithm_new, 2681).
+-define(wxLayoutAlgorithm_LayoutFrame, 2682).
+-define(wxLayoutAlgorithm_LayoutMDIFrame, 2683).
+-define(wxLayoutAlgorithm_LayoutWindow, 2684).
+-define(wxLayoutAlgorithm_destroy, 2685).
+-define(wxEvent_GetId, 2686).
+-define(wxEvent_GetSkipped, 2687).
+-define(wxEvent_GetTimestamp, 2688).
+-define(wxEvent_IsCommandEvent, 2689).
+-define(wxEvent_ResumePropagation, 2690).
+-define(wxEvent_ShouldPropagate, 2691).
+-define(wxEvent_Skip, 2692).
+-define(wxEvent_StopPropagation, 2693).
+-define(wxCommandEvent_getClientData, 2694).
+-define(wxCommandEvent_GetExtraLong, 2695).
+-define(wxCommandEvent_GetInt, 2696).
+-define(wxCommandEvent_GetSelection, 2697).
+-define(wxCommandEvent_GetString, 2698).
+-define(wxCommandEvent_IsChecked, 2699).
+-define(wxCommandEvent_IsSelection, 2700).
+-define(wxCommandEvent_SetInt, 2701).
+-define(wxCommandEvent_SetString, 2702).
+-define(wxScrollEvent_GetOrientation, 2703).
+-define(wxScrollEvent_GetPosition, 2704).
+-define(wxScrollWinEvent_GetOrientation, 2705).
+-define(wxScrollWinEvent_GetPosition, 2706).
+-define(wxMouseEvent_AltDown, 2707).
+-define(wxMouseEvent_Button, 2708).
+-define(wxMouseEvent_ButtonDClick, 2709).
+-define(wxMouseEvent_ButtonDown, 2710).
+-define(wxMouseEvent_ButtonUp, 2711).
+-define(wxMouseEvent_CmdDown, 2712).
+-define(wxMouseEvent_ControlDown, 2713).
+-define(wxMouseEvent_Dragging, 2714).
+-define(wxMouseEvent_Entering, 2715).
+-define(wxMouseEvent_GetButton, 2716).
+-define(wxMouseEvent_GetPosition, 2719).
+-define(wxMouseEvent_GetLogicalPosition, 2720).
+-define(wxMouseEvent_GetLinesPerAction, 2721).
+-define(wxMouseEvent_GetWheelRotation, 2722).
+-define(wxMouseEvent_GetWheelDelta, 2723).
+-define(wxMouseEvent_GetX, 2724).
+-define(wxMouseEvent_GetY, 2725).
+-define(wxMouseEvent_IsButton, 2726).
+-define(wxMouseEvent_IsPageScroll, 2727).
+-define(wxMouseEvent_Leaving, 2728).
+-define(wxMouseEvent_LeftDClick, 2729).
+-define(wxMouseEvent_LeftDown, 2730).
+-define(wxMouseEvent_LeftIsDown, 2731).
+-define(wxMouseEvent_LeftUp, 2732).
+-define(wxMouseEvent_MetaDown, 2733).
+-define(wxMouseEvent_MiddleDClick, 2734).
+-define(wxMouseEvent_MiddleDown, 2735).
+-define(wxMouseEvent_MiddleIsDown, 2736).
+-define(wxMouseEvent_MiddleUp, 2737).
+-define(wxMouseEvent_Moving, 2738).
+-define(wxMouseEvent_RightDClick, 2739).
+-define(wxMouseEvent_RightDown, 2740).
+-define(wxMouseEvent_RightIsDown, 2741).
+-define(wxMouseEvent_RightUp, 2742).
+-define(wxMouseEvent_ShiftDown, 2743).
+-define(wxSetCursorEvent_GetCursor, 2744).
+-define(wxSetCursorEvent_GetX, 2745).
+-define(wxSetCursorEvent_GetY, 2746).
+-define(wxSetCursorEvent_HasCursor, 2747).
+-define(wxSetCursorEvent_SetCursor, 2748).
+-define(wxKeyEvent_AltDown, 2749).
+-define(wxKeyEvent_CmdDown, 2750).
+-define(wxKeyEvent_ControlDown, 2751).
+-define(wxKeyEvent_GetKeyCode, 2752).
+-define(wxKeyEvent_GetModifiers, 2753).
+-define(wxKeyEvent_GetPosition, 2756).
+-define(wxKeyEvent_GetRawKeyCode, 2757).
+-define(wxKeyEvent_GetRawKeyFlags, 2758).
+-define(wxKeyEvent_GetUnicodeKey, 2759).
+-define(wxKeyEvent_GetX, 2760).
+-define(wxKeyEvent_GetY, 2761).
+-define(wxKeyEvent_HasModifiers, 2762).
+-define(wxKeyEvent_MetaDown, 2763).
+-define(wxKeyEvent_ShiftDown, 2764).
+-define(wxSizeEvent_GetSize, 2765).
+-define(wxMoveEvent_GetPosition, 2766).
+-define(wxEraseEvent_GetDC, 2767).
+-define(wxFocusEvent_GetWindow, 2768).
+-define(wxChildFocusEvent_GetWindow, 2769).
+-define(wxMenuEvent_GetMenu, 2770).
+-define(wxMenuEvent_GetMenuId, 2771).
+-define(wxMenuEvent_IsPopup, 2772).
+-define(wxCloseEvent_CanVeto, 2773).
+-define(wxCloseEvent_GetLoggingOff, 2774).
+-define(wxCloseEvent_SetCanVeto, 2775).
+-define(wxCloseEvent_SetLoggingOff, 2776).
+-define(wxCloseEvent_Veto, 2777).
+-define(wxShowEvent_SetShow, 2778).
+-define(wxShowEvent_GetShow, 2779).
+-define(wxIconizeEvent_Iconized, 2780).
+-define(wxJoystickEvent_ButtonDown, 2781).
+-define(wxJoystickEvent_ButtonIsDown, 2782).
+-define(wxJoystickEvent_ButtonUp, 2783).
+-define(wxJoystickEvent_GetButtonChange, 2784).
+-define(wxJoystickEvent_GetButtonState, 2785).
+-define(wxJoystickEvent_GetJoystick, 2786).
+-define(wxJoystickEvent_GetPosition, 2787).
+-define(wxJoystickEvent_GetZPosition, 2788).
+-define(wxJoystickEvent_IsButton, 2789).
+-define(wxJoystickEvent_IsMove, 2790).
+-define(wxJoystickEvent_IsZMove, 2791).
+-define(wxUpdateUIEvent_CanUpdate, 2792).
+-define(wxUpdateUIEvent_Check, 2793).
+-define(wxUpdateUIEvent_Enable, 2794).
+-define(wxUpdateUIEvent_Show, 2795).
+-define(wxUpdateUIEvent_GetChecked, 2796).
+-define(wxUpdateUIEvent_GetEnabled, 2797).
+-define(wxUpdateUIEvent_GetShown, 2798).
+-define(wxUpdateUIEvent_GetSetChecked, 2799).
+-define(wxUpdateUIEvent_GetSetEnabled, 2800).
+-define(wxUpdateUIEvent_GetSetShown, 2801).
+-define(wxUpdateUIEvent_GetSetText, 2802).
+-define(wxUpdateUIEvent_GetText, 2803).
+-define(wxUpdateUIEvent_GetMode, 2804).
+-define(wxUpdateUIEvent_GetUpdateInterval, 2805).
+-define(wxUpdateUIEvent_ResetUpdateTime, 2806).
+-define(wxUpdateUIEvent_SetMode, 2807).
+-define(wxUpdateUIEvent_SetText, 2808).
+-define(wxUpdateUIEvent_SetUpdateInterval, 2809).
+-define(wxMouseCaptureChangedEvent_GetCapturedWindow, 2810).
+-define(wxPaletteChangedEvent_SetChangedWindow, 2811).
+-define(wxPaletteChangedEvent_GetChangedWindow, 2812).
+-define(wxQueryNewPaletteEvent_SetPaletteRealized, 2813).
+-define(wxQueryNewPaletteEvent_GetPaletteRealized, 2814).
+-define(wxNavigationKeyEvent_GetDirection, 2815).
+-define(wxNavigationKeyEvent_SetDirection, 2816).
+-define(wxNavigationKeyEvent_IsWindowChange, 2817).
+-define(wxNavigationKeyEvent_SetWindowChange, 2818).
+-define(wxNavigationKeyEvent_IsFromTab, 2819).
+-define(wxNavigationKeyEvent_SetFromTab, 2820).
+-define(wxNavigationKeyEvent_GetCurrentFocus, 2821).
+-define(wxNavigationKeyEvent_SetCurrentFocus, 2822).
+-define(wxHelpEvent_GetOrigin, 2823).
+-define(wxHelpEvent_GetPosition, 2824).
+-define(wxHelpEvent_SetOrigin, 2825).
+-define(wxHelpEvent_SetPosition, 2826).
+-define(wxContextMenuEvent_GetPosition, 2827).
+-define(wxContextMenuEvent_SetPosition, 2828).
+-define(wxIdleEvent_CanSend, 2829).
+-define(wxIdleEvent_GetMode, 2830).
+-define(wxIdleEvent_RequestMore, 2831).
+-define(wxIdleEvent_MoreRequested, 2832).
+-define(wxIdleEvent_SetMode, 2833).
+-define(wxGridEvent_AltDown, 2834).
+-define(wxGridEvent_ControlDown, 2835).
+-define(wxGridEvent_GetCol, 2836).
+-define(wxGridEvent_GetPosition, 2837).
+-define(wxGridEvent_GetRow, 2838).
+-define(wxGridEvent_MetaDown, 2839).
+-define(wxGridEvent_Selecting, 2840).
+-define(wxGridEvent_ShiftDown, 2841).
+-define(wxNotifyEvent_Allow, 2842).
+-define(wxNotifyEvent_IsAllowed, 2843).
+-define(wxNotifyEvent_Veto, 2844).
+-define(wxSashEvent_GetEdge, 2845).
+-define(wxSashEvent_GetDragRect, 2846).
+-define(wxSashEvent_GetDragStatus, 2847).
+-define(wxListEvent_GetCacheFrom, 2848).
+-define(wxListEvent_GetCacheTo, 2849).
+-define(wxListEvent_GetKeyCode, 2850).
+-define(wxListEvent_GetIndex, 2851).
+-define(wxListEvent_GetColumn, 2852).
+-define(wxListEvent_GetPoint, 2853).
+-define(wxListEvent_GetLabel, 2854).
+-define(wxListEvent_GetText, 2855).
+-define(wxListEvent_GetImage, 2856).
+-define(wxListEvent_GetData, 2857).
+-define(wxListEvent_GetMask, 2858).
+-define(wxListEvent_GetItem, 2859).
+-define(wxListEvent_IsEditCancelled, 2860).
+-define(wxDateEvent_GetDate, 2861).
+-define(wxCalendarEvent_GetWeekDay, 2862).
+-define(wxFileDirPickerEvent_GetPath, 2863).
+-define(wxColourPickerEvent_GetColour, 2864).
+-define(wxFontPickerEvent_GetFont, 2865).
+-define(wxStyledTextEvent_GetPosition, 2866).
+-define(wxStyledTextEvent_GetKey, 2867).
+-define(wxStyledTextEvent_GetModifiers, 2868).
+-define(wxStyledTextEvent_GetModificationType, 2869).
+-define(wxStyledTextEvent_GetText, 2870).
+-define(wxStyledTextEvent_GetLength, 2871).
+-define(wxStyledTextEvent_GetLinesAdded, 2872).
+-define(wxStyledTextEvent_GetLine, 2873).
+-define(wxStyledTextEvent_GetFoldLevelNow, 2874).
+-define(wxStyledTextEvent_GetFoldLevelPrev, 2875).
+-define(wxStyledTextEvent_GetMargin, 2876).
+-define(wxStyledTextEvent_GetMessage, 2877).
+-define(wxStyledTextEvent_GetWParam, 2878).
+-define(wxStyledTextEvent_GetLParam, 2879).
+-define(wxStyledTextEvent_GetListType, 2880).
+-define(wxStyledTextEvent_GetX, 2881).
+-define(wxStyledTextEvent_GetY, 2882).
+-define(wxStyledTextEvent_GetDragText, 2883).
+-define(wxStyledTextEvent_GetDragAllowMove, 2884).
+-define(wxStyledTextEvent_GetDragResult, 2885).
+-define(wxStyledTextEvent_GetShift, 2886).
+-define(wxStyledTextEvent_GetControl, 2887).
+-define(wxStyledTextEvent_GetAlt, 2888).
+-define(utils_wxGetKeyState, 2889).
+-define(utils_wxGetMousePosition, 2890).
+-define(utils_wxGetMouseState, 2891).
+-define(utils_wxSetDetectableAutoRepeat, 2892).
+-define(utils_wxBell, 2893).
+-define(utils_wxFindMenuItemId, 2894).
+-define(utils_wxGenericFindWindowAtPoint, 2895).
+-define(utils_wxFindWindowAtPoint, 2896).
+-define(utils_wxBeginBusyCursor, 2897).
+-define(utils_wxEndBusyCursor, 2898).
+-define(utils_wxIsBusy, 2899).
+-define(utils_wxShutdown, 2900).
+-define(utils_wxShell, 2901).
+-define(utils_wxLaunchDefaultBrowser, 2902).
+-define(utils_wxGetEmailAddress, 2903).
+-define(utils_wxGetUserId, 2904).
+-define(utils_wxGetHomeDir, 2905).
+-define(utils_wxNewId, 2906).
+-define(utils_wxRegisterId, 2907).
+-define(utils_wxGetCurrentId, 2908).
+-define(utils_wxGetOsDescription, 2909).
+-define(utils_wxIsPlatformLittleEndian, 2910).
+-define(utils_wxIsPlatform64Bit, 2911).
+-define(wxPrintout_new, 2912).
+-define(wxPrintout_destruct, 2913).
+-define(wxPrintout_GetDC, 2914).
+-define(wxPrintout_GetPageSizeMM, 2915).
+-define(wxPrintout_GetPageSizePixels, 2916).
+-define(wxPrintout_GetPaperRectPixels, 2917).
+-define(wxPrintout_GetPPIPrinter, 2918).
+-define(wxPrintout_GetPPIScreen, 2919).
+-define(wxPrintout_GetTitle, 2920).
+-define(wxPrintout_IsPreview, 2921).
+-define(wxPrintout_FitThisSizeToPaper, 2922).
+-define(wxPrintout_FitThisSizeToPage, 2923).
+-define(wxPrintout_FitThisSizeToPageMargins, 2924).
+-define(wxPrintout_MapScreenSizeToPaper, 2925).
+-define(wxPrintout_MapScreenSizeToPage, 2926).
+-define(wxPrintout_MapScreenSizeToPageMargins, 2927).
+-define(wxPrintout_MapScreenSizeToDevice, 2928).
+-define(wxPrintout_GetLogicalPaperRect, 2929).
+-define(wxPrintout_GetLogicalPageRect, 2930).
+-define(wxPrintout_GetLogicalPageMarginsRect, 2931).
+-define(wxPrintout_SetLogicalOrigin, 2932).
+-define(wxPrintout_OffsetLogicalOrigin, 2933).
+-define(wxStyledTextCtrl_new_2, 2934).
+-define(wxStyledTextCtrl_new_0, 2935).
+-define(wxStyledTextCtrl_destruct, 2936).
+-define(wxStyledTextCtrl_Create, 2937).
+-define(wxStyledTextCtrl_AddText, 2938).
+-define(wxStyledTextCtrl_AddStyledText, 2939).
+-define(wxStyledTextCtrl_InsertText, 2940).
+-define(wxStyledTextCtrl_ClearAll, 2941).
+-define(wxStyledTextCtrl_ClearDocumentStyle, 2942).
+-define(wxStyledTextCtrl_GetLength, 2943).
+-define(wxStyledTextCtrl_GetCharAt, 2944).
+-define(wxStyledTextCtrl_GetCurrentPos, 2945).
+-define(wxStyledTextCtrl_GetAnchor, 2946).
+-define(wxStyledTextCtrl_GetStyleAt, 2947).
+-define(wxStyledTextCtrl_Redo, 2948).
+-define(wxStyledTextCtrl_SetUndoCollection, 2949).
+-define(wxStyledTextCtrl_SelectAll, 2950).
+-define(wxStyledTextCtrl_SetSavePoint, 2951).
+-define(wxStyledTextCtrl_GetStyledText, 2952).
+-define(wxStyledTextCtrl_CanRedo, 2953).
+-define(wxStyledTextCtrl_MarkerLineFromHandle, 2954).
+-define(wxStyledTextCtrl_MarkerDeleteHandle, 2955).
+-define(wxStyledTextCtrl_GetUndoCollection, 2956).
+-define(wxStyledTextCtrl_GetViewWhiteSpace, 2957).
+-define(wxStyledTextCtrl_SetViewWhiteSpace, 2958).
+-define(wxStyledTextCtrl_PositionFromPoint, 2959).
+-define(wxStyledTextCtrl_PositionFromPointClose, 2960).
+-define(wxStyledTextCtrl_GotoLine, 2961).
+-define(wxStyledTextCtrl_GotoPos, 2962).
+-define(wxStyledTextCtrl_SetAnchor, 2963).
+-define(wxStyledTextCtrl_GetCurLine, 2964).
+-define(wxStyledTextCtrl_GetEndStyled, 2965).
+-define(wxStyledTextCtrl_ConvertEOLs, 2966).
+-define(wxStyledTextCtrl_GetEOLMode, 2967).
+-define(wxStyledTextCtrl_SetEOLMode, 2968).
+-define(wxStyledTextCtrl_StartStyling, 2969).
+-define(wxStyledTextCtrl_SetStyling, 2970).
+-define(wxStyledTextCtrl_GetBufferedDraw, 2971).
+-define(wxStyledTextCtrl_SetBufferedDraw, 2972).
+-define(wxStyledTextCtrl_SetTabWidth, 2973).
+-define(wxStyledTextCtrl_GetTabWidth, 2974).
+-define(wxStyledTextCtrl_SetCodePage, 2975).
+-define(wxStyledTextCtrl_MarkerDefine, 2976).
+-define(wxStyledTextCtrl_MarkerSetForeground, 2977).
+-define(wxStyledTextCtrl_MarkerSetBackground, 2978).
+-define(wxStyledTextCtrl_MarkerAdd, 2979).
+-define(wxStyledTextCtrl_MarkerDelete, 2980).
+-define(wxStyledTextCtrl_MarkerDeleteAll, 2981).
+-define(wxStyledTextCtrl_MarkerGet, 2982).
+-define(wxStyledTextCtrl_MarkerNext, 2983).
+-define(wxStyledTextCtrl_MarkerPrevious, 2984).
+-define(wxStyledTextCtrl_MarkerDefineBitmap, 2985).
+-define(wxStyledTextCtrl_MarkerAddSet, 2986).
+-define(wxStyledTextCtrl_MarkerSetAlpha, 2987).
+-define(wxStyledTextCtrl_SetMarginType, 2988).
+-define(wxStyledTextCtrl_GetMarginType, 2989).
+-define(wxStyledTextCtrl_SetMarginWidth, 2990).
+-define(wxStyledTextCtrl_GetMarginWidth, 2991).
+-define(wxStyledTextCtrl_SetMarginMask, 2992).
+-define(wxStyledTextCtrl_GetMarginMask, 2993).
+-define(wxStyledTextCtrl_SetMarginSensitive, 2994).
+-define(wxStyledTextCtrl_GetMarginSensitive, 2995).
+-define(wxStyledTextCtrl_StyleClearAll, 2996).
+-define(wxStyledTextCtrl_StyleSetForeground, 2997).
+-define(wxStyledTextCtrl_StyleSetBackground, 2998).
+-define(wxStyledTextCtrl_StyleSetBold, 2999).
+-define(wxStyledTextCtrl_StyleSetItalic, 3000).
+-define(wxStyledTextCtrl_StyleSetSize, 3001).
+-define(wxStyledTextCtrl_StyleSetFaceName, 3002).
+-define(wxStyledTextCtrl_StyleSetEOLFilled, 3003).
+-define(wxStyledTextCtrl_StyleResetDefault, 3004).
+-define(wxStyledTextCtrl_StyleSetUnderline, 3005).
+-define(wxStyledTextCtrl_StyleSetCase, 3006).
+-define(wxStyledTextCtrl_StyleSetHotSpot, 3007).
+-define(wxStyledTextCtrl_SetSelForeground, 3008).
+-define(wxStyledTextCtrl_SetSelBackground, 3009).
+-define(wxStyledTextCtrl_GetSelAlpha, 3010).
+-define(wxStyledTextCtrl_SetSelAlpha, 3011).
+-define(wxStyledTextCtrl_SetCaretForeground, 3012).
+-define(wxStyledTextCtrl_CmdKeyAssign, 3013).
+-define(wxStyledTextCtrl_CmdKeyClear, 3014).
+-define(wxStyledTextCtrl_CmdKeyClearAll, 3015).
+-define(wxStyledTextCtrl_SetStyleBytes, 3016).
+-define(wxStyledTextCtrl_StyleSetVisible, 3017).
+-define(wxStyledTextCtrl_GetCaretPeriod, 3018).
+-define(wxStyledTextCtrl_SetCaretPeriod, 3019).
+-define(wxStyledTextCtrl_SetWordChars, 3020).
+-define(wxStyledTextCtrl_BeginUndoAction, 3021).
+-define(wxStyledTextCtrl_EndUndoAction, 3022).
+-define(wxStyledTextCtrl_IndicatorSetStyle, 3023).
+-define(wxStyledTextCtrl_IndicatorGetStyle, 3024).
+-define(wxStyledTextCtrl_IndicatorSetForeground, 3025).
+-define(wxStyledTextCtrl_IndicatorGetForeground, 3026).
+-define(wxStyledTextCtrl_SetWhitespaceForeground, 3027).
+-define(wxStyledTextCtrl_SetWhitespaceBackground, 3028).
+-define(wxStyledTextCtrl_GetStyleBits, 3029).
+-define(wxStyledTextCtrl_SetLineState, 3030).
+-define(wxStyledTextCtrl_GetLineState, 3031).
+-define(wxStyledTextCtrl_GetMaxLineState, 3032).
+-define(wxStyledTextCtrl_GetCaretLineVisible, 3033).
+-define(wxStyledTextCtrl_SetCaretLineVisible, 3034).
+-define(wxStyledTextCtrl_GetCaretLineBackground, 3035).
+-define(wxStyledTextCtrl_SetCaretLineBackground, 3036).
+-define(wxStyledTextCtrl_AutoCompShow, 3037).
+-define(wxStyledTextCtrl_AutoCompCancel, 3038).
+-define(wxStyledTextCtrl_AutoCompActive, 3039).
+-define(wxStyledTextCtrl_AutoCompPosStart, 3040).
+-define(wxStyledTextCtrl_AutoCompComplete, 3041).
+-define(wxStyledTextCtrl_AutoCompStops, 3042).
+-define(wxStyledTextCtrl_AutoCompSetSeparator, 3043).
+-define(wxStyledTextCtrl_AutoCompGetSeparator, 3044).
+-define(wxStyledTextCtrl_AutoCompSelect, 3045).
+-define(wxStyledTextCtrl_AutoCompSetCancelAtStart, 3046).
+-define(wxStyledTextCtrl_AutoCompGetCancelAtStart, 3047).
+-define(wxStyledTextCtrl_AutoCompSetFillUps, 3048).
+-define(wxStyledTextCtrl_AutoCompSetChooseSingle, 3049).
+-define(wxStyledTextCtrl_AutoCompGetChooseSingle, 3050).
+-define(wxStyledTextCtrl_AutoCompSetIgnoreCase, 3051).
+-define(wxStyledTextCtrl_AutoCompGetIgnoreCase, 3052).
+-define(wxStyledTextCtrl_UserListShow, 3053).
+-define(wxStyledTextCtrl_AutoCompSetAutoHide, 3054).
+-define(wxStyledTextCtrl_AutoCompGetAutoHide, 3055).
+-define(wxStyledTextCtrl_AutoCompSetDropRestOfWord, 3056).
+-define(wxStyledTextCtrl_AutoCompGetDropRestOfWord, 3057).
+-define(wxStyledTextCtrl_RegisterImage, 3058).
+-define(wxStyledTextCtrl_ClearRegisteredImages, 3059).
+-define(wxStyledTextCtrl_AutoCompGetTypeSeparator, 3060).
+-define(wxStyledTextCtrl_AutoCompSetTypeSeparator, 3061).
+-define(wxStyledTextCtrl_AutoCompSetMaxWidth, 3062).
+-define(wxStyledTextCtrl_AutoCompGetMaxWidth, 3063).
+-define(wxStyledTextCtrl_AutoCompSetMaxHeight, 3064).
+-define(wxStyledTextCtrl_AutoCompGetMaxHeight, 3065).
+-define(wxStyledTextCtrl_SetIndent, 3066).
+-define(wxStyledTextCtrl_GetIndent, 3067).
+-define(wxStyledTextCtrl_SetUseTabs, 3068).
+-define(wxStyledTextCtrl_GetUseTabs, 3069).
+-define(wxStyledTextCtrl_SetLineIndentation, 3070).
+-define(wxStyledTextCtrl_GetLineIndentation, 3071).
+-define(wxStyledTextCtrl_GetLineIndentPosition, 3072).
+-define(wxStyledTextCtrl_GetColumn, 3073).
+-define(wxStyledTextCtrl_SetUseHorizontalScrollBar, 3074).
+-define(wxStyledTextCtrl_GetUseHorizontalScrollBar, 3075).
+-define(wxStyledTextCtrl_SetIndentationGuides, 3076).
+-define(wxStyledTextCtrl_GetIndentationGuides, 3077).
+-define(wxStyledTextCtrl_SetHighlightGuide, 3078).
+-define(wxStyledTextCtrl_GetHighlightGuide, 3079).
+-define(wxStyledTextCtrl_GetLineEndPosition, 3080).
+-define(wxStyledTextCtrl_GetCodePage, 3081).
+-define(wxStyledTextCtrl_GetCaretForeground, 3082).
+-define(wxStyledTextCtrl_GetReadOnly, 3083).
+-define(wxStyledTextCtrl_SetCurrentPos, 3084).
+-define(wxStyledTextCtrl_SetSelectionStart, 3085).
+-define(wxStyledTextCtrl_GetSelectionStart, 3086).
+-define(wxStyledTextCtrl_SetSelectionEnd, 3087).
+-define(wxStyledTextCtrl_GetSelectionEnd, 3088).
+-define(wxStyledTextCtrl_SetPrintMagnification, 3089).
+-define(wxStyledTextCtrl_GetPrintMagnification, 3090).
+-define(wxStyledTextCtrl_SetPrintColourMode, 3091).
+-define(wxStyledTextCtrl_GetPrintColourMode, 3092).
+-define(wxStyledTextCtrl_FindText, 3093).
+-define(wxStyledTextCtrl_FormatRange, 3094).
+-define(wxStyledTextCtrl_GetFirstVisibleLine, 3095).
+-define(wxStyledTextCtrl_GetLine, 3096).
+-define(wxStyledTextCtrl_GetLineCount, 3097).
+-define(wxStyledTextCtrl_SetMarginLeft, 3098).
+-define(wxStyledTextCtrl_GetMarginLeft, 3099).
+-define(wxStyledTextCtrl_SetMarginRight, 3100).
+-define(wxStyledTextCtrl_GetMarginRight, 3101).
+-define(wxStyledTextCtrl_GetModify, 3102).
+-define(wxStyledTextCtrl_SetSelection, 3103).
+-define(wxStyledTextCtrl_GetSelectedText, 3104).
+-define(wxStyledTextCtrl_GetTextRange, 3105).
+-define(wxStyledTextCtrl_HideSelection, 3106).
+-define(wxStyledTextCtrl_LineFromPosition, 3107).
+-define(wxStyledTextCtrl_PositionFromLine, 3108).
+-define(wxStyledTextCtrl_LineScroll, 3109).
+-define(wxStyledTextCtrl_EnsureCaretVisible, 3110).
+-define(wxStyledTextCtrl_ReplaceSelection, 3111).
+-define(wxStyledTextCtrl_SetReadOnly, 3112).
+-define(wxStyledTextCtrl_CanPaste, 3113).
+-define(wxStyledTextCtrl_CanUndo, 3114).
+-define(wxStyledTextCtrl_EmptyUndoBuffer, 3115).
+-define(wxStyledTextCtrl_Undo, 3116).
+-define(wxStyledTextCtrl_Cut, 3117).
+-define(wxStyledTextCtrl_Copy, 3118).
+-define(wxStyledTextCtrl_Paste, 3119).
+-define(wxStyledTextCtrl_Clear, 3120).
+-define(wxStyledTextCtrl_SetText, 3121).
+-define(wxStyledTextCtrl_GetText, 3122).
+-define(wxStyledTextCtrl_GetTextLength, 3123).
+-define(wxStyledTextCtrl_GetOvertype, 3124).
+-define(wxStyledTextCtrl_SetCaretWidth, 3125).
+-define(wxStyledTextCtrl_GetCaretWidth, 3126).
+-define(wxStyledTextCtrl_SetTargetStart, 3127).
+-define(wxStyledTextCtrl_GetTargetStart, 3128).
+-define(wxStyledTextCtrl_SetTargetEnd, 3129).
+-define(wxStyledTextCtrl_GetTargetEnd, 3130).
+-define(wxStyledTextCtrl_ReplaceTarget, 3131).
+-define(wxStyledTextCtrl_SearchInTarget, 3132).
+-define(wxStyledTextCtrl_SetSearchFlags, 3133).
+-define(wxStyledTextCtrl_GetSearchFlags, 3134).
+-define(wxStyledTextCtrl_CallTipShow, 3135).
+-define(wxStyledTextCtrl_CallTipCancel, 3136).
+-define(wxStyledTextCtrl_CallTipActive, 3137).
+-define(wxStyledTextCtrl_CallTipPosAtStart, 3138).
+-define(wxStyledTextCtrl_CallTipSetHighlight, 3139).
+-define(wxStyledTextCtrl_CallTipSetBackground, 3140).
+-define(wxStyledTextCtrl_CallTipSetForeground, 3141).
+-define(wxStyledTextCtrl_CallTipSetForegroundHighlight, 3142).
+-define(wxStyledTextCtrl_CallTipUseStyle, 3143).
+-define(wxStyledTextCtrl_VisibleFromDocLine, 3144).
+-define(wxStyledTextCtrl_DocLineFromVisible, 3145).
+-define(wxStyledTextCtrl_WrapCount, 3146).
+-define(wxStyledTextCtrl_SetFoldLevel, 3147).
+-define(wxStyledTextCtrl_GetFoldLevel, 3148).
+-define(wxStyledTextCtrl_GetLastChild, 3149).
+-define(wxStyledTextCtrl_GetFoldParent, 3150).
+-define(wxStyledTextCtrl_ShowLines, 3151).
+-define(wxStyledTextCtrl_HideLines, 3152).
+-define(wxStyledTextCtrl_GetLineVisible, 3153).
+-define(wxStyledTextCtrl_SetFoldExpanded, 3154).
+-define(wxStyledTextCtrl_GetFoldExpanded, 3155).
+-define(wxStyledTextCtrl_ToggleFold, 3156).
+-define(wxStyledTextCtrl_EnsureVisible, 3157).
+-define(wxStyledTextCtrl_SetFoldFlags, 3158).
+-define(wxStyledTextCtrl_EnsureVisibleEnforcePolicy, 3159).
+-define(wxStyledTextCtrl_SetTabIndents, 3160).
+-define(wxStyledTextCtrl_GetTabIndents, 3161).
+-define(wxStyledTextCtrl_SetBackSpaceUnIndents, 3162).
+-define(wxStyledTextCtrl_GetBackSpaceUnIndents, 3163).
+-define(wxStyledTextCtrl_SetMouseDwellTime, 3164).
+-define(wxStyledTextCtrl_GetMouseDwellTime, 3165).
+-define(wxStyledTextCtrl_WordStartPosition, 3166).
+-define(wxStyledTextCtrl_WordEndPosition, 3167).
+-define(wxStyledTextCtrl_SetWrapMode, 3168).
+-define(wxStyledTextCtrl_GetWrapMode, 3169).
+-define(wxStyledTextCtrl_SetWrapVisualFlags, 3170).
+-define(wxStyledTextCtrl_GetWrapVisualFlags, 3171).
+-define(wxStyledTextCtrl_SetWrapVisualFlagsLocation, 3172).
+-define(wxStyledTextCtrl_GetWrapVisualFlagsLocation, 3173).
+-define(wxStyledTextCtrl_SetWrapStartIndent, 3174).
+-define(wxStyledTextCtrl_GetWrapStartIndent, 3175).
+-define(wxStyledTextCtrl_SetLayoutCache, 3176).
+-define(wxStyledTextCtrl_GetLayoutCache, 3177).
+-define(wxStyledTextCtrl_SetScrollWidth, 3178).
+-define(wxStyledTextCtrl_GetScrollWidth, 3179).
+-define(wxStyledTextCtrl_TextWidth, 3180).
+-define(wxStyledTextCtrl_GetEndAtLastLine, 3181).
+-define(wxStyledTextCtrl_TextHeight, 3182).
+-define(wxStyledTextCtrl_SetUseVerticalScrollBar, 3183).
+-define(wxStyledTextCtrl_GetUseVerticalScrollBar, 3184).
+-define(wxStyledTextCtrl_AppendText, 3185).
+-define(wxStyledTextCtrl_GetTwoPhaseDraw, 3186).
+-define(wxStyledTextCtrl_SetTwoPhaseDraw, 3187).
+-define(wxStyledTextCtrl_TargetFromSelection, 3188).
+-define(wxStyledTextCtrl_LinesJoin, 3189).
+-define(wxStyledTextCtrl_LinesSplit, 3190).
+-define(wxStyledTextCtrl_SetFoldMarginColour, 3191).
+-define(wxStyledTextCtrl_SetFoldMarginHiColour, 3192).
+-define(wxStyledTextCtrl_LineDown, 3193).
+-define(wxStyledTextCtrl_LineDownExtend, 3194).
+-define(wxStyledTextCtrl_LineUp, 3195).
+-define(wxStyledTextCtrl_LineUpExtend, 3196).
+-define(wxStyledTextCtrl_CharLeft, 3197).
+-define(wxStyledTextCtrl_CharLeftExtend, 3198).
+-define(wxStyledTextCtrl_CharRight, 3199).
+-define(wxStyledTextCtrl_CharRightExtend, 3200).
+-define(wxStyledTextCtrl_WordLeft, 3201).
+-define(wxStyledTextCtrl_WordLeftExtend, 3202).
+-define(wxStyledTextCtrl_WordRight, 3203).
+-define(wxStyledTextCtrl_WordRightExtend, 3204).
+-define(wxStyledTextCtrl_Home, 3205).
+-define(wxStyledTextCtrl_HomeExtend, 3206).
+-define(wxStyledTextCtrl_LineEnd, 3207).
+-define(wxStyledTextCtrl_LineEndExtend, 3208).
+-define(wxStyledTextCtrl_DocumentStart, 3209).
+-define(wxStyledTextCtrl_DocumentStartExtend, 3210).
+-define(wxStyledTextCtrl_DocumentEnd, 3211).
+-define(wxStyledTextCtrl_DocumentEndExtend, 3212).
+-define(wxStyledTextCtrl_PageUp, 3213).
+-define(wxStyledTextCtrl_PageUpExtend, 3214).
+-define(wxStyledTextCtrl_PageDown, 3215).
+-define(wxStyledTextCtrl_PageDownExtend, 3216).
+-define(wxStyledTextCtrl_EditToggleOvertype, 3217).
+-define(wxStyledTextCtrl_Cancel, 3218).
+-define(wxStyledTextCtrl_DeleteBack, 3219).
+-define(wxStyledTextCtrl_Tab, 3220).
+-define(wxStyledTextCtrl_BackTab, 3221).
+-define(wxStyledTextCtrl_NewLine, 3222).
+-define(wxStyledTextCtrl_FormFeed, 3223).
+-define(wxStyledTextCtrl_VCHome, 3224).
+-define(wxStyledTextCtrl_VCHomeExtend, 3225).
+-define(wxStyledTextCtrl_ZoomIn, 3226).
+-define(wxStyledTextCtrl_ZoomOut, 3227).
+-define(wxStyledTextCtrl_DelWordLeft, 3228).
+-define(wxStyledTextCtrl_DelWordRight, 3229).
+-define(wxStyledTextCtrl_LineCut, 3230).
+-define(wxStyledTextCtrl_LineDelete, 3231).
+-define(wxStyledTextCtrl_LineTranspose, 3232).
+-define(wxStyledTextCtrl_LineDuplicate, 3233).
+-define(wxStyledTextCtrl_LowerCase, 3234).
+-define(wxStyledTextCtrl_UpperCase, 3235).
+-define(wxStyledTextCtrl_LineScrollDown, 3236).
+-define(wxStyledTextCtrl_LineScrollUp, 3237).
+-define(wxStyledTextCtrl_DeleteBackNotLine, 3238).
+-define(wxStyledTextCtrl_HomeDisplay, 3239).
+-define(wxStyledTextCtrl_HomeDisplayExtend, 3240).
+-define(wxStyledTextCtrl_LineEndDisplay, 3241).
+-define(wxStyledTextCtrl_LineEndDisplayExtend, 3242).
+-define(wxStyledTextCtrl_HomeWrapExtend, 3243).
+-define(wxStyledTextCtrl_LineEndWrap, 3244).
+-define(wxStyledTextCtrl_LineEndWrapExtend, 3245).
+-define(wxStyledTextCtrl_VCHomeWrap, 3246).
+-define(wxStyledTextCtrl_VCHomeWrapExtend, 3247).
+-define(wxStyledTextCtrl_LineCopy, 3248).
+-define(wxStyledTextCtrl_MoveCaretInsideView, 3249).
+-define(wxStyledTextCtrl_LineLength, 3250).
+-define(wxStyledTextCtrl_BraceHighlight, 3251).
+-define(wxStyledTextCtrl_BraceBadLight, 3252).
+-define(wxStyledTextCtrl_BraceMatch, 3253).
+-define(wxStyledTextCtrl_GetViewEOL, 3254).
+-define(wxStyledTextCtrl_SetViewEOL, 3255).
+-define(wxStyledTextCtrl_SetModEventMask, 3256).
+-define(wxStyledTextCtrl_GetEdgeColumn, 3257).
+-define(wxStyledTextCtrl_SetEdgeColumn, 3258).
+-define(wxStyledTextCtrl_GetEdgeMode, 3259).
+-define(wxStyledTextCtrl_GetEdgeColour, 3260).
+-define(wxStyledTextCtrl_SetEdgeColour, 3261).
+-define(wxStyledTextCtrl_SearchAnchor, 3262).
+-define(wxStyledTextCtrl_SearchNext, 3263).
+-define(wxStyledTextCtrl_SearchPrev, 3264).
+-define(wxStyledTextCtrl_LinesOnScreen, 3265).
+-define(wxStyledTextCtrl_UsePopUp, 3266).
+-define(wxStyledTextCtrl_SelectionIsRectangle, 3267).
+-define(wxStyledTextCtrl_SetZoom, 3268).
+-define(wxStyledTextCtrl_GetZoom, 3269).
+-define(wxStyledTextCtrl_GetModEventMask, 3270).
+-define(wxStyledTextCtrl_SetSTCFocus, 3271).
+-define(wxStyledTextCtrl_GetSTCFocus, 3272).
+-define(wxStyledTextCtrl_SetStatus, 3273).
+-define(wxStyledTextCtrl_GetStatus, 3274).
+-define(wxStyledTextCtrl_SetMouseDownCaptures, 3275).
+-define(wxStyledTextCtrl_GetMouseDownCaptures, 3276).
+-define(wxStyledTextCtrl_SetSTCCursor, 3277).
+-define(wxStyledTextCtrl_GetSTCCursor, 3278).
+-define(wxStyledTextCtrl_SetControlCharSymbol, 3279).
+-define(wxStyledTextCtrl_GetControlCharSymbol, 3280).
+-define(wxStyledTextCtrl_WordPartLeft, 3281).
+-define(wxStyledTextCtrl_WordPartLeftExtend, 3282).
+-define(wxStyledTextCtrl_WordPartRight, 3283).
+-define(wxStyledTextCtrl_WordPartRightExtend, 3284).
+-define(wxStyledTextCtrl_SetVisiblePolicy, 3285).
+-define(wxStyledTextCtrl_DelLineLeft, 3286).
+-define(wxStyledTextCtrl_DelLineRight, 3287).
+-define(wxStyledTextCtrl_GetXOffset, 3288).
+-define(wxStyledTextCtrl_ChooseCaretX, 3289).
+-define(wxStyledTextCtrl_SetXCaretPolicy, 3290).
+-define(wxStyledTextCtrl_SetYCaretPolicy, 3291).
+-define(wxStyledTextCtrl_GetPrintWrapMode, 3292).
+-define(wxStyledTextCtrl_SetHotspotActiveForeground, 3293).
+-define(wxStyledTextCtrl_SetHotspotActiveBackground, 3294).
+-define(wxStyledTextCtrl_SetHotspotActiveUnderline, 3295).
+-define(wxStyledTextCtrl_SetHotspotSingleLine, 3296).
+-define(wxStyledTextCtrl_ParaDownExtend, 3297).
+-define(wxStyledTextCtrl_ParaUp, 3298).
+-define(wxStyledTextCtrl_ParaUpExtend, 3299).
+-define(wxStyledTextCtrl_PositionBefore, 3300).
+-define(wxStyledTextCtrl_PositionAfter, 3301).
+-define(wxStyledTextCtrl_CopyRange, 3302).
+-define(wxStyledTextCtrl_CopyText, 3303).
+-define(wxStyledTextCtrl_SetSelectionMode, 3304).
+-define(wxStyledTextCtrl_GetSelectionMode, 3305).
+-define(wxStyledTextCtrl_LineDownRectExtend, 3306).
+-define(wxStyledTextCtrl_LineUpRectExtend, 3307).
+-define(wxStyledTextCtrl_CharLeftRectExtend, 3308).
+-define(wxStyledTextCtrl_CharRightRectExtend, 3309).
+-define(wxStyledTextCtrl_HomeRectExtend, 3310).
+-define(wxStyledTextCtrl_VCHomeRectExtend, 3311).
+-define(wxStyledTextCtrl_LineEndRectExtend, 3312).
+-define(wxStyledTextCtrl_PageUpRectExtend, 3313).
+-define(wxStyledTextCtrl_PageDownRectExtend, 3314).
+-define(wxStyledTextCtrl_StutteredPageUp, 3315).
+-define(wxStyledTextCtrl_StutteredPageUpExtend, 3316).
+-define(wxStyledTextCtrl_StutteredPageDown, 3317).
+-define(wxStyledTextCtrl_StutteredPageDownExtend, 3318).
+-define(wxStyledTextCtrl_WordLeftEnd, 3319).
+-define(wxStyledTextCtrl_WordLeftEndExtend, 3320).
+-define(wxStyledTextCtrl_WordRightEnd, 3321).
+-define(wxStyledTextCtrl_WordRightEndExtend, 3322).
+-define(wxStyledTextCtrl_SetWhitespaceChars, 3323).
+-define(wxStyledTextCtrl_SetCharsDefault, 3324).
+-define(wxStyledTextCtrl_AutoCompGetCurrent, 3325).
+-define(wxStyledTextCtrl_Allocate, 3326).
+-define(wxStyledTextCtrl_FindColumn, 3327).
+-define(wxStyledTextCtrl_GetCaretSticky, 3328).
+-define(wxStyledTextCtrl_SetCaretSticky, 3329).
+-define(wxStyledTextCtrl_ToggleCaretSticky, 3330).
+-define(wxStyledTextCtrl_SetPasteConvertEndings, 3331).
+-define(wxStyledTextCtrl_GetPasteConvertEndings, 3332).
+-define(wxStyledTextCtrl_SelectionDuplicate, 3333).
+-define(wxStyledTextCtrl_SetCaretLineBackAlpha, 3334).
+-define(wxStyledTextCtrl_GetCaretLineBackAlpha, 3335).
+-define(wxStyledTextCtrl_StartRecord, 3336).
+-define(wxStyledTextCtrl_StopRecord, 3337).
+-define(wxStyledTextCtrl_SetLexer, 3338).
+-define(wxStyledTextCtrl_GetLexer, 3339).
+-define(wxStyledTextCtrl_Colourise, 3340).
+-define(wxStyledTextCtrl_SetProperty, 3341).
+-define(wxStyledTextCtrl_SetKeyWords, 3342).
+-define(wxStyledTextCtrl_SetLexerLanguage, 3343).
+-define(wxStyledTextCtrl_GetProperty, 3344).
+-define(wxStyledTextCtrl_GetStyleBitsNeeded, 3345).
+-define(wxStyledTextCtrl_GetCurrentLine, 3346).
+-define(wxStyledTextCtrl_StyleSetSpec, 3347).
+-define(wxStyledTextCtrl_StyleSetFont, 3348).
+-define(wxStyledTextCtrl_StyleSetFontAttr, 3349).
+-define(wxStyledTextCtrl_StyleSetCharacterSet, 3350).
+-define(wxStyledTextCtrl_StyleSetFontEncoding, 3351).
+-define(wxStyledTextCtrl_CmdKeyExecute, 3352).
+-define(wxStyledTextCtrl_SetMargins, 3353).
+-define(wxStyledTextCtrl_GetSelection, 3354).
+-define(wxStyledTextCtrl_PointFromPosition, 3355).
+-define(wxStyledTextCtrl_ScrollToLine, 3356).
+-define(wxStyledTextCtrl_ScrollToColumn, 3357).
+-define(wxStyledTextCtrl_SendMsg, 3358).
+-define(wxStyledTextCtrl_SetVScrollBar, 3359).
+-define(wxStyledTextCtrl_SetHScrollBar, 3360).
+-define(wxStyledTextCtrl_GetLastKeydownProcessed, 3361).
+-define(wxStyledTextCtrl_SetLastKeydownProcessed, 3362).
+-define(wxStyledTextCtrl_SaveFile, 3363).
+-define(wxStyledTextCtrl_LoadFile, 3364).
+-define(wxStyledTextCtrl_DoDragOver, 3365).
+-define(wxStyledTextCtrl_DoDropText, 3366).
+-define(wxStyledTextCtrl_GetUseAntiAliasing, 3367).
+-define(wxStyledTextCtrl_AddTextRaw, 3368).
+-define(wxStyledTextCtrl_InsertTextRaw, 3369).
+-define(wxStyledTextCtrl_GetCurLineRaw, 3370).
+-define(wxStyledTextCtrl_GetLineRaw, 3371).
+-define(wxStyledTextCtrl_GetSelectedTextRaw, 3372).
+-define(wxStyledTextCtrl_GetTextRangeRaw, 3373).
+-define(wxStyledTextCtrl_SetTextRaw, 3374).
+-define(wxStyledTextCtrl_GetTextRaw, 3375).
+-define(wxStyledTextCtrl_AppendTextRaw, 3376).
+-define(wxArtProvider_GetBitmap, 3377).
+-define(wxArtProvider_GetIcon, 3378).
+-define(wxTreeEvent_GetKeyCode, 3379).
+-define(wxTreeEvent_GetItem, 3380).
+-define(wxTreeEvent_GetKeyEvent, 3381).
+-define(wxTreeEvent_GetLabel, 3382).
+-define(wxTreeEvent_GetOldItem, 3383).
+-define(wxTreeEvent_GetPoint, 3384).
+-define(wxTreeEvent_IsEditCancelled, 3385).
+-define(wxTreeEvent_SetToolTip, 3386).
+-define(wxNotebookEvent_GetOldSelection, 3387).
+-define(wxNotebookEvent_GetSelection, 3388).
+-define(wxNotebookEvent_SetOldSelection, 3389).
+-define(wxNotebookEvent_SetSelection, 3390).
+-define(wxFileDataObject_new, 3391).
+-define(wxFileDataObject_AddFile, 3392).
+-define(wxFileDataObject_GetFilenames, 3393).
+-define(wxFileDataObject_destroy, 3394).
+-define(wxTextDataObject_new, 3395).
+-define(wxTextDataObject_GetTextLength, 3396).
+-define(wxTextDataObject_GetText, 3397).
+-define(wxTextDataObject_SetText, 3398).
+-define(wxTextDataObject_destroy, 3399).
+-define(wxBitmapDataObject_new_1_1, 3400).
+-define(wxBitmapDataObject_new_1_0, 3401).
+-define(wxBitmapDataObject_GetBitmap, 3402).
+-define(wxBitmapDataObject_SetBitmap, 3403).
+-define(wxBitmapDataObject_destroy, 3404).
+-define(wxClipboard_new, 3406).
+-define(wxClipboard_destruct, 3407).
+-define(wxClipboard_AddData, 3408).
+-define(wxClipboard_Clear, 3409).
+-define(wxClipboard_Close, 3410).
+-define(wxClipboard_Flush, 3411).
+-define(wxClipboard_GetData, 3412).
+-define(wxClipboard_IsOpened, 3413).
+-define(wxClipboard_Open, 3414).
+-define(wxClipboard_SetData, 3415).
+-define(wxClipboard_UsePrimarySelection, 3417).
+-define(wxClipboard_IsSupported, 3418).
+-define(wxClipboard_Get, 3419).
+-define(wxSpinEvent_GetPosition, 3420).
+-define(wxSpinEvent_SetPosition, 3421).
+-define(wxSplitterWindow_new_0, 3422).
+-define(wxSplitterWindow_new_2, 3423).
+-define(wxSplitterWindow_destruct, 3424).
+-define(wxSplitterWindow_Create, 3425).
+-define(wxSplitterWindow_GetMinimumPaneSize, 3426).
+-define(wxSplitterWindow_GetSashGravity, 3427).
+-define(wxSplitterWindow_GetSashPosition, 3428).
+-define(wxSplitterWindow_GetSplitMode, 3429).
+-define(wxSplitterWindow_GetWindow1, 3430).
+-define(wxSplitterWindow_GetWindow2, 3431).
+-define(wxSplitterWindow_Initialize, 3432).
+-define(wxSplitterWindow_IsSplit, 3433).
+-define(wxSplitterWindow_ReplaceWindow, 3434).
+-define(wxSplitterWindow_SetSashGravity, 3435).
+-define(wxSplitterWindow_SetSashPosition, 3436).
+-define(wxSplitterWindow_SetSashSize, 3437).
+-define(wxSplitterWindow_SetMinimumPaneSize, 3438).
+-define(wxSplitterWindow_SetSplitMode, 3439).
+-define(wxSplitterWindow_SplitHorizontally, 3440).
+-define(wxSplitterWindow_SplitVertically, 3441).
+-define(wxSplitterWindow_Unsplit, 3442).
+-define(wxSplitterWindow_UpdateSize, 3443).
+-define(wxSplitterEvent_GetSashPosition, 3444).
+-define(wxSplitterEvent_GetX, 3445).
+-define(wxSplitterEvent_GetY, 3446).
+-define(wxSplitterEvent_GetWindowBeingRemoved, 3447).
+-define(wxSplitterEvent_SetSashPosition, 3448).
+-define(wxHtmlWindow_new_0, 3449).
+-define(wxHtmlWindow_new_2, 3450).
+-define(wxHtmlWindow_AppendToPage, 3451).
+-define(wxHtmlWindow_GetOpenedAnchor, 3452).
+-define(wxHtmlWindow_GetOpenedPage, 3453).
+-define(wxHtmlWindow_GetOpenedPageTitle, 3454).
+-define(wxHtmlWindow_GetRelatedFrame, 3455).
+-define(wxHtmlWindow_HistoryBack, 3456).
+-define(wxHtmlWindow_HistoryCanBack, 3457).
+-define(wxHtmlWindow_HistoryCanForward, 3458).
+-define(wxHtmlWindow_HistoryClear, 3459).
+-define(wxHtmlWindow_HistoryForward, 3460).
+-define(wxHtmlWindow_LoadFile, 3461).
+-define(wxHtmlWindow_LoadPage, 3462).
+-define(wxHtmlWindow_SelectAll, 3463).
+-define(wxHtmlWindow_SelectionToText, 3464).
+-define(wxHtmlWindow_SelectLine, 3465).
+-define(wxHtmlWindow_SelectWord, 3466).
+-define(wxHtmlWindow_SetBorders, 3467).
+-define(wxHtmlWindow_SetFonts, 3468).
+-define(wxHtmlWindow_SetPage, 3469).
+-define(wxHtmlWindow_SetRelatedFrame, 3470).
+-define(wxHtmlWindow_SetRelatedStatusBar, 3471).
+-define(wxHtmlWindow_ToText, 3472).
+-define(wxHtmlWindow_destroy, 3473).
+-define(wxHtmlLinkEvent_GetLinkInfo, 3474).
+-define(wxAuiNotebookEvent_SetSelection, 3475).
+-define(wxAuiNotebookEvent_GetSelection, 3476).
+-define(wxAuiNotebookEvent_SetOldSelection, 3477).
+-define(wxAuiNotebookEvent_GetOldSelection, 3478).
+-define(wxAuiNotebookEvent_SetDragSource, 3479).
+-define(wxAuiNotebookEvent_GetDragSource, 3480).
+-define(wxAuiManagerEvent_SetManager, 3481).
+-define(wxAuiManagerEvent_GetManager, 3482).
+-define(wxAuiManagerEvent_SetPane, 3483).
+-define(wxAuiManagerEvent_GetPane, 3484).
+-define(wxAuiManagerEvent_SetButton, 3485).
+-define(wxAuiManagerEvent_GetButton, 3486).
+-define(wxAuiManagerEvent_SetDC, 3487).
+-define(wxAuiManagerEvent_GetDC, 3488).
+-define(wxAuiManagerEvent_Veto, 3489).
+-define(wxAuiManagerEvent_GetVeto, 3490).
+-define(wxAuiManagerEvent_SetCanVeto, 3491).
+-define(wxAuiManagerEvent_CanVeto, 3492).
+-define(wxLogNull_new, 3493).
+-define(wxLogNull_destroy, 3494).
diff --git a/lib/wx/src/wx.app.src b/lib/wx/src/wx.app.src
new file mode 100644
index 0000000000..e13982b0c1
--- /dev/null
+++ b/lib/wx/src/wx.app.src
@@ -0,0 +1,37 @@
+%% This is an -*- erlang -*- file.
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2010. 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, wx,
+ [{description, "Yet another graphics system"},
+ {vsn, "%VSN%"},
+ {modules,
+ [
+ %% Generated modules
+ %GEN_MODS%
+ %% Handcrafted modules
+ wx,
+ wx_object,
+ wxe_master,
+ wxe_server,
+ wxe_util
+ ]},
+ {registered, []},
+ {applications, [stdlib, kernel]},
+ {env, []}
+ ]}.
diff --git a/lib/wx/src/wx.appup.src b/lib/wx/src/wx.appup.src
new file mode 100644
index 0000000000..c02edd2afb
--- /dev/null
+++ b/lib/wx/src/wx.appup.src
@@ -0,0 +1,22 @@
+%% This is an -*- erlang -*- file.
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2010. 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%
+
+{"%VSN%",
+ [ ]
+}.
diff --git a/lib/wx/src/wxe_master.erl b/lib/wx/src/wxe_master.erl
index 70872775fb..5ab76a77cf 100644
--- a/lib/wx/src/wxe_master.erl
+++ b/lib/wx/src/wxe_master.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2008-2010. 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%
%%%-------------------------------------------------------------------
%%% File : wxe_server.erl
@@ -33,7 +33,6 @@
%% gen_server callbacks
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
terminate/2, code_change/3]).
--compile(export_all).
-record(state, {cb_port, %% Callback port and to erlang messages goes via it.
users, %% List of wx servers, needed ??
diff --git a/lib/wx/test/Makefile b/lib/wx/test/Makefile
index 65d7d56650..71b79aa272 100644
--- a/lib/wx/test/Makefile
+++ b/lib/wx/test/Makefile
@@ -1,19 +1,19 @@
#
# %CopyrightBegin%
-#
-# Copyright Ericsson AB 2008-2009. All Rights Reserved.
-#
+#
+# Copyright Ericsson AB 2008-2010. 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%
#
@@ -28,7 +28,9 @@ APPDIR = $(shell dirname $(PWD))
ERL_COMPILE_FLAGS = -pa $(APPDIR)/ebin
Mods = wxt wx_test_lib \
- wx_basic_SUITE wx_event_SUITE \
+ wx_app_SUITE \
+ wx_basic_SUITE \
+ wx_event_SUITE \
wx_class_SUITE \
wx_xtra_SUITE \
wx_opengl_SUITE
diff --git a/lib/wx/test/wx_app_SUITE.erl b/lib/wx/test/wx_app_SUITE.erl
new file mode 100644
index 0000000000..8fff324913
--- /dev/null
+++ b/lib/wx/test/wx_app_SUITE.erl
@@ -0,0 +1,277 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2010. 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%
+%%
+
+%%
+%%----------------------------------------------------------------------
+%% Purpose: Verify the application specifics of the Wx application
+%%----------------------------------------------------------------------
+-module(wx_app_SUITE).
+
+-compile(export_all).
+
+-include("wx_test_lib.hrl").
+
+
+t() -> wx_test_lib:t(?MODULE).
+t(Case) -> wx_test_lib:t({?MODULE, Case}).
+
+%% Test server callbacks
+init_per_testcase(Case, Config0) ->
+ Config1 = wx_test_lib:init_per_testcase(Case, Config0),
+ case is_app(wx) of
+ {ok, AppFile} ->
+ %% io:format("AppFile: ~n~p~n", [AppFile]),
+ [{app_file, AppFile} | Config1];
+ {error, Reason} ->
+ fail(Reason)
+ end.
+
+end_per_testcase(Func,Config) ->
+ wx_test_lib:end_per_testcase(Func, Config).
+
+fin_per_testcase(Case, Config) ->
+ wx_test_lib:end_per_testcase(Case, Config).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+all() ->
+ all(suite).
+
+all(suite) ->
+ [
+ fields,
+ modules,
+ exportall,
+ app_depend,
+ undef_funcs
+ ].
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+is_app(App) ->
+ LibDir = code:lib_dir(App),
+ File = filename:join([LibDir, "ebin", atom_to_list(App) ++ ".app"]),
+ case file:consult(File) of
+ {ok, [{application, App, AppFile}]} ->
+ {ok, AppFile};
+ Error ->
+ {error, {invalid_format, Error}}
+ end.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+fields(suite) ->
+ [];
+fields(doc) ->
+ [];
+fields(Config) when is_list(Config) ->
+ AppFile = key1search(app_file, Config),
+ Fields = [vsn, description, modules, registered, applications],
+ case check_fields(Fields, AppFile, []) of
+ [] ->
+ ok;
+ Missing ->
+ fail({missing_fields, Missing})
+ end.
+
+check_fields([], _AppFile, Missing) ->
+ Missing;
+check_fields([Field|Fields], AppFile, Missing) ->
+ check_fields(Fields, AppFile, check_field(Field, AppFile, Missing)).
+
+check_field(Name, AppFile, Missing) ->
+ io:format("checking field: ~p~n", [Name]),
+ case lists:keymember(Name, 1, AppFile) of
+ true ->
+ Missing;
+ false ->
+ [Name|Missing]
+ end.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+modules(suite) ->
+ [];
+modules(doc) ->
+ [];
+modules(Config) when is_list(Config) ->
+ AppFile = key1search(app_file, Config),
+ Mods = key1search(modules, AppFile),
+ EbinList = get_ebin_mods(wx),
+ case missing_modules(Mods, EbinList, []) of
+ [] ->
+ ok;
+ Missing ->
+ throw({error, {missing_modules, Missing}})
+ end,
+ case extra_modules(Mods, EbinList, []) of
+ [] ->
+ ok;
+ Extra ->
+ throw({error, {extra_modules, Extra}})
+ end,
+ {ok, Mods}.
+
+get_ebin_mods(App) ->
+ LibDir = code:lib_dir(App),
+ EbinDir = filename:join([LibDir,"ebin"]),
+ {ok, Files0} = file:list_dir(EbinDir),
+ Files1 = [lists:reverse(File) || File <- Files0],
+ [list_to_atom(lists:reverse(Name)) || [$m,$a,$e,$b,$.|Name] <- Files1].
+
+missing_modules([], _Ebins, Missing) ->
+ Missing;
+missing_modules([Mod|Mods], Ebins, Missing) ->
+ case lists:member(Mod, Ebins) of
+ true ->
+ missing_modules(Mods, Ebins, Missing);
+ false ->
+ io:format("missing module: ~p~n", [Mod]),
+ missing_modules(Mods, Ebins, [Mod|Missing])
+ end.
+
+
+extra_modules(_Mods, [], Extra) ->
+ Extra;
+extra_modules(Mods, [Mod|Ebins], Extra) ->
+ case lists:member(Mod, Mods) of
+ true ->
+ extra_modules(Mods, Ebins, Extra);
+ false ->
+ io:format("supefluous module: ~p~n", [Mod]),
+ extra_modules(Mods, Ebins, [Mod|Extra])
+ end.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+exportall(suite) ->
+ [];
+exportall(doc) ->
+ [];
+exportall(Config) when is_list(Config) ->
+ AppFile = key1search(app_file, Config),
+ Mods = key1search(modules, AppFile),
+ check_export_all(Mods).
+
+
+check_export_all([]) ->
+ ok;
+check_export_all([Mod|Mods]) ->
+ case (catch apply(Mod, module_info, [compile])) of
+ {'EXIT', {undef, _}} ->
+ check_export_all(Mods);
+ O ->
+ case lists:keysearch(options, 1, O) of
+ false ->
+ check_export_all(Mods);
+ {value, {options, List}} ->
+ case lists:member(export_all, List) of
+ true ->
+ throw({error, {export_all, Mod}});
+ false ->
+ check_export_all(Mods)
+ end
+ end
+ end.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+app_depend(suite) ->
+ [];
+app_depend(doc) ->
+ [];
+app_depend(Config) when is_list(Config) ->
+ AppFile = key1search(app_file, Config),
+ Apps = key1search(applications, AppFile),
+ check_apps(Apps).
+
+check_apps([]) ->
+ ok;
+check_apps([App|Apps]) ->
+ case is_app(App) of
+ {ok, _} ->
+ check_apps(Apps);
+ Error ->
+ throw({error, {missing_app, {App, Error}}})
+ end.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+undef_funcs(suite) ->
+ [];
+undef_funcs(doc) ->
+ [];
+undef_funcs(Config) when is_list(Config) ->
+ catch test_server:timetrap(timer:minutes(10)),
+ App = wx,
+ AppFile = key1search(app_file, Config),
+ Mods = key1search(modules, AppFile),
+ Root = code:root_dir(),
+ LibDir = code:lib_dir(App),
+ EbinDir = filename:join([LibDir,"ebin"]),
+ XRefTestName = undef_funcs_make_name(App, xref_test_name),
+ {ok, XRef} = xref:start(XRefTestName),
+ ok = xref:set_default(XRef,
+ [{verbose,false},{warnings,false}]),
+ XRefName = undef_funcs_make_name(App, xref_name),
+ {ok, XRefName} = xref:add_release(XRef, Root, {name,XRefName}),
+ {ok, App} = xref:replace_application(XRef, App, EbinDir),
+ {ok, Undefs} = xref:analyze(XRef, undefined_function_calls),
+ xref:stop(XRef),
+ analyze_undefined_function_calls(Undefs, Mods, []).
+
+analyze_undefined_function_calls([], _, []) ->
+ ok;
+analyze_undefined_function_calls([], _, AppUndefs) ->
+ exit({suite_failed, {undefined_function_calls, AppUndefs}});
+analyze_undefined_function_calls([{{Mod, _F, _A}, _C} = AppUndef|Undefs],
+ AppModules, AppUndefs) ->
+ %% Check that this module is ours
+ case lists:member(Mod,AppModules) of
+ true ->
+ {Calling,Called} = AppUndef,
+ {Mod1,Func1,Ar1} = Calling,
+ {Mod2,Func2,Ar2} = Called,
+ io:format("undefined function call: "
+ "~n ~w:~w/~w calls ~w:~w/~w~n",
+ [Mod1,Func1,Ar1,Mod2,Func2,Ar2]),
+ analyze_undefined_function_calls(Undefs, AppModules,
+ [AppUndef|AppUndefs]);
+ false ->
+ io:format("dropping ~p~n", [Mod]),
+ analyze_undefined_function_calls(Undefs, AppModules, AppUndefs)
+ end.
+
+%% This function is used simply to avoid cut-and-paste errors later...
+undef_funcs_make_name(App, PostFix) ->
+ list_to_atom(atom_to_list(App) ++ "_" ++ atom_to_list(PostFix)).
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+fail(Reason) ->
+ exit({suite_failed, Reason}).
+
+key1search(Key, L) ->
+ case lists:keysearch(Key, 1, L) of
+ false ->
+ fail({not_found, Key, L});
+ {value, {Key, Value}} ->
+ Value
+ end.
diff --git a/lib/xmerl/doc/src/notes.xml b/lib/xmerl/doc/src/notes.xml
index 3106c72bd8..207f6fdf16 100644
--- a/lib/xmerl/doc/src/notes.xml
+++ b/lib/xmerl/doc/src/notes.xml
@@ -31,6 +31,30 @@
<p>This document describes the changes made to the Xmerl application.</p>
+<section><title>Xmerl 1.2.5</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ All Erlang files are now built by the test server instead of the test directory Makefile.
+ </p>
+ <p>
+ Erlang files in data directories are now built by the test suites instead of using
+ prebuilt versions under version control.
+ </p>
+ <p>
+ Removed a number of obsolete guards.
+ </p>
+ <p>
+ Own Id: OTP-8537
+ </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Xmerl 1.2.4</title>
<section><title>Improvements and New Features</title>
diff --git a/lib/xmerl/vsn.mk b/lib/xmerl/vsn.mk
index 4162b52a80..83b9d4826f 100644
--- a/lib/xmerl/vsn.mk
+++ b/lib/xmerl/vsn.mk
@@ -17,14 +17,17 @@
# %CopyrightEnd%
#
-XMERL_VSN = 1.2.4
+XMERL_VSN = 1.2.5
TICKETS = \
- OTP-8343
+ OTP-8537
+
+TICKETS_1.2.5 = \
+ OTP-8537
TICKETS_1.2.4 = \
- OTP-8343
+ OTP-8343
TICKETS_1.2.3 = \
OTP-8251 \